C语言根据日期求星期(分段计算方式)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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循环不能再声明变量,否则会报错。