日出日落时间计算程序C语言_第1页
日出日落时间计算程序C语言_第2页
日出日落时间计算程序C语言_第3页
日出日落时间计算程序C语言_第4页
日出日落时间计算程序C语言_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、日出日落时间计算程序(C语言)/日出日落时间计算C语言程序#define PI 3.1415926#include<math.h>#include<iostream>using namespace std;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,3 1,30,31,30,31;long double h=-0.833;/定义全局变量void input_date(int c)int i;cout<<"

2、Enter the date (form: 2009 03 10):"<<endl;for(i=0;i<3;i+)cin>>ci;/输入日期void input_glat(int c口)int i;cout<<"Enterthe degree oflatitude(range: 0° - 60 ° ,form: 40 40 40(means 40 ° 40' 40):"<<endl;for(i=0;i<3;i+)cin>>ci;/输入纬度void inpu

3、t_glong(int c)int i;cout<<"Enterthe degree of10ngitude(westis negativ,form: 40 40 40(means 40 ° 40' 40):"<<endl;for(i=0;i<3;i+)cin>>ci;/输入经度(year%100!=0) &&int leap_year(int year)if(year%400=0)|(year%4=0) return 1;else return 0;/判断是否为闰年:若为闰年,返回1;若非闰年,返

4、回0int days(int year, int month, int date)int i,a=0;for(i=2000;i<year;i+)if(leap_year(i) a=a+366;else a=a+365;if(leap_year(year)for(i=0;i<month-1;i+)a=a+days_of_month_2i;else for(i=0;i<month-1;i+)a=a+days_of_month_1i;a=a+date;return a;/求从格林威治时间公元2000年1月1日到计算日天数dayslong double t_century(int d

5、ays, long double UTo)return(longdouble)days+UTo/360)/36525;/求格林威治时间公元2000年1月1日到计算 日的世纪数tlong double L_sun(long double t_century)return(280.460+36000.770*t_century);/求太阳的平黄径long double G_sun(long double t_century)return(357.528+35999.050*t_century);/求太阳的平近点角long double ecliptic_longitude(long doubleL

6、_sun,long double G_sun)return(L_sun+1.915*sin(G_sun*PI/180)+0.02*sin(2*G_sun*PI/180);/求黄道经度long double t_century)earth_tilt(longdoublereturn (23.4393-0.0130*t_century);/求地球倾角long double sun_deviation(longdoubleearth_tilt,longdoubleecliptic_longitude)return(180/PI*asin(sin(PI/180*earth_tilt)*sin(P I/

7、180*ecliptic_10ngitude);/求太阳偏差long double GHA(long double UTo, long double G_sun, long double ecliptic_longitude)return(UTo-180-1.915*sin(G_sun*PI/180)-0.02*sin (2*G_sun*PI/180)+2.466*sin(2*ecliptic_lon gitude*PI/180)-0.053*sin(4*ecliptic_10ngi tude*PI/180);/求格林威治时间的太阳时间角 GHAlong double e(long doubl

8、e h, long double glat, long double sun_deviation)return 180/PI*acos(sin(h*PI/180)-sin(glat*PI/180)*sin(sun_deviation*PI/180)/(cos(glat*P I/180)*cos(sun_deviation*PI/180);/求修正值elong double UT_rise(long double UTo, long double GHA, long double glong, long double e)return (UTo-(GHA+glong+e);/求日出时间long

9、double UT_set(long double UTo, long double GHA, long double glong, long double e)return (UTo-(GHA+glong-e);/求日落时间long double result_rise(long double UT, long double UTo, long double glong, long double glat, int year, int month, int date)long double d;if(UT>=UTo) d=UT-UTo;else d=UTo-UT;if(d>=0.

10、1) UTo=UT;UT=UT_rise(UTo,GHA(UTo,G_sun(t_century(da ys(year,month,date),UTo),ecliptic_longit ude(L_sun(t_century(days(year,month,date) ,UTo),G_sun(t_century(days(year,month,da te),UTo),glong,e(h,glat,sun_deviation( earth_tilt(t_century(days(year,month,date 工UTo),ecliptic_longitude(L_sun(t_centur y(d

11、ays(year,month,date),UTo),G_sun(t_cen tury(days(year,month,date),UTo);result_rise(UT,UTo,glong,glat,year,month, date);return UT;/判断并返回结果(日出) long double result_set(long double UT, long double UTo, long double glong, long double glat, int year, int month, int date)long double d;if(UT>=UTo) d=UT-UT

12、o;else d=UTo-UT;if(d>=0.1)UTo=UT;UT=UT_set(UTo,GHA(UTo,G_sun(t_century(day s(year,month,date),UTo),ecliptic_longitu de(L_sun(t_century(days(year,month,date), UTo),G_sun(t_century(days(year,month,dat e),UTo),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date) ,UTo),ecliptic_lon

13、gitude(L_sun(t_century (days(year,month,date),UTo),G_sun(t_cent ury(days(year,month,date),UTo);result_set(UT,UTo,glong,glat,year,month,d ate);return UT;/判断并返回结果(日落)int Zone(long double glong)if(glong>=0)return(int)(int)(glong/15.0)+1);elsereturn(int)(int)(glong/15.0)-1);/求时区void output(long doubl

14、e rise, long double set, long double glong)if(int)(60*(rise/15+Zone(glong)-(int)(ri se/15+Zone(glong)<10)cout<<"The time at which the sun risesis"<<(int)(rise/15+Zone(glong)<<":0"<<(int )(60*(rise/15+Zone(glong)-(int)(rise/15+Z one(glong)<<"

15、.n"else cout<<"The time at which the sun risesis"<<(int)(rise/15+Zone(glong)<<":"<<(int) (60*(rise/15+Zone(glong)-(int)(rise/15+Zo ne(glong)<<" .n"if(int)(60*(set/15+Zone(glong)-(int)(set /15+Zone(glong)<10)cout<<"The tim

16、e at which the sun sets is "<<(int)(set/15+Zone(glong)<<": "<<(int)(60*(set/15+Zone(glong)-(int)(set /15+Zone(glong)<<" .n"else cout<<"The time at which the sun setsis"<<(int)(set/15+Zone(glong)<<":"<<(int)(

17、 60*(set/15+Zone(glong)-(int)(set/15+Zone( glong)<<" ,n"/打印结果int main()long double UTo=180.0;int year,month,date;long double glat,glong;int c3;input_date(c);year=c0;month=c1;date=c2;input_glat(c);glat=c0+c1/60+c2/3600;input_glong(c);glong=c0+c1/60+c2/3600;long double rise,set;rise=re

18、sult_rise(UT_rise(UTo,GHA(UTo,G_su n(t_century(days(year,month,date),UTo),e cliptic_longitude(L_sun(t_century(days(ye ar,month,date),UTo),G_sun(t_century(days (year,month,date),UTo),glong,e(h,glat, sun_deviation(earth_tilt(t_century(days(y ear,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),ecli ptic_longitude(L_sun(t_century(days(year, month,date),UTo),G_sun(t_century(days(ye

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论