作业帮 > 综合 > 作业

设计一个C语言程序,求公元y年m月d日的星期号(1~6表示星期一~星期六,0表示星期日)

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/06 21:37:48
设计一个C语言程序,求公元y年m月d日的星期号(1~6表示星期一~星期六,0表示星期日)
设计一个C语言程序,求公元y年m月d日的星期号(1~6表示星期一~星期六,0表示星期日)
#include
void main ()
{
int y,m,d,c,s,w;
printf("请输入8位年月日,以空格隔开:");
scanf("%d%d%d",&y,&m,&d);
if (m==1) c=d;
else if (m==2) c=31+d;
else if (m==3) c=31+28+d;
else if (m==4) c=31+28+31+d;
else if (m==5) c=31+28+31+30+d;
else if (m==6) c=31+28+31+30+31+d;
else if (m==7) c=31+28+31+30+31+30+d;
else if (m==8) c=31+28+31+30+31+30+31+d;
else if (m==9) c=31+28+31+30+31+30+31+31+d;
else if (m==10) c=31+28+31+30+31+30+31+31+30+d;
else if (m==11) c=31+28+31+30+31+30+31+31+30+31+d;
else if (m==12) c=31+28+31+30+31+30+31+31+30+31+30+d;
if (m>2)
{if (y%100==0) {if (y%400==0) c=c+1;}
else if (y%4==0) c=c+1;}
s=(y-1)*365+(y-1)/4-(y-1)/100+(y-1)/400+c;
w=s%7;
switch (w)
{
case 0:printf("星期日");break;
case 1:printf("星期一");break;
case 2:printf("星期二");break;
case 3:printf("星期三");break;
case 4:printf("星期四");break;
case 5:printf("星期五");break;
case 6:printf("星期六");break;
printf("\n");
}
}
这个可以的.
再问: 错了,如果是闰年呢
再答: 根据闰年的定义(能被4整但不能被100整除或能被400整),得到计算闰年的个数的算式:y/4 - y/100 + y/400。 由于我们要计算的是当前要计算的年之前的闰年数,所以要将年减1,得到了如下的公式: w = [d-1+y + (y-1)/4-(y-1)/100+(y-1)/400] % 7 w = (d-1 + y + e[m-1] + (y-1)/4 - (y-1)/100 + (y-1)/400); if(m>2 && (y%4==0 && y%100!=0 || y%400==0) && y!=0) ++w; w %= 7; 现在,已经可以正确的计算任一天的星期了。 注意:0年不是闰年,虽然现在大都不用这个条件,但我们因从公元0年开始计算,所以这个条件是不能少的。 由此带来的影响是如果当年是闰年,1,2月份的计算会多一天误差,我们同样在编程时修正。则代码如下 w = (d-1 + y + e[m-1] + y/4 - y/100 + y/400); ---- 公式⑷ if(m>2)-y/100+y/400); if(m