为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码如何运行的,请教各位

这段代码如何运行的,请教各位

C
街角疯 2016-07-25 10:16:17
#include <stdio.h>int main() {     /* 定义需要计算的日期 */    int year = 2008;    int month = 8;    int day = 8;    switch(month-1)    {        case 12:day+=31;        case 11:day+=30;        case 10:day+=31;        case 9:day+=30;        case 8:day+=31;        case 7:day+=31;        case 6:day+=30;        case 5:day+=31;        case 4:day+=30;        case 3:day+=31;        case 2:if((year%4==0 && year%100) || year%400==0) day+=29; else day+=28;        case 1:day+=31;    }    printf("2008年8月8日是该年的第%d天",day); return 0;}这是如何进行运行的?
查看完整描述

2 回答

已采纳
?
不偏不易

TA贡献96条经验 获得超118个赞

首先这里的代码是没有错的,计算是8月8日是第几天,那前7月是全的,8月只过8天,day=8,然后用day去一个个月加过去,7月:day=day+31;以此类推到1月:day=day+31。

month为8,switch里条件month-1为7,一点问题都没有。

看一下switch那一章。有一句话,你可能没有注意,大概是当没有break的时候,switch会向下一直执行下去。

这里的话,month-1为7的时候,就会从case 7 ,一直到case 1,然后才结束switch.

所以这里花式的计算了足月的天数,8月8日,中,switch里帮你计算了8天加上1-7月的天数和。


附:http://www.imooc.com/code/5207

在使用switch语句时还应注意以下几点:

1、在case后的各常量表达式的值不能相同,否则会出现错误。

2、在case子句后如果没有break;会一直往后执行一直到遇到break;才会跳出switch语句。


查看完整回答
3 反对 回复 2016-07-25
  • 2 回答
  • 0 关注
  • 1261 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信