weixin_慕圣7271912
2019-02-20 17:15
#include <stdio.h>
int main()
{
/* 定义需要计算的日期 */
int year = 2008;
int month = 8;
int day = 8;
int date=0, sum=0;
/*
* 请使用switch语句,if...else语句完成本题
* 如有想看小编思路的,可以点击左侧任务中的“不会了怎么办”
* 小编还是希望大家独立完成哦~
*/
switch(month-1)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
date+=31;
case 2:
if (year%400==0||(year%4==0 && year%100!=0))
{
date+=29;
}
else
{
date+=28;
};
case 4:
case 6:
case 9:
case 11:
date+=30;
}
date+=day;
printf("2008年8月8日,是该年中的第%d天",date);
return 0;
}
switch执行case时是直接查找7没错,但你7没break;之后它就会顺序执行直到遇到一个break(这个自己做实验跑一跑代码就能发现)。你以为你的代码是说12578⑩腊(掉了腊)都加31,但其实除了10月其他都没加,。然后你也没出循环,31+29+30+8=98. 答案是221. switch是选择语句,选出一个就break最好
首先,month-1=7,这一点没问题吧
按楼主的code,由于没有break,所以从case7开始,直到最后
楼主定义的date是0,就从0算起
第一段有效代码是case 10: date+=31; 此时date=31
//我知道楼主你意思是从第一个月加起,但事实上switch做的是选择,不是顺序计算
第二段有效代码是case 2: year定义为2008
if (year%400==0||(year%4==0 && year%100!=0))
//先做判断,2008%400=8,8不等于0,看或后面的内容,很显然2008满足后面的内容
//即判断的条件判定为真,执行以下代码
date+=29; 此时date=60
else 不执行,跳过
第三段有效代码是case 11:date+=30; 此时date=90
第四段有效代码是
date+=day;
printf("2008年8月8日,是该年中的第%d天",date);
此时date=date+day,即得date=98
从而输出date,即2008年8月8日,是该年中的第98天
我的分析说完了,楼楼慢慢看
不是输出97 ?
C语言入门
926210 学习 · 20797 问题
相似问题