专题四 分支和跳转(讲义)-《编程语言基础—C语言》(高教版第五版)高考备考讲练测(山东省)

2024-06-13
| 13页
| 206人阅读
| 7人下载
精品

资源信息

学段 中职
学科 职教专业课
课程 C语言程序设计
教材版本 C语言程序设计高教版(第五版)全一册
年级 高一
章节 第3章 分支结构程序设计
类型 教案-讲义
知识点 分支结构
使用场景 中职复习-二轮专题
学年 2024-2025
地区(省份) 山东省
地区(市) -
地区(区县) -
文件格式 DOCX
文件大小 101 KB
发布时间 2024-06-13
更新时间 2024-06-13
作者 xkw__007
品牌系列 上好课·一轮讲练测
审核时间 2024-06-13
下载链接 https://m.zxxk.com/soft/45738150.html
价格 3.00储值(1储值=1元)
来源 学科网

内容正文:

专题四 分支和跳转(讲义) ---《编程语言基础—C语言》专题复习讲练测 [考纲要求] 1:理解关系表达式和逻辑表达式。 2:掌握条件语句(if语句)和多分支语句(switch语句)的用法。 [课时安排] 2课时 [知识梳理] 一:关系表达式和逻辑表达式 · 关系表达式 在C语言中,关系表达式用于比较两个值之间的关系,并根据比较结果返回一个布尔值,即1(真)或0(假)。 关系表达式如下图所示: 操作符 符号 描述 返回值(真/假) 等于 == 检查两边是否相等 相等返回1(真) 不等于 != 检查两边是否不相等 不等返回1(真) 大于 > 检查左边是否大于右边 大于返回1(真) 小于 < 检查左边是否小于右边 小于返回1(真) 大于等于 >= 检查左边是否大于或等于右边 大于等于返回1(真) 小于等于 <= 检查左边是否小于或等于右边 小于等于返回1(真) ① 等于 (==):检查两个操作数是否相等。 例如:5 == 5 返回 1(真),因为两边的值相等。 ② 不等于 (!=):检查两个操作数是否不相等。 例如:5 != 3 返回 1(真),因为两边的值不相等。 ③ 大于 (>):检查左边的操作数是否大于右边的操作数。 例如:10 > 5 返回 1(真),因为左边的值大于右边的值。 ④ 小于 (<):检查左边的操作数是否小于右边的操作数。 例如:5 < 10 返回 1(真),因为左边的值小于右边的值。 ⑤ 大于等于 (>=):检查左边的操作数是否大于或等于右边的操作数。 例如:10 >= 5 返回 1(真),因为左边的值大于或等于右边的值。 ⑥ 小于等于 (<=):检查左边的操作数是否小于或等于右边的操作数。 例如:5 <= 10 返回 1(真),因为左边的值小于或等于右边的值。 关系表达式通常用于控制流语句(如if语句)中,以决定程序的执行流程。 int a = 5; int b = 10; if (a < b) {   // 如果a小于b,则执行这里的代码 printf("a is less than b "); } a < b是一个关系表达式,如果a的值小于b的值,表达式的结果是1(真),if语句中的代码块将被执行。如果a的值不小于b,表达式的结果是0(假),代码块将被跳过。 · 逻辑表达式 C语言中的逻辑表达式用于组合多个关系表达式或逻辑值,并返回一个布尔值(1 表示真,0 表示假)。逻辑表达式如下图所示: 操作符 符号 描述 示例 返回值(真/假) 逻辑与 && 当两个操作数都为真时,结果为真 (5 > 3) && (10 < 20) 真(1) 逻辑或 || 当两个操作数只要有一个操作数为真时,结果为真 (2>3)||(5<9) 如果至少有一个操作数为真,则结果为真 逻辑非 ! 反转操作数的真假值 !(5 == 3) 真(1) ① 逻辑与 (&&):当两个操作数都为真时,结果为真。 例如:(5 > 3) && (10 < 20) 返回 1(真),因为两个条件都为真。 ② 逻辑或 (||):如果至少有一个操作数为真,则结果为真。 例如:(5 > 3) || (10 > 20) 返回 1(真),因为第一个条件为真。 ③ 逻辑非 (!):反转操作数的真假值。如果操作数为真,则结果为假;如果操作数为假,则结果为真。 例如:!(5 == 3) 返回 1(真),因为 5 == 3 为假。 二:条件语句(if语句) (1)if语句 C语言的基本if语句是控制流语句中的一种,用于基于条件执行代码。 · 基本语法 if语句的基本语法如下: if (条件表达式) {     // 条件为真时执行的代码块 } 在C语言中,非零值通常被解释为真值(true)。这意味着任何非零的数值(包括正数和负数)在布尔上下文中都被视为真。相反,零值(0)被解释为假值(false)。 当if语句的条件表达式计算结果为非零值时,条件被认为是真的,花括号内的代码块将被执行。如果结果为零,则条件被认为是假的,代码块将被跳过。 · 条件表达式 条件表达式可以是任何返回布尔值的表达式,例如: ①:比较运算符:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于) ②:逻辑运算符:&&(逻辑与)、||(逻辑或)、!(逻辑非) ③:位运算符:&(位与)、|(位或)、^(位异或)、~(位非) ④:其他表达式,如函数调用等 · 举例: int x = 5; if (x > 3) { printf("x is greater than 3 "); } 在这个例子中,如果x的值大于3,将打印出相应的消息。 · 复合语句 if语句可以包含多个语句,这些语句需要用花括号{}包围: if (x > y) { printf("x"); x = x - 1; // 将x的值减1 } (2)if...else语句 C语言中的if...else语句是一种基本的控制流结构,它允许程序根据条件的真假来选择执行两个不同的代码块。 · 基本语法 if (条件表达式) {     // 条件为真时执行的代码块 } else {    // 条件为假时执行的代码块 } 当if...else语句被执行时,程序会首先计算条件表达式的值: 如果condition的值为真(非零),则执行if语句块中的代码。 如果condition的值为假(零),则跳过if语句块中的代码,执行else部分的代码。 int x = 10; int y = 5; if (x > y) { printf("x 大于 y "); } else { printf("x 不大于 y "); } 因为x的值(10)大于y的值(5),所以会执行if语句块中的代码,打印出"x 大于 y"。 (3)if语句嵌套 C语言中的if语句可以嵌套使用,即在一个if语句块内部再使用一个或多个if语句。这种嵌套可以用于创建复杂的条件逻辑,根据不同的条件执行不同的代码块。 · 基本语法 if (条件表达式1) { // 条件1为真时执行的代码块 if (条件表达式2) { // 条件1和条件2都为真时执行的代码块 } else {        // 条件1为真,但条件2为假时执行的代码块 } } else {     // 条件1为假时执行的代码块 } · 示例 1. int x = 10; 2. int y = 5; 3. int z = 3; 4. 5. if (x > y) { 6.     printf("x 大于 y "); 7.     if (y > z) { 8.         printf(" y 大于 z "); 9.     } 10. } else { 11.   printf("x 不大于 y "); 12. } 首先检查x是否大于y,如果是,程序进入第一个if语句块,并打印"x 大于 y"。然后,程序进一步检查y是否大于z,如果是,执行第二个if语句块,并打印" y 大于 z"。 (4)条件表达式 C语言中的条件表达式,通常称为三元运算符,它是一种简洁的条件选择语句。 · 基本语法 1. 表达式1 ?表达式2 : 表达式3 ①:表达式1:条件表达式,它是一个逻辑表达式,结果为真(非零)或假(零)。 ②:表达式2:如果条件表达式(表达式1)的结果为真,则执行这个表达式。 ③:表达式3:如果条件表达式(表达式1)的结果为假,则执行这个表达式。 举例: 1. #include <stdio.h> 2. 3. int main() { 4.     int a = 10; 5.     int b = 20; 6.     int max = (a > b) ? a : b; 7.     printf("最大值是 %d ", max); 8.     return 0; 9. } 在这个例子中,a > b 的结果是假(因为 10 不大于 20),所以表达式 (a > b) ? a : b 的结果是 b,即20。 · 注意事项 ① 条件表达式可以嵌套使用。 ② 条件表达式通常用于简单的条件选择,如果条件逻辑较为复杂,建议使用 if-else 语句。 · 扩展:条件运算符的扩展形式 C99标准引入了条件运算符的扩展形式,允许在条件表达式中包含更多的逻辑运算符,例如: 表达式1 ? 表达式2 : (表达式3 ? 表达式4 : 表达式5) 如果 表达式1 为真,则结果为 表达式2;如果 表达式1 为假,则再次进行条件判断,表达式3 为真则结果为 表达式4,否则结果为 表达式5。 三:switch语句 C语言中的switch语句是一种多路选择语句,它允许程序根据变量或表达式的值来选择执行多个代码块中的一个。 · 基本语法 1. switch (expression) { 2.     case constant_expression1: 3.         // 代码块1 4.         break; 5.     case constant_expression2: 6.         // 代码块2 7.         break; 8.     ... 9.     default: 10.         // 默认代码块(可选) 11.         break; 12. } 基本标签: · 表达式(expression):switch语句中的表达式可以是任何整型或字符型表达式。这个表达式的结果将与case标签中的常量表达式进行比较。 · case标签(constant_expression):case后面跟着的是一个常量表达式,它必须是一个整型或字符型表达式。switch语句会从上到下检查每个case,直到找到与表达式结果匹配的case。 · 代码块:每个case后面跟着的是一个或多个要执行的语句。如果case匹配,就会执行该case下的所有语句,直到遇到break语句。 · break语句:break语句用于终止switch语句的执行,防止执行流程继续滑落到下一个case。如果没有break,程序会继续执行下一个case的代码块。 · default标签:default是一个可选的标签,它在没有匹配的case时被执行。default可以出现在switch语句的任何位置,但通常放在最后。 举例: 1. #include <stdio.h> 2. 3. int main() { 4.     int month = 4; 5.     switch (month) { 6.         case 1: 7.             printf("January"); 8.             break; 9.         case 2: 10.             printf("February"); 11.             break; 12.         case 3: 13.             printf("March"); 14.             break; 15.         case 4: 16.             printf("April"); 17.             break; 18.         default: 19.             printf("Invalid month"); 20.     } 21.     return 0; 22. } 在这个例子中,month变量的值为4,switch语句会匹配到case 4,并打印出"April"。 · 注意事项 ①:switch语句中的expression和case标签的常量表达式都必须是整型或字符类型。 ②:如果case后没有break,程序会继续执行下一个case的代码块,即使它们不匹配。 ③:default可以省略,如果省略,且没有匹配的case,switch语句将不做任何操作。 ④:switch语句可以嵌套使用。 [真题练讲] 1.(2020职教高考题)以下程序段的运行结果是( ) int a = 1,b = 0L,t; t = (a>b)||++a&&b++; printf(“%d,%d,%d ”,t,a,b); A.0,2,0 B.0,2,1 C.1,1,0 D.1,2 【答案】C 【解析】初始时,a的值为1,b的值为0L。(a > b) 为真,因为1大于0。由于||运算符的短路特性,表达式(a > b) || (++a && b++)在此处停止计算,++a和b++不会被执行。 因此,t被赋值为1,a的值保持为1,b的值保持为0L。所以,表达式printf("%d,%d,%d ", t, a, b);的输出将是1,1,0。 2.(2018职教高考题)以下程序段的运行结果是( ) int x,y,z,d; x = 2;y = 3;z = 5; d = z > y > x && ++y; printf(“%d,%d ”,d,y); A.0,4 B.1,4 C.0,3 D.1,3 【答案】C 【解析】x初始化为2,y初始化为3,z初始化为5。表达式z > y的结果是假(因为5不大于3)。由于关系运算符>的结果是假(0),它会被隐式地转换为整数0。然后0 > x进行比较,x的值是2,所以表达式0 > x的结果是假。由于&&运算符要求两边都为真整个表达式才为真,这里左边已经是假,所以&& ++y不会执行(短路求值)。因此,d被赋值为0,y的值保持为3不变。所以,printf("%d,%d ", d, y);的输出将是0,3。 3.(2019年职教高考题)以下程序段的运行结果是( ) char a = ‘t’; a = (a>=’a’&& a<’z’)?(a - ‘a’+’A’):a; printf(“%c ”,a); A.t B.T C.a D.A 【答案】B 【解析】首先检查a是否大于等于'a'并且小于'z'。在这个例子中,'t'确实在这个范围内。 如果条件为真,执行表达式(a - 'a' + 'A')。这里的操作是将a从'a'开始的ASCII值减去,然后加上'A'的ASCII值,从而将小写字母转换为大写字母。由于't'在ASCII表中对应的值是116,'a'的ASCII值是97,'T'的ASCII值是84。计算(116 - 97) + 65得到84,即'T'的ASCII值。因此,a的值被更新为'T'。最后,printf函数打印出a的值,即大写的'T'。 4.(2020年职教高考题)若x、y、w均是int型变量,以下正确的switch 语句是( ) A.switch x { case 10:w=x+y;break; case 11:w=y-x;break; default;w=x*y; } B.switch(x+y) { case 11:w=y-x,break; case 10:w=x+y;break; default:w=x*y;) } C.switch(x*y) { case 1:w=x十y; case 2:w=y-x;break; case 1+1:w=x*y;break;} D.switch(x) { case x:w=x十y;break; case y:w=y-x;break; default;w=x*y; } 【答案】B 【解析】A选项:switch后面应该是一个括号包围的表达式,而不是单个变量。C选项:标号有重复,如2和1+1。D选项:标号不应该是变量。 5.(2020年职教高考题)若有定义语句char ch='0',则表达式ch++? -5%-2:ch>'a'?5%-2:-5/2的值为( ) A.-2 B.-1 C.1 D.2 【答案】B 【解析】ch++:这是一个后缀递增运算符,意味着ch的值在使用后会增加1。但在这个表达式的上下文中,由于ch++作为条件表达式的一部分,其值在比较时仍然是原始值48。-5 % -2:这是求模运算,-5除以-2的余数是1。ch > 'a':由于ch的初始值是48,而'a'的ASCII码值是97,所以这个条件是假。5 % -2:这是求模运算,5除以-2的余数是1。-5 / 2:这是整数除法,-5除以2的结果是-2。代入原始表达式:由于ch++(即48)不等于0,所以第一个条件为真,我们选择-5 % -2,其值为-1。 6.(2020年职教高考题)以下程序段的运行结果是( ) int a=5,b=4,c=2,d=1; if(a>b>c)d=3; else d--; printf("%d ",d); A.0 B.1 C.2 D.3 【答案】A 【解析】a的值为5,b的值为4,c的值为2。首先计算(a>b),结果为真(因为5大于4),然后这个结果被隐式地转换为1。接着计算(1 > c),结果为假(因为1不大于2)。由于if语句的条件(a>b) > c的结果是假,它将执行else分支的代码,即d--。d的初始值为1,执行d--后,d的值变为0。最后,printf("%d ",d);将打印d的值,即0。 [限时练习] 1.下面程序段的运行结果是( ) int main() { int a = 5, b = 4, c = 3, d = 2; if (a > b > c) printf("%d ", d); else if ((c - 1 >= d) == 1) printf("%d ", d + 1); else printf("%d ", d + 2); return 0; } A.2 B.3 C.4 D.编译时有错,无结果 【答案】B 【解析】a的值为5,b的值为4,c的值为3,d的值为2。if语句中的条件a > b > c实际上是(a > b) > c。首先比较a和b,因为5大于4,结果为真,转换为1。然后比较1和c,因为1不大于3,所以整个条件为假。由于if条件为假,程序将执行else if语句。 else if语句的条件是((c - 1 >= d) == 1)。计算c - 1得到2,然后比较2和d(也是2),结果是真,转换为1。因为条件等于1,所以条件为真。由于else if条件为真,程序将执行printf("%d ", d + 1);,打印出d + 1的值,即3。 2.在执行以下程序时,为使输出结果为:t=4,则给a和b输入的值应满足的条件是( ) int main(void) { int a,b,s,t; scanf("%d,%d",&a,&b); s = 1; t = 1; if(a > 0) s = s + 1; if(a > b) t = s + t; else if(a == b) t = 5; else t = 2 * s; printf("t=%d ",t); return 0; } A.a>b B.a<b<0 C.0<a<b D.0>a>b 【答案】C 【解析】if(a > 0) s = s + 1; 这行代码会在 a 大于0时,将 s 的值增加1。初始时 s 的值为1,如果 a 大于0,s 将变为2。接下来,程序检查 a 和 b 的关系:如果 a > b,则 t 被设置为 s + t 的值。由于此时 s 至少为2(因为 a > 0),t 将至少为3(因为 t 的初始值为1)。如果 a == b,则 t 被设置为5。如果 a < b,则 t 被设置为 2 * s。如果 s 为2(a > 0),t 将被设置为4。因此,为了得到 t=4 的输出,a 必须小于 b 且 a 必须大于0,这样 s 将增加到2,然后 t 将被设置为 2 * s 的结果,即4。选项中描述 a 和 b 的条件是:A. a > b —— 这会导致 t 至少为3。B. a < b < 0 —— 这是不可能的,因为 a 不能同时小于 b 且小于0。C. 0 < a < b —— 这符合我们的条件,a 大于0且小于 b。D. 0 > a > b —— 这是不可能的,因为 a 不能同时小于 b 且大于0。 3.输入一个整数,判断这个整数是奇数还是偶数 【答案】 #include <stdio.h> int main() { int num; printf("请输入一个整数:"); scanf("%d", &num); // 读取用户输入的整数 if (num % 2 == 0) { printf("这是一个偶数。 "); } else { printf("这是一个奇数。 "); } return 0; } 4.输入一个字符,若是大写字母则转换为对应的小写字母并输出,若是小写字母则转换为对应的大写字母并输出。 【答案】 #include <stdio.h> int main() { char ch; printf("请输入一个字符:"); scanf("%c", &ch); // 读取用户输入的字符 if (ch >= 'A' && ch <= 'Z') { // 判断是否为大写字母 ch = ch + ('a' - 'A'); // 转换为小写字母 } else if (ch >= 'a' && ch <= 'z') { // 判断是否为小写字母 ch = ch - ('a' - 'A'); // 转换为大写字母 } else { printf("这不是字母。 "); return 0; } printf("转换后的字符是:%c ", ch); return 0; } 【归纳小结】 C语言的分支语句主要包括if、else、if-else和switch-case结构,它们基于条件表达式来控制代码的执行流程。条件运算符(三元运算符)提供了一种简洁的方式来在两种操作之间进行选择。 学科网(北京)股份有限公司 $$

资源预览图

专题四 分支和跳转(讲义)-《编程语言基础—C语言》(高教版第五版)高考备考讲练测(山东省)
1
专题四 分支和跳转(讲义)-《编程语言基础—C语言》(高教版第五版)高考备考讲练测(山东省)
2
专题四 分支和跳转(讲义)-《编程语言基础—C语言》(高教版第五版)高考备考讲练测(山东省)
3
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。