这个题目需要了解switch函数的特性,在定位到对应的case语句执行完对应的case语句内容之后,因为去除了break语句,无法跳出switch选择,自动往下顺序执行,实现自动累加的目的。
#include <stdio.h>
int main()
{
//定义变量,给初始天数和赋值为0
int y,m,d,sumDays = 0;
printf("请输入日期:");
//输入年,月,日
scanf("%d%d%d",&y,&m,&d);
switch(m)
{
case(12):
{
//天数和为当月日期加上前个月份的天数,从一月累加至目标月份
sumDays += 30;
}
case(11):
{
sumDays += 31;
}
case(10):
{
sumDays += 30;
}
case(9):
{
sumDays += 31;
}
case(8):
{
sumDays += 31;
}
case(7):
{
sumDays += 30;
}
case(6):
{
sumDays += 31;
}
case(5):
{
sumDays += 30;
}
case(4):
{
sumDays += 31;
}
//闰年放在3月判断,是因为在3月才需要加上2月份的全部天数。
case(3):
{
if((y%4==0&&y%100!=0)||(y%400==0))
{
sumDays += 29;
}
else
{
sumDays += 28;
}
}
case(2):
{
sumDays += 31;
}
case(1):
{
sumDays += d;
}
}
printf("今天是%d年第%d天\n",y,sumDays);
return 0;
}