鱼C论坛

 找回密码
 立即注册
查看: 1371|回复: 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;
}
想知道小甲鱼最近在做啥?请访问 -> 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语句,输出错误的结果。

下面是修复了上述问题的代码:
#include<stdio.h>

int main()
{
    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("您输入错误。");
        }
    }

    return 0;
}

修复了代码中的问题后,现在可以正确计算一年中的天数并输出结果了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

struct Date
{
    int day;
    int month;
    int year;
};
int days(int, int, int, int);
int days(int a, int b, int c, int i)
{
    while(b--)
    {
        switch(b)
        {   case 1: c += 31; break;
            case 3: c += 31; break;
            case 5: c += 31; break;
            case 7: c += 31; break;
            case 8: c += 31; break;
            case 10: c += 31; break;
            case 12: c += 31; break;
            case 4: c += 30; break;
            case 6: c += 30; break;
            case 9: c += 30; break;
            case 11: c += 30; break;
            case 2:         break;
        }
    }
    if((b) > 2)
    {
        if(i == 0)
        {
            c += 29;
        }
        else
        {
            c += 28;
        }
    }
    return c;
}
int main(void)
{
    struct Date head;
    int i, sum;
    do
    {
        printf("请输入年月日:");
        scanf("%d-%d-%d", &head.year, &head.month, &head.day);
        i = fabs((head.year) - 2000);
        i = i % 4;
        if(i != 0 && head.day >= 29 && head.month == 2)//非闰年 >= 29天
        {
            printf("错误!该年2月只有28天!!\n");
        }
        else if(i == 0 && head.day > 29 && head.month == 2)//润年 > 29天
        {
            printf("错误!该年2月只有29天!!\n");            
        }
        if (head.month == 1 || (head.month>1 && head.month <= 7 && (head.month % 2) == 1) || 
            (head.month>=8 && head.month <= 12 && head.month % 2 == 0) && head.day > 31)
        {
            printf("date error!\n");
        }
        else if((head.month>1 && head.month < 7 && (head.month % 2) == 0) || 
            (head.month>=8 && head.month <= 12 && head.month % 2 == 1) && head.day > 30)
        {
            printf("date error!\n");            
        }
        else
            break;

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

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

    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 15:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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