第二个问题,你说的没有错,是按第一个例子的逻辑;不过++的运算级别比*高,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
}
程序在线写的笑腔轮,可能有错,有问题请联系我
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)