C语言根据日期求星期(分段计算方式)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C语言根据日期求星期
今天是2007年10月17日,星期六. 现在告诉你一个日期,你能回答今天是星期几吗?
输入描述:
输入数据有多组,每组占一行,输入三个整数year(0<year<10000), month(0<=month<13), day(0<=day<32).
输出描述:
对于每组输入数据,输出一行,表示星期几,如果不合法输出“illegal”。
以下为代码:
1 #include <stdio.h>
2 char date[7][7] = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
3 //判断年份是否为闰年
4 int isLeap(int year)
5 {
6 if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
7 return 1;
8 return 0;
9 }
10
11 int main()
12 {
13 int year,month,day;
14 //平年各个月的天数
15 int year1[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
16 //闰年各个月的天数
17 int year2[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
18 //days为距离公元第一天的天数
19 int days = 0, k = 0, j = 0;
20 char *getDate;
21 while(scanf("%d %d %d", &year,&month,&day) != EOF)
22 {
23 if(year<= 0 || year >= 10000 || month < 0 || month >= 13 || day < 0 || day >= 32)
24 {
25 printf("illegal\n");
26 continue;
27 }
28 if(month == 2)
29 {
30 if(isLeap(year))
31 {
32 if(day > year2[month])
33 {
34 printf("illegal\n");
35 continue;
36 }
37 }
38 else
39 {
40 if(day > year1[month])
41 {
42 printf("illegal\n");
43 continue;
44 }
45 }
46
47 }
48 //现在的日期与公元第一天开始相隔的天数
49
50 for(k = 1;k < year;k++)
51 {
52 if(isLeap(k))
53 days = days + 366;
54 else
55 days = days + 365;
56 }
57
58 for(j = 0; j < month; j++)
59 {
60 if(isLeap(year))
61 days = days + year2[j];
62 else
63 days = days + year1[j];
64 }
65 days = days + day;
66 //除以7求余就可以求出星期
67 getDate = date[days % 7];
68 printf("%s\n", getDate);
69 //数据清零
70 days = 0;
71 }
72 }
测试数据:
在这个测试中遇到了一些问题,在C语言中,While循环里面的for循环不能再声明变量,否则会报错。