马蜂一般,勿喷
求最大射程代码还没改好(
#include"stdio.h"
#include"math.h"
#include"stdlib.h"
#include"string.h"
typedef struct
{
double x,y;
double vx,vy;
double theta,V;
}Stong_vari;
typedef struct
{
double t,dT;
}Simu_vari;
void output();
void fly_stone();
void fly_init();
double g;
double Hmax,theta0;
int flag_END,count;
int flag_1st_R_record;
double R_old,R_now,theta_old;
//FILE *fpout;
Stong_vari Stone1,Stone2;
Simu_vari Simu;
int main()
{
//fpout=fopen("result.dat","w");
flag_1st_R_record=0;
// for( theta0=5.0;theta0<=90.0;theta0=theta0+2.5 )
theta0=45.0;//发射角
{
Simu.t=0.0; count=0;
Simu.dT=0.001;flag_END=0;
fly_init();
while(flag_END==0){
Simu.t=Simu.t+Simu.dT;//时间
fly_stone();
if(Stone1.y>=Hmax){
Hmax=Stone1.y;
}
if( Stone1.y<=0.0 && Simu.t>=0.5 ){
flag_END=1;
}
if(count%1==0){
//output();
}
printf("时间=%f 距离=%f 高度=%f\n",Simu.t,Stone1.x,Stone1.y);
count++;
}//仿真结束
R_now=Stone1.x;
if(flag_1st_R_record==0){
R_old=Stone1.x;
flag_1st_R_record=1;
}
if( R_now<R_old ){
// printf("最大射程R=%f 对应最大射角=%f\n",R_old,theta_old);
// break;
}
R_old=R_now;theta_old=theta0;
printf("初始射角=%lf 射程=%lf 最大高度=%lf\n",theta0,Stone1.x,Hmax);
//printf("%f %f %f\n",theta0,Stone1.x,Hmax);
}//theta0
//fclose(fpout);
getchar();
return 0;
}
void fly_init()
{
Stone1.x=0.0;
Stone1.y=0.0;
Stone1.V=10.0;
Stone1.theta=theta0/57.3;//角度 -> 弧度
Stone1.vx=Stone1.V*cos(Stone1.theta);
Stone1.vy=Stone1.V*sin(Stone1.theta);
g=9.8;
Hmax=0.0;
}
void fly_stone()
{
Stone1.x=Stone1.x+Stone1.vx*Simu.dT;
Stone1.y=Stone1.y+Stone1.vy*Simu.dT;
Stone1.vx=Stone1.vx;
Stone1.vy=Stone1.vy-g*Simu.dT;
}
void output()
{
//fprintf(fpout,"%f %f %f %d\n",Simu.t,Stone1.x,Stone1.y,flag_END);
}
温馨提示:洛谷在线IDE会输出超限