题目来源:c语言程序设计(苏小红第四版)
#include<stdio.h>
#include<stdlib.h>
//判断某一年是否为闰年
bool runnian(int year)
{
if(year%400==0)
{
return true;
}
else if(year%4==0&&year%100!=0)
{
return true;
}
return false;
}
//通过年月日输出某年第几天
int DayofYear(int year,int month,int day)
{
int days=0,i=0,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if(runnian(year)==true)
{
a[1]=29;
}
if(year<0||month>12||month<1||day<1||day>a[month-1])
{
return -1;
}
while(month>1)
{
days=days+a[i++];
month--;
}
return days+day;
}
//通过第几天输出年月日
void MonthDay(int year,int day,int *pMonth,int *pDay)
{
int days=0,i=0,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
*pMonth=1;
if(runnian(year)==true)
{
a[1]=29;
}
while(day>a[i])
{
day=day-a[i++];
*pMonth=*pMonth+1;
}
*pDay=day;
if(day<1||year<1){
*pMonth=13;
}
}
int main(void)
{
int year,month,day,days,n=0;
while(n!=3)
{
printf("欢迎使用年月日转换器,输入序号选择你想使用的功能:\n");
printf("\n1.年/月/日 --→今年的天数\n");
printf("\n2.今年的天数 --→年/月/日\n");
printf("\n3.exit\n\n");
scanf("%d",&n);
switch(n)
{
case 1:
printf("\n请输入年/月/日(如:2000 5 6)\n");
scanf("%d%*c%d%*c%d",&year,&month,&day);
days=DayofYear(year,month,day);
if(days==-1){
printf("\n输入数据有误!\n");
break;
}
printf("\n%d年的第%d天\n",year,days);
break;
case 2:
printf("\n请输入想查询的年和第几天(如:2000 1)\n");
scanf("%d%*c%d",&year,&day);
MonthDay(year,day,&month,&day);
if(month<=12)
{
printf("\n%d年%d月%d号\n",year,month,day);
}else{
printf("\n不存在这一天\n");
}
break;
case 3: break;
case 4: printf("\n你发现了彩蛋!\n");break;
default: printf("\n请输入1-3之间的数\n");
}
system("pause");
system("cls");
}
return 0;
}