Kelekin 发表于 4 天前

数组代码

#include<stdio.h>
                                                                                                                                                          看一下一些不熟悉的知识点,和下面的问题和逻辑错误
int main()
{
        int i,sum,csyear,csmonth,csday,dqyear,dqmonth,dqday,myear,a,z,k;
        float g;
        sum=0;
       
        int n[]={31,28,31,30,31,30,31,31,30,31,30,31};
       
        scanf("%d",&i);
        if(i%4==0&&i%100!=0)
        {
                n=29;
        }
        //有差值得粗略天数
        printf("请输入你的生日\n");
        scanf("%d %d %d",&csyear,&csmonth,&csday);
        printf("请输入当前日期\n");
        scanf("%d %d %d",&dqyear,&dqmonth,&dqday);
       
        for(int year=csyear;year<=dqyear;year++)
        {
        if(year%4==0&&year%100!=0){myear=366;}
        else{myear=365;}
        sum=sum+myear;
        }
        //算精确天数
        //出生那一年应该减去的天数
        for(a=0;a<csmonth-1;a++)
        {
                csday=csday+n;
        }
        //当前年应该剪掉的天数
        dqday=n-dqday;
        for(int c=dqmonth;c<=11;c++)
        {
                dqday=dqday+n;
        }
        sum=sum-csday-dqday;
        printf("你已经活了%d天/n",sum);
        //80年的总天数
        k=0;
        for(int y=2006;y<=2006+80;y++)
        {
                        if(y%4==0&&y%100!=0){z=366;}
                        else{z=365;}
                        k=k+z;
        }
        g=7048.0/k;                                                                                                                                    这里如果用sum/k,怎么搞成小数
        printf("如果能活到80岁你还剩下%d\n",k-sum);
        printf("你已经使用了%.2f的生命\n",g);                                                                                              这里怎么把%打印到屏幕上实现24%的效果
        return 0;
}

FishC 发表于 4 天前

根据您提供的代码,我注意到一些不熟悉的知识点和逻辑错误。以下是详细分析:

不熟悉的知识点:

[*] 数组声明和初始化:在C语言中,数组应使用方括号声明,例如 int n = {31,28,31,30,31,30,31,31,30,31,30,31};。您的代码中使用了 int n={...};,这会导致编译错误,因为 n 被错误地声明为整型变量而非数组。
[*] 闰年判断规则:闰年需满足“能被4整除但不能被100整除,或能被400整除”。您的代码只检查了前一部分,缺少 || i%400 == 0 的条件。
[*] 循环结构:代码中 for 循环不完整,缺少终止条件和循环体。正确用法应指定循环范围(如从生日年到当前年)并在循环体内累加天数。


问题和逻辑错误:

[*] 数组使用错误:int n={...}; 应改为数组声明。后续 n=29; 试图将整数值赋给数组,这会导致类型不匹配。
[*] 变量用途混乱:i 被读取但未说明用途(可能是年份),而代码又读取了 csyear 和 dqyear,导致冗余。闰年判断应基于生日或当前年份,而非独立的 i。
[*] 闰年处理不当:代码仅在闰年时将 n 设为29,但 n 本应是月份天数数组。正确做法是修改数组中的二月天数(例如,在闰年将 n 设为29)。
[*] 代码不完整:for 循环未完成,无法计算总天数。此外,变量 myear, a, z, k, g 声明后未使用,应移除以避免混淆。
[*] 输入顺序问题:先读取 i 但无提示,用户可能不清楚输入什么。建议将闰年判断整合到日期计算中。


修正建议:

[*] 正确定义月份天数数组:int n = {31,28,31,30,31,30,31,31,30,31,30,31};
[*] 在读取生日和当前日期后,根据年份动态调整二月的天数(例如,使用 if (csyear % 4 == 0 && csyear % 100 != 0) || csyear % 400 == 0 来设置 n = 29)。
[*] 完成循环结构,例如从 csyear 到 dqyear 遍历年份,累加天数和处理月份差异。


示例修正代码片段(仅关键部分):

#include<stdio.h>
int main() {
    int n = {31,28,31,30,31,30,31,31,30,31,30,31};
    int csyear, csmonth, csday, dqyear, dqmonth, dqday;
    int sum = 0;

    printf("请输入你的生日(年 月 日)\n");
    scanf("%d %d %d", &csyear, &csmonth, &csday);
    printf("请输入当前日期(年 月 日)\n");
    scanf("%d %d %d", &dqyear, &dqmonth, &dqday);

    // 根据生日年份调整闰年二月天数
    if ((csyear % 4 == 0 && csyear % 100 != 0) || csyear % 400 == 0) {
      n = 29;
    }

    // 这里应添加循环来计算总天数(代码需完善)
    for (int year = csyear; year <= dqyear; year++) {
      // 处理年份和月份的逻辑
    }
}


请根据以上建议修改代码,并确保循环逻辑正确计算天数。如果还有疑问,欢迎继续提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 数组代码