橘右京的橘子掉了
2016-10-04 10:58
#include <stdio.h>
int main()
{
/* 定义需要计算的日期 */
int year = 2008;
int month = 8;
int day = 8;
/*
* 请使用swtich语句,if...else语句完成本题
* 如有想看小编思路的,可以点击左侧任务中的“不会了怎么办”
* 小编还是希望大家独立完成哦~
*/
int date = 0;
switch (month)
{
case 12: date += 30;
case 11: date += 31;
case 10: date += 30;
case 9: date += 31;
case 8: date += 31;
case 7: date += 30;
case 6: date += 31;
case 5: date += 30;
case 4: date += 31;
case 3: if(year%400 != 0 && year%4 == 0){
date += 29;
}else{
date += 28;}
case 2: date += 31;
default: date += 8,printf("2008年8月8日是该年的第%d天",date);break;
}
return 0;
}
其中case是怎么分组的?
你写的程序中,month是从12倒序排列至2,也就是说每次case 当前month后date的值为当前month-1月的天数,但是由于没有break,所以继续累加至case 2,此时的date已经相当于从1月累加至当前month-1的总天数了,最后再加上default中的当前月天数,得到的结果同样是正解
我们算天数的时候是怎么算的?比如说三月七日,是不是需要计算已经过去的月份的总天数(一月和二月)再加上当前月的天数(7天),所以程序也这样设计,sum代表case month之前共有多少天(比如说case 3:执行的结果就是sum=31+28=59;)得到当前的sum后break跳出switch,最后再加上day的天数就得到了所求值
switch(month) { case 1:sum=0;break; case 2:sum=31;break; case 3:sum=59;break; case 4:sum=90;break; case 5:sum=120;break; case 6:sum=151;break; case 7:sum=181;break; case 8:sum=212;break; case 9:sum=243;break; case 10:sum=273;break; case 11:sum=304;break; case 12:sum=334;break; } sum += day;//此时的sum即为所求
C语言入门
926021 学习 · 20793 问题
相似问题