阿亮不减肥 发表于 2022-9-7 19:15:09

[课后作业] S1E17~18:数组 | 课后测试题

#include <stdio.h> //算出生存天数比答案多一天,不知道哪里有问题;其次最后打印结果的时候,最后两行怎么左对齐;还是需要再添加两个printf函数打印;有没有办法再一个里面打印出来;

int main() {
        int year1, year2, mouth1, mouth2, day1, day2, D, D1 = 0, D2 = 0, i, D3, D4;
        int day[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //非闰年
        int x;
        double s;
        printf("请输入你的生日(如1988-05-20) : ");
        scanf("%d-%d-%d", &year1, &mouth1, &day1);
//        getchar();
        printf("请输入今天的日期(如1988-05-20) : ");
        scanf("%d-%d-%d", &year2, &mouth2, &day2);
        for (i = mouth1 - 1; i < 12; i++) {
                D1 = D1 + day;
        }
        for (i = 0; i < mouth2 - 1; i++) {
                D2 = D2 + day;
        }
        D1 = D1 - day1;
        D2 = D2 + day2;
        D3 = (year2 - year1 - 1) * 365;
        D4 = (year2 - year1) / 4 + 1;//算多少个闰年
        D = D1 + D2 + D3 + D4;
        x = 80 * 365 + 80 / 4 + 1 - D;
        s = (double)D / (x + D);
        s = s * 100;
        printf("你在这个世界上总共生存了%d天\n\
        如果能活到80岁,你还剩下%d天\n\
        你已经使用了%.2f%%的生命,请好好珍惜剩下的时间!", D, x, s);
        return 0;
}

ba21 发表于 2022-9-7 23:18:51

你这题逻辑思路就错了,不是多一天的问题 。

理解你的代码
以下的d1 为计算出生那一年的天数,d2 为计算你输入"今天的日期"这一年的天数。那么问题 来了 你怎么判断这2个就不是润年?
      for (i = mouth1 - 1; i < 12; i++) {
                D1 = D1 + day;
      }

      for (i = 0; i < mouth2 - 1; i++) {
                D2 = D2 + day;
      }

      D1 = D1 - day1;
      D2 = D2 + day2;


这题 的解法应是 一年一年的推, 并且在推的过程中判断该年是否为润年,然后来确定每一年的天数。

阿亮不减肥 发表于 2022-9-7 23:36:10

ba21 发表于 2022-9-7 23:18
你这题逻辑思路就错了,不是多一天的问题 。

理解你的代码


我是全部每当闰年来计算的,然后再加上中间有几个闰年;突然发现确实存在一些漏洞;特别是查了一下闰年的计算方式,发现这样算存在误差;

ba21 发表于 2022-9-8 13:04:49

阿亮不减肥 发表于 2022-9-7 23:36
我是全部每当闰年来计算的,然后再加上中间有几个闰年;突然发现确实存在一些漏洞;特别是查了一下闰年的 ...

所以说你怎么肯定你前后2年不是闰年。
这不就是告诉你了,你的闰年的计算方式不正确。

阿亮不减肥 发表于 2022-9-8 15:33:06

明白了,已修正
页: [1]
查看完整版本: [课后作业] S1E17~18:数组 | 课后测试题