优化这段代码:#include <stdio.h>int main() { int year, month, day, days_in_month, start_day, i, j; // 获取年份 printf("请输入年份:"); scanf("%d", &year); // 获取月份 printf("请输入月份:"); scanf("%d", &month); // 计算该月份有多少天 if (month == 2) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { days_in_month = 29; } else { days_in_month = 28; } } else if (month == 4 || month == 6 || month == 9 || month == 11) { days_in_month = 30; } else { days_in_month = 31; } // 计算该月份的第一天是星期几 start_day = 1; for (i = 1; i < month; i++) { if (i == 2) { if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { start_day += 29; } else { start_day += 28; } } else if (i == 4 || i == 6 || i == 9 || i == 11) { start_day += 30; } else { start_day += 31; } } start_day = (start_day % 7 + 1) % 7; // 打印日历 printf("\n日 一 二 三 四 五 六\n"); for (i = 0; i < start_day; i++) { printf(" "); } for (j = 1; j <= days_in_month; j++) { printf("%2d ", j); if ((j + start_day) % 7 == 0) { printf("\n"); } } printf("\n"); return 0;}
时间: 2024-01-26 16:02:25 浏览: 69
以下是对该段代码的优化:
1.将计算月份天数的代码进行封装,以提高程序的可读性和可维护性。
2.将计算该月份第一天是星期几的代码进行优化,使用公式 `(day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7` 来计算。
3.修改程序的打印格式,使得日历更加美观。
4.添加输入验证,确保用户输入的年份和月份在合理范围内。
下面是优化后的代码:
```c
#include <stdio.h>
// 计算某个月份的天数
int days_in_month(int year, int month) {
if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return 29;
} else {
return 28;
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
return 30;
} else {
return 31;
}
}
int main() {
int year, month, day, days, start_day, i, j;
// 获取年份
printf("请输入年份:");
scanf("%d", &year);
if (year < 1 || year > 9999) {
printf("年份输入有误。\n");
return 1;
}
// 获取月份
printf("请输入月份:");
scanf("%d", &month);
if (month < 1 || month > 12) {
printf("月份输入有误。\n");
return 1;
}
// 计算该月份有多少天
days = days_in_month(year, month);
// 计算该月份的第一天是星期几
start_day = (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7;
// 打印日历
printf(" %d年%d月\n", year, month);
printf("日 一 二 三 四 五 六\n");
for (i = 0; i < start_day; i++) {
printf(" ");
}
for (j = 1; j <= days; j++) {
printf("%2d ", j);
if ((j + start_day) % 7 == 0) {
printf("\n");
}
}
printf("\n");
return 0;
}
```
经过优化后,该程序的可读性、可维护性和稳定性都得到了提高。
阅读全文