内容正文:
目录/CONTENTS
1.
分支结构概念与关系、逻辑表达式
2.
if语句
3.
switch语句与break、continue关键字
1
考纲分析与历年考试试题分析
利用if语句、switch语句实现分支结构的程序设计
输入一个整数,判断它是奇数还是偶数,并输出结果。
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
// 判断奇偶性(处理负数情况)
if (n % 2 == 0) {
printf("偶数
");
} else {
printf("奇数
");
}
return 0;
}
2
关系与逻辑表达式
山东省计算机类高考技能教学
3
分支结构的概念
在 C 语言中,分支结构(选择结构)是一种根据条件判断结果来决定执行不同代码路径的逻辑结构,类似于现实中的 “十字路口”,让程序能根据不同情况做出选择。
类比生活场景:
"如果今天下雨,就带伞;否则不带伞" → 这就是典型的分支逻辑
关系表达式
与
逻辑表达式
关系表达式:比较大小与条件判断
定义:通过关系运算符比较两个操作数的大小关系,结果为逻辑值(真或假)。
在 C 语言中,逻辑值用整数表示:
真:非 0 值(如 1、5、-3 等)
假:0
注意:
==(等于) vs =(赋值):
a == 5 是判断 a 是否等于 5(关系运算);
a = 5 是将 5 赋值给 a(赋值运算)。
常见错误:误将 if (a == 0) 写成 if (a = 0),导致逻辑错误。
关系运算符列表
关系表达式的运算规则
表达式格式:
操作数1 关系运算符 操作数2
例:x > y、a + b <= c - d、ch != 'A'。
结果类型:整数(0 或 1)
int a = 3, b = 5;
printf("%d
", a > b); // 输出0(假)
printf("%d
", a != b); // 输出1(真)
优先级
与
结合性
优先级
高于赋值运算符(=),低于算术运算符。
例:3 + 2 > 4 等价于 (3+2) > 4,结果为 1(真)。
结合性(从左到右)
int x = 10;
x > 5 > 3 // 等价于 (10>5)>3 → 1>3 → 0(假)
逻辑表达式:组合多个条件
定义:
通过逻辑运算符将多个关系表达式或逻辑值组合起来,形成更复杂的条件判断。
结果仍为逻辑值(0 或 1)。
逻辑运算符的运算规则
逻辑与(&&)
规则:仅当左操作数和右操作数都为真时,结果为真(1),否则为假(0)。
示例:
int a = 5, b = 3, c = 0;
printf("%d
", a > 0 && b < 5); // 5>0为真,3<5为真 → 结果1(真)
printf("%d
", a > 10 && b < 2); // 5>10为假,直接短路,结果0(假)
逻辑或(||)
规则:当左操作数或右操作数至少一个为真时,结果为真(1),否则为假(0)。
示例:
int a = 5, b = 3, c = 0;
printf("%d
", a < 0 || b > 2); // 5<0为假,3>2为真 → 结果1(真)
printf("%d
", a > 0 || c++ > 5); // a>0为真,直接短路,c不参与运算 → 结果1(真)
逻辑非(!)
规则:对操作数的真假取反:若操作数为真(非 0),结果为假(0);若为假(0),结果为真(1)。
示例:
int a = 5, b = 0;
printf("%d
", !a); // 5为真 → 取反后0(假)
printf("%d
", !b); // 0为假 → 取反后1(真)
短路求值(重要!)
逻辑与(&&):若左操作数为假,右操作数不会执行(因为结果已确定为假)。
int x = 1, y = 2;
(x == 0) && (y++ > 0); // x==0为假,y++不执行,y仍为2
逻辑或(||):若左操作数为真,右操作数不会执行(因为结果已确定为真)。
int x = 1, y = 2;
(x == 1) || (y++ > 0); // x==1为真,y++不执行,y仍为2
逻辑运算符
的
关键特性
运算符优先级
!(逻辑非)优先级最高,高于算术运算符和关系运算符。
例:!a == b 等价于 (!a) == b。
&& 的优先级高于 ||,但低于关系运算符。
例:a > b && c < d || e == f 等价于 (a > b && c < d) || (e == f)。
建议用括号明确运算顺序,避免错误。
逻辑值与数值的转换:
在 C 语言中,非 0 值视为真(逻辑结果为1),0 值视为假(逻辑结果为0)。
例:int a = 3; if (a) { ... } 等价于 if (a != 0)。
区分逻辑运算符与位运算符:
&& 和 || 是逻辑运算符,用于判断真假;
& 和 | 是位运算符,用于二进制位运算;
注意事项
if语句
山东省计算机类高考技能教学
16
单分支if语句
if (条件表达式) {
条件为真(非0)时执行的代码块
}
执行逻辑:先计算条件表达式的值,若为真(非 0),则执行大括号内的代码;若为假(0),则跳过代码块。
关键点说明
条件表达式:可以是关系表达式(如a > b)、逻辑表达式(如x && y)或数值(非 0 即真)。
代码块规范:若代码块仅含一条语句,大括号可省略(但建议保留,避免漏写)。
// 规范写法(推荐)
if (score >= 60) {
printf("及格!");
}
// 省略大括号的写法(仅一条语句时允许)
if (temperature < 0) printf("结冰警告!");
if (条件表达式) {
// 条件为真时执行的代码块
} else {
// 条件为假时执行的代码块
}
执行逻辑:若条件为真,执行if代码块;否则,执行else代码块(二者必选其一)。
适用场景:二选一的场景(如:判断性别、区分奇偶)。
关键点说明
else的位置:必须紧跟在if代码块之后,中间不能插入其他语句。
避免逻辑错误:条件表达式需覆盖所有可能情况(如:判断奇偶时,num%2==1为真则奇数,否则偶数)。
多分支if-else if-else语句
if (条件1) {
// 条件1为真时执行
} else if (条件2) {
// 条件1为假且条件2为真时执行
} else if (条件3) {
// 条件1、2为假且条件3为真时执行
}
...
else {
// 以上所有条件都为假时执行(可选)
}
执行逻辑:按顺序判断条件,一旦某个条件为真,执行对应代码块,后续条件不再判断;若所有条件为假,执行else代码块(若无else,则不执行任何分支)。
适用场景:多条件分级处理(如:成绩等级、商品折扣、季节判断)。
关键点说明
条件顺序:优先判断范围小或优先级高的条件(如:判断成绩等级时,先判断>=90再判断>=80)。
避免冗余判断:后续条件无需重复前序条件的相反情况(如:else if隐含 “前序条件为假”)。
switch语句与break、continue关键字
山东省计算机类高考技能教学
23
switch 语句的语法结构
基本语法格式:
switch (表达式) {
case 常量表达式1:
语句块1;
[break;] // 可选,用于跳出switch结构
case 常量表达式2:
语句块2;
[break;]
...
default: // 可选,处理所有case都不匹配的情况
语句块n;
[break;]
}
关键规则
表达式类型:通常为整数类型(如int、char)或枚举类型,不能是浮点数或变量。
常量表达式:
每个case后的常量表达式必须是唯一的(不能重复)。
常量表达式的值必须与switch表达式的类型兼容(如int类型表达式对应case 1、case 'a'等)。
执行流程:
①计算switch表达式的值。
②按顺序匹配case后的常量表达式,找到匹配项后执行对应语句块。
③若未遇到break,会继续执行后续所有case的语句块,直到switch结束或遇到break。
④若所有case都不匹配,执行default(若存在)。
break 关键字的作用
跳出当前 switch 结构:当执行到break时,立即终止switch语句的执行,跳转到switch后的下一条语句。
避免穿透效应:若没有break,程序会从匹配的case开始,依次执行后续所有case和default的语句块(即使不匹配),这种现象称为 “穿透”。
示例(无 break,穿透现象)
int num = 2;
switch (num) {
case 1:
printf("One
");
case 2:
printf("Two
"); // 匹配,继续执行下一个case
case 3:
printf("Three
"); // 无break,继续执行
default:
printf("Other
");
}
// 输出:Two
Three
Other
示例(有 break)
int num = 2;
switch (num) {
case 1:
printf("One
");
break; // 跳出switch
case 2:
printf("Two
"); // 匹配,执行后跳出
break;
default:
printf("Other
");
}
// 输出:Two
continue 关键字的作用
跳过本次循环的剩余语句:仅用于循环结构(如for、while、do-while),而非switch语句。
继续下一次循环:执行continue后,程序会立即跳转到循环条件判断处,开始下一次循环。
break 与 continue 的核心区别
switch 语句中误用 continue 的情况
错误示例(编译会报错):
switch (num) {
case 1:
continue; // 错误!continue不能用于switch
// ...
}
if和switch结构
适用场景对比
谢 谢 观 看
32
$$