鱼C论坛

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

[已解决]为什么答案输出不对啊

[复制链接]
发表于 2023-10-7 16:56:21 | 显示全部楼层 |阅读模式

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

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

x
键盘上按照年月日的格式输入年份、月和日期,运行程序以后,判断这一天是这一年的第几天。

输入描述
标准输入,输入三个整数,即年、月、日(都是正数),以空格间隔,不保证输入的年份和日期是正确的。

输出描述
标准输出,输出这一天是这一年的第几天,如果日期不合法,输出“data error!”。
  1. #include<stdio.h>
  2. int main()
  3. {
  4.     int year,mon,day,days=0;
  5.     scanf("%d%d%d",&year,&mon,&day);
  6.     if(year>9999||year<1000) printf("date error!");
  7.     else
  8.    
  9.     {if(((year%400==0)||(year%34==0&&year%100!=0))&&mon>2)
  10.         days++;
  11.     switch(mon)
  12.     {
  13.         case 1:
  14.         {
  15.             if(day>31) printf("data error!");
  16.             else
  17.             {days=day;printf("%d",days);}
  18.             break;
  19.         }
  20.         case 2:
  21.         {
  22.             if(((year%400==0||(year%4==0||year%100!=0))&&mon>29)||((year%400!=0||(year%4!=0||year%100==0))&&mon>28))printf("data error!");
  23.             else
  24.             {days=day+31;printf("%d",days);}
  25.             break;
  26.         }
  27.         case 3:
  28.         {
  29.             if(day>31) printf("data error!");
  30.             else
  31.             {days=day+59;printf("%d",days);}
  32.             break;
  33.         }
  34.             case 4:
  35.         {
  36.             if(day>30) printf("data error!");
  37.             else
  38.             {days=day+90;printf("%d",days);}
  39.             break;
  40.         }
  41.         case 5:
  42.         {
  43.             if(day>31) printf("data error!");
  44.             else
  45.             {days=day+120;printf("%d",days);}
  46.             break;
  47.         }
  48.         case 6:
  49.         {
  50.             if(day>30) printf("data error!");
  51.             else
  52.             {days=day+151;printf("%d",days);}
  53.             break;
  54.         }
  55.         case 7:
  56.         {
  57.             if(day>31) printf("data error!");
  58.             else
  59.             {days=day+181;printf("%d",days);}
  60.             break;
  61.         }
  62.         case 8:
  63.         {
  64.             if(day>31) printf("data error!");
  65.             else
  66.             {days=day+212;printf("%d",days);}
  67.             break;
  68.         }
  69.         case 9:
  70.         {
  71.             if(day>30) printf("data error!");
  72.             else
  73.             {days=day+243;printf("%d",days);}
  74.             break;
  75.         }
  76.         case 10:
  77.         {
  78.             if(day>31) printf("data error!");
  79.             else
  80.             {days=day+273;printf("%d",days);}
  81.             break;
  82.         }
  83.         case 11:
  84.         {
  85.             if(day>30) printf("data error!");
  86.             else
  87.             {days=day+304;printf("%d",days);}
  88.             break;
  89.         }
  90.         case 12:
  91.         {
  92.             if(day>31) printf("data error!");
  93.             else
  94.             {days=day+334;printf("%d",days);}
  95.             break;
  96.         }
  97.         default:printf("date error!");
  98.     }
  99. }
  100. }
复制代码
最佳答案
2023-10-7 16:58:48
这段代码有以下问题:

1. 第7行的输出应该是"data error!"而不是"date error!"

2. 第11行的年份除以34应该是除以4

3. 在每个case中都需要加上break语句,否则会继续执行下一个case

4. 在第24行到27行的公式中,应该是闰年的情况下mon>2,而不是mon>29或mon>28

5. 最后的default语句不需要输出任何内容

修改后的代码如下:
  1. ++
  2. #include <stdio.h>
  3. int main() {
  4.     int year, mon, day, days = 0;
  5.     scanf("%d%d%d", &year, &mon, &day);
  6.     if (year > 9999 || year < 1000)
  7.         printf("data error!");
  8.     else {
  9.         if (((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) && mon > 2)
  10.             days++;
  11.         switch (mon) {
  12.             case 1: {
  13.                 if (day > 31)
  14.                     printf("data error!");
  15.                 else {
  16.                     days = day;
  17.                     printf("%d", days);
  18.                 }
  19.                 break;
  20.             }
  21.             case 2: {
  22.                 if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && day > 29 ||
  23.                     (year % 400 != 0 || (year % 4 != 0 || year % 100 == 0)) && day > 28)
  24.                     printf("data error!");
  25.                 else {
  26.                     days = day + 31;
  27.                     printf("%d", days);
  28.                 }
  29.                 break;
  30.             }
  31.             case 3: {
  32.                 if (day > 31)
  33.                     printf("data error!");
  34.                 else {
  35.                     days = day + 59;
  36.                     printf("%d", days);
  37.                 }
  38.                 break;
  39.             }
  40.             case 4: {
  41.                 if (day > 30)
  42.                     printf("data error!");
  43.                 else {
  44.                     days = day + 90;
  45.                     printf("%d", days);
  46.                 }
  47.                 break;
  48.             }
  49.             case 5: {
  50.                 if (day > 31)
  51.                     printf("data error!");
  52.                 else {
  53.                     days = day + 120;
  54.                     printf("%d", days);
  55.                 }
  56.                 break;
  57.             }
  58.             case 6: {
  59.                 if (day > 30)
  60.                     printf("data error!");
  61.                 else {
  62.                     days = day + 151;
  63.                     printf("%d", days);
  64.                 }
  65.                 break;
  66.             }
  67.             case 7: {
  68.                 if (day > 31)
  69.                     printf("data error!");
  70.                 else {
  71.                     days = day + 181;
  72.                     printf("%d", days);
  73.                 }
  74.                 break;
  75.             }
  76.             case 8: {
  77.                 if (day > 31)
  78.                     printf("data error!");
  79.                 else {
  80.                     days = day + 212;
  81.                     printf("%d", days);
  82.                 }
  83.                 break;
  84.             }
  85.             case 9: {
  86.                 if (day > 30)
  87.                     printf("data error!");
  88.                 else {
  89.                     days = day + 243;
  90.                     printf("%d", days);
  91.                 }
  92.                 break;
  93.             }
  94.             case 10: {
  95.                 if (day > 31)
  96.                     printf("data error!");
  97.                 else {
  98.                     days = day + 273;
  99.                     printf("%d", days);
  100.                 }
  101.                 break;
  102.             }
  103.             case 11: {
  104.                 if (day > 30)
  105.                     printf("data error!");
  106.                 else {
  107.                     days = day + 304;
  108.                     printf("%d", days);
  109.                 }
  110.                 break;
  111.             }
  112.             case 12: {
  113.                 if (day > 31)
  114.                     printf("data error!");
  115.                 else {
  116.                     days = day + 334;
  117.                     printf("%d", days);
  118.                 }
  119.                 break;
  120.             }
  121.             default:
  122.                 printf("data error!");
  123.                 break;
  124.         }
  125.     }
  126.     return 0;
  127. }
复制代码

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-7 16:58:13 | 显示全部楼层
问题出在判断闰年的条件上。根据题目要求,闰年的判断条件应该是:年份能被400整除,或者年份能被4整除但不能被100整除。但是在代码中,判断闰年的条件写成了  ((year%400==0)||(year%34==0&&year%100!=0)) ,这是错误的。

另外,代码中还有一处错误,判断2月份的天数时,使用了错误的逻辑运算符,应该使用  ||  而不是  && 。

修正后的代码如下:

  1. #include <stdio.h>

  2. int main()
  3. {
  4.     int year, mon, day, days = 0;
  5.     scanf("%d%d%d", &year, &mon, &day);
  6.    
  7.     if (year > 9999 || year < 1000)
  8.         printf("data error!");
  9.     else
  10.     {
  11.         if (((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) && mon > 2)
  12.             days++;
  13.         
  14.         switch (mon)
  15.         {
  16.             case 1:
  17.                 if (day > 31)
  18.                     printf("data error!");
  19.                 else
  20.                 {
  21.                     days = day;
  22.                     printf("%d", days);
  23.                 }
  24.                 break;
  25.             case 2:
  26.                 if (((year % 400 == 0 || year % 4 == 0 && year % 100 != 0) && day > 29) ||
  27.                     ((year % 400 != 0 || year % 4 != 0 && year % 100 == 0) && day > 28))
  28.                     printf("data error!");
  29.                 else
  30.                 {
  31.                     days = day + 31;
  32.                     printf("%d", days);
  33.                 }
  34.                 break;
  35.             case 3:
  36.                 if (day > 31)
  37.                     printf("data error!");
  38.                 else
  39.                 {
  40.                     days = day + 59;
  41.                     printf("%d", days);
  42.                 }
  43.                 break;
  44.             case 4:
  45.                 if (day > 30)
  46.                     printf("data error!");
  47.                 else
  48.                 {
  49.                     days = day + 90;
  50.                     printf("%d", days);
  51.                 }
  52.                 break;
  53.             case 5:
  54.                 if (day > 31)
  55.                     printf("data error!");
  56.                 else
  57.                 {
  58.                     days = day + 120;
  59.                     printf("%d", days);
  60.                 }
  61.                 break;
  62.             case 6:
  63.                 if (day > 30)
  64.                     printf("data error!");
  65.                 else
  66.                 {
  67.                     days = day + 151;
  68.                     printf("%d", days);
  69.                 }
  70.                 break;
  71.             case 7:
  72.                 if (day > 31)
  73.                     printf("data error!");
  74.                 else
  75.                 {
  76.                     days = day + 181;
  77.                     printf("%d", days);
  78.                 }
  79.                 break;
  80.             case 8:
  81.                 if (day > 31)
  82.                     printf("data error!");
  83.                 else
  84.                 {
  85.                     days = day + 212;
  86.                     printf("%d", days);
  87.                 }
  88.                 break;
  89.             case 9:
  90.                 if (day > 30)
  91.                     printf("data error!");
  92.                 else
  93.                 {
  94.                     days = day + 243;
  95.                     printf("%d", days);
  96.                 }
  97.                 break;
  98.             case 10:
  99.                 if (day > 31)
  100.                     printf("data error!");
  101.                 else
  102.                 {
  103.                     days = day + 273;
  104.                     printf("%d", days);
  105.                 }
  106.                 break;
  107.             case 11:
  108.                 if (day > 30)
  109.                     printf("data error!");
  110.                 else
  111.                 {
  112.                     days = day + 304;
  113.                     printf("%d", days);
  114.                 }
  115.                 break;
  116.             case 12:
  117.                 if (day > 31)
  118.                     printf("data error!");
  119.                 else
  120.                 {
  121.                     days = day + 334;
  122.                     printf("%d", days);
  123.                 }
  124.                 break;
  125.             default:
  126.                 printf("data error!");
  127.         }
  128.     }
  129.    
  130.     return 0;
  131. }
复制代码


这样修正后的代码可以正确判断日期是否合法,并输出这一天是这一年的第几天。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-7 16:58:48 | 显示全部楼层    本楼为最佳答案   
这段代码有以下问题:

1. 第7行的输出应该是"data error!"而不是"date error!"

2. 第11行的年份除以34应该是除以4

3. 在每个case中都需要加上break语句,否则会继续执行下一个case

4. 在第24行到27行的公式中,应该是闰年的情况下mon>2,而不是mon>29或mon>28

5. 最后的default语句不需要输出任何内容

修改后的代码如下:
  1. ++
  2. #include <stdio.h>
  3. int main() {
  4.     int year, mon, day, days = 0;
  5.     scanf("%d%d%d", &year, &mon, &day);
  6.     if (year > 9999 || year < 1000)
  7.         printf("data error!");
  8.     else {
  9.         if (((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0)) && mon > 2)
  10.             days++;
  11.         switch (mon) {
  12.             case 1: {
  13.                 if (day > 31)
  14.                     printf("data error!");
  15.                 else {
  16.                     days = day;
  17.                     printf("%d", days);
  18.                 }
  19.                 break;
  20.             }
  21.             case 2: {
  22.                 if ((year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) && day > 29 ||
  23.                     (year % 400 != 0 || (year % 4 != 0 || year % 100 == 0)) && day > 28)
  24.                     printf("data error!");
  25.                 else {
  26.                     days = day + 31;
  27.                     printf("%d", days);
  28.                 }
  29.                 break;
  30.             }
  31.             case 3: {
  32.                 if (day > 31)
  33.                     printf("data error!");
  34.                 else {
  35.                     days = day + 59;
  36.                     printf("%d", days);
  37.                 }
  38.                 break;
  39.             }
  40.             case 4: {
  41.                 if (day > 30)
  42.                     printf("data error!");
  43.                 else {
  44.                     days = day + 90;
  45.                     printf("%d", days);
  46.                 }
  47.                 break;
  48.             }
  49.             case 5: {
  50.                 if (day > 31)
  51.                     printf("data error!");
  52.                 else {
  53.                     days = day + 120;
  54.                     printf("%d", days);
  55.                 }
  56.                 break;
  57.             }
  58.             case 6: {
  59.                 if (day > 30)
  60.                     printf("data error!");
  61.                 else {
  62.                     days = day + 151;
  63.                     printf("%d", days);
  64.                 }
  65.                 break;
  66.             }
  67.             case 7: {
  68.                 if (day > 31)
  69.                     printf("data error!");
  70.                 else {
  71.                     days = day + 181;
  72.                     printf("%d", days);
  73.                 }
  74.                 break;
  75.             }
  76.             case 8: {
  77.                 if (day > 31)
  78.                     printf("data error!");
  79.                 else {
  80.                     days = day + 212;
  81.                     printf("%d", days);
  82.                 }
  83.                 break;
  84.             }
  85.             case 9: {
  86.                 if (day > 30)
  87.                     printf("data error!");
  88.                 else {
  89.                     days = day + 243;
  90.                     printf("%d", days);
  91.                 }
  92.                 break;
  93.             }
  94.             case 10: {
  95.                 if (day > 31)
  96.                     printf("data error!");
  97.                 else {
  98.                     days = day + 273;
  99.                     printf("%d", days);
  100.                 }
  101.                 break;
  102.             }
  103.             case 11: {
  104.                 if (day > 30)
  105.                     printf("data error!");
  106.                 else {
  107.                     days = day + 304;
  108.                     printf("%d", days);
  109.                 }
  110.                 break;
  111.             }
  112.             case 12: {
  113.                 if (day > 31)
  114.                     printf("data error!");
  115.                 else {
  116.                     days = day + 334;
  117.                     printf("%d", days);
  118.                 }
  119.                 break;
  120.             }
  121.             default:
  122.                 printf("data error!");
  123.                 break;
  124.         }
  125.     }
  126.     return 0;
  127. }
复制代码

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-9 18:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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