题目
- 编写程序,输入一个日期,输出该日期是周几。
思路
选择一个基准日期,比如2018年2月18日,这一天是周日。然后将输入日期与基准日期所差的天数代入以下公式即可:
输入日期在基准日期之前的用 (7-days%7)%7
输入日期在基准日期之后的用 days%7
代码
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> //一个日期距离年初的天数 int day_count(int y,int m,int d) { int i; int days=0; int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; for(i=0;i<m;i++) { days+=a[i]; } days+=d; if(m>2 && (0==y%4 && 0!=y%100 || 0==y%400)) { days++; } return days; } int main() { //选择2018年2月18日为基准日期,这一天是周日 int y1,y2=2018; int m1,m2=2; int d1,d2=18; int a,b,i,c; int days,flag; printf("请输入年月日:"); while(fflush(stdin),scanf("%d %d %d",&y1,&m1,&d1)!=EOF) { c=0; a=day_count(y1,m1,d1); b=day_count(y2,m2,d2); if(y1<y2) { for(i=y1;i<y2;i++) { if(i%4==0 && i%100!=0 || i%400==0) { c++; } } days=b-a+(y2-y1)*365+c; }else{ for(i=y2;i<y1;i++) { if(i%4==0 && i%100!=0 || i%400==0) { c++; } } days=a-b+(y1-y2)*365+c; } if((y1<y2) || (y1==y2 && m1<m2) ||(y1==y2 && m1==m2 && d1<d2)) { flag=(7-days%7)%7; }else{ flag=days%7; } switch(flag) { case 1:printf("是周一");break; case 2:printf("是周二");break; case 3:printf("是周三");break; case 4:printf("是周四");break; case 5:printf("是周五");break; case 6:printf("是周六");break; case 0:printf("是周日");break; } printf("\n请输入年月日:"); } system("pause"); }
执行结果