c语言 要求输入2012年的一个日期输出是第几天。 我编的程序是这样,但为什么12月31日输出是360天

#include <stdio.h>
int main(int argc, char *argv[])
{
int a,b,c,d[12][31],e=1,f,g,i,j;
scanf ("%d %d %d",&a,&b,&c);
for (i=0;i<12;i++)
{

for (j=0;j<31;j++,)
{
d[i][j]=e;
if (i==1&&j==29) break;
else if (i==3|5|8|10&&j==30) break;

e++;
}
}
f=b-1,g=c-1;
printf ("%d",d[f][g]);

return 0;
}

没有必要那么麻烦吧

一年12月 每月多少天不是固定的吗??除了2月以外,但是你上面说了是2012年,是闰年那么2月也是固定的。

这些都是已经知道的,作为数组的初始值就可以了。

#include <stdio.h>
int main(int argc, char *argv[])
{
int a,b,c,d[12]={31,29,31,30,31,30,31,31,30,31,30,31}; //12个月,每月有多少天是固定的。
int i;
scanf ("%d %d %d",&a,&b,&c); //输入 2012 2 28 这种
int days=0;
for (i=0;i<b-1;i++) //计算到你输入月份的前一个月 数组的下标是从0开始的。
{
days +=d[i]; //计算天数
}
days+=c; //加上本月你输入的天数
printf ("%d",days); //输出

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-12-23
这段话
for (j=0;j<31;j++,)
{
d[i][j]=e;
if (i==1&&j==29) break;
else if (i==3|5|8|10&&j==30) break;

e++;
}

改成
for (j=0;j<31;j++,)
{
d[i][j]=e++; //这个地方要先加再break的,不然就有5次没加上,正好差5天

if (i==1&&j==29) break;
else if (i==3|5|8|10&&j==30) break;}追问

改了后一年371天了。。。。。。。。。。。而且我那个原版的2月1日计数是31,1月31计数也是31,不懂怎么错了,你这个改了后这个问题没了

追答

改成这个呢

for (j=0;j<31;j++,)
{

if (i==1&&j==29) break;
else if (i==3|5|8|10&&j==30) break;
d[i][j]=e++; //这个地方要先加再break的,不然就有5次没加上,正好差5天

}

追问

还是不行。。。。难道是思路错了么

追答

#include
int main(int argc, char *argv[])
{
int a,b,c,d[12][31],e=1,f,g,i,j;
scanf ("%d %d %d",&a,&b,&c);
for (i=0;i<12;i++)
{

for (j=0;j<31;j++)
{
if (i==1&&j==29) break;
else if ((i==3||i==5||i==8||i==10)&&j==30) break; //这个地方错了

d[i][j]=e;

e++;
}
}
f=b-1,g=c-1;
printf ("%d",d[f][g]);

return 0;
}

相似回答