C语言 第4章 选择结构.ppt

上传人:max****ui 文档编号:8614609 上传时间:2020-03-30 格式:PPT 页数:47 大小:771.31KB
返回 下载 相关 举报
C语言 第4章 选择结构.ppt_第1页
第1页 / 共47页
C语言 第4章 选择结构.ppt_第2页
第2页 / 共47页
C语言 第4章 选择结构.ppt_第3页
第3页 / 共47页
点击查看更多>>
资源描述
if语句 关系表达式和逻辑表达式 if语句的变形及嵌套 多重选择语句 switch语句 本章小结 本章内容 第4章选择结构程序设计 第四章选择结构程序设计 问题与讨论 第四章分支结构程序设计 解决办法 1 引入新的程序结构 选择结构 有时也称判断结构或分支结构 2 为了和分支结构相配合 同时还要引入逻辑表达式的概念 3 有三种形式可进行分支结构的程序设计 A if结构B 多重选择结构 switch语句 C 无条件转移结构 goto语句 第4章选择结构程序设计 例4 1 输入两个正整数 并按从小到大的顺序输出 voidmain inta b t scanf d d voidmain inta b scanf d d 图3 2变换a和b的值 if a b t a a b b t if条件 真 复合语句1 else 复合语句2 1 if else为关键字 2 如果语句块超过一条语句 则要用一对大括号将语句块括起作为复合语句 3 else可省 语法 说明 if语句 计算逻辑表达式的值 真否 复合语句1 复合语句2 执行复合语句后的语句 F T if else的执行过程 例4 6 编写程序 求输入的整数的绝对值并将其输出 voidmain intx x1 scanf d 形式 if 表达式 语句块 例4 7 比较用户输入的两个整数的大小 若输入的第1个数大于第2个数 则显示 first second includevoidmain intfirst second printf Entertwonumbers scanf d d 形式 if 表达式 语句块else语句块 一 if语句的变形 1 省略else语句语法 if逻辑表达式 真 语句体 2 增加else语句 语法 if逻辑表达式1 真 语句体1 elseif逻辑表达式2 真 语句体2 else 语句体N if语句的变形 形式 if 表达式 语句块 形式 if 表达式 语句块elseif语句块else语句块 if逻辑表达式 真 语句块1if逻辑表达式2 真 语句块2 else 语句块3 else 语句块4 注意 else语句与最近的if语句配套 if语句的嵌套 注意 嵌套必须完全包住 不能相互骑跨 在if的嵌套中 else elseif与最近的if相匹 大括号要配对 if逻辑表达式1 语句块1if逻辑表达式2 语句块2 else 语句块3 else 语句块4 语句块5 忌讳 大括号不配对 也不对齐 不知谁跟谁配对 例4 9 编写一程序 进行十进制数 八进制数和十六进制数之间的转换 04 doc 例 商店售货 按购买货物款的多少分别给予不同的优惠折扣 编程计算实际应付货款 1 购货不足250元 没有折扣 2 购货250元 含250元 下同 不足500元 减5 3 购货500元 不足1000元 减价7 5 4 购货1000元 不足2000元 减价10 5 购货2000元及以上 减价15 1 算法分析 设购物款为M 折扣为D 则D可表示为 D 0 M 250 D 0 05 250 M 500 D 0 075 500 M 1000 D 0 1 1000 M 2000 D 0 15 2000 M voidmain 程序代码 if m 250 t m 1 d 计算应付款printf 实际应付款 f t floatm d t printf 请输入购物金额 scanf f voidmain floatm d t printf 请输入购物金额 scanf f if m 250 t m 1 d 应付款printf 实际应付款 f t 形式 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式m 语句melse语句n 这样改写的优点 的根 2 数据结构 由于问题简单 只需用到一些单精度实数 例 求一元二次方程 第4章选择结构程序设计 3 伪代码 输入方程系数a b c计算判别式d b b 4 a cif判别式大于等于0then 计算两个实根定位输出光标打印结果 else 计算实部计算虚部定位输出光标打印结果 endprogram 第4章选择结构程序设计 include includevoidmain floata b c d x1 x2 p q printf 输入方程系数 scanf f f f d b b 4 a c if d 0 x1 b sqrt d 2 a x2 b sqrt d 2 a printf x1 f x2 f n x1 x2 else p b 2 a q sqrt d 2 a printf x1 f i f x2 f i f n p q p q 一 逻辑量的概念 逻辑值 真 假 或T F表示方式 0表示 假 非0表示 真 系统真值 1 二 关系运算符 关系运算符含义例子结果优先级 大于4 6 9 大于或等于6 5 小于或等于8 7 等于2 3 6 不等于9 3 12 TTTFFF 相同 高 相同 低 关系表达式和逻辑表达式 用关系运算符将两个算术表达式或两个字符串表达式联起来的式子 其值为逻辑值 例 includemain inta b a 10 5 6 b 10 5 6 printf d d n a b 输出结果 0 1 例 includemain inta b a 6 7 7 8 b 7 7 3 printf d d n a b 输出结果 1 1 三 关系表达式 非 与 或 1 运算符 2 运算法则 T真 F假 值逻辑非逻辑与逻辑或XY XX YX YTTTFFTFF FTT FFT TFT TFF 四 逻辑运算符 用逻辑运算符连接关系表达式的式子称逻辑表达式 例用逻辑表达式表达下述数学式 1 080 3 10 x 30 50 x 90 相应的逻辑表达 1 0 x x 10 2 x180 或 x 60 x 80 3 x 10 x 50 x 90 x 10 0 60 80 x 10 50 90 x 30 x x 五 逻辑表达式 2 运算符的优先级 1 逻辑运算符的优先级 高 低 类型 sizeof 赋值运算符 自右至左 逻辑表达式中的优先级 语法 表达式1 表达式2 表达式3 说明 表达式1的值非零 则条件表达式的值为表达式2的值 否则为表达式3的值 执行过程 表达式1 表达式的值为表达式3的值 表达式的值为表达式2的值 T F 条件运算符 voidmain inta b scanf d d 在某种情况下 条件运算符可以代替if语句 简化程序书写 voidmain inta b scanf d d 改写后 例 从键盘输入两个整数 按大小顺序输出 例 从键盘输入一字符 如果为Y 则打印是 若为N 打印否 其它字符 打印输入错误 includevoidmain chara printf 输入一个字符 a getchar if a Y a N if a Y printf 是 elseprintf 否 elseprintf 输入数据不合要求 嵌套不能太深 一般以三层为限 嵌套太深 容易出错 例4 12 用户从键盘输入3个整数 找出并输出其中数值最大的那一个 如果其中有一个以上的最大数 两数相等的情况 也要表示出来 includevoidmain inta b c printf Enter3numbers scanf d d d includevoidmain intx y z printf Iputx y z scanf d d d 嵌套不能太深 一般以三层为限 嵌套太深 容易出错 例 从键盘输入三个整数 判断其正负情况 includevoidmain intx y z printf Iputx y x scanf d d 利用逻辑表达式将上例改写 第4章选择结构程序设计 改写后的程序结构要清晰得多 例 将输入的字母转化为小写字母 1算法分析 在计算机中 处理英文字母 其实是处理它的ASCII码值 将大写字母变成小写字母 就是将大写字母的ASCII码值变为相应的小写字母的ASCII码值 大写字母的ASCII值比小写字母的ASCII值小32 故将相应字母的ASCII值加32就变成了小写字母 程序设计时 要注意如果输入的不是大写的字母 则不用转换 voidmain charch scanf c 2源程序代码之一 voidmain charch scanf c 注意 1 条件运算符优先于赋值运算符 低于关系运算符2 条件运算符的结合方向为 自右至左 a b a c d c da b a c d c d 此处使用了条件运算符 3源程序代码之二 等价于 includevoidmain inti printf 输入数字1 7 scanf d 例 输入星期中的某一天 显示对应的英文 是否有更好的办法来解决多分支程序结构 语法 switch 表达式 case常量表达式1 语句块1case常量表达式2 语句块2 case常量表达式N 语句块Ndefault 语句块N 1 switch多重选择语句 说明 switch后的表达式可以是char byte short orint类型 case后的表达式与switch后的表达式相等时 case后的语句被执行 若一个相等的也没有时 执行default后面语句 若没有default时 则结束switch语句 case后的表达式必须互不相同 否则出错 case与default出现的顺序不影响执行结果 执行完一个case语句块后 流程转到下一个case语句继续执行 在执行过程中碰到break语句 程序退出switch结构 voidmain inti printf 输入数字1 7 scanf d 例switch 用switch语句重写打印星期程序 voidmain inti printf 输入数字1 7 scanf d 语法 break 功能 1 退出所在switch语句2 退出所在循环 for while do break语句 格式 continue 功能 忽略continue以下的循环体 重新回到循环开始 对continue所在循环有效 continue语句 例 用switch语句重写前例的程序 voidmain chara printf 输入一个字符 a getchar if a Y a N if a Y printf 是 n elseprintf 否 n elseprintf 字符不合要求 n voidmain chara printf 输入字符 a getchar switch a case Y printf 是 n break case N printf 否 n break default printf 字符不合要求 n 例4 9B 在屏幕上显示菜单 分析 程序首先在屏幕上将功能显示出来 用户根据需要选择相应的功能 程序根据用户的选择执行相应的程序段 对于这类程序 往往是用户输入一个英文字母 然后程序根据字母来断别程序该执行什么程序段 故一般用switch语句比较方便 2源程序清单 switch a case i printf 调用输入模块 break case o printf 调用输出模块 break case l printf 调用查找模块 break case q printf 调用退出模块 break main intchara printf 请选择 printf 输入i printf 输出o printf 找出最长的单词l printf 退出q a getchar 执行选项时 要调用相应的模块 程序段 由于现在还没有相应的程序 暂用一条打印语句代替 以后会用相应程序代替 语法 goto语句标号 有效的C标识符 不能是整数 功能 改变程序执行的顺序 无条件转移到语句标号所指定的语句行 语句标号 语句某一行的名字 一般情况下可省 定义标号例 loop x x 1 无条件转移语句 goto语句 使用goto例 gotoloop 例4 14 统计某班级中计算机课程中考试成绩高于80分的人数 假设学生人数为 voidmain inti fs j 0 Loop scanf d 1 分支结构 改变程序的执行流程 或有选择地执行程序 2 if else和switch是结构化语句 而goto语句不是 3 块if语句可以取代所有的分支结构 而多重分支结构不可 4 块if语句中的条件可以是复杂逻辑表达式 而多重分支中的条件只能是简单表达式 5 块if与goto语句结合 可以构造任何复杂的循环 但用专门的循环语句更方便 本章小结 易出错内容 if后的条件不用括号括起来if条件后加上分号关系运算符 和赋值运算符 区分习惯于数学的区间表示 如00 x 5if多层嵌套语句的匹配关系分不清在switch语句中漏掉break语句 作业 1 编写程序 输入一个整数 输出它是奇数还是偶数 2 输入3个整数 要求按照从大到小的顺序输出 3 输入一个整数 求其平方根和立方根 考虑负数情况 4 p1115 65 p1115 8
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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