C语言课件第5章选择结构.ppt

上传人:max****ui 文档编号:6335172 上传时间:2020-02-23 格式:PPT 页数:42 大小:308.31KB
返回 下载 相关 举报
C语言课件第5章选择结构.ppt_第1页
第1页 / 共42页
C语言课件第5章选择结构.ppt_第2页
第2页 / 共42页
C语言课件第5章选择结构.ppt_第3页
第3页 / 共42页
点击查看更多>>
资源描述
第5章选择结构程序设计 主要内容 关系运算符和关系表达式逻辑运算符和逻辑表达式if else 重点 难点 switch条件运算符和条件表达式 了解 根据选择结构的组成特点 我们在分析问题时着重明确以下两点 1 条件是什么 2 条件成立和不成立时分别执行什么操作 简单条件用关系表达式来表示例5 1判断一个整数n是奇数还是偶数 设n由用户输入 分析 第一步 输入整数n 第二步 判断 若条件 n 2等于0 成立 则输出 n为偶数 否则输出 n为奇数 5 1关系运算符和关系表达式 main intn printf nenterintn scanf d 开始 输入n n 2为0 是偶数 是奇数 结束 输入n 例5 2输入任一考生的考号及成绩 判断其是否能上大学 设分数线为600 若能上 则输出 success 否则输出 failure 分析 第二步是选择结构 条件是 score大于等于600 main intno floatscore printf nenterno score scanf d f 关系表达式的值 若条件满足 则关系表达式的值为ture 1 否则 关系表达式的值为false 0 1 关系运算符 例如下列关系表达式 a b表示条件 a大于b x 0表示条件 x等于0 a b关系运算符 赋值运算符且 高于 结合性 自左向右 一般很少连用 如 a bb cf a g 1表示f a g 1 特别提示 关系运算符 与赋值运算符 不同 比较 k 1与k 1特别提示 表达式a b d c也是合法的关系表达式 但在实际应用中很少使用 因为它不能表示 a b大于c且大于d 问题 如何表示 a x b0 y 10等条件 5 2逻辑运算符和逻辑表达式 复杂条件可用逻辑表达式来描述例5 3判断当前温度是否满足观赏鱼正常生活需要的温度 15 20摄氏度 设当前温度由用户输入 main inttemperature printf nenterthetemperature scanf d 1 逻辑运算符则 x 1 y 0 x y 0 x y 1特别提示 if x 等价于if x 0 2 逻辑表达式 由逻辑运算符将一个或多个表达式连接起来的式子 比如 1 a和b中只有一个为0 的逻辑表达式为 a b 0 a b 02 某英语专业的招生条件 总分 total 超过分数线 600 并且英语成绩 score 不低于85分 该条件的逻辑表达式为 total 600 score 853 判断某年是润年应满足以下两个条件之一 该年能被4整除但不能被100整除 或该年能被400整除 该条件对应的逻辑表达式为 year 4 0 year 100 0 year 400 0 3 逻辑运算符的优先级和结合性当条件表达式中同时出现多个运算符时 首先按优先级计算 当同时出现多个优先级相同的运算符时 再按结合性计算 优先级 算术运算符 关系运算符 赋值运算符结合性 逻辑与 逻辑或 的结合性 自左向右 逻辑非 的结合性 自右向左例如 下页 优先级与结合性举例 例如 设inth 3 j 3 k 3 doublex 0 y 2 3 计算下列表达式的值 h j k等价于 h j k h j x y等价于 h j x y h k x y等价于 h k x y x y j 1 k 4等价于 x y j 1 k 4 结果 1 0 1 1 逻辑表达式计算特例 在逻辑表达式的计算过程中 当该表达式的值能够确定时 就停止该表达式的计算 即并不是表达式中所有的运算符都被执行 例5 4 1 设有如下定义 inta 1 b 2 c 3 d 4 m 2 n 2 则执行表达式 m a b 5 3if语句 if语句能实现所有的选择结构例5 5将任意两个整数m n中的较大数送给x 较小数送给y 然后按大小顺序输出 设m n的值由键盘输入 分析 共分三步 S1 输入两个整数给m和n S2 判断m n的大小并分别给x和y赋值 S3 输出x和y 其中第二步用选择结构 main intm n x y printf npleaseentertwointegers scanf d d 思考 若条件改为 m n 如何实现 1 If语句的一般形式 if 表达式 语句1else语句2执行过程 如右图 格式说明 语句1和语句2在语法上是一个语句 可以是简单语句 也可以是复合语句 在此要特别注意复合语句中一对 的正确使用 2 if语句的简化形式 例5 6从键盘接收一个字符 若为大写字母 则将其转换成小写字母并输出 否则输出原字符 分析 共三步 其中第二步判断ch是大写字母的条件是 ch在A Z之间 includemain charch printf nenteracharacter 第一步 输入ch ch getchar getchar if ch A 第三步 输出 2 if语句的简化形式 if expression statement1执行过程如图 例 输入任意数n 输出其绝对值 main floata scanf f 3 if语句的嵌套 当if语句中的语句1或语句2又是if语句时 就构成了if语句的嵌套 嵌套的if语句能实现多分支结构 例5 7猜数游戏 假设m是一个整型数15 让用户从键盘上输入所猜数字 用户已知数的范围是10 20 若猜对 则输出 RIGHT 否则 输出 WRONG 并指出所猜的数比m大还是小 分析 共3个分支第一步 输入猜测的数n 第二步 判断并输出结果 条件可以是 m等于n 若条件成立 则输出RIGHT 否则 需执行两步操作 输出WRONG 判断m n的大小 条件可以是 n m 条件成立时输出 big 否则输出 small 很明显 又是一个选择结构 main intm 15 n printf nguessanum scanf d 例5 8某幼儿园只接收2 6岁的小孩 其中2 3岁编入小班 4 5岁编入中班 6岁编入大班 编程实现 对输入的任意一个年龄 输出该编入什麽班 或者告知 不收 分析 首先根据条件 年龄在2 6岁之间 判断是 收 还是 不收 若条件满足 则执行的操作为 1 判断该编入何班 否则 输出 不收 其次 分析 1 如何实现 提示 本例可用不同的程序实现 如将条件改为 年龄超出2 6岁 或者从条件 年龄小于2 开始判断 试编程实现 main intage printf nenterage scanf d 语句2 If语句中的语句1和语句2都可以包含if语句 If语句的嵌套结构中 因为else是可选项 所以要注意if与else的匹配 C语言规定 else总是与其前面最近的 还没有匹配过的if相匹配 并且是由里向外逐对对匹配 编程时 可以通过合理使用 来明确if与else匹配关系 例5 10 分析以下两个程序 哪一个能实现 从键盘上接收一个整数 若该数为正偶数 则输出 positiveandeven 若为负数 则输出 negative 程序 1 main intn printf nenterainteger scanf d 画出该程序的流程图 程序结构更清楚 例5 10程序 2 main intn printf nenterainteger scanf d 4 条件运算符 使用if语句时 有时是为了根据条件给同一个变量赋不同的值 比如 main intx y scanf d 本例中 当条件满足或不满足时分别执行一个赋值语句 且都是给变量y赋值 用C语言提供的条件运算符描述 比用if语句更简练 上述if语句等价于 y x 0 x 1 x x 1 其中 x 0 x 1 x x 1 是一个 条件表达式 条件运算符 条件表达式的一般格式 表达式1 表达式2 表达式3计算过程 首先计算表达式1 若其值为真 非0 则计算表达式2 取表达式2的值作为整个条件表达式的值 否则 计算表达式3 取表达式3的值作为整个条件表达式的值 优先级 条件运算符的优先级比关系运算符和算术运算符都低 比赋值运算符高 例如 y x 0 x 1 x x 1等价于y x 0 x 1 x x 1 说明 并不是所有的if语句都能用条件表达式实现 如if n 0 a 6 elseb 8 5 4switch语句 switch语句可用来处理一部分特殊的多分支选择结构 即根据某个表达式的值进行选择 而不能根据表达式的取值范围作出选择 所以使用时有很大的局限性 如学生成绩等级分类 幼儿园分班等 若用if语句实现 程序冗长 嵌套层次多 结构不够清晰 而用switch语句则更清楚 例5 12输入某个成绩等级 输出该等级对应的分数段 A 90 100 B 80 89 C 70 79 D 60 70 E 60以下 include 例5 12 main chargrade printf nenterscoregrade a e 输出提示信息 grade getchar getchar 接收输入的一个字符 switch grade case a printf n90 100 case后是一常量 break 多个语句组成的语句段1 case b printf n80 89 break case c printf n70 79 break case后有空格 case d printf n60 69 break case e printf n 60 break default printf nerror outofthefield a e switch语句结束 switch语句的一般形式为 switch expression case常量表达式1 语句段1 break case常量表达式2 语句段2 break case常量表达式N 语句段N break default 语句段N 1 格式说明 switch语句的执行过程 计算switch后面括号中的表达式 将表达式的值与第一个case后的常量表达式的值比较 若相等 则从语句段1开始 执行语句段1及其以后的所有语句 不再进行判断 即执行完语句段1后 接着执行后面的case或default语句中的语句段 直至遇到break语句或执行至switch语句的末尾 若不相等 再与第二个case后的常量表达式比较 依此类推 若所有的case均不匹配 则执行default后的语句段n 1 main 幼儿园编班问题 intage printf nenterchild sage scanf d 实现多个case分支共用一个语句段 例5 14输入任一百分之成绩 输出其对应的成绩等级 A 90 100 B 80 89 C 70 79 D 60 69 E 60 分析 因为case后必须是一常量 所以要用switch语句实现 必须先找出各个分数段对应的常量 很容易可看出 除100分 60分以下的分数外 其它分数段内的分数除以10取整结果相同 main 例5 14 intscore n printf nenterascore 0 100 scanf d 思考 如果将分数段的划分改为 A 100 85 B 70 84 C 60 69 D 60 用switch语句实现是否合适 特别说明 并不是所有的多分支结构都可用switch语句实现 只有当各个分支能分别与某个常量对应时 才适合采用switch语句 上机调试 一 习题第一部分5 下面程序的执行结果是 main intx 1 y 3 k k x 0 提示 注意逻辑表达式的计算过程 特别是x y 的计算 5 5上机调试 二 测试用例的设计调试选择结构程序时 所用的测试用例至少必须保证所有的分支都能执行一遍 也就是说 测试用例应该能使各个基本条件都有成立和不成立的机会 否则 即使程序由是能运行 也不能保证整个程序是正确的 例5 5 1邮局对包裹邮费规定如下 重量 千克 不超过10 收费标准为0 80元 千克 不超过20 收费标准为0 75元 千克 不超过30 收费标准为0 70元 千克 超过30千克不予邮寄 另对每件包裹收手续费0 2元 main floatweight r money printf nenterweight scanf f 分析该程序 共有4个分支 分别对应weight的取值为 30 20且10且 20 10 因此若要实的每个分支都能执行一遍 weight应分别从上述每一范围中至少取一个值 考虑到边界容易出错 所以weight应分别取10 20 30作为测试数据 或直接将30 2010作为后3个范围中的测试数据 测试用例 35 30 20 10 至少4个测试数据 或者使用 35 25 15 5 30 20 10 每个范围取一个测试数据 在加上边界数据供7组 5 5上机调试 三 单步执行 run step或F7或F8 具体方法是 根据某个测试用例 若程序的运行结果不正确 则采用单步执行方式 利用原来的测试数据 重新运行该程序 根据亮条光标的移动 可以很清楚的看到程序的执行过程 然后与该程序要实现的任务比较 很容易找出程序中哪儿与实际不符 同时使用break watch可添加表达式 利用单步执行观察watch窗口中该表达式或变量的值 则更容易找出是哪一步出错了 比如 上例的执行 作业 2 习题5 8 10 12
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!