用c语言编写:给出年、月、日,计算该日是该年的第几天。

如题所述

第1个回答  2012-06-10
#include<stdio.h>
int main()
{
int n,y,r,t,i;
int a[12];
a[1]=31; a[2]=28; a[3]=31;
a[4]=30; a[5]=31; a[6]=30;
a[7]=31; a[8]=31; a[9]=30;
a[10]=31;a[11]=30;a[12]=31;
while (scanf("%d %d %d",&n,&y,&r)!=EOF)
{
t=0;
if((n%4==0 && n%100!=0)||(n%400==0)) a[2]=29; else a[2]=28;
for (i=1;i<y;i++)
t+=a[i];
t+=r;
printf("%d\n",t);
}
}追问

这个程序有一个问题需要改一下,但是我不知道怎么去改,希望能赐教,就是例如2011年没有2月30日,但是输入的时候可以运行,所以这个程序不完全。但我不知道怎么改,希望赐教

追答

#include
int main()
{
int n,y,r,t,i;
int a[12];
a[1]=31; a[2]=28; a[3]=31;
a[4]=30; a[5]=31; a[6]=30;
a[7]=31; a[8]=31; a[9]=30;
a[10]=31;a[11]=30;a[12]=31;
while (scanf("%d %d %d",&n,&y,&r)!=EOF)
{
if (y12) {printf("出错了\n"); continue;}
t=0;
if((n%4==0 && n%100!=0)||(n%400==0)) a[2]=29; else a[2]=28;
if (a[y]<r) {printf("出错了\n"); continue;}
for (i=1;i<y;i++)
t+=a[i];
t+=r;
printf("输入的日期是今年的第%d天\n",t);
}
}

改好了

本回答被网友采纳
第2个回答  2012-06-10
#include<stdio.h>
struct
{
int year;
int month;
int day;
}date;
void main()
{
int i,days=0;
int day_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("input year,mont,day:\n');
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
for(i=0;i<date.month;i++)
days=days+day_month[i];
days=days+date.day;
printf("%d年%d月%d日是该年的第%d天",date.year,date.month,date.day,days);
}追问

这个程序有一个问题需要改一下,但是我不知道怎么去改,希望能赐教,就是例如2011年没有2月30日,但是输入的时候可以运行,所以这个程序不完全。但我不知道怎么改,希望赐教

追答

涉及闰年问题的话,只需要判断你输入的年份是否为闰年,湿润年的话,再判断你输入的月份是否在三月以后,如果是的话,还需要再加一天#include
struct
{
int year;
int month;
int day;
}date;
void main()
{
int i,days=0;
int day_month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
printf("input year,mont,day:\n');
scanf("%d,%d,%d",&date.year,&date.month,&date.day);
for(i=0;i=3)
days=days+1;
printf("%d年%d月%d日是该年的第%d天",date.year,date.month,date.day,days);
}
如是你的程序的话 在

追问

这个程序我都懂,因为我自己写的也是对的,但是例如对于2011年2月30日这种情况它照样能进行,但是实际2011年2月是没有30日的,所以这个程序需要改,不管是哪个月如果输入2月30是不是应该要重新输入呢,因为根本就不可能有2月30日,但是这个程序输入不管是哪一年的2月30日是都可以运行的,所以这个程序有局限,需要改进,但是我不知道怎么改,希望您能赐教

第3个回答  2012-06-10
#include<iostream.h>
int IsLeap(int y)
{ if(y%4==0&&y%100!=0||y%400==0)
return 1;
else return 0;
}
int main()
{ int m,year,mon,day,all,i;
int month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
cin>>m;
while(m--)
{ all=0;
cin>>year>>mon>>day;
if(IsLeap(year)){ month[1]=29;} else month[1]=28;
for(i=0;i<mon-1;i++){ all+=month[i];}
cout<<all+day<<endl;
}
return 0;
}
相似回答