鱼C论坛

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

求一年中的天数

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

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

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

x
#include<stdio.h>
int main()
{
   /*********begin*********/
int Y,M,D;
char a,b;
scanf("%d%c%d%c%d",&Y,&a,&M,&b,&D);
if (Y % 4 = 0 && Y % 100 != 0||Y % 400 = 0)
switch (M)
case 1:printf("%d",D);   break ;
case 2:printf("%d",31+D);   break ;
case 3:printf("%d",60+D);   break ;
case 4:printf("%d",91+D);   break ;
case 5:printf("%d",121+D);   break ;
case 6:printf("%d",152+D);   break ;
case 7:printf("%d",182+D);   break ;
case 8:printf("%d",213+D);   break ;
case 9:printf("%d",244+D);   break ;
case 10:printf("%d",274+D);   break ;
case 11:printf("%d",305+D);   break ;
case 12:printf("%d",335+D);   break ;
default :printf("您输入错误。");
else
switch (M)
case 1:printf("%d",D);   break ;
case 2:printf("%d",31+D);   break ;
case 3:printf("%d",59+D);   break ;
case 4:printf("%d",90+D);   break ;
case 5:printf("%d",120+D);   break ;
case 6:printf("%d",151+D);   break ;
case 7:printf("%d",181+D);   break ;
case 8:printf("%d",212+D);   break ;
case 9:printf("%d",243+D);   break ;
case 10:printf("%d",273+D);   break ;
case 11:printf("%d",304+D);   break ;
case 12:printf("%d",334+D);   break ;
default :printf("您输入错误。");


   /*********end*********/
   return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-25 21:01:50 | 显示全部楼层
这段代码是一个计算一年中的天数的程序。它首先通过输入获取年份(Y)、月份(M)和日期(D),然后根据输入的年份和月份计算出一年中的天数,并输出结果。

代码中使用了两个switch语句来处理不同的情况。首先,根据输入的年份判断是否为闰年,如果是闰年,则根据输入的月份计算出一年中的天数;如果不是闰年,则根据输入的月份计算出一年中的天数。

在第一个switch语句中,根据输入的月份(M)的不同,使用不同的case来计算天数,并使用printf函数输出结果。例如,如果输入的月份为1,则直接输出输入的日期(D);如果输入的月份为2,则输出31加上输入的日期(D)。

在第二个switch语句中,逻辑与运算符的优先级高于逻辑或运算符,所以需要使用括号将逻辑与运算符的表达式括起来。同样,根据输入的月份(M)的不同,使用不同的case来计算天数,并使用printf函数输出结果。

在最后的default语句中,如果输入的月份不在1到12之间,则输出"您输入错误。"。

然而,这段代码存在一些问题:
1. 缺少了switch语句和case语句的大括号,导致代码逻辑错误。
2. 在if语句中,等号使用错误,应该使用双等号来进行相等比较。
3. 缺少了break语句,导致程序会继续执行下一个case语句,输出错误的结果。

下面是修复了上述问题的代码:

  1. #include<stdio.h>

  2. int main()
  3. {
  4.     int Y, M, D;
  5.     char a, b;
  6.     scanf("%d%c%d%c%d", &Y, &a, &M, &b, &D);
  7.     if ((Y % 4 == 0 && Y % 100 != 0) || Y % 400 == 0) {
  8.         switch (M) {
  9.             case 1:
  10.                 printf("%d", D);
  11.                 break;
  12.             case 2:
  13.                 printf("%d", 31 + D);
  14.                 break;
  15.             case 3:
  16.                 printf("%d", 60 + D);
  17.                 break;
  18.             case 4:
  19.                 printf("%d", 91 + D);
  20.                 break;
  21.             case 5:
  22.                 printf("%d", 121 + D);
  23.                 break;
  24.             case 6:
  25.                 printf("%d", 152 + D);
  26.                 break;
  27.             case 7:
  28.                 printf("%d", 182 + D);
  29.                 break;
  30.             case 8:
  31.                 printf("%d", 213 + D);
  32.                 break;
  33.             case 9:
  34.                 printf("%d", 244 + D);
  35.                 break;
  36.             case 10:
  37.                 printf("%d", 274 + D);
  38.                 break;
  39.             case 11:
  40.                 printf("%d", 305 + D);
  41.                 break;
  42.             case 12:
  43.                 printf("%d", 335 + D);
  44.                 break;
  45.             default:
  46.                 printf("您输入错误。");
  47.         }
  48.     } else {
  49.         switch (M) {
  50.             case 1:
  51.                 printf("%d", D);
  52.                 break;
  53.             case 2:
  54.                 printf("%d", 31 + D);
  55.                 break;
  56.             case 3:
  57.                 printf("%d", 59 + D);
  58.                 break;
  59.             case 4:
  60.                 printf("%d", 90 + D);
  61.                 break;
  62.             case 5:
  63.                 printf("%d", 120 + D);
  64.                 break;
  65.             case 6:
  66.                 printf("%d", 151 + D);
  67.                 break;
  68.             case 7:
  69.                 printf("%d", 181 + D);
  70.                 break;
  71.             case 8:
  72.                 printf("%d", 212 + D);
  73.                 break;
  74.             case 9:
  75.                 printf("%d", 243 + D);
  76.                 break;
  77.             case 10:
  78.                 printf("%d", 273 + D);
  79.                 break;
  80.             case 11:
  81.                 printf("%d", 304 + D);
  82.                 break;
  83.             case 12:
  84.                 printf("%d", 334 + D);
  85.                 break;
  86.             default:
  87.                 printf("您输入错误。");
  88.         }
  89.     }

  90.     return 0;
  91. }
复制代码


修复了代码中的问题后,现在可以正确计算一年中的天数并输出结果了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-26 09:57:58 | 显示全部楼层
这个代码用于求输入日期处于一年当中的第几天(手写代码,可能有点bug)



  1. struct Date
  2. {
  3.     int day;
  4.     int month;
  5.     int year;
  6. };
  7. int days(int, int, int, int);
  8. int days(int a, int b, int c, int i)
  9. {
  10.     while(b--)
  11.     {
  12.         switch(b)
  13.         {   case 1: c += 31; break;
  14.             case 3: c += 31; break;
  15.             case 5: c += 31; break;
  16.             case 7: c += 31; break;
  17.             case 8: c += 31; break;
  18.             case 10: c += 31; break;
  19.             case 12: c += 31; break;
  20.             case 4: c += 30; break;
  21.             case 6: c += 30; break;
  22.             case 9: c += 30; break;
  23.             case 11: c += 30; break;
  24.             case 2:         break;
  25.         }
  26.     }
  27.     if((b) > 2)
  28.     {
  29.         if(i == 0)
  30.         {
  31.             c += 29;
  32.         }
  33.         else
  34.         {
  35.             c += 28;
  36.         }
  37.     }
  38.     return c;
  39. }
  40. int main(void)
  41. {
  42.     struct Date head;
  43.     int i, sum;
  44.     do
  45.     {
  46.         printf("请输入年月日:");
  47.         scanf("%d-%d-%d", &head.year, &head.month, &head.day);
  48.         i = fabs((head.year) - 2000);
  49.         i = i % 4;
  50.         if(i != 0 && head.day >= 29 && head.month == 2)//非闰年 >= 29天
  51.         {
  52.             printf("错误!该年2月只有28天!!\n");
  53.         }
  54.         else if(i == 0 && head.day > 29 && head.month == 2)//润年 > 29天
  55.         {
  56.             printf("错误!该年2月只有29天!!\n");            
  57.         }
  58.         if (head.month == 1 || (head.month>1 && head.month <= 7 && (head.month % 2) == 1) ||
  59.             (head.month>=8 && head.month <= 12 && head.month % 2 == 0) && head.day > 31)
  60.         {
  61.             printf("date error!\n");
  62.         }
  63.         else if((head.month>1 && head.month < 7 && (head.month % 2) == 0) ||
  64.             (head.month>=8 && head.month <= 12 && head.month % 2 == 1) && head.day > 30)
  65.         {
  66.             printf("date error!\n");            
  67.         }
  68.         else
  69.             break;

  70.     } while (1);
  71.     sum = days(head.year, head.month, head.day, i);

  72.     printf("该日是本年的第 %d 天\n", sum);

  73.     return 0;
  74. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 00:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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