題目描述:
今天是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循環不能再聲明變量,否則會報錯。
摘自 小源求學