C语言根据日期求星期(分段计算方式)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言根据日期求星期

今天是2007年10月17日,星期六. 现在告诉你一个日期,你能回答今天是星期几吗?

输入描述:

输入数据有多组,每组占一行,输入三个整数year(0

输出描述:

对于每组输入数据,输出一行,表示星期几,如果不合法输出“illegal”。

以下为代码:

1 #include

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循环不能再声明变量,否则会报错。

相关文档
最新文档