鱼C论坛

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

[技术交流] 数组代码

[复制链接]
回帖奖励 30 鱼币 回复本帖可获得 15 鱼币奖励! 每人限 1 次
发表于 昨天 15:10 | 显示全部楼层 |阅读模式

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

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

x
#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[1]=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[a];
        }
        //当前年应该剪掉的天数
        dqday=n[dqmonth]-dqday;
        for(int c=dqmonth;c<=11;c++)
        {
                dqday=dqday+n[c];
        }
        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;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 15:11 | 显示全部楼层
根据您提供的代码,我注意到一些不熟悉的知识点和逻辑错误。以下是详细分析:

不熟悉的知识点:
  • 数组声明和初始化:在C语言中,数组应使用方括号声明,例如 int n[12] = {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 被读取但未说明用途(可能是年份),而代码又读取了 csyeardqyear,导致冗余。闰年判断应基于生日或当前年份,而非独立的 i
  • 闰年处理不当:代码仅在闰年时将 n 设为29,但 n 本应是月份天数数组。正确做法是修改数组中的二月天数(例如,在闰年将 n[1] 设为29)。
  • 代码不完整:for 循环未完成,无法计算总天数。此外,变量 myear, a, z, k, g 声明后未使用,应移除以避免混淆。
  • 输入顺序问题:先读取 i 但无提示,用户可能不清楚输入什么。建议将闰年判断整合到日期计算中。


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


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

  1. #include<stdio.h>
  2. int main() {
  3.     int n[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
  4.     int csyear, csmonth, csday, dqyear, dqmonth, dqday;
  5.     int sum = 0;

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

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

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


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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