鱼C论坛

 找回密码
 立即注册
查看: 3486|回复: 2

[已解决]C语言E17-18作业问题

[复制链接]
发表于 2022-10-20 11:36:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-21 01:09 编辑

         计算天数首先应该考虑是否跨年,两种情况应该区别对待:
  1. #include <stdio.h>

  2. #define LEAP(Y) (! ((Y) % 400) || (! ((Y) % 4) && (Y) % 100))

  3. int mday(int y , int m)
  4. {
  5.         int a[12] = {31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31} , r            ;
  6.         r = a[m - 1]                                                                           ;
  7.         if(m == 2 && LEAP(y)) r ++                                                             ;
  8.         return r                                                                               ;
  9. }

  10. int main(void)
  11. {
  12.         long int Nian , Yue , Ri , sum = 0                                                     ;
  13.         long int Xnian , Xyue , Xri                                                            ;
  14.         int e , i                                                                              ;
  15.         printf("  请输入您的生日(例如: 1998,05,16) : ")                                        ;
  16.         scanf("%d,%d,%d", & Nian , & Yue , & Ri)                                               ;
  17.         printf("请输入今年的日期(例如: 2021,10,23) : ")                                        ;
  18.         scanf("%d,%d,%d", & Xnian , & Xyue , & Xri)                                            ;
  19.         if(Xnian > Nian || Xnian == Nian && Xyue > Yue || Xnian == Nian && Xyue == Yue && Xri >= Ri) {
  20.                 if(Xnian == Nian) {
  21.                         if(Xyue == Yue) sum = Xri - Ri                                         ;
  22.                         else for(sum = Xri - Ri ; Yue < Xyue ; Yue ++) sum += mday(Nian , Yue) ;
  23.                 } else {
  24.                         for(sum = Xri - Ri , i = 1 ; i < Yue ; i ++) sum -= mday(Nian , i)     ;
  25.                         for(; Nian < Xnian ; Nian ++) sum += LEAP(Nian) ? 366 : 365            ;
  26.                         for(Yue = 1 ; Yue < Xyue ; Yue ++) sum += mday(Xnian , Yue)            ;
  27.                 }
  28.                 printf("           您已经在这个地球上生活了: %ld 天\n" , sum)                  ;
  29.         } else {
  30.                 fprintf(stderr , "日期输入错误\n")                                             ;
  31.         }
  32. }
复制代码

        编译、运行实况:
  1. D:\[00.Exerciese.2022]\C>g++ -o x x.c

  2. D:\[00.Exerciese.2022]\C>x
  3.   请输入您的生日(例如: 1998,05,16) : 2021,1,1
  4. 请输入今年的日期(例如: 2021,10,23) : 2022,10,20
  5. 您已经在这个地球上生活了:657 天

  6. D:\[00.Exerciese.2022]\C>x
  7.   请输入您的生日(例如: 1998,05,16) : 2021,10,20
  8. 请输入今年的日期(例如: 2021,10,23) : 2022,10,20
  9. 您已经在这个地球上生活了:365 天

  10. D:\[00.Exerciese.2022]\C>x
  11.   请输入您的生日(例如: 1998,05,16) : 2020,1,1
  12. 请输入今年的日期(例如: 2021,10,23) : 2020,3,1
  13. 您已经在这个地球上生活了:60 天

  14. D:\[00.Exerciese.2022]\C>x
  15.   请输入您的生日(例如: 1998,05,16) : 2021,12,31
  16. 请输入今年的日期(例如: 2021,10,23) : 2022,1,1
  17. 您已经在这个地球上生活了:1 天

  18. D:\[00.Exerciese.2022]\C>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-4-1 16:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表