【以下回答由 GPT 生成】
优化C语言程序计算日期总天数
这段代码的优化可以从以下几个方面进行:
- 使用宏定义代替魔术数
在代码中,魔术数12
可以使用宏定义来代替#define MONTHS 12
,增加代码的可读性和可维护性。
修改后的代码如下:
```c
#include
#define MONTHS 12
int main(void)
{
int days[2][MONTHS] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int year, month, day, sum = 0, i;
scanf("%d/%d/%d", &year, &month, &day);
if ((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0))
{
for (i = 1; i <= month; i++)
{
sum += days[0][i - 1] + day;
}
printf("总天数: %d\n", sum);
}
else
{
for (i = 1; i <= month; i++)
{
sum += days[1][i - 1] + day;
}
printf("总天数: %d\n", sum);
}
return 0;
}
```
- 将计算总天数的部分抽象为函数
将计算总天数的部分抽象为函数,以提高代码的可复用性和可读性。
修改后的代码如下:
```c
#include
#define MONTHS 12
int calculateDays(int year, int month, int day, int days[2][MONTHS]) {
int sum = 0;
int leap_year = ((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0);
for (int i = 1; i <= month; i++) {
sum += days[leap_year][i - 1] + day;
}
return sum;
}
int main(void) {
int days[2][MONTHS] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
int year, month, day;
scanf("%d/%d/%d", &year, &month, &day);
int sum = calculateDays(year, month, day, days);
printf("总天数: %d\n", sum);
return 0;
}
```
在上述代码中,我们将计算总天数的部分提取为了一个函数calculateDays
,通过传入的参数leap_year
来决定使用哪个数组来计算总天数。
- 改进输入错误的处理
在原始代码中,如果输入的月份超过12或者日期超过该月的天数,会导致代码计算错误。可以加入一些错误处理代码来提醒用户输入有误。
修改后的代码如下:
```c
#include
#define MONTHS 12
int calculateDays(int year, int month, int day, int days[2][MONTHS]) {
// 省略部分代码...
}
int main(void) {
// 省略部分代码...
// 校验输入的合法性
if (month <= 0 || month > 12) {
printf("月份不合法!\n");
return 0;
}
if (day <= 0 || day > days[leap_year][month - 1]) {
printf("日期不合法!\n");
return 0;
}
int sum = calculateDays(year, month, day, days);
printf("总天数: %d\n", sum);
return 0;
}
```
在上述代码中,我们增加了对输入合法性的校验,如果输入的月份不在1-12之间,或者输入的日期超过了该月的天数,会打印出错误信息并返回。
以上就是对给定的C语言程序进行的优化和改进建议。希望能对你有所帮助!如果还有其他问题,请随时提问。
【相关推荐】
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^