做为一个学c语言的新手,今天学习了switch语句。当时老师说case语句后面如果不跟break;会按照顺序执行,而这种结构也有它的优点,通过今天对这个程序的编写,也对switch有了全新的认识;
/*
请分别输入年月日三个数值,计算出这是这一年的第几天?
(提示:要考虑闰年和2月的情况)
*/
#include <stdio.h>
void main()
{
int year=0,month=0,day=0,i=0,sum=0;
while(1)
{
printf("请输入年份:");
scanf("%d",&year);
printf("请输入月份:");
scanf("%d",&month);
printf("请输入日期:");
scanf("%d",&day);
i=0; //i变量是为了控制月和日的格式是否输入正确;
switch(month) //判断每个月的日期是否输入正确;
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(day>0&&day<=31)
{
i=1;
}
break;
case 4:
case 6:
case 9:
case 11:
if(day>0&&day<=30)
{
i=1;
}
break;
case 2: //2月闰年可以输入29日;
if((year%4==0&&year%100!=0)||year%400==0)
{
if(day>0&&day<=29)
{
i=1;
}
}
else
{
if(day>0&&day<=28)
{
i=1;
}
}
break;
default: //如果输入不是1-12月份,那么月份输入有误;
i=0;
break;
}
if(i) //如果i变量为1,那么输入正确,否则重新输入;
{
break;
}
else
{
printf("请输入正确的年月日!!!\n");
}
}
i=0;
switch(month) //把每个月的日期累加;
{
case 12:
i=i+30;
case 11:
i=i+31;
case 10:
i=i+30;
case 9:
i=i+31;
case 8:
i=i+31;
case 7:
i=i+30;
case 6:
i=i+31;
case 5:
i=i+30;
case 4:
i=i+31;
case 3:
if((year%4==0&&year%100!=0)||year%400==0)
{
i=i+29;
}
else
{
i=i+28;
}
case 2:
i=i+31;
case 1:
;
}
sum=i+day;
printf("%d年%d月%d日是%d年的第%d天\n!",year,month,day,year,sum);
}