题目:用户输入一个year(年)一个month(月)和一个day(日)
用函数实现求出这个日期是这一年的第几天
函数的原型为 int getDay(int year,int month,int day)
函数的返回值为第几天.
红色部分是对用户输入的限制 比如用户输入了 某年13月38日就是非法的 这个部分
我感觉自己做的麻烦了 有没有简单点的
#include<stdio.h>
int getDay(int year,int month,int day);
void main()
{
int year,month,day,s,leap;
printf("请您输入您要查询的年月日:\n");
printf("请您输入年:");//输入年
scanf("%d",&year);
if(year%400==0||(year%4==0)&&(year%100==0))//判断是否是闰年
leap=1;
else
leap=0;
printf("请您输入月:");//输入月
scanf("%d",&month);
if(month<1||month>12)//判断月份合法性
printf("月份无效\n");
printf("请您输入日:");//输入日
scanf("%d",&day);
switch(month)//判断天数的合法性
{
case 4: //这些月份每月对多30天
case 6:
case 9:
case 11:
if(day<1||day>30)
printf("本月份最多30天\n");
else
{
s=getDay(year,month,day);
printf("%d年%d月%d日是这一年中的第%d天!\n",year,month,day,s);
}
break;
case 2: //2月份闰年最多29天
if(leap==1)
{
if(day<1||day>29)
printf("闰年本月份是最多29天\n");
else
{
s=getDay(year,month,day);
printf("%d年%d月%d日是这一年中的第%d天!\n",year,month,day,s);
}
}
if(leap==0) //2月份非闰年最多28天
{
if(day<1||day>28)
printf("非闰年本月份最多28天\n");
else
{
s=getDay(year,month,day);
printf("%d年%d月%d日是这一年中的第%d天!\n",year,month,day,s);
}
}
break;
default: //剩下的月份最多31天
if(day<1||day>31)
printf("本月份最多31天\n");
else
{
s=getDay(year,month,day);
printf("%d年%d月%d日是这一年中的第%d天!\n",year,month,day,s);
}
}
}
int getDay(int year,int month,int day)//判断这个日期是第几天
{
int n;
switch(month)
{
case 1:n=0;break;
case 2:n=31;break;
case 3:n=59;break;
case 4:n=90;break;
case 5:n=120;break;
case 6:n=151;break;
case 7:n=181;break;
case 8:n=212;break;
case 9:n=243;break;
case 10:n=273;break;
case 11:n=304;break;
case 12:n=334;break;
default:printf("您输入的月份有错误!\n");
}
if((month>2)&&(year%400==0||(year%4==0)&&(year%100==0)))//输入的月份大于2同时又是闰年多加一天
return(n+day+1);
else
return(n+day);
}
[此贴子已经被作者于2006-10-15 23:13:38编辑过]