C语言循环结构求教从键盘上输入年、月、日,计算自当年元旦到这个日期一共有多少天并输出。

如题所述

int isLeapYear(int year)
{
if(year%100==0)
{
if(year%400==0)
return 1;
else
return 0;
}
else
{
if(year%4==0)
return 1;
else
return 0;
}
}

void main()
{
int days[12]={31,28,31,30,31,30,31,30,31,30,31,30};

int year,month,day,i,sum;
scanf("%d",&year);
scanf("%d",&month);
scanf("%d",&day);
if(isLeapYear(year))days[1]=29;

sum=0;
for(i=0,i<month-1;i++)
sum+=days[i];
sum+=(day-1);

printf("从%d年1月1日到%d年%d月%d日总共有%d天\n",year,year,month,day,sum);

}

求采纳,不懂可追问。追问

i小于month-1是什么意思,还有sum=days

追答

sum=0;
for(i=0,i<month-1;i++)
sum+=days[i];
这一段是统计整数月,比如你输入2月1日,就是统计days数组中days[0],也就是一月的天数。31天。

sum+=(day-1);

这一句是统计零头,比如你输入2月2日,就是2-1,在上面的基础上加一天的零头。

days数组是存放每月有多少天,下标从0开始,所以前面需要减1.
每月从1号开始,不是从0开始,所以也需要减1.

追问

sum+=daysi是什么意思

追答

sum=sum+days[i]的简写。就是在sum的基础上加上days[i]。
比如你输入3月2日,循环里面就是0+31+28,最后再+(2-1)。

for(i=0,i<month-1;i++)
sum+=days[i];
sum+=(day-1);
也是简写。
应该是
for(i=0,i<month-1;i++)
{
sum+=days[i];
}
sum+=(day-1);
for如果只管一句的话可以省略大括号。

追问

为什么是daysi

追答

days[12]={31,28,31,30,31,30,31,30,31,30,31,30};

前面定义过的,每个月含有多少天。days[0]对应一月份,...days[11]对应12月份
for(i=0,i<month-1;i++)是指从1月份开始统计,一直到你输入的月份为止。

你输入2月份,那么只需要统计1月份就可以了,所以是month-1。
你可以问详细点。

追问

wl为什么是i小于我不明白

追答

你是说为什么不是i小于等于?换种写法你估计看得清楚一点。
for(i=1,i<=month-1;i++)
{
sum+=days[i-1];
}
这个i就真正是月份的意思了。
以前那个i是数组下标的意思,实现的效果是一样的。

每月含多少天写错了,修改一下:
int days[12]={31,28,31,30,31,30,31,31,30,31,30,31};

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-04-16
int howdays(int year,int month,int day)
{
int sum=0;
int arun[11]={31,29,31,30,31,30,31,31,30,31,30};
int aping[11]={31,28,31,30,31,30,31,31,30,31,30};
if (((year%4==0)&&(year%100!=0))||year%400==0)
{
for (int i=1;i<month;i++)
{
sum+=arun[i-1];
}
}
else
{
for (int i=1;i<month;i++)
{
sum+=aping[i-1];
}

}

sum+=day;
printf("今天是第%d天\n",sum);
return sum;
}
int main()
{
int year,month,day;
printf("请输入年 月 日:");
scanf("%d,%d,%d",&year,&month,&day);
int days=howdays(year,month,day);
return 0;
}
第2个回答  2014-04-16
思路:
(1)判断年份是否是闰年(2月为29天),其它年份为28天
(2)1 3 5 7 8 10 12 (31天)
(3) 2 4 9 11 (30天)追问

怎么打出来

本回答被提问者采纳
相似回答