重力模拟器(1.0版本)

//有什么反馈直说!!!
#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
void coverScreen(){
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
COORD topLeft={0,0};
SetConsoleCursorPosition(hConsole, topLeft);
}
int main(){
double n,g,h;
cerr<<“高度(m):”;
cin>>h;
cerr<<“倍标准大气压:”;
cin>>n;
cerr<<“G(m/s):”;
cin>>g;
int yesorno;
double mi=1.0,r=6000000.0,b=1.0,ms=0.0,MAX_45=45;
cerr<<“是否开高级设置:\n 1.是 2.否\n”;
cin>>yesorno;
if(yesorno==1){
cerr<<“倍数(默认为1):”;
cin>>mi;
cerr<<“星球半径(km)(默认为6000km):”;
cin>>r;
r*=1000.0;
cerr<<“撞击地面速度衰变率(-%)(默认为-0%):”;
cin>>b;
b=1-b/100.0;
cerr<<“起始下落速度(m/s)(默认为0m/s,不可超出或等于光速):”;
cin>>ms;
if(ms>=299792458.0){
cerr<<“当前速度已超出光速!!!”;
return 0;
}
cerr<<“物体光滑程度(默认为1倍[即在重力9.8m/s,一倍大气压的速度峰值]):”;
cin>>MAX_45;
MAX_45*=45;
}
double s=ms;
double q=1.0/nMAX_45;
system(“cls”);//windows电脑
//非windows电脑的请用 system(“clean”);
for(;;){
int app=0;
double g1=g
(r/(r+h)r/(r+h));
double q1=q;
if(h<10000){
for(double j=1;j<=h/10;j++){
q1
=1.001;
}
}else if(h<100000){
for(double j=1;j<=h/100;j++){
q1*=1.011;
}
}else if(h<1000000){
for(double j=1;j<=h/1e3;j++){
q1*=1.12;
}
}else if(h>=1000000){
app=1;
}
if(h<=0){
double a=s;
s=0;
s-=a;
s=sb;
}
h-=s/900.0
mi;
s+=g1/900.0mi(1.0-ss/299792458.0/299792458.0);
if(app==0){
s-=s/q1/90.0
mi;
}
if(h<0){
h=0;
}
coverScreen();
if(h<100000.0){
cerr<<setprecision(5)<<“高度:”<<h<<"m ";
}else if(h<100000000.0){
cerr<<setprecision(4)<<“高度:”<<h/1000.0<<"km ";
}else if(h<10000000000000000.0){
cerr<<setprecision(5)<<“距离:”<<h/149600000000.0<<"AU ";
}else if(h>=10000000000000000.0){
cerr<<setprecision(5)<<“距离:”<<h/9460865568000000.0<<"ly ";
}
if(abs(s)<10000.0){
cerr<<setprecision(4)<<“当前速度:”<<abs(s)<<"m/s "<<endl;
}else if(abs(s)<2997924.58){
cerr<<setprecision(4)<<“当前速度:”<<abs(s)/1000.0<<"km/s “<<endl;
}else if(abs(s)<299792458.0){
cerr<<setprecision(3)<<“当前速度:”<<abs(s)/2997924.58<<”%C "<<endl;
}else{
if(s>0){
s=299792457;
}else{
s=-299792457;
}
cerr<<"当前速度:99.9999%C "<<endl;
}
}
}

1 个赞

格式化

就像这样
1 个赞

(帖子已被作者删除)

(帖子已被作者删除)

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
void coverScreen(){
    HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD topLeft={0,0};
    SetConsoleCursorPosition(hConsole, topLeft);
}
int main(){
    double n,g,h;
    cerr<<"高度(m):";
    cin>>h;
    cerr<<"倍标准大气压:";
    cin>>n;
    cerr<<"G(m/s):";
    cin>>g;
    int yesorno;
    double mi=1.0,r=6000000.0,b=1.0,ms=0.0,MAX_45=45;
    cerr<<"是否开高级设置:\n 1.是 2.否\n";
    cin>>yesorno;
    if(yesorno==1){
        cerr<<"倍数(默认为1):";
        cin>>mi;
        cerr<<"星球半径(km)(默认为6000km):";
        cin>>r;
        r*=1000.0;
        cerr<<"撞击地面速度衰变率(-%)(默认为-0%):";
        cin>>b;
        b=1-b/100.0;
        cerr<<"起始下落速度(m/s)(默认为0m/s,不可超出或等于光速):";
        cin>>ms;
        if(ms>=299792458.0){
            cerr<<"当前速度已超出光速!!!";
            return 0;
        }
        cerr<<"物体光滑程度(默认为1倍[即在重力9.8m/s,一倍大气压的速度峰值]):";
        cin>>MAX_45;
        MAX_45*=45;
    }
    double s=ms;
    double q=1.0/n*MAX_45;
    system("cls");//windows电脑
    //非windows电脑的请用 system("clean");
    for(;;){
        int app=0;
        double g1=g*(r/(r+h)*r/(r+h));
        double q1=q;
        if(h<10000){
            for(double j=1;j<=h/10;j++){
                q1*=1.001;
            }
        }else if(h<100000){
            for(double j=1;j<=h/100;j++){
                q1*=1.011;
            }
        }else if(h<1000000){
            for(double j=1;j<=h/1e3;j++){
                q1*=1.12;
            }
        }else if(h>=1000000){
            app=1;
        }
        if(h<=0){
            double a=s;
            s=0;
            s-=a;
            s=s*b;
        }
        h-=s/900.0*mi;
        s+=g1/900.0*mi*(1.0-s*s/299792458.0/299792458.0);
        if(app==0){
            s-=s/q1/90.0*mi;
        }
        if(h<0){
            h=0;
        }
        coverScreen();
        if(h<100000.0){
            cerr<<setprecision(5)<<"高度:"<<h<<"m   ";
        }else if(h<100000000.0){
            cerr<<setprecision(4)<<"高度:"<<h/1000.0<<"km   ";
        }else if(h<10000000000000000.0){
            cerr<<setprecision(5)<<"距离:"<<h/149600000000.0<<"AU   ";
        }else if(h>=10000000000000000.0){
            cerr<<setprecision(5)<<"距离:"<<h/9460865568000000.0<<"ly   ";
        }
        if(abs(s)<10000.0){
            cerr<<setprecision(4)<<"当前速度:"<<abs(s)<<"m/s           "<<endl;
        }else if(abs(s)<2997924.58){
            cerr<<setprecision(4)<<"当前速度:"<<abs(s)/1000.0<<"km/s             "<<endl;
        }else if(abs(s)<299792458.0){
            cerr<<setprecision(3)<<"当前速度:"<<abs(s)/2997924.58<<"%C               "<<endl;
        }else{
            if(s>0){
                s=299792457;
            }else{
                s=-299792457;
            }
            cerr<<"当前速度:99.9999%C           "<<endl;
        }
    }
}

太鬼畜了,给你推荐个移动光标的函数

// 移动光标到指定位置,x为行,y为列 
void s(int x, int y) {
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

这样输出就不用每次都清屏了