根据历法原理,按照下面的公式计算,就可以知道某年某月某日是星期几了。这个公式是:
这里,
x
是公元的年数,
C
是从这一年的元旦算到这天为止(连这一天也在内)的日数。式中,
表示为
的整数部分,也就是说,三个分数式只取商数的整数部分,余数略去不计。求出
S
后,再用7除。如果恰能除尽,这一天一定是星期日;若余数是1,这一天是星期一;余数是2,这一天就是星期二。以此类推。程序中,占大部分篇幅的程序是在计算
C
,算
C
之前,还有判断所求年份是否是闰年,这样决定2月份是28天还是29天。
例如,要求算2016年的1月2日是星期几。
而2505%7=357余6,这说明2016年的1月2日是星期六。
/*************************************************************/ /*1.c 给出年月日,计算该日是星期几 */ /*************************************************************/ #include<stdio.h> main() { int a,b,c,d,s,z; printf("请输入年月日yyyy,mm,dd: "); scanf("%d,%d,%d",&a,&b,&c); if((a%4==0 && a%100!=0)||(a%400==0)) { if(b==1)d=c; if(b==2)d=c+31; if(b==3)d=c+60; if(b==4)d=c+91; if(b==5)d=c+121; if(b==6)d=c+152; if(b==7)d=c+182; if(b==8)d=c+213; if(b==9)d=c+244; if(b==10)d=c+274; if(b==11)d=c+305; if(b==12)d=c+335; } else{if(b==1)d=c; if(b==2)d=c+31; if(b==3)d=c+59; if(b==4)d=c+90; if(b==5)d=c+120; if(b==6)d=c+151; if(b==7)d=c+181; if(b==8)d=c+212; if(b==9)d=c+243; if(b==10)d=c+273; if(b==11)d=c+304; if(b==12)d=c+334; } s=a-1+(a-1)/4-(a-1)/100+(a-1)/400+d; z=s%7; if(z==0)printf("这一天为星期天。\n"); if(z==1)printf("这一天为星期一。\n"); if(z==2)printf("这一天为星期二。\n"); if(z==3)printf("这一天为星期三。\n"); if(z==4)printf("这一天为星期四。\n"); if(z==5)printf("这一天为星期五。\n"); if(z==6)printf("这一天为星期六。\n"); }
【例1.1】给出年月日,计算该日是星期几。
解:打开“给出年月日,计算该日是星期几?”文件夹,双击扩展名为DSW的文件,进入Visual C++ 6.0编译环境,编译程序并执行,根据屏幕提示,输入年月日,运行结果如下:
由运行结果可见,当你输入2016年5月18日时,程序告诉你这一天是星期三。