C语言 闰年判断 问题

C语言 闰年判断 问题,第1张

在1个太阳日期间,地球自转不是真正的一周,而是蚂档码360°59′;在1个大阴日期间,地球自转不是360°,而是373°38′。如果以恒星日的长度来分24小时(恒星小时),那么,太阳日的长度是24时04分,太阴日长度是24时54分。但在日常生活中,人们总是闷哪以24小时表示太阳日的长度,在这种情形下,恒星日长度为23时56分;太阴日长度则为24时50分。 实际上差几秒。正是因为那多出的几秒,在两百年里就会出一个次两蠢闭个润相差八年,如1696是润年而1700年不是,要到1704年才是。1896年是润年而1900年不是,1904年才是。

第二个问题,你说的没有错,是按第一个例子的逻辑;不过++的运算级别比*高,j=i++*++i实际等于是j=(i++)*(++i)而(i++)等于4。所以结果是16。你得弄清楚各个符号的运算优先级别。

求星期几有专门的公式

W = (Y-1) + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D.

还有个更复杂点的

求星期公式

1.星期=[5+A(实际天数)] mod 7

2。实际天数A的计算

A=B(基本天数)+C(闰日天数)

B=(计算年-1)*365+(要计算到年的月日天数)

3.C=(计算年-1) div 4 -误差修正值 + fixValue2

fixValue2为0或者1。常值为0,当年数为闰年(公历闰年法)之中的3月1日之后的为1

4.误差修正值推算:

公元元年1月1日至1582年10月14日为0。

1582年10月15日至1699年12月31日为10。

从1701年1月1日起每增加一个世纪累加1,但能被400除尽的世纪不累加1。此方法推算即可。

--有一个问题,1700年这一年的修正值应为多少呢?算碰信法中正好没有讲到,圆隐但看来应该是10。

1701年1月1日起误差值为11,而1801年1月1日起误差修正值为12,而1901年1月1日起误差修正值为13,但2001年误差修正值仍为13,因为2000年能被400整除,故不累加。而2101年1月1日起误差修正值为14。

采用第一个公式

#inlcude<stdio.h>

int totalday(int year,int month,int day)

int leap(int)

int main()

{

int d,w

int year,month,day,week

char *s

printf("input time (year.month.day):")

scanf("%d.%d.%d",&year,&month,&day)

while(year<1700||month<0||month>12||day<0||day>31)//查错

{

printf("wrong time\ninput again:")

scanf(("%d.%d.%d",&year,&month,&day)

if(month==2&&day>29)

{

printf("wrong time\ninput again:")

scanf(("%d.%d.%d",&year,&month,&day)

}

}

d=totalday(year,month,day)

w = (y-1)+((y-1)/4)-((y-1)/100)+((y-1)/400) + d

week=w%7

switch(week)

{

case 1: s="MON"break

case 2: s="TUE"break

case 3: s="WED"break

case 4: s="THUR"break

case 5: s="FRI"break

case 6: s="SAT"break

case 7: s="SUN"break

default: break

}

printf("%d.%d.%d is %s\n",year,month,day,s)

}

int totalday(int year,int month,int day)//计算天数函数

{

int judge

judge=leap(year)

int total_day=0

month-=1

switcg(month)

{

case 11:total_day+=30

case 10:total_day+=31

case 9:total_day+=30

case 8:total_day+=31

case 7:total_day+=31

case 6:total_day+=30

case 5:total_day+=31

case 4:total_day+=30

case 3:total_day+=31

case 2:judge?total_day+=29:total_day+=28

case 1:total_day+=31

case 0:total_day+=daybreak

default :break

}

return total_day

}

int leap(int year)//判断闰年函数

{

if(year%4==0&year%100!=0||year%400==0)

return 1

else

return 0

}

程序在线写的笑腔轮,可能有错,有问题请联系我


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12363262.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存