题目:
输入一个日期,输出这个日期是这一年的第几天。
如:输入:2022-3-16
则输出 2022年1月16日 是 2022 年的第 60 天
(注意,要考虑平年和闰年的问题)
#include<stdio.h>
int main(int argc, const char *argv[])
{
char _1;
unsigned int year,month,day,day1,day2,x,i;
printf("输入一个日期例如:2000-01-31\n");
scanf("%d%c%d%c%d",&year,&_1,&month,&_1,&day);
printf("%d年%d月%d日\n",year,month,day);
x=(year%400==0)||(year%4==0&&year%100!=0);
if(x)
{
printf("今年是闰年\n");
}
else
{
printf("今年是平年\n");
}
day2=day;
//错误提示并退出程序
if(month>12||month<1)
{
printf("error-month\n");
return -1;
}
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(day>31||day<1)
{
printf("error-day31\n");
return -1;
}
}
if(month==4||month==6||month==9||month==11)
{
if(day>30||day<1)
{
printf("error-day30\n");
return -1;
}
}
if(month==2)
{
if(x)
{
if(day>29||day<1)
{
printf("error-day29\n");
return -1;
}
}
else
{
if(day>28||day<1)
{
printf("error-day28\n");
return -1;
}
}
}
//月份天数计算
for(i=1;i<month;i++)
{
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
{
day1=31;
}
else if(i<12&&i!=2&&i!=0)
{
day1=30;
}
if(i==2)
{
switch(x)
{
case 0:
day1=28;
break;
case 1:
day1=29;
break;
}
}
//判断这是一年当中的第几天
day2=day2+day1;
}
printf("是%d年的第%d天\n",year,day2);
return 0;
}
运行结果:
输入一个日期例如:2000-01-31
2000-3-1
2000年3月1日
今年是闰年
是2000年的第61天
输入一个日期例如:2000-01-31
2001-3-1
2001年3月1日
今年是平年
是2001年的第60天
注意:
当没有对变量进行初始化的时候,程序当中没有对变量进行赋值的操作时变量将会是一个随机值,运行时会导致结果错误;
若程序当中包含对变量的赋值操作,那个定义变量的时候不论初始化或不初始化对结果没有影响。