鱼C论坛

 找回密码
 立即注册
查看: 3017|回复: 1

[作品展示] 菜鸡思路写的数组课后作业练习

[复制链接]
发表于 2022-10-13 15:45:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
新人写的代码 各位大佬轻喷,我写的真的是麻烦啊!!我再去钻研钻研小甲鱼的答案去!

生命计算器那一题

  1. #include<stdio.h>

  2. int main()
  3. {
  4.     int year, month, day;
  5.     int year1, month1, day1;
  6.     int days[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  7.     int month_, count, count1;
  8.     long sum = 0;

  9.     printf("请输入你的生日(如1988.05.20):");
  10.     scanf("%d.%d.%d", &year, &month, &day);

  11.     printf("请输入今年日期(如2016.03.28):");
  12.     scanf("%d.%d.%d", &year1, &month1, &day1);

  13.     for(year += 1; year < year1; year++)//从 出生第二年 到 当前日期到前一年 整年的天数
  14.     {
  15.         if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0))
  16.         {
  17.             sum += 366;
  18.         }
  19.         else
  20.         {
  21.             sum += 365;
  22.         }
  23.     }
  24.    
  25.     month_ = month;

  26.     for(month += 1; month <= 12; month++)//出生月份的下一个月 到 年底的时间
  27.     {
  28.         if((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month == 2)
  29.         {
  30.             for(; month <= 12; month++)
  31.             {
  32.                 sum += days[month - 1];
  33.             }
  34.             sum = sum + 1;
  35.         }
  36.         else
  37.         {
  38.             for(; month <= 12; month++)
  39.             {
  40.                 sum += days[month - 1];
  41.             }
  42.         }

  43.         switch(month_)//生日当月剩余天数
  44.         {
  45.             case  1: sum = sum + (days[0] - day);break;
  46.             case  2: sum = sum + (days[1] - day);break;
  47.             case  3: sum = sum + (days[2] - day);break;
  48.             case  4: sum = sum + (days[3] - day);break;
  49.             case  5: sum = sum + (days[4] - day);break;
  50.             case  6: sum = sum + (days[5] - day);break;
  51.             case  7: sum = sum + (days[6] - day);break;
  52.             case  8: sum = sum + (days[7] - day);break;
  53.             case  9: sum = sum + (days[8] - day);break;
  54.             case 10: sum = sum + (days[9] - day);break;
  55.             case 11: sum = sum + (days[10] - day);break;
  56.             case 12: sum = sum + (days[11] - day);break;
  57.         }

  58.         //从当前日期的年初 到 当前日期前一个月 的天数
  59.         if((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && month1 >= 3)
  60.         {
  61.             for(count = 1; count < month1; count++)
  62.             {
  63.                 sum += days[count - 1];
  64.             }
  65.             sum += 1;
  66.         }
  67.         else
  68.         {
  69.             for(count = 1; count < month1; count++)
  70.             {
  71.                 sum += days[count - 1];
  72.             }
  73.         }

  74.         //当前日期 当前月份下的“日”的天数
  75.         for(count1 = 1; count1 <= day1; count1++)
  76.         {
  77.             sum += 1;
  78.         }

  79.         printf("你在这个世界总共生存类%ld天\n", sum);
  80.     }
  81.    
  82.     return 0;
  83. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-10-13 15:54:53 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <time.h>

  3. void today(int * year , int * month , int * day)
  4. {
  5.         time_t T                                                                                                      ;
  6.         struct tm * TM                                                                                                ;
  7.         time(& T)                                                                                                     ;
  8.         TM = localtime(& T)                                                                                           ;
  9.         * year   = TM -> tm_year + 1900                                                                               ;
  10.         * month  = TM -> tm_mon  + 1                                                                                  ;
  11.         * day    = TM -> tm_mday                                                                                      ;
  12. }

  13. int leapyear(int y)
  14. {
  15.         return ((! (y % 4) && y % 100) || ! (y % 400)) ? 1 : 0                                                        ;
  16. }

  17. int monthdays(int y , int m)
  18. {
  19.         int r , md[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}                                               ;
  20.         r = 0                                                                                                         ;
  21.         if(y >= 1900 && y <= 2999 && m > 0 && m < 13) {
  22.                 r = md[m - 1]                                                                                         ;
  23.                 if(leapyear(y) && m == 2) r += 1                                                                      ;
  24.         }
  25.         return r                                                                                                      ;
  26. }

  27. int check(int y , int m , int d)
  28. {
  29.         int e , r                                                                                                     ;
  30.         r = 0                                                                                                         ;
  31.         if(y >= 1900 && y <= 2999 && m > 0 && m < 13 && d >= 1 && d <= monthdays(y , m)) r = 1                        ;
  32.         return r                                                                                                      ;
  33. }

  34. int days(int y[] , int m[] , int d[])
  35. {
  36.         int a , b , ds                                                                                                ;
  37.         ds = 0                                                                                                        ;
  38.         if(y[1] > y[0] || (y[1] == y[0] && m[0] < m[1]) || (y[1] == y[0] && m[0] == m[1]) && d[0] <= d[1]) {
  39.                 if(y[0] == y[1] && m[0] == m[1]) {
  40.                         ds = d[1] - d[0]                                                                              ;
  41.                 } else if(y[0] == y[1]) {
  42.                         ds = monthdays(y[0] , m[0]) - d[0]                                                            ;
  43.                         for(b = m[0] + 1 ; b < m[1] ; b ++) ds += monthdays(y[0] , b)                                 ;
  44.                         ds += d[1]                                                                                    ;
  45.                 } else {
  46.                         ds = monthdays(y[0] , m[0]) - d[0]                                                            ;
  47.                         for(b = m[0] + 1 ; b < 13 ; b ++) ds += monthdays(y[0] , b)                                   ;
  48.                         for(a = y[0] + 1 ; a < y[1] ; a ++) ds += (leapyear(a)) ? 366 : 365                           ;
  49.                         for(b = 1 ; b < m[1] ; b ++) ds += monthdays(y[1] , b)                                        ;
  50.                         ds += d[1]                                                                                    ;
  51.                 }
  52.         }
  53.         return ds + 1                                                                                                 ;
  54. }

  55. int years(int y[] , int m[] , int d[])
  56. {
  57.         int ys , a                                                                                                    ;
  58.         ys = 0                                                                                                        ;
  59.         if(y[1] > y[0]) {
  60.                 ys = y[1] - y[0]                                                                                      ;
  61.                 if(m[0] > m[1] || (m[0] == m[1] && d[0] > d[1])) ys --                                                ;
  62.         }
  63.         return ys                                                                                                     ;
  64. }

  65. int main(void)
  66. {
  67.         int y[2] , m[2] , d[2]                                                                                        ;
  68.         today(& y[1] , & m[1] , & d[1])                                                                               ;
  69.         printf("今天是 : %4d-%02d-%02d\n" , y[1] , m[1] , d[1])                                                       ;
  70.         printf("输入您的出生日期 (y-m-d) : ")                                                                         ;
  71.         scanf("%d-%d-%d" , & y[0] , & m[0] , & d[0])                                                                  ;
  72.         printf("您输入的出生日期是 : %04d-%02d-%02d\n" , y[0] , m[0] , d[0])                                          ;
  73.         if(check(y[0] , m[0] , d[0]) && (y[1] > y[0] || (y[1] == y[0] && m[0] < m[1]) || (y[1] == y[0] && m[0] == m[1] && d[0] <= d[1]))) {
  74.                 printf("今天是阁下生命中的第 【%5d】 天!\n" , days(y , m , d))                                        ;
  75.                 if(m[1] == m[0] && d[1] == d[0]) {
  76.                         printf("     今天是阁下 【%2d】 周岁的生辰!\n" , years(y , m , d))                            ;
  77.                         printf("                   祝阁下生日快乐!\n")                                                ;
  78.                 } else {         
  79.                         printf("           阁下已经 【%2d】 周岁了!\n" , years(y , m , d))                            ;
  80.                 }
  81.         } else {
  82.                 printf("日期输入错误!")                                                                              ;
  83.         }
  84. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 01:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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