选择结构程序设计PPT课件_第1页
选择结构程序设计PPT课件_第2页
选择结构程序设计PPT课件_第3页
选择结构程序设计PPT课件_第4页
选择结构程序设计PPT课件_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1 第五章选择结构程序设计 关系运算符和关系表达式逻辑运算符和逻辑表达式if语句switch语句程序举例 2 回顾 printf 和scanf 函数属于格式输入输出函数getchar 和putchar 函数用来输入输出单个字符的函数赋值语句的概念和作用顺序结构编程思想 3 目标 熟练使用关系运算符熟练使用逻辑运算符掌握简单的条件语句的使用熟练使用多重if结构熟练使用printf和scanf函数熟练使用嵌套if结构熟练使用switch结构理解条件运算符的用法 4 一 关系运算符和关系表达式 符号种类 结合方向 自左向右优先级别 关系表达式的值 是逻辑值 真 或 假 用1和0表示 例c a b c a b a b c a b ca bc a b c 例inta 3 b 2 c 1 d f a b a b cb cbf a b c 表达式值1 表达式值1 表达式值0 d 1 f 0 返回 5 运算符的优先级 sizeof 给出它右边的操作数的字节大小 6 7 练习1 假设num1 3 num2 4 num3 5 则 1 num1 num2的值 2 num1 num2 num3的值 3 num1 num2 num3的值 0 1 1 8 二 逻辑运算符和逻辑表达式 c语言运算量 0表示 假 非0表示 真 运算结果 0表示 假 1表示 真 逻辑运算符 运算优先级 返回 9 注意 关于True和False请记住 0被视为false 其他任何值都被视为true 包括负数 10 从右向左 从左向右 从左向右 例ab x ya b x y a a b5 3 8 4 0 c d 优先级 结合性 11 三 条件运算符与表达式 一般格式 expr1 expr2 expr3执行过程功能 相当于条件语句 但不能取代一般if语句 条件运算符可嵌套如x 0 1 xb a c d c d a b a c d c d expr1 expr2 expr3类型可不同 表达式值取较高的类型 返回 12 例x a b x 0 表达式值为 b x 0 表达式值为 a x y 1 1 5 x y 值为1 0 x y 值为1 5 例求a b printf a b d n b 0 a b a b 例 a b Y N x 2 1 1 0 x 0 x x c a c z c a A c 13 练习2 从键盘上输入一个字符 如果它是大写字母 则把它转换成小写字母输出 否则 直接输出 main charch printf Inputacharacter scanf c 14 例 if x y printf d x 形式二 格式 if expression statement1elsestatement2执行过程 例 if x y max x elsemax y 四 选择结构程序设计 if语句 条件选择语句 if语句的三种形式形式一 格式 if expression Statement执行过程 15 形式三 格式 if expr1 statement1elseif expr2 statement2elseif expr3 statement3 elsestatementn 例 if salary 1000 index 0 4 elseif salary 800 index 0 3 elseif salary 600 index 0 2 elseif salary 400 index 0 1 elseindex 0 执行过程 16 如 if a b 说明 if后面的表达式类型任意 语句可以是复合语句if x if x 0 if x if x 0 例5 1 考虑下面程序的输出结果 includemain intx y scanf d d CompileError 17 if语句嵌套 一般形式 if expr2 statement1 18 例5 2 输入两数并判断其大小关系 ch5 2 c includemain intx y printf Enterintegerx y scanf d d 运行 Enterintegerx y 12 23 XYEnterintegerx y 12 12 X Y 19 if else配对原则 缺省 时 else总是和它上面离它最近的未配对的if配对 20 例 if a b if b c printf a b c elseprintf a b 修改 if a b if b c printf a b c elseprintf a b 实现if else正确配对方法 加 21 main intx 100 a 10 b 20 intv1 5 v2 0 if a b if b 15 if v1 x 1 elseif v2 x 10 x 1 printf d x 结果 1 例5 3 考虑下面程序输出结果 22 例5 4 有一函数 y 1 x0 编一程序 输入一个x值 输出y值 有以下几种写法 请判断哪些是正确的 23 main intx y scanf d x 0 Y y 1 N x 0 y 0 Y N y 1 程序1 24 语句改为 x 0 N y 1 Y x 0 y 1 Y N y 0 程序2 if x 0 if x 0 y 1 elsey 0 elsey 1 25 语句改为 x 0 N y 0 Y x 0 y 1 Y 程序3 y 1 错误 y 1 if x 0 if x 0 y 1 elsey 0 26 语句改为 x 0 N y 1 Y x 0 y 1 Y 程序4 y 0 错误 y 0 if x 0 if x 0 y 1 elsey 1 27 例5 5 键盘输入三个数 并取出最大值 功能 说明if语句的格式 main intnum1 num2 num3 max printf Pleaseinputthreenumbers scanf d d d 28 程序运行情况如下 本案例中的第1个if语句 可优化为如下不带else子句的形式 这种优化形式的基本思想是 首先取一个数预置为max 最大值 然后再用max依次与其余的数逐个比较 如果发现有比max大的 就用它给max重新赋值 比较完所有的数后 max中的数就是最大值 这种方法 对从3个或3个以上的数中找最大值的处理 非常有效 请各位仔细体会 Pleaseinputthreenumbers 11 22 18 Thethreenumbersare 11 22 18max 22 max num1 if num2 max max num2 29 例5 6 输入任意三个数num1 num2 num3 按从小到大的顺序排序输出 main intnum1 num2 num3 temp printf Pleaseinputthreenumbers scanf d d d 30 1 if语句的一般格式if 表达式 语句组1 else 语句组2 1 if语句中的 表达式 必须用 和 括起来 2 else子句 可选 是if语句的一部分 必须与if配对使用 不能单独使用 3 当if和else下面的语句组 仅由一条语句构成时 也可不使用复合语句形式 即去掉花括号 2 if语句的执行过程 1 缺省else子句时当 表达式 的值不等于0 即判定为 逻辑真 时 则执行语句组1 否则直接转向执行下一条 如图P45 4 1 要点 31 2 指定else子句时当 表达式 的值不等于0 即判定为 逻辑真 时 则执行语句组1 然后转向下一条语句 否则 执行语句组2 如图4 1 b 所示 3 if语句的嵌套与嵌套匹配原则if语句允许嵌套 所谓if语句的嵌套是指 在 语句组1 或 和 语句组2 中 又包含有if语句的情况 if语句嵌套时 else子句与if的匹配原则 与在它上面 距它最近 且尚未匹配的if配对 为明确匹配关系 避免匹配错误 强烈建议 将内嵌的if语句 一律用花括号括起来 32 案例5 7 写一程序 从键盘上输入1年份year 4位十进制数 判断其是否闰年 闰年的条件是 能被4整除 但不能被100整除 或者能被400整除 算法设计要点 如果 能被 整除 则余数为 即如果 的值等于 则表示 能被 整除 首先将是否闰年的标志leap预置为0 非闰年 这样仅当year为闰年时将leap置为1即可 这种处理两种状态值的方法 对优化算法和提高程序可读性非常有效 请读者仔细体会 参考程序如下 功能 说明if语句的嵌套格式和用法 33 设用变量year表示年号 leap为待置值变量 当year为闰年 leap 1 否则leap 0 流程图 34 leap 400 0 leap 1 leap 0 打印非闰年 打印是闰年 结束 leap 0 yes No yes No A 35 3 程序1 main intyear leap scanf d elseleap 0 36 elseleap 1 elseleap 0 if leap printf dis year elseprintf disnot year printf aleapyear n 37 main intyear leap 0 leap 0 预置为非闰年 printf Pleaseinputtheyear scanf d 3 程序2 38 当 year 4 0 year 100 0 year 400 0 为1时 year为非润年 设用变量year表示年号 当 year 4 0 year 100 0 year 400 0 为1时 year为润年 否则为非润年 如果要判别非润年可在上述表达式前加非 运算符 当 year 4 0 year 100 0 year 400 0 为1时 year为非润年 或者 即 则 39 1 设a 3 b 4 c 5 则逻辑表达式 a b c 1 40 四 switch语句 开关分支语句 一般形式 switch 表达式 caseE1 语句组1 break caseE2 语句组2 break caseEn 语句组n break default 语句组 执行过程 break break break default 1 一般形式 返回 41 2 执行过程 1 当switch后面 表达式 的值 与某个case后面的 常量表达式 的值相同时 就执行该case后面的语句 组 当执行到break语句时 跳出switch语句 转向执行switch语句的下一条 2 如果没有任何一个case后面的 常量表达式 的值 与 表达式 的值匹配 则执行default后面的语句 组 然后 再执行switch语句的下一条 42 3 说明 1 switch后面的 表达式 可以是int char和枚举型中的一种 有限的个数 2 每个case后面 常量表达式 的值 必须各不相同 否则会出现相互矛盾的现象 即对表达式的同一值 有两种或两种以上的执行方案 3 case后面的常量表达式仅起语句标号作用 并不进行条件判断 系统一旦找到入口标号 就从此标号开始执行 不再进行标号判断 所以必须加上break语句 以便结束switch语句 43 4 各case及default子句的先后次序 不影响程序执行结果 5 多个case子句 可共用同一语句 组 例如 在 案例4 5 中的 case10 和 case9 共用语句 printf grade A n break case5 case0 共用语句 printf grade E n break 6 用switch语句实现的多分支结构程序 完全可以用if语句或if语句的嵌套来实现 44 如 case A case B case C printf score 60 n break 说明 E1 E2 En是常量表达式 且值必须互不相同case 语句标号作用 必须用break跳出case后可包含多个可执行语句 且不必加 switch可嵌套 break只能跳出一层嵌套多个case可共用一组执行语句default可放在任意case后 相当case作用 default不要再加break 45 总结 1 常表值必须互不相等 否则二异性 2 case顺序无关紧要 3 不一定非用break不可 有时几种情况合并执行一组语句 46 switch score case5 printf Verygood case4 printf Good case3 printf Pass case2 printf Fail default printf dataerror 运行结果 score为5时 输出 Verygood Good Pass Fail dataerror 例5 8 47 voidmain intx 1 y 0 a 0 b 0 switch x case1 switch y case0 a break case1 b break case2 a b break case3 a b printf na d b d a b 运行结果 a 2 b 1 例5 9 48 其语义是 计算表达式的值 并逐个与其后的常量表达式值相比较 当表达式的值与某个常量表达式的值相等时 即执行其后的语句 然后不再进行判断 继续执行后面所有case后的语句 如表达式的值与所有case后的常量表达式均不相同时 则执行default后的语句 49 ch5 10 c includemain intc printf Entermornorhorother c getchar switch c case m printf nGoodmorning n break case n printf nGoodnight n break case h printf nHello n break default printf n n break 例5 10 根据输入字母输出字符串 返回 50 程序举例 案例5 11 求一元二次方程ax2 bx c 0的解 a 0 分析 51 52 includemain floata b c disc x1 x2 p q scanf f f f 53 if fabs disc 1e 6 x1 b sqrt disc 2 a x2 b sqrt disc 2 a printf x1 7 2f x2 7 2f n x1 x2 54 else p b 2 a q sqrt fabs disc 2 a printf x1 7 2f 7 2fi n p q printf x2 7 2f 7 2fi n p q 55 案例5 12 已知某公司员工的保底薪水为500 某月所接工程的利润profit 整数 与利润提成的关系如下 计量单位 元 profit 1000没有提成 1000 profit 2000提成10 2000 profit 5000提成15 5000 profit 10000提成20 10000 profit提成25 为使用switch语句 必须将利润profit与提成的关系 转换成某些整数与提成的关系 分析本题可知 提成的变化点都是1000的整数倍 1000 2000 5000 100000 56 如果将利润profit整除1000后再取整 则当 profit 1000对应01000 profit 2000对应12000 profit 5000对应2 3 45000 profit 10000对应5 6 7 8 910000 profit对应10 11 12 57 main longprofit intgrade floatsalary 500 printf Inputprofit scanf ld 58 switch grade case0 break case1 salary profit 0 1 break case2 case3 case4 salary profit 0 15 break case5 case6 case7 case8 case9 salary profit 0 2 break default salary profit 0 25 printf salary 2f n salary 59 良好的源程序书写风格 注释 1 必要的注释 可有效地提高程序的可读性 从而提高程序的可维护性 2 在 语言源程序中 注释可分为三种情况 1 在函数体内对语句的注释 2 在函数之前对函数的注释 3 在源程序文件开始处 对整个程序的总体说明 3 函数体内的语句 是由顺序结构 选择结构和循环结构等三种基本结构构成的 在什么地方加以注释的原则是 如果不加注释 理解起来就会有困难 或者

温馨提示

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

评论

0/150

提交评论