编辑一个C语言程序:输入任意年月日,判断该天是这一年的第几天。

如果输入错误年月日,则显示输入错误。例如20030229

int Ymd2Days(int year, int month, int date)
{
static int mdays[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 };
int i, days = date;
for (i=0; i<month; ++i) days += mdays[i];
if (month>2) { // 闰年的三-十二月份天数加1
if (((year%400)==0) || ((year&3)==0 && (year%100))) ++days;
}
return days;
}

int main()
{
int y,m,d;
printf("---输入年,月,日:");
while (scanf("%d,%d,%d", &y, &m, &d)==3) {
printf("答: %d年%d月%d日是第%d天.\n\n---输入年,月,日:", y, m, d, Ymd2Days(y,m,d));
}
return 0;
}

年月日数字用逗号隔开. 想结束的时候输入一个0就可以了. 例如:

---输入年,月,日:2008,1,31
答: 2008年1月31日是第31天.

---输入年,月,日:2008,6,16
答: 2008年6月16日是第168天.

---输入年,月,日:0
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-09-09
已经修改过了:
#include "stdio.h"
main()
{
int day,month,year,sum,leap;
printf("please input year,month,day(like 2000 10 01):");
scanf("%d%d%d",&year,&month,&day);
if(
(month>12||day>31)||/*the day (month>12 or day>31) is not exist!*/
((month==4||month==6||month==9||month==11)&&day==31)||/*the day [day=31 in (4,6,9,11)st month] is not exist!*/
(month==2&&(year%4==0&&year%100!=0)||(year%100==0&&year%400==0)&&day>29)||/*the day (day>29) in February is not exist!*/
(month==2&&day>28))/*the day(yera%4!=0) is not exist!*/
printf("the day is not exist!");
else
{
switch(month) /*先计算某月以前月份的总天数*/
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day; /*再加上某天的天数*/
if(year%400==0||(year%4==0&&year%100!=0)) /*判断是不是闰年*/
leap=1;
else
leap=0;
if(leap==1&&month>2) /*如果是闰年且月份大于2,总天数应该加一天*/
sum++;
printf("It is the %dth day.",sum);
}
}
/*
--------------------------------
运行结果1:
please input year,month,day(like 2000 10 01):2008 08 08
It is the 221th day.
运行结果2:
please input year,month,day(like 2000 10 01):1900 02 29
the day is not exist!
运行结果3:
please input year,month,day(like 2000 10 01):2008 08 32
the day is not exist!
运行结果4:
please input year,month,day(like 2000 10 01):2008 04 31
the day is not exist!
*/
里面注释自己改为汉语吧!本回答被提问者采纳
第2个回答  2019-07-31
#include<stdio.h>
int main()
{
int day,month,year,sum=0,leap;
printf("输入年月日如2019 7 12\n");
scanf("%d %d %d",&year,&month,&day);
switch(month)
{
case 1:sum=0;break;
case 2:sum=31;break;
case 3:sum=59;break;
case 4:sum=90;break;
case 5:sum=120;break;
case 6:sum=151;break;
case 7:sum=181;break;
case 8:sum=212;break;
case 9:sum=243;break;
case 10:sum=273;break;
case 11:sum=304;break;
case 12:sum=334;break;
default:printf("data error");break;
}
sum=sum+day;
if((year%400==0||(year%4==0&&year%100!=0))&&month>2)
sum++;
printf("这是这一年的第%d天。",sum);
return 0;
}
方法2
#include<stdio.h>
int day_of_year(int (*p)[13],int year,int month,int day)
{
int i,leap;
leap=(year%100!=0 && year%4 ==0||year%400 ==0);
for(i=1;i<month;i++)
day+=*(*(p+leap)+i);
return day;
}
main()
{
static int day_tab[][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31}};
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d\n",day_of_year(day_tab,a,b,c));
}
第3个回答  2008-06-17
/*程序设计要求:
输入一个日期,程序可以自动的判断出是否为闰年,
且能正确的指明这天为这个年份的第几天,用两个
函数实现(判断闰年函数leap()和判断第几天函数da())。*/
#include <stdio.h>
void leap( int nian,int *a)
{
if((nian%4==0&&nian%100!=0)||nian%400==0)
{
printf("%d年为闰年,",nian);
*a=1;
}
else
printf("%d年为平年,",nian);
}
/*天数的算法是本月以前所有的天数相加,在和本月的日子相加得到*/
void da(int yue,int ri,int b)
{
int i,tian[12]={0,31,59,90,120,151,181,212,243,273,304,334};//判断第几天时要用到的变量
if(b==1)/*闰年时执下面的for语句进行天数的修正*/
for(i=2;i<12;i++)
tian[i]=tian[i]+1;/*闰年时从2月到12月比平年多一天*/
for(i=1;i<13;i++)
if(i==yue)printf("%d月%d日为这一年的第%d天。\n",yue,ri,tian[yue-1]+ri);
}
void main()
{
int year,month,day,m,n;/*n为闰年标志,为1时为闰年*/
printf("请选择");
while(1)
{
printf("1 输入日期 2 退出\n");
scanf("%d",&m);
if(m==1)
{
printf("请输入年份、月份、日期(如2008-06-13):");
scanf("%d-%d-%d",&year,&month,&day);
n=0;
leap(year,&n);/*调用闰年判定函数*/
da(month,day,n);/*调用天数判定函数*/
}
else if(m==2)break;/*退出程序*/
else printf("请重新选择!\n");
}
}
相似回答