选择结构程序设计(8).ppt_第1页
选择结构程序设计(8).ppt_第2页
选择结构程序设计(8).ppt_第3页
选择结构程序设计(8).ppt_第4页
选择结构程序设计(8).ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

关系运算符和关系表达式逻辑运算符和逻辑表达式if语句条件运算符和条件表达式switch语句 第五章选择结构程序设计 选择结构 分支结构 选择结构 也可以叫做 分支结构 在一个合理的 选择结构 中 总是先进行某个条件的判断 然后根据判断的结果选择执行预先设定的操作 要想实现 选择结构 需要2个条件 能表达条件判断的运算符 能实现判断并选择的控制语句 5 1关系运算符和关系表达式 关系运算符关系表达式关系表达式的值 关系运算符和关系表达式 关系运算符 双目 6种 也叫 比较运算符 大于 大于等于 等于 不等于 关系表达式 按规定用关系运算符把运算量连接起来构成的式子就是关系表达式 其中 运算量可以是常量 变量或任何合法的表达式 如 a a 100NowIndex MaxIndex 关系运算符的优先级 关系运算符的结合性 自左向右 关系表达式的值 关系表达式进行的是关系运算 也就是 比较运算 比较的结果只可能有两个 真 或 假 对应于实际生活中 就是 成立 还是 不成立 正确 还是 不正确 对 还是 不对 这样一些比较和判断的结果 关系运算的结果的特点是 只有两种可能的结果 两种可能是相互对立不可能同时出现的 任何时候答案只可能是其中的一个 这样的特点正对应于数学上的 逻辑值 真 或 假 关系表达式的值是 逻辑值 即 真 或 假 C语言中分别以 1 和 0 来代表 就是说 如果关系表达式的值为 真 则得到整数1 如果值为 假 则得到整数0 逻辑值只有两个 真 1或 假 0 任何数值都可以转换成逻辑值0以外的数值对应逻辑常量 真 数值0对应逻辑常量 假 任何数值类型的变量都可充当逻辑变量 VC中有专门的逻辑变量定义符bool根据表达式对运算量的需要 逻辑量和数值量可以互相转换 关系表达式的运算数是数值量 结果是逻辑量 比较两个数值 得出一个逻辑值 如果运算数是逻辑量 也转换成数值 1 0 进行比较 voidmain inta1 10 a2 floatb1 10 0 b2 charc1 10 c2 boold1 10 d2 10 d3 a2 a1 b1 b2 a1 c1 c2 b1d2 d3 d1 d2 d3 d1 d2 010001 includevoidmain inta 3 b 2 c 1 d printf d n a b d bb c printf d d n d return 关系表达式 例 d b c d a b c d a b c 1d 0d 1d 0 运行结果 注意 a b c不是数学a b c b在a c之间数学a b c 在C语言是 a b b c 5 2逻辑运算符和逻辑表达式 逻辑运算符逻辑表达式逻辑表达式的求解过程 逻辑运算符 逻辑运算实际上是复合的关系运算 即要判断一个大命题的成立与否 不仅要判断其中的各个小命题是否成立 还取决于每个小命题影响大命题成立的方式 逻辑运算符 3种 逻辑与 双目 逻辑或 双目 逻辑非 单目 逻辑运算符的优先级 逻辑运算符的结合性 自左向右 自右向左 逻辑运算符的运算规则 逻辑运算是关系比较运算结果之间进行的运算 所以参与逻辑运算的运算量都是逻辑量 即值只为 真 或 假 的量 逻辑运算的结果也是逻辑值 1或0 为了叙述方便 用 True 或 False 表示 逻辑与 全部运算量都为 T 逻辑与运算才为 T 只要有一个运算量为 F 逻辑与运算即为 F 逻辑或 全部运算量都为 F 逻辑或运算才为 F 只要有一个运算量为 T 逻辑或运算即为 T 逻辑非 运算量为 T 逻辑非运算则为 F 运算量为 F 逻辑非运算则为 T x 5 x 5 x 5 x 5 x 0 x 0 逻辑运算符的运算规则 逻辑运算规则表 注 a b代表逻辑量 T代表 真 值 F代表 假 值 逻辑表达式 逻辑表达式就是用逻辑运算符把运算量连接起来的式子 参与逻辑运算的运算量都是逻辑量 而逻辑表达式的值也是一个 逻辑值 即 真 或 假 在C语言中分别以 1 和 0 代表 C编译系统在给出逻辑运算结果时 以整数1代表 真 整数0代表 假 而在求解逻辑表达式过程中当需要判断一个表达式的值是 真 是 假 时 则认为该表达式的值为非整数0时是 真 而等于整数0时是 假 所以 逻辑表达式的值不是整数0就是整数1 而参与逻辑运算的运算量可以是任何类型的数据 如 x 5 x 5 x 5 如 x y z 如 5 3 0 逻辑运算符的运算规则 逻辑运算结果表 注 a b代表任何类型的数据 可以是常量 变量或表达式 逻辑表达式的求解过程 逻辑表达式的求解顺序按照其结合性进行 由于参与逻辑运算的量必须是逻辑量 所以系统求的是每一个参与逻辑运算的运算量 可能是常量 变量或表达式 的逻辑值 对于单一的 逻辑与 表达式和 逻辑或 表达式 系统按从左向右顺序求解时 如果当求出某个运算量后整个逻辑表达式的值就能够确定时 则余下的运算量不被求解 逻辑表达式的求解中 优先级高的先运算的规则遇到矛盾的处理 这是c语言不够严密的地方 includevoidmain inta 3 b 4 c 5 d 0 x 0 y 0 d a b c 逻辑表达式 例 运行结果 d 0d 1d 0a 4 c 5x 4 y 0 运算符与 运算符的区别 是 赋值运算符 赋值表达式中 赋值运算符的左边只能是变量 注意 千万不要混淆或误用 与 运算符 假设a 1 是 等于关系运算符 关系表达式中 等于运算符的两边可以是常量 变量或任何合法的表达式 a 1 b 2 这个赋值表达式的数值是2 但逻辑值是1 正确的 是一个关系表达式 a 1 b 2 错误的表达式 a 2 这个关系表达式的逻辑值是0 a 2 三种运算符的运算数和结果的规则运算数结果算术运算符数值数值关系运算符数值逻辑值逻辑运算符逻辑值逻辑值 2 1 3 13 1 2100 2 3 课堂练习 1 满足当整数x的值为偶数时值为 真 x为奇数时值为 假 的表达式是 A x 2 0 B x 2 0 C x 2 2 x 0 D x 2 答案 A C D 2 如果表达式E的值为 真 则以下表达式的值是 假 的有 A E 0 B E 0 E 0 C E 0 D E 0 答案 C 课堂练习 3 满足 当a的值大于0 并且小于n时值为 真 a的值小于等于0 或者大于等于n时值为 假 的表达式有 a 0 a n a n 答案 A C D a逻辑值1同假为假的非非假与非假 同真为真 4 设a 1 b 15 c 0 d 2 则下列表达式的值是a b ca b c c d b a cd c b a 答案 0 答案 1 答案 1 答案 1 5 3if语句 if语句的三种形式if语句的嵌套条件运算符及条件表达式 if语句中的条件判断都是用一个表达式来表示的 在执行if语句时 会求解这个表达式的逻辑值 因为这个表达式的逻辑值代表了判断的结果 值为 T 判断成立 值为 F 判断不成立 因此 if语句根据判断的结果 成立或不成立 选择执行预先设定的操作 实际上是根据条件判断表达式的逻辑值是 真 是 假 来选择的 if语句 if语句是一种选择控制语句 而且是条件分支控制语句 即总是先进行一个条件的判断 然后根据判断的结果 成立或不成立 选择执行预先设定的操作 if语句的三种形式 1 if 表达式 语句 如 if x 0 sign 1 2 if 表达式 语句1 else语句2 如 if x 0 sign 1 elsesign 1 if语句的三种形式 3 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 else语句n 如 if score 89 putchar A elseif score 79 putchar B elseif score 69 putchar C elseif score 59 putchar D elseputchar E 实际上 这种形式是属于第1或2种形式的一种特殊情况 是多种if嵌套语句的其中一种 2 if 表达式 语句1 else语句2 如 if score 89 putchar A elseif score 79 putchar B elseif score 69 putchar C elseif score 59 putchar D elseputchar E if语句的三种形式 if语句第3种形式之一 嵌套发生在else分支执行流程图 if语句的说明 if语句中 if后面的表达式可以是任何类型的合法表达式 甚至可以是常量或变量 不管它是什么形式的数据 程序在执行if语句时 首先求解该表达式 而且是求该表达式的 逻辑值 得到整数1或整数0 然后再选择执行相应的操作 如 if x 0 sign 1 如 if x sign 1 如 if x y sign 1 如 if 1 sign 1 if score 100 printf Highestscore n if score 100 printf Highestscore n 结果 只有score的值等于100时 才会执行printf语句 结果 不管score原先的值等于多少 都会执行printf语句 if语句的说明 if语句的第2 3种形式中 else关键字不能单独使用 一个else必须有一个if和它对应配对 同时 要理解在什么条件下才执行else的内嵌语句 if num 0 sign 1 elsesign 1 等价于 if num 0 sign 1 elsesign 1 等价于 if num 0 sign 1 elsesign 1 if语句的说明 当if或else的内嵌语句多于一个时 必须用 把它们括起来形成一个复合语句才能保证流程的正确执行 为了分清楚逻辑关系 内嵌语句只有一个时 也要用 括起来 if num 0 printf 是正数 n sign 1 if num 0 printf 是正数 n sign 1 if num 0 printf 是正数 n sign 1 此处不管num为何值 都会执行sign 1 语句 显然流程出现了错误 原因在于if语句或else语句的内嵌语句只包括一个语句 if语句的嵌套 在if或else的内嵌语句中又包含一个或多个if语句时 称为if语句的嵌套 常用于多重条件 多个分支的选择判断控制 if 表达式 语句1 else语句2 if 表达式 else 常规的if语句 嵌套的if语句 if与else的配对原则是什么 注意 C编译系统总是从if嵌套的最里层开始向外 依次将else与在它前面的最近的if配对 有两种情况的结果是一样的 单靠配对规则是不行的1 if 表达式 语句1 else语句2 如果语句1是一个if语句2 if 表达式 语句 如果语句是一个if else语句都是if if else格式 如 if a 0 if a 0 y 1 elsey 2 到底是情况1 a 0时y 2 还是情况2 a0 y 1 elsey 2 被 括起来的if被屏蔽了 else与第1个if配对 if语句的嵌套 例 例 下面4个语句段中 哪些能正确表示出以下的函数关系 y 1 x0 A if x 0 if x 0 y 1 elsey 1 elsey 0 B y 0 if x 0 if x 0 y 1 elsey 1 C y 1 if x 0 if x 0 y 1 elsey 0 D if x0 y 1 elsey 0 答案 A D 适当地加上 B C也行 条件运算符 符号 唯一的三目运算符 用法 表达式1 表达式2 表达式3优先级 只比赋值运算符和逗号运算符级别高 低于逻辑运算符结合性 自右向左 求解过程 先求解表达式1的逻辑值 若值为 T 则求解表达式2 表达式2的值即为整个条件表达式的值 若值为 F 则求解表达式3 表达式3的值即为整个条件表达式的值 x y max x max y if x y max x elsemax y 条件表达式 x y max x max y 条件表达式 max x y x y 赋值表达式 max x y x z x z y z y z if x y if x z max x elsemax z else if y z max y elsemax z includevoidmain charch scanf c 条件表达式 例 例 接收用户键入的一个字符 如果是大写字母就将其转换成小写字母 如果是小写字母就转换成大写字母输出 判断是否大写字母的逻辑表达式 判断是否小写字母的逻辑表达式 includevoidmain charch1 ch2 scanf c 用两个条件表达式同样能实现刚才的功能 但本质不一样 刚才是用if语句实现 现在是用表达式实现 此表达式还可以继续参与其它的运算 形成更复杂的表达式 键入非字母怎么办 考虑不周Ch2初始化为0 if ch2 0 printf c ch1 可以仍然只使用一个字符变量ch1吗 5 4switch语句 switch语句的一般形式 switch是多条件判断多分支选择语句 类似if语句的第三种形式 switch 表达式 case常量表达式1 语句1 case常量表达式2 语句2 case常量表达式n 语句n default 语句n 1 switch语句使用了4个关键字 switchcasedefault 执行过程 首先求解switch后面表达式的整数值 将其值依次与各个case后面的常量表达式的整数值比较 直到相等的一个 从那个case后的语句开始往下执行各个语句 若无相等的 则执行default后的语句 语句1到语句n 1是顺序执行的序列 从第i个开始执行 case常量表达式i 是进入这个序列的入口 常量表达式与switch值相等 则进入 一但进入 以后的case常量表达式 不再求值 比较 只相当于语句标号 switch语句一般形式的执行流程图 流程好像有问题 如果表达式的数值等于常量表达式1的值 则执行语句1 执行完语句1后应该结束switch语句的执行了 可是按照流程图会继续执行语句2 直到语句n 1 显然和希望的流程不同 switch语句的完整形式 switch语句还应该使用关键字break 它的作用是结束switch语句的执行 switch 表达式 case常量表达式1 语句1 break case常量表达式2 语句2 break case常量表达式n 语句n break default 语句n 1 switch语句的完整形式如下 switch语句完整形式的执行流程图 switch语句的有关注意事项 switch语句中 switch后的表达式可以是值为整数的任何类型 表达式 产生整数 逻辑值 字符的表达式都合法 产生地址值 串值 实数的表达式都非法 系统求解表达式 得到整数值 每一个case后表达式只能是整常量表达式如1 1 2 1 2 不能是含变量的表达式 同时 每一个常量表达式的值必须互不相同 否则会出现互相矛盾的现象 由于关系 逻辑表达式只有2个值 用在switch语句中只能2分支与if一样 故一般不用 switch只适用于等于某个整数的多分支判断 所以多分支的if语句 尽管有大量的if else嵌套 还是很有用的 它适用于 某个范围的整数 实数的判断 字符串的的判断 地址值的判断If grade 60 grade70 grade 80 If grade 60 5 elseIf grade 70 5 If name 张三 elseIf name 李四 If add a elseIf add b 如果能够想办法把某个范围的整数表示为整数 switch也可用N为90 99 80 89 N 10表示为9 8 switch N 10 switch语句的有关注意事项 如果严格按照switch语句的完整形式 即在每个case和default后均加上break语句 则每个case和default的出现顺序并不影响程序的流程和执行结果 switch grade case E printf Excellent n break case G printf Good n break case B printf Bad n break default printf Godknows n switch grade case B printf Bad n break case G printf Good n break case E printf Excellent n break default printf Godknows n switch grade default printf Godknows n break case E printf Excellent n break case B printf Bad n break case G printf Good n 最后位置的case或default可以不用break语句 switch语句的有关注意事项 如果在满足多个case的情况下要执行相同的操作 则只需在最后一个有关的case后写上相应的语句 不用 也不能在每个后面都写 defineKEY F20 x3C00 defineCtrl S0 x1F13 defineESC0 x011B defineAlt X0 x2D00switch key caseKEY F2 caseCtrl S SaveFile break caseESC caseAlt X QuitSystem 当用户按下F2功能键或Ctrl S快捷键时 都是想执行保存文件的操作 所以只需写一个语句 5 5选择结构程序举例 选择结构程序设计 要想正确进行选择结构的程序设计 有三点很重要 要深刻理解C语言关于求解表达式的逻辑值的规定 要能根据具体问题写出正确的判断表达式 判断表达式大多数情况下都是关系或逻辑表达式 要掌握if语句和switch语句的执行流程 从而在已经形成的判断表达式基础上 用它们去正确实现具体问题中的流程 选择结构程序设计 例 例1 判断一个数是否是水仙花数 水仙花数是一个三位的正数 它各位数的立方和等于该数本身 题目信息 水仙花数是一个三位的正数它各位数的立方和等于该数本身 问题分析 如何求出一个三位正数三个位上的数 即个 十 百位数 求出三个位上的数之后 如何进行判断和设计执行流程 includemain intnum a b c printf Pleaseinputainteger n scanf d 在要求用户输入数据前 一定要给出友好的提示 用scanf接收用户输入的数据并保存 写出判断表达式进行判断并根据结果按设计的流程给出有关信息 if num a a a b b b c c c printf disnta水仙花number n num elseprintf disa水仙花number n num if num a a a b b b c c c printf disnta水仙花number n num elseprintf disa水仙花number n num 选择结构程序设计 例 例2 输入三个正数 求由这三个数代表三边的三角形面积 include includevoidmain inta b c floats t printf Pleaseinput3integer n scanf d d d 在要求用户输入数据前 一定要给出友好的提示 用scanf接收用户输入的数据并保存 课后练习及上机作业 1 课本P104习题5 3 5 10 2 编程判断一个正数是否是同构数 同构数是这样一个数 它出现在它的平方数的右边 比如 5就是同构数 因为5的平方是25 25右边的数正好是5 同理 25也是同构数 因为25出现在其平方数625的右边 设该数小于10000 5

温馨提示

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

评论

0/150

提交评论