c语言代码新手求指导 - 爱问答

(爱问答)

c语言代码新手求指导

#include<stdio.h>int main(void)

{int num[2][12] = {{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},{31, 27, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}};int sum, ts1, ts2, ts3, i, j, k, nian1, yue1, ri1, nian2, yue2, ri2 ;

printf("from the date (****/**/**): ");

scanf("%d/%d/%d", &nian1, &yue1, &ri1);

printf("to the date(****/**/**): ");

scanf("%d/%d/%d", &nian2, &yue2, &ri2);

if (nian1 % 400 == 0 || (nian1 % 100 != 0 && nian1 % 4 ==0))

{for(i = 12; i > yue1; i--){ts1 = ts1 + num[1][i-1];

}

ts1 = ts1 + ri1;}

else 

{

for(i = 12; i > yue1; i--)

{ts1 = ts1 + num[2][i-1];}ts1 = ts1 + ri1;}

if (nian2 % 400 == 0 || (nian2 % 100 != 0 && nian2 % 4 ==0))

{

for(j = 1; j < yue2; j++)

{ts2 = ts2 + num[1][i-1];

}ts2 = ts2 + ri2;}

else 

{

for(j = 12; j > yue2; j--)

{ts2 = ts2 + num[2][i-1];}ts2 = ts2 + ri2

;}

for (k = nian1 + 1; nian1 < nian2; k++)

{

if (k % 400 == 0 || (k % 100 != 0 && k % 4 ==0))

{ts3 = ts3 + 366;}else{ts3 = ts3 + 365;

}

}

sum = ts1 + ts2 + ts3;printf(" sum=%d ");return 0;}


目标是输入求出俩日期之间的天数, 麻烦大佬了,,

我检查程序没有错误

逻辑出问题了吗

我的思路 第一年 剩余天数 加最后一年过去天数 加中间天数

麻烦啦 万分感激c语言代码新手求指导

这段程序有不少出问题,具体问题如下:

1. num[2][12]数组定义的时候,二月的天数搞错了,闰年是29天,平年是28天。定义的时候分别定义成了28和27。

2. ts1、ts2和ts3三个变量在后面的运算中都用到了自身累加,但定义的时候没有赋初始值,会导致运算时结果异常。在定义时,赋初始值ts1=0、ts2=0和ts3=0。

3. 累加天数的时候,如ts1 = ts1 + num[1][i - 1],这里的num数组第一个下标应该从0开始取,因此应该取num[0][i - 1]和num[1][i - 1]。而程序中取了num[1][i - 1]和num[2][i - 1],会导致结果异常。

4. 在nian2处理过程中,num数组的第二个下标使用了i-1,应该为j-1,因为循环变量是j。在else处理中,循环语句应该为“for (j = 1; j < yue2; j++)”,而程序中使用了“for (j = 12; j > yue2; j--)”,循环逻辑错误。

5. 在计算中间天数的处理过程中,for循环的判断逻辑写错,应该为“k<nian2”,错误使用了“nian1<nian2”,导致死循环。

6. 提一点优化建议:变量名不要用拼音命名,年月日可以用year、month和day,通用一些;变量自身累加的时候,最好用“+=”运算符,看上去清晰些。


按照这个程序的写法,只能计算不同年份且前一年小于后一年的时间差,可以考虑做成更通用的时间区间计算算法。这个时候,要考虑的就是年月日的通用计算,而不是仅针对前一年小于后一年的这种特殊况了。从这一点来看,这个程序还是有局限性的。

您好,拜读了您的程序。我理解您是想让用户输入任意年份的日期(起始年份日期,终止年份日期),输出共经过了多少天,我粗看了一下,您就是针对初始年份是不是闰年比较关心,其他中间年份有没有闰年您没管是不是闰年。

相关标签:c语言

下一篇:游戏编程方面怎么入门?

上一篇:请求帮助。

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?