陈7嘎嘎厉害 2023-11-05 23:07 采纳率: 45.5%
浏览 20
已结题

c语言用数组计算天数

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/245667691996153.png

#include <stdio.h>
#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,sum=0,i,day;

        
        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;
}



![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/231628691996166.png "#left")


  • 写回答

3条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-11-06 08:43
    关注

    【以下回答由 GPT 生成】

    优化C语言程序计算日期总天数

    这段代码的优化可以从以下几个方面进行:

    1. 使用宏定义代替魔术数

    在代码中,魔术数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;
    

    } ```

    1. 将计算总天数的部分抽象为函数

    将计算总天数的部分抽象为函数,以提高代码的可复用性和可读性。

    修改后的代码如下:

    ```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来决定使用哪个数组来计算总天数。

    1. 改进输入错误的处理

    在原始代码中,如果输入的月份超过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语言程序进行的优化和改进建议。希望能对你有所帮助!如果还有其他问题,请随时提问。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 11月14日
  • 已采纳回答 11月6日
  • 创建了问题 11月5日

悬赏问题

  • ¥30 求解达问题(有红包)
  • ¥15 请解包一个pak文件
  • ¥15 不同系统编译兼容问题
  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析
  • ¥100 我想找人帮我写Python 的股票分析代码,有意请加mathtao