主要考察了循环和数组的利用,笔者的代码比较冗余,但是简单易懂,方便初学者阅读与理解。
代码如下:用switch嵌套,更易于理解,当然也有改进的缩减代码在后文
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
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<stdio.h>
#include<stdlib.h>
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