//楼主
问题3的C语言程序公布如下
#include <stdio.h>
#include <math.h>
double GM=6.672e-11 * 5.976e+21;
//如果把 5.976e+21 改成 7.35e+19,double R=6371; //地球的平均半径 //并把6371改成1738,就可算月球卫星。
int main( )
{ double T=0; //秒数累加
double S=0; //里程累加 long i, Nmax=180*60L;
double dth=3.1415926535898/Nmax; //theta增量
double ds; //极坐标下的弧长元
double dt; //时间增量
double Hmax,Hmin,Have,Rmin;
double aa,ee,hh,rr,the,V,temp;
printf("绕地球飞行时的最大、最小高度(km):");
scanf("%lf%*c%lf",&Hmax,&Hmin);
Have = (Hmax+Hmin)/2; //平均高度
aa = R+Have; //椭圆轨道的半长径
ee = (Hmax-Hmin)/2/aa; //偏心率,也称离心率
Rmin = (R+Hmax)*(R+Hmin)/aa; //最小曲率半径
for(i=0; i<Nmax; i++)
{
the = (i+0.5)*dth; //确定theta值
temp=1+ee*cos(the); //中间变量
rr = Rmin/temp; //卫星与地心之间的距离(千米)
hh = rr-R; //卫星相对于地面的高度(千米)
V=sqrt(GM*(2/rr - 1/aa)); //卫星的瞬时速率(米/秒)
ds=dth*Rmin*sqrt(2*temp-1+ee*ee)/(temp*temp)*1000; //以米为单位
dt=ds/V;
T+=dt;
S+=ds; //以米为单位 }
S+=S;
printf("轨道长度的理论值是%0.1lf公里\n",S/1e3);
T+=T; //加上另外半圈所需要的绕行时间
T/=60; //以分钟为单位
if(T<180)
printf("卫星周期的理论值是%0.1lf分钟\n",T);
else
{
long Hour=(long)(T/60);
T-=60*Hour;
printf("卫星周期的理论值是%ld小时%.1lf分钟\n",Hour,T);
}
return 0;
}
[此贴子已经被作者于2007-11-10 21:46:21编辑过]