3.5 if语句和switch语句的嵌套形式

3.5.1 if语句的嵌套

允许在if语句中包含一个或多个if的语句,称为if的语句嵌套。如图:

#include <stdio.h>

int main() {
	int gameover = 0;
	int player = 0;
	scanf_s("%d %d", &gameover, &player);
	if (gameover == 0) {
		if (player == 2) {
			printf("my turn\n");
		}
		else {
			printf("your turn\n");
		}
	}
	else {
		printf("game over\n");
	}
	return 0;
}

注意:if一定一定要与else配对,且遵从就近原则(else与离它最近的if匹配),否则要加大括号表明。另外,一个if对应一个else。
语义:计算表达式,判断非零为真,零为假
底层:顺序判断,从上到下依次求值,满足就走对应分支(可以画流程图解决);else if 是串行判断。
else if和else的区别:else if前面条件不符合时候判断的其它情况,else放在末尾,当前面所有的if和else if都不能被满足时候使用的兜底分支,与前面的条件互斥。它们只要有一个分支命中,后面所有分支直接跳过,不会继续判断。

3.5.2 switch语句的嵌套

在switch语句中,可以包含另一个switch语句。
switch-case:(上课时候的笔记)
1、控制表达式只能是整数型的结果,if是不限数据类型的
2、常量可以是常数,也可以是常数计算的表达式
3、根据表达式的结果,寻找匹配的case,并执行case后面的语句,直到break为止
4、如果所有的case都不匹配,那么就执行default后面的语句;如果没有default,那么就什么都不做
break:(也是上课时候的笔记)
switch语句可以看作是一种基于计算的跳转,计算控制表达式的值后,程序会跳转到相匹配的case(分支标号)处。分支标号只是说明switch内部位置的路标,在执行完分支中的最后一条语句后,如果后面没有break,就会顺序执行到下面的case里去,直到遇到一个break或者switch结束为止。

#include <stdio.h>

int main(){
	int grade;
	printf("请输入百分制成绩:");
	scanf("%d", &grade);
	switch (grade) {
	case 10:
	case 9:
		printf("A");
		break;
	case 8:
		printf("B");
		break;
	case 7:
		printf("C");
		break;
	case 6:
		printf("D");
		break;
	default:
		printf("E");
		break;
	}
        return 0;
}

以下用两个流程图直观体现if语句和switch语句的区别,继续感谢AI的帮忙:

点击查看代码
flowchart TD A[开始] --> B{条件1成立?} B --是--> C[执行分支1] --> Z[结束] B --否--> D{条件2成立?} D --是--> E[执行分支2] --> Z D --否--> F{条件3成立?} F --是--> G[执行分支3] --> Z F --否--> H[else兜底分支] --> Z
点击查看代码
flowchart TD A[开始] --> B[计算表达式,得到整型val] B --> C{匹配case?} C --val==case1--> D[case1代码<br/>break跳出] --> Z[结束] C --val==case2--> E[case2代码<br/>break跳出] --> Z C --val==case3--> F[case3代码<br/>break跳出] --> Z C --都不匹配--> G[default兜底] --> Z
posted @ 2026-11-05 20:21  琬露_Willow  阅读(2)  评论(0)    收藏  举报