#P5716. 【深基3.例9】月份天数
【深基3.例9】月份天数
【深基3.例9】月份天数
题目来源
洛谷 P5716
题目描述
输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。
输入格式
输入两个正整数,分别表示年份 和月数 ,以空格隔开。
输出格式
输出一行一个正整数,表示这个月有多少天。
样例输入 1
1926 8
样例输出 1
31
样例输入 2
2000 2
样例输出 2
29
提示
一、switch:按「值」选一条路
当你要根据一个整数的具体取值分支,switch 比一长串 if-else 更清楚:
int m = 3;
switch (m) {
case 1:
printf("Mon\n");
break;
case 2:
printf("Tue\n");
break;
case 3:
printf("Wed\n");
break;
default:
printf("other\n");
}
执行过程:算出 m 的值 → 跳到对应的 case → 往下执行,直到遇到 break。
二、break 不能漏
break 的作用是「跳出 switch」。漏写会发生贯穿(fall through):执行完当前 case,继续执行下一个 case 的语句。
switch (m) {
case 1: printf("A\n"); // 漏了 break
case 2: printf("B\n"); break;
}
m = 1 时会连着输出 A 和 B。有时这是刻意利用的特性(多个值共用一段代码),但初学阶段每个 case 都要写 break。
三、语法规则
switch括号里只能是整数或字符(不能是 double、不能是字符串);case后面必须是常量,不能写变量;case 1:后面是冒号,不是分号;default处理所有没列出的值,可以省略,但建议写。
四、什么时候用 switch,什么时候用 if
- 按「具体等于几」分支(1、2、3……)→
switch; - 按「范围」分支(大于 60、在 10 到 20 之间)→
if。
五、常见错误
-
漏
break; -
case 1;写成分号; -
switch (x)里的 x 是 double。 -
把月份分成三类:31 天的、30 天的、2 月的。
-
2 月的天数取决于是否闰年——上一题刚写过,可以复用那段判断。
自查:用
1926 8 → 31和2000 2 → 29验证,再用1900 2测一次(应为 28)。