输入年月日,计算天数的函数,里面的leap那一句不懂,有哪位大虾解释一下
int day_of_year(int year,int month,int day)
{
int tab[2][13] = {
{0,31,28,31,30,31,30,31,31,30,31,30,31},数组列变量为什么是13
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int k,leap;
leap = (year % 4 == 0&&year % 100 != 0)||year % 400 == 0;关键是这一句
for(k = 1;k < month;k ++)
day = day + tab[leap][k];
return day;
}
[解决办法]
给分!
[解决办法]
明白了,下面的for循环,for(k = 1;k < month;k ++)
这里month是固定的,如果k从0开始的话,就多了,所以必须从1开始,所以数组里面必须是【】【0】无效,所以是13~
[解决办法]
看了一下,我看出来的是这样的:
1、第一个地方,为什么是13呢,因为如果你输入的是一月,一月份还没过完所以说开始是0,设置31可能是为了正好是输入某一年的最后一天吧,这个不是完整的代码,我也不是特别肯定。
2、这个是判断闰年的条件,规定是闰年是可以被4整除但是不可以被100整出(特殊情况就是可以被400整除的也是闰年),这个判断为闰年之后就可以知道到底是二维数组中的第一行有用还是第二行有用了。
希望对你有用。
[解决办法]
1、int tab[2][13] = {
{0,31,28,31,30,31,30,31,31,30,31,30,31}
{0,31,29,31,30,31,30,31,31,30,31,30,31}
}; 这里设置13或12都可以,这儿确定后for(k = 1;k < month;k ++)中的K值随之而确定,tab列向量值为13,则K值为1开始循环;tab列向量值为12则K从0开始循环。
2、leap = (year % 4 == 0&&year % 100 != 0)||year % 400 == 0;这句中的leap有两个值0和1。当year值为4的倍数或100的倍数时(yea%4==0&&year%100!=0)的值为1,进而leap值为1,确定为tab的行向量中的第二行,即闰年对应的各个月的天数。
最后的tab确定这天是不是闰年里的,从而确定总的天数。