日出日落时间计算程序C语言.docx
- 文档编号:28648398
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:8
- 大小:15.43KB
日出日落时间计算程序C语言.docx
《日出日落时间计算程序C语言.docx》由会员分享,可在线阅读,更多相关《日出日落时间计算程序C语言.docx(8页珍藏版)》请在冰豆网上搜索。
日出日落时间计算程序C语言
日出日落时间计算程序(C语言)
//日出日落时间计算C语言程序
#definePI3.1415926
#include
#include
usingnamespacestd;
intdays_of_month_1[]={31,28,31,30,31,30,31,31,30,31,30,31};
intdays_of_month_2[]={31,29,31,30,31,30,31,31,30,31,30,31};
longdoubleh=-0.833;
//定义全局变量
voidinput_date(intc[]){
inti;
cout<<"Enterthedate(form:
20090310):
"< for(i=0;i<3;i++){ cin>>c[i]; } } //输入日期 voidinput_glat(intc[]){ inti; cout<<"Enterthedegreeoflatitude(range: 0°-60°,form: 404040(means40°40′40″)): "< for(i=0;i<3;i++){ cin>>c[i]; } } //输入纬度 voidinput_glong(intc[]){ inti; cout<<"Enterthedegreeoflongitude(westisnegativ,form: 404040(means40°40′40″)): "< for(i=0;i<3;i++){ cin>>c[i]; } } //输入经度 intleap_year(intyear){ if(((year%400==0)||(year%100! =0)&&(year%4==0)))return1; elsereturn0; } //判断是否为闰年: 若为闰年,返回1;若非闰年,返回0 intdays(intyear,intmonth,intdate){ inti,a=0; for(i=2000;i if(leap_year(i))a=a+366; elsea=a+365; } if(leap_year(year)){ for(i=0;i a=a+days_of_month_2[i]; } } else{ for(i=0;i a=a+days_of_month_1[i]; } } a=a+date; returna; } //求从格林威治时间公元2000年1月1日到计算日天数days longdoublet_century(intdays,longdoubleUTo){ return((longdouble)days+UTo/360)/36525; } //求格林威治时间公元2000年1月1日到计算日的世纪数t longdoubleL_sun(longdoublet_century){ return(280.460+36000.770*t_century); } //求太阳的平黄径 longdoubleG_sun(longdoublet_century){ return(357.528+35999.050*t_century); } //求太阳的平近点角 longdoubleecliptic_longitude(longdoubleL_sun,longdoubleG_sun){ return(L_sun+1.915*sin(G_sun*PI/180)+0.02*sin(2*G_sun*PI/180)); } //求黄道经度 longdoubleearth_tilt(longdoublet_century){ return(23.4393-0.0130*t_century); } //求地球倾角 longdoublesun_deviation(longdoubleearth_tilt,longdoubleecliptic_longitude){ return(180/PI*asin(sin(PI/180*earth_tilt)*sin(PI/180*ecliptic_longitude))); } //求太阳偏差 longdoubleGHA(longdoubleUTo,longdoubleG_sun,longdoubleecliptic_longitude){ return(UTo-180-1.915*sin(G_sun*PI/180)-0.02*sin(2*G_sun*PI/180)+2.466*sin(2*ecliptic_longitude*PI/180)-0.053*sin(4*ecliptic_longitude*PI/180)); } //求格林威治时间的太阳时间角GHA longdoublee(longdoubleh,longdoubleglat,longdoublesun_deviation){ return180/PI*acos((sin(h*PI/180)-sin(glat*PI/180)*sin(sun_deviation*PI/180))/(cos(glat*PI/180)*cos(sun_deviation*PI/180))); } //求修正值e longdoubleUT_rise(longdoubleUTo,longdoubleGHA,longdoubleglong,longdoublee){ return(UTo-(GHA+glong+e)); } //求日出时间 longdoubleUT_set(longdoubleUTo,longdoubleGHA,longdoubleglong,longdoublee){ return(UTo-(GHA+glong-e)); } //求日落时间 longdoubleresult_rise(longdoubleUT,longdoubleUTo,longdoubleglong,longdoubleglat,intyear,intmonth,intdate){ longdoubled; if(UT>=UTo)d=UT-UTo; elsed=UTo-UT; if(d>=0.1){ UTo=UT; UT=UT_rise(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))))); result_rise(UT,UTo,glong,glat,year,month,date); } returnUT; } //判断并返回结果(日出) longdoubleresult_set(longdoubleUT,longdoubleUTo,longdoubleglong,longdoubleglat,intyear,intmonth,intdate){ longdoubled; if(UT>=UTo)d=UT-UTo; elsed=UTo-UT; if(d>=0.1){ UTo=UT; UT=UT_set(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))))); result_set(UT,UTo,glong,glat,year,month,date); } returnUT; } //判断并返回结果(日落) intZone(longdoubleglong){ if(glong>=0)return(int)((int)(glong/15.0)+1); elsereturn(int)((int)(glong/15.0)-1); } //求时区 voidoutput(longdoublerise,longdoubleset,longdoubleglong){ if((int)(60*(rise/15+Zone(glong)-(int)(rise/15+Zone(glong))))<10) cout<<"Thetimeatwhichthesunrisesis"<<(int)(rise/15+Zone(glong))<<": 0"<<(int)(60*(rise/15+Zone(glong)-(int)(rise/15+Zone(glong))))<<".\n"; elsecout<<"Thetimeatwhichthesunrisesis"<<(int)(rise/15+Zone(glong))<<": "<<(int)(60*(rise/15+Zone(glong)-(int)(rise/15+Zone(glong))))<<".\n"; if((int)(60*(set/15+Zone(glong)-(int)(set/15+Zone(glong))))<10) cout<<"Thetimeatwhichthesunsetsis"<<(int)(set/15+Zone(glong))<<": "<<(int)(60*(set/15+Zone(glong)-(int)(set/15+Zone(glong))))<<".\n"; elsecout<<"Thetimeatwhichthesunsetsis"<<(int)(set/15+Zone(glong))<<": "<<(int)(60*(set/15+Zone(glong)-(int)(set/15+Zone(glong))))<<".\n"; } //打印结果 intmain(){ longdoubleUTo=180.0; intyear,month,date; longdoubleglat,glong; intc[3]; input_date(c); year=c[0]; month=c[1]; date=c[2]; input_glat(c); glat=c[0]+c[1]/60+c[2]/3600; input_glong(c); glong=c[0]+c[1]/60+c[2]/3600; longdoublerise,set; rise=result_rise(UT_rise(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))))),UTo,glong,glat,year,month,date); set=result_set(UT_set(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo)),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo)),G_sun(t_century(days(year,month,date),UTo)))))),UTo,glong,glat,year,month,date); output(rise,set,glong); system("pause"); return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 日出 日落 时间 计算 程序 语言
![提示](https://static.bdocx.com/images/bang_tan.gif)