请大神给我讲解下这个有关闰年的C语言,谢谢。最好每行讲解下。再次感谢

/* 小明出生在一个闰年,他想知道什么时候可以过生日,你能告诉他吗?
给你一个正整数Y,表示起始年份,和一个正整数N,你的任务是告诉小明从Y年开始第N个闰年是哪一年。
注意:如果Y就是闰年,那么第一个闰年就是Y。 输入格式
输入的第一行为一个整数T,表示测试数据的组数。
每一组输入包含两个正整数Y和N(1<=N<=10000)。
输出
对于每组输入,输出从Y年开始第N个闰年是哪一年。
样例输入
3
2005 25
1855 12
2004 10000
样例输出
2108
1904
43236
*/
#include <stdio.h>
int isyear(int year)
{
if( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return 0;
else
return 1;
}
int main(void)
{
int Y,N;
int T;
int i;
int year;
scanf("%d",&T);
while(T)
{
scanf("%d%d",&Y,&N);
year = Y;
if(isyear(Y) == 0)
{
for(i=1;i<N;i++)
{
year += 4;
if(isyear(year) == 0)
{
continue;
}
else
{
i--;
}
}
}
else
{
if(isyear(Y+1)==0)
{
year+=1;
}
else if (isyear(Y+2)==0)
{
year+=2;
}
else if(isyear(Y+3)==0)
{
year+=3;
}
else if(isyear(Y+4)==0)
{
year+=4;
}
else if(isyear(Y+5)==0)
{
year+=5;
}
else if(isyear(Y+6)==0)
{
year+=6;
}
else if(isyear(Y+7)==0)
{
year+=7;
}
for(i=1;i<N;i++)
{
year+=4;
if(isyear(year)==0)
{
continue;
}
else
{
i--;
}
}
}
printf("%d\n",year);
T--;
}
return 0;
}

#include <stdio.h> //引入基本输入输出头文件
int isyear(int year) //定义一个判断闰年函数,返回值为int型
{
if( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0) //判断是否为闰年
return 0; //是闰年返回0
else
return 1; //不是闰年返回1
}
int main(void) //主函数
{
int Y,N; //定义变量
int T;
int i;
int year;
scanf("%d",&T); //从终端设备接收一个数字,作为继续或者结束标志(0结束,非零继续)
while(T) //判断是否继续
{
scanf("%d%d",&Y,&N);
year = Y;
if(isyear(Y) == 0)
{
for(i=1;i<N;i++)
{
year += 4;
if(isyear(year) == 0)
{
continue;
}
else
{
i--;
}
}
}
else
{
if(isyear(Y+1)==0)
{
year+=1;
}
else if (isyear(Y+2)==0)
{
year+=2;
}
else if(isyear(Y+3)==0)
{
year+=3;
}
else if(isyear(Y+4)==0)
{
year+=4;
}
else if(isyear(Y+5)==0)
{
year+=5;
}
else if(isyear(Y+6)==0)
{
year+=6;
}
else if(isyear(Y+7)==0)
{
year+=7;
}
for(i=1;i<N;i++)
{
year+=4;
if(isyear(year)==0)
{
continue;
}
else
{
i--;
}
}
}
printf("%d\n",year);
T--;
}
return 0;
}追问

后面的是什么意思呢,相同的解释一个就行,谢谢。

追答

scanf("%d",&T); //从终端设备接收一个数字,作为次数计数器
while(T) //判断是否继续
{
scanf("%d%d",&Y,&N); //从终端设备接收年份数据和连续次数,
year = Y; //把年份赋给year
if(isyear(Y) == 0) //调用isyear()函数判断是否为闰年
{
for(i=1;i<N;i++) //如果是闰年
{
year += 4; //年份加4,继续判断是否为闰年
if(isyear(year) == 0)
{
continue; //如果是,继续
}
else //如果不是,i值减1,结果是连续闰年的数
{
i--;
}
}
}
else //如果当前年份不是闰年
{
if(isyear(Y+1)==0) //如果下一年是闰年,则年份加1
{
year+=1;
}
else if (isyear(Y+2)==0) //如果隔两年是闰年,年份加2,以下同理

追问

还有三个问题:一、i的值是什么? 二、isyear(Y+7)==0) 为什么一直加到7,我感觉加到4不就行了么 三、for(i=1;i<N;i++) 有什么作用,具体详细点

追答

i是一个临时变量,主要起到控制for循环执行次数的作用。
for(i=1;i<N;i++)的作用就是:i初值为1,每执行一次循环体,i的值就加1(i++),直到i=N为止。
isyear(Y+7)==0) 为什么一直加到7,因为仅仅加到4 的话不能确定是否为闰年,闰年并不是4年一次的,有时是4年一次,有时是8年才有一次!

追问

为什么是8年一次呢,,,不过4年一次吗,100年不闰,400年再闰吗。。。我搞不懂 了。。

追答

这是闰年的出现规律问题,不是编程问题!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-03
先说下isYear的功能,这是一个返回值类型为int的函数,用来判断是否是闰年,其条件是年份是4的倍数但不是100的倍数,或者是400的倍数,这样就是闰年,是就返回0,不是就返回1.
程序从main函数开始,先定义变量Y,N,T,i,year。首先T是从键盘输入,表示需要测试的组数,所以当T=0时不再进行测试。
再从键盘上输入Y,N,
if(isyear(Y) == 0) //判断是闰年的话
{
for(i=1;i<N;i++) //就直接根据加上N*4得到第N个闰年
{
year += 4;
if(isyear(year) == 0) //这个是判断遇到一百年不闰的情况,就跳过一次N,但是年份还是加4
{
continue;
}
else
{
i--;
}
别急,我慢慢添追问

你说的这些我懂,主要是while里面的东西不能够理解,能解释下吗,同样的解释一个就行。麻烦了

追答

剩下你应该知道了,如果第输入的Y不是闰年,就要一直往下加,直到加的结果是闰年,因为两个闰年的间隔最多八年,所以要加其次。

追问

谢谢你了,不过只可以采纳一个,所以不好意思了。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网