数组代码
#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;
} 根据您提供的代码,我注意到一些不熟悉的知识点和逻辑错误。以下是详细分析:
不熟悉的知识点:
[*] 数组声明和初始化:在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]