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;}
目标是输入求出俩日期之间的天数, 麻烦大佬了,,
我检查程序没有错误
逻辑出问题了吗
我的思路 第一年 剩余天数 加最后一年过去天数 加中间天数
麻烦啦 万分感激
这段程序有不少出问题,具体问题如下:
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,通用一些;变量自身累加的时候,最好用“+=”运算符,看上去清晰些。
按照这个程序的写法,只能计算不同年份且前一年小于后一年的时间差,可以考虑做成更通用的时间区间计算算法。这个时候,要考虑的就是年月日的通用计算,而不是仅针对前一年小于后一年的这种特殊情况了。从这一点来看,这个程序还是有局限性的。
您好,拜读了您的程序。我理解您是想让用户输入任意年份的日期(起始年份日期,终止年份日期),输出共经过了多少天,我粗看了一下,您就是针对初始年份是不是闰年比较关心,其他中间年份有没有闰年您没管是不是闰年。
下一篇:游戏编程方面怎么入门?
上一篇:请求帮助。