课课通C语言(计算机类)(第2版)课件 第3章 选择结构程序设计_第1页
课课通C语言(计算机类)(第2版)课件 第3章 选择结构程序设计_第2页
课课通C语言(计算机类)(第2版)课件 第3章 选择结构程序设计_第3页
课课通C语言(计算机类)(第2版)课件 第3章 选择结构程序设计_第4页
课课通C语言(计算机类)(第2版)课件 第3章 选择结构程序设计_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课课通C语言(第2版)TALK第3章选择程序结构设计考纲要求★掌握if语句。★理解switch语句如何实现多分支选择。★理解选择结构的嵌套。★运用选择结构的知识,解决一些实际问题。考纲要求LEARNINGOBJECTIVES★掌握if语句熟练掌握if条件语句的基本语法结构,能够独立编写单分支与双分支的判断代码。★理解switch多分支深入理解switch语句的执行逻辑,掌握在多条件分支场景下的最佳实践与应用。★掌握结构嵌套技巧透彻理解选择结构的嵌套原理,能够清晰分析多层if-else嵌套代码的执行顺序与逻辑。★综合运用解决问题灵活运用所学的选择结构知识,能够将理论转化为实践,独立解决实际的编程判断问题。本章目录CONTENTS013.1if语句深入掌握if语句的单分支、双分支及多分支三种基本形式,理解其底层的执行逻辑与程序流向。023.2switch语句学习switch语句如何高效实现多分支选择结构,并重点掌握break关键字在跳出分支流程中的核心作用。033.3分支语句嵌套掌握if与if、if与switch语句的多层嵌套使用方法,学会处理现实中更复杂的条件逻辑判断场景。043.4分支结构程序设计应用综合运用本章所学的选择结构核心知识,通过经典的“计算器”、“成绩判定”等案例解决实际编程问题。3.1if语句THEBRANCHINGPATHOFLOGIC3.1if语句

1.掌握if语句的一般格式。2.理解if语句的执行过程。3.会用if语句设计基本程序。3.1if语句

1.掌握if语句的一般格式。2.理解if语句的执行过程。3.会用if语句设计基本程序。3.1.1if语句概述💡核心定义if语句是编程中选择结构的基础形式,它通过对给定的逻辑条件进行真假判断,从而决定程序后续执行哪一段代码块,实现了程序的“自主决策”能力。🎯本节学习目标掌握语法格式熟记if语句的标准书写结构,包括关键字、条件表达式与执行体的规范写法。理解执行逻辑深入理解“条件判断”的机制,清楚程序在条件成立与不成立时的不同执行路径。动手编写程序结合具体的业务场景,独立使用if语句设计并实现简单的分支控制程序。3.1.2if语句的形式(一):不含else的if语句01/一般格式if(表达式){执行这条语句;}📌表达式说明:通常为关系/逻辑表达式,也可是任意合法表达式,结果非0即为真。⚠️核心注意:表达式后不能加分号!否则会被识别为“空语句”,导致逻辑错误。02/执行过程Step1.计算先算出表达式的值(0或非0)Step2.若为“真”执行if后的语句块Step3.若为“假”跳过语句,执行后续代码03/流程图示▶程序开始表达式值为真?YES执行内嵌语句NO◀结束/继续3.1.2if语句的形式(二):if…else语句01/语法一般格式if(表达式){语句A;}else{语句B;}包含两个分支的选择结构。当表达式成立时执行A,不成立时执行B。02/程序执行逻辑①计算表达式的布尔值②若为真(非0),执行语句A③若为假(0),执行语句B核心特点:A与B两个分支,有且仅有一条会被执行。03/执行流程图示程序开始表达式成立?执行语句A执行语句B3.1.2if语句的形式(三):if…elseif…else语句💻一般格式(CodeFormat)if(表达式1){语句1;//满足条件1时执行}elseif(表达式2){语句2;//满足条件2时执行}...else{语句n+1;//都不满足时执行}注:这是C语言中处理多分支条件判断最常用、最规范的书写结构,能够清晰地表达逻辑流向。🔍执行过程(ExecutionFlow)自上而下扫描:程序会从第一个if开始,依次计算每个“表达式”的值。遇真即行,随即跳出:一旦某个表达式为真,执行对应语句后,立刻结束整个if结构。全盘皆假,执行Else:如果所有if/elseif的表达式都为假,则执行else分支的语句。💡核心特点:所有分支中,有且仅有一条语句会被执行例题解析【例3-1-1】在C语言中,if语句用作判断的表达式()。A.必须是逻辑表达式 B.必须是关系表达式C.必须是算术表达式 D.可以是任意合法的表达式例题解析【例3-1-1】-答案与解析CORRECTANSWERD本题考查if语句判断逻辑📝核心解析Analysis本题主要考查if语句的一般格式及其逻辑判断。在C语言中,if后的判断表达式非常灵活,可以是关系表达式、逻辑表达式,甚至是普通的算术表达式等任意合法的表达式。C语言判断真假的核心标准是:计算结果非0则为真,0则为假。这是区别于自然语言逻辑的重要考点。💡避坑指南Tip:不要误以为if条件只能是关系或逻辑表达式。一个单独的变量(如if(a))或常量(如if(5))都是合法的,程序会自动将其值与0进行比较。例题解析【例3-1-2】题目描述若给定C语言表达式:(k)?a++:--a,在逻辑运算规则下,下列选项中与其条件表达式`k`逻辑等价的是()。Ak==0逻辑假判断:仅当k为0时成立Bk==1狭义真判断:仅当k为1时成立Ck!=0广义真判断:C语言中“非0即真”Dk!=1排除判断:当k不为1时成立例题解析【例3-1-2】-答案与解析本题正确答案C逻辑判断等价原则💡核心逻辑解析三元运算符`(表达式)?语句1:语句2`的核心逻辑是“真则执行语句1,假则执行语句2”。在C语言的语法规则中,表达式`k`为真的唯一条件是`k`的值不等于0。因此,`k`与`k!=0`在逻辑判断上是完全等价的。当k=5(非0)表达式`k`为真,`k!=0`也为真当k=0(零值)表达式`k`为假,`k!=0`也为假结论:在C语言条件判断中,变量k完全等价于k!=0例题解析【例3-1-3】题目要求下列选项中,满足当变量k的值为奇数时,表达式运算结果为真的是哪一个?A判断k除以2的余数是否为0。

逻辑含义:k是偶数时结果为真。B(k/2*2-k)!=0

逻辑含义:k无法被2整除时结果为真。C!(k%2)

逻辑含义:对余数取反,即k是偶数时结果为真。D!k%2!=0

逻辑含义:先对k取非,再取余,结果不稳定。例题解析【例3-1-3】-答案与解析本题正确答案B选项A:偶数判定陷阱k%2==0奇数除以2余数恒为1,表达式结果为假,不符合题意。选项B:整数运算特性(k/2*2-k)!=0利用整数除法“舍去小数”特性,奇数运算后差值非0,结果为真。选项C:逻辑非取反!(k%2)奇数k%2结果为1(真),取反后结果为假。选项D:运算符优先级!k%2!=0!优先级最高,奇数k取反为0,0%2=0,最终结果为假。💡核心考点:整数除法的取整特性、取余运算规则,以及逻辑非(!)与算术运算符的优先级关系。例题解析【例3-1-4】需求:编写程序,实现从键盘输入两个整数,通过条件判断逻辑,输出这两个数中的大数。核心解题思路变量定义:定义整型变量a,b存储输入值,max存储最大值。条件判断:使用if-else双分支语句,比较a和b的数值大小。赋值运算:将判断出的较大数值,通过赋值语句赋给变量max。结果输出:使用printf函数打印输出max的最终值。参考代码实现(C)#include<stdio.h>intmain(){//主函数入口inta,b,max;//定义三个整型变量printf("Inputa,b:");scanf("%d%d",&a,&b);if(a>=b)max=a;elsemax=b;printf("Max=%d\n",max);//输出最大值return0;}巩固练习3.1-程序阅读题题目01·基础逻辑判断阅读下方C语言代码,分析程序执行流程,写出最终运行结果。#include<stdio.h>main(){inta=0,b=-1,c=2;if(a){if(b<0)c=0;}elsec++;printf("%d",c);}运行结果:_______________________题目02·嵌套条件分支阅读下方C语言代码,分别填入输入指定值后的运行结果。#include<stdio.h>main(){inta,b=1;scanf("%d",&a);if(a>1){if(a>3)b+=2;elseb+=1;}elseb=1;printf("%d",b);}输入“1”时,运行结果:____________输入“2”时,运行结果:____________巩固练习3.1-编程题06游泳馆门票全年按季度实施打折策略:

Q1打6折|Q2打8折

Q3不打折|Q4打8折

输入月份,计算门票费用(原价80元/人)。核心考点:多条件分支判断(if-elif-else)的嵌套应用。07旅行社优惠欧洲十日游组团优惠方案:

2~9人→九五折(12800元/人)

10~19人→九折

20人以上→八八折

输入人数n,计算总费用。核心考点:逻辑运算符的组合使用,以及数值区间的条件判断。08三数排序基础算法练习:

从键盘输入3个任意整数。

编写程序,将这三个整数按照从小到大的顺序输出。核心考点:变量交换机制,以及多个条件判断的逻辑嵌套。3.2switch语句SWITCHSTATEMENT3.2switch语句1.掌握switch语句的一般格式。2.理解switch语句的执行过程。3.理解break语句在switch语句中的作用。4.运用switch语句设计多分支结构程序。3.2.1switch语句概述switch语句,又称开关语句,是专门用于处理多分支结构的选择语句,能让复杂的条件判断逻辑变得更加直观、清晰。掌握核心格式熟记switch语句的标准语法结构,包括switch、case、default等关键字的书写规范。理解执行流程清晰梳理从“表达式计算”到“匹配case分支”再到“执行语句块”的完整代码执行步骤。掌握break作用重点理解break语句如何终止当前分支的执行,有效防止switch语句中出现的“贯穿”现象。实战程序设计能够独立运用switch语句解决实际问题,设计并编写处理多分支逻辑的完整程序代码。3.2.2switch语句的格式与执行C语言switch一般格式switch(表达式){case常量1:语句1;break;case常量2:语句2;break;//...更多case分支default:语句n+1;}核心要点:break语句用于跳出当前switch结构;default分支为可选,当所有case都不匹配时执行。程序执行流程解析STEP01:计算核心值优先计算switch关键字后括号内“表达式”的具体数值。STEP02:匹配分支常量将计算结果与每个case后面的“常量表达式”进行逐一比对。STEP03:匹配成功执行找到匹配项则从该case开始执行,直到遇到break或代码块结束。STEP04:无匹配执行default若无一匹配,则执行default后的语句(若存在)。3.2.3break语句的作用核心作用:跳出switch语句,强制终止当前的分支结构执行流程⚠️陷阱:缺少break导致的“穿透”现象intx=2;switch(x){

case1:printf("One");

case2:printf("Two");

case3:printf("Three");break;//仅在此处终止

}//输出结果:TwoThree程序会从匹配的case入口开始,忽略后续的case判断,

持续执行所有语句,直到遇到break或整个switch结束。✅规范:使用break精准控制分支intx=2;switch(x){

case1:printf("One");break;

case2:printf("Two");break;//执行后立即跳出

case3:printf("Three");break;

}//输出结果:Two在每个case分支的末尾添加break语句,

执行完当前分支逻辑后,会立即跳出switch结构,避免穿透。3.2.4switch语句的注意事项case后必须是常量值必须是整型或字符型,严禁使用变量、浮点数或逻辑范围(如>10)。case值不能重复同一switch结构中,所有case后的值必须唯一,否则会直接导致编译报错。case只起“标号”作用case不进行条件判断,它只是程序跳转的入口,匹配后会顺序执行后续代码。允许多个case共用语句利用switch的“穿透”特性,当一个case执行完没有break时,会继续执行下一个case的代码,从而实现代码复用。default子句是可选的default用于处理未匹配的情况,它的位置非常灵活,可以放在任意case之前或之后,不影响程序的最终执行结果。例题解析【例3-2-1】📝题目要求在下列C语言程序运行时,给定变量grade的初始值为字符'C'。请根据switch分支语句的逻辑,分析并写出程序运行后的最终输出结果。#include<stdio.h>intmain(){chargrade='C';//定义字符变量并赋值switch(grade){case'A':case'B':case'C':case'D':printf("及格\n");break;case'E':printf("不及格!\n";//无break语句}return0;}💡运行结果与解析输出结果:及格|逻辑:case'C'后无break,程序“贯穿”执行,直到遇到case'D'后的break才结束分支。例题解析【例3-2-1】-答案与解析运行结果判定及格利用Switch穿透特性

实现多条件复用逻辑核心逻辑解析变量grade初始值为'C',程序进入switch语句进行分支匹配。成功匹配到case'C',但该分支无break语句,触发switch特有的“穿透”机制。程序持续向下执行,直到遇到case'D'分支中的printf("及格\n");输出语句。执行输出后遇到break跳出循环。结论:输入A/B/C/D任一字符均输出“及格”。例题解析【例3-2-2】阅读以下C语言代码,分析并写出程序运行后的最终输出结果。📝程序代码展示#include<stdio.h>intmain(){intx=1,y=0,a=10,b=10;switch(x){case1:switch(y){//嵌套switchcase0:a--;break;case1:b--;break;}//注意:此处无break!case2:a--;b--;break;}printf("a=%d,b=%d\n",a,b);return0;}💡核心考点与思路解析1.嵌套switch语句的执行外层x=1进入case1,内层y=0进入case0,执行a--(a=9)。2.break语句的“穿透”现象内层switch结束后,外层case1末尾无break,程序会顺序执行case2。3.最终运行结果执行case2:a再减1(8),b减1(9)。输出结果为:a=8,b=9。例题解析【例3-2-2】-答案与解析本题最终答案a=8,b=9STEP01-03·内层执行与关键穿透①初始值x=1,程序进入外层switch结构,精准匹配case1分支。②内层y=0,进入内层switch的case0,执行a--(a=9),遇break跳出内层。⚠️核心考点:外层case1末尾无break,触发【向下穿透】机制。STEP04-05·结果计算与警示④穿透执行case2逻辑:a--(a=8),b--(b=9),随后遇break跳出外层switch。✅流程终止,最终输出:a=8,b=9。💡经验总结:嵌套switch务必检查break完整性!巩固练习3.2-程序阅读题01基础判断:输入“5”的运行结果阅读下方C语言程序代码,分析当变量a被赋值为5时,程序在控制台的输出结果是什么?switch(a){

default:printf("出错啦!");

case5:printf("今天是星期五");break;

//...(其他case省略)

}运行结果:今天是星期五02逻辑运算:简单计算器程序阅读下方代码,当用户输入数据为“35/”时,分析程序逻辑并写出控制台的最终输出结果。scanf("%f%f%c",&x,&y,&o);

switch(o){case'/':r=x/y;break;...}

printf("%.1f%c%.1f=%.1f\n",x,o,y,r);运行结果:3.0/5.0=0.6巩固练习3.2-编程题06.成绩等级转换程序编写程序,输入一个学生的百分制成绩,输出其对应的等级。规则如下:90分以上→A|80~89→B|70~79→C|60~69→D|60以下→E💡核心要求:必须使用switch语句实现逻辑判断💡解题技巧:利用整数除法`score/10`将分数映射为十位数字,从而简化case分支的判断条件。07.控制台简易计算器编写程序,实现一个简单的计算器功能。要求从键盘输入`操作数1运算符操作数2`的格式,程序计算并输出结果。支持运算符:+(加)|-(减)|*(乘)|/(除)|%(取模)💡实现要点:使用switch语句对输入的运算符进行分支处理。注意处理除数为0的异常情况。3.3分支语句嵌套NESTEDBRANCHSTATEMENTS3.3分支语句嵌套1.掌握if语句的嵌套形式。2.掌握switch语句的嵌套形式。3.3.1if语句的嵌套01/常见嵌套形式在if块中进行嵌套if(表达式1){

if(表达式2)语句1;

else语句2;

}else{语句3;}在else块中进行嵌套if(表达式1){语句1;}

else{

if(表达式2)语句2;

else语句3;}02/核心判定规则“else总是与它上面

最近的、未配对的if配对”这是C语言中判定嵌套关系的

“黄金法则”,务必牢记!03/强制配对技巧使用{}明确代码块范围,可强制改变默认配对,避免二义性。if(a>b){//强制块开始

if(b>c)x=1;

}//强制块结束

else{x=2;}💡建议:养成写{}的习惯3.3.2switch语句的嵌套▍嵌套语法示例(C语言)switch(表达式1){case常量1://内部嵌套的switch结构switch(表达式2){case常量2:语句1;break;case常量3:语句2;break;}break;//跳出外层switchdefault:语句4;}💡核心:break具有“就近作用域”的特性内部break的局限性内部switch中的break语句,只能跳出其所在的内部结构。执行完毕后,程序会返回到外层switch的当前case中继续执行后续代码。完全跳出的解决方案若想在执行完内部逻辑后直接退出外层switch,必须在外层case的末尾显式添加一个break语句,作为“双重保险”。例题解析【例3-3-1】核心考点为避免嵌套的if…else语句的二义性,C语言规定else总是和()组成配对关系。A缩排位置相同的if语句,即根据代码的视觉对齐方式进行匹配。B在其之前未配对的任意一个if,而不考虑具体的位置远近关系。C在其之前未配对的最近的那个if语句,这是C语言的标准语法规定。D同一行上书写的if语句,仅根据代码的行号位置进行简单匹配。💡提示:C语言编译器忽略缩进,完全按照“就近匹配”原则处理嵌套的if-else。例题解析【例3-3-1】-答案与解析CORRECTANSWERC本题唯一正确选项核心考点与逻辑解析考察重点本题核心考查C语言中嵌套if语句的执行逻辑,即else子句的配对规则,这是初学者极易混淆的高频考点。黄金法则C语言编译器规定:else总是与它上方最近的、且尚未配对的if进行匹配。这一规则是硬性的,必须死记。特别注意代码的缩进格式仅为了方便程序员阅读和维护代码,编译器完全忽略缩进,不会根据缩进的对齐关系来匹配else。巩固练习3.3-选择题01下列程序运行后,输出变量z的结果是()。#include<stdio.h>main(){intx=2,y=-1,z=2;if(x<y)if(y<0)z=0;elsez+=1;printf("%d\n",z);}A.3B.2C.1D.002当a=1、b=3、c=5、d=4时,执行完下方程序段后,变量x的值是()。if(a<b)if(c<d)x=1;elseif(a<c)if(b<d)x=2;elsex=3;elsex=6;elsex=7;A.1B.2C.3D.63.4PRACTICALAPPLICATION分支结构程序设计应用3.4分支结构程序设计应用1.进一步掌握if语句、switch语句和分支结构的嵌套。2.能够运用所学的分支结构知识,解决一些实际问题。3.4.1核心要点回顾分支结构特点程序由多条分支构成,但最多只有一条分支的语句会被实际执行。if条件语句结构灵活,非常适合基于范围或复杂逻辑条件的判断场景。switch分支选择代码可读性高,专门用于处理固定离散值的多分支选择。break终止穿透在switch结构中必须使用break,用于终止当前分支,防止程序“穿透”执行后续代码。C语言逻辑值定义判断标准:非0为真,0为假。

运算结果:1代表“真”,0代表“假”。💡核心思想:分支结构本质上是“多选一”的决策模型。例题解析【例3-4-1】:求一元二次方程的根💡解题思路STEP01:计算判别式根据系数计算delta=b²-4ac,以此判断根的性质。STEP02:条件分支判定delta>0:两不等实根|delta=0:两相等实根|d

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论