用C语言计算一下今天是今年的第几天!!求解

我自己写了个,但不知道为什么结果是垃圾值,求大神解答!
#include <stdio.h>
int main()
{
int year;
int month;
int day,days;
int i;
int date[12][13] = {
{31,28,31,30,31,30,31,31,30,31,30,31},
{31,29,31,30,31,30,31,31,30,31,30,31}};
printf("请输入当天的日期:");
scanf("%d %d %d",&year,&month,&day);
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
for(i=0;i<month;i++)
{
days += date[2][i];
}

}
else
{
for(i=0;i<month;i++)
{
days += date[1][i];
}
}
days += day;
printf("今天是今天的第%d天\n",days);
return 0;
}

帮你修改了下,应该没错了,

#include <stdio.h

int main()

{

 int year;

 int month;

 int day,days=0;     //

 int i;

 int date[12][13] = {

  {31,28,31,30,31,30,31,31,30,31,30,31},

  {31,29,31,30,31,30,31,31,30,31,30,31}};

  printf("请输入当天的日期:");

  scanf("%d %d %d",&year,&month,&day);

 if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)

  { 

   for(i=0;i<month-1;i++)

    {   

     days += date[1][i];   //

    }

  

  }

 else

  {

   for(i=0;i<month-1;i++)

    {   

     days += date[0][i];    //

    }

  }

  days += day;

  printf("今天是今天的第%d天\n",days);

 return 0;

}

追问

为什么i<month - 1?

追答

因为数组是从0开始的,而月份是从1开始的,而且假如你的月份是6月,那么你数组只能加到5月份然后加上6月的低多少天,如果再加就多了。
例如:假如你输入的是2000 1 1,那么结果应该是第一天,所以for(i=0;i<month-1;i++)应该执行0次,
假如输入的是2000 2 1,for(i=0;i<month-1;i++)应该执行1次,
从这两点都可以知道i<month-1;

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-07-31

  #include <stdio.h>

  int main()

  {

  int year,month,day,days=0;

  int i;

  int date[12] = {31,28,31,30,31,30,31,31,30,31,30,31};

  printf("请输入当天的日期:");

  scanf("%d %d %d",&year,&month,&day);

  if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)

  {

  for(i=0;i<month-1;i++)

  {

  days += date[i];

  }

  if(month>2) days++;

  }

  else

  {

  for(i=0;i<month-1;i++)

  {

  days += date[i];

  }

  }

  days += day;

  printf("今天是今天的第%d天\n",days);

  return 0;

  }


追问

我写这个程序是为了熟悉二维数组,可是你用了一维数组。先表示感谢,但是满意答案不能给你了

第2个回答  2013-07-31
第一,注意你的scanf()函数中%d之间存在空格,所以你在输入的时候也必须输入空格,例如
2013 7 31
第二,变量days没有初始化,在scanf()函数后面加一行初始化即可
days = 0;追问

加了days = 0,虽然没有出现lj值,但是还是没有到达效果啊 ,我输了2012 2 2日,它显示的是第2天,哪里错了?

第3个回答  2013-07-31
days没有初始化,把它初始化为0
第4个回答  2013-07-31
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)

改成:if ( ( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0)追问

这个没关系的,关键不是这个问题

追答

#include
void value(int year,int mount,int day){
int mounts[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int i,n,s;
mount--;
for(i=0;i<mount;i++){
n+=mounts[i];
}
s=n+day;
if((year%4==0&&year%100!=0)||year%400==0){
s++;
printf("%d年%d月%d号是今年的第%d天",year,mount+1,day,s);
}
else
{
printf("%d年%d月%d号是今年的第%d天",year,mount+1,day,s);
}
}
main(){
printf("请输入当天的年份月份和几号:");
int y,m,d;
scanf("%d,%d,%d",&y,&m,&d);
value(y,m,d);
}

做一下说明:1,3,5,7,8,10,12月份有31天,4,6,9,11月份有30天 。
而二月份呢就是用来区分是平年还是闰年了,平年的二月有28天,闰年的二月有29天,在这里我先设有28天,之后再来判断到底是平年还是闰年如果是闰年自增1在输出,否则直接输出

相似回答