键盘输入年月日,输出该日期是当年第几天
用到switch case语句以及if的条件语句
此次是回顾switch case的语法
不过算法可以,合理性高
代码段:
#include<stdio.h>
int main()
{
int year,month,day;
int days=0;
int flag=1;
printf("请输入年月日(yyyy-mm-dd):");
scanf("%d-%d-%d",&year,&month,&day);
if(year<=0)//判断输入合法性
{
flag=0;
}
switch(month)
{
case 12://为方便计算当月当日为今年的第几天,特设定为case 12而不是case 1,且无break
days+=30;//为什么这里要弄为days+=30而不是days+=31,因为当月为12月时前11个月是满的天数故为11月小月的30天天数
case 11://以下的days+=以此类推,一个处理方式
days+=31;
case 10:
days+=30;
case 9:
days+=31;
case 8:
days+=31;
case 7:
days+=30;
case 6:
days+=31;
case 5:
days+=30;
case 4:
days+=31;
case 3:
days+=28;
case 2:
days+=31;
case 1:
days+=0;
break;
default:
flag=0;
}
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(day<=0||day>=31)//大月
{
flag=0;
}
}
if(month==4||month==6||month==9||month==11)
{
if(day<=0||day>=30)//小月
{
flag=0;
}
}
if(month==2)//2月单独拿出判断闰年平年
{
if(year%4==0&&year%100!=0||year%400==0)
{
if(day<=0||day>=29)
{
flag=0;
}
}
else
{
if(day<=0||day>=28)
{
flag=0;
}
}
}
if((year%4==0&&year%100!=0||year%400==0)&&month>2)
{
days++;
}
days+=day;
if(flag==0)
{
printf("输入有误!\n");
}
else
{
printf("%d-%d-%d是该年的第%d天\n",year,month,day,days);
}
return 0;
}