主要考察了循环和数组的利用,笔者的代码比较冗余,但是简单易懂,方便初学者阅读与理解。
代码如下:用switch嵌套,更易于理解,当然也有改进的缩减代码在后文
#include#include #include int main() { int year,mon,day; int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//该数组存放了12个月各自的天数 scanf_s("%d%d%d", &year, &mon, &day);//此处输入年月日 printf("您输入的日期为:%d年 %d月 %d日n",year, mon, day); int total = 0; int i; for (i = 0; i < mon-1; i++) { //这个 循环 是为了统计前i个月的 总天数 total = total + a[i]; } if (year % 4 == 0 && year % 100 || year % 400 == 0) { //这个if用来判断 是不是闰年 total = total + 1;//闰年2月为29天 ,所以要在28天的基础上加 1 switch (mon) { case 1: printf("是当年第:%d天", day); break; case 2: printf("是当年第: %d天", total + day); break; case 3: printf("是当年第: %d天", total + day); break; case 4: printf("是当年第: %d天", total + day); break; case 5: printf("是当年第: %d天", total + day); break; case 6: printf("是当年第: %d天", total + day); break; case 7: printf("是当年第: %d天", total + day); break; case 8: printf("是当年第: %d天", total + day); break; case 9: printf("是当年第: %d天", total + day); break; case 10: printf("是当年第: %d天", total + day); break; case 11: printf("是当年第: %d天", total + day); break; case 12: printf("是当年第: %d天", total + day); break; default: printf("输入有错误"); break; } } else { //此处为平年 2月为28天 switch (mon) { case 1: printf("是当年第:%d天", day); break; case 2: printf("是当年第: %d天", total + day); break; case 3: printf("是当年第: %d天", total + day); break; case 4: printf("是当年第: %d天", total + day); break; case 5: printf("是当年第: %d天", total + day); break; case 6: printf("是当年第: %d天", total + day); break; case 7: printf("是当年第: %d天", total + day); break; case 8: printf("是当年第: %d天", total + day); break; case 9: printf("是当年第: %d天", total + day); break; case 10: printf("是当年第: %d天", total + day); break; case 11: printf("是当年第: %d天", total + day); break; case 12: printf("是当年第: %d天", total + day); break; default: printf("输入有错误"); break; } } }
改进后的代码:使用while循环简单,代码的冗余减少,但不易于理解。
#include#include int main() { int year, mon, day, total, i; int a[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };//该数组存放了12个月各自的天数 while (scanf_s("%d%d%d", &year, &mon, &day) != EOF) { int total = 0; for (i = 0; i < mon - 1; i++) { //这个 循环 是为了统计前i个月的 总天数 total = total + a[i]; } total = total + day; if (mon > 2) { total = total + (year % 4 == 0 && year % 100 || year % 400 == 0); } printf("您输入的日期为:%d年 %d月 %d日n", year, mon, day); printf("%4d-%02d-%02d 是第 %d 天", year, mon, day, total); } }
运行结果:
当输入闰年日期:2020 12 31
当输入平年日期:2021 12 31



