一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
选择结构的嵌套
在if语句中又包含多个if语句称为if语句的嵌套(nest)
if语句的第3种形式就属于if语句的嵌套,其一般形式如下:
if () {
if () 语句1 // 内嵌if
else 语句2 // 内嵌if
} else {
if () 语句3 // 内嵌if
else 语句4 // 内嵌if
}
用switch语句实现多分枝选择结构
switch 语句是多分支选择语句。
示例:
// 按照成绩的等级输出百分制分数段 A: >85 B: 70 ~ 84 C : 60 ~69 D: <60
char grade;
scanf("%c", &grade);
printf("Your score:");
switch (grade) {
case 'A':
printf("85 ~ 100\n");
break;
case 'B':
printf("70 ~ 84\n");
break;
case 'C':
printf("60 ~ 69\n");
break;
case 'D':
printf("< 60\n");
break;
default:
printf("enter data error!\n");
}
switch语句的 一般形式:
switch(表达式)
{
case 常量1: 语句1;
case 常量2: 语句2;
. .
. .
. .
case 常量n: 语句n;
default: 语句 n + 1
}
- "表达式" 其值的类型应为整数类型(包括字符型)
- switch下面的花括号内是一个复合语句。包括若干语句,是switch语句的语句体
- 可以没有default标号,如果没有与switch表达式相匹配的case常量,则不执行任何语句,流程转到switch语句的下一个语句。
- 各个case标号出现次序不影响执行结构。
- 每一个case常量必须互不相同
- case标号只起到标记的作用。在执行switch语句时,根据表达式的值找到匹配的入口标号,并不在此进行条件检查,在执行完一个case标号后面的语句后,就从此标号开始执行下去,不再进行判断。如上述示例中,如果没有break语句,将连续输出:
- 在case子句中的执行语句,可以不用花括号括起来
- 多个case标号可以共用一组执行语句,例如
case 'A':
case 'B':
case 'C': printf(">60 \n"); break;
.
.
.
注意: 一般情况下,在执行一个case子句后,应当用break语句使流程跳出switch结构,即终止switch语句的执行。最后一个case子句(今为default子句)中可不必加break语句,因为流程已到了switch结构的结束处。
选择结构综合举例
- 写一程序,判断某一年是否为闰年。
#include <stdio.h>
int main() {
int year, leap;
printf("enter year:");
scanf("%d", &year);
// 方法1
// if (year % 4 == 0) {
// if (year % 100 == 0) {
// if (year % 400 == 0) {
// leap = 1;
// } else {
// leap = 0;
// }
// } else {
// leap = 1;
// }
// } else {
// leap = 0;
// }
// 方法2
// if (year % 4 != 0) leap = 0;
// else if (year % 100 != 0) leap = 1;
// else if (year % 400 != 0) leap = 0;
// else leap = 1;
// 方法3
if ((year %4 == 0 && year % 100 != 0) || year % 400 == 0) leap = 1;
else leap = 0;
if (leap) printf("%d is", year);
else printf("%d is not", year);
printf(" a leap year.");
return 0;
}