C语言程序设计选择结构程序设计.ppt

上传人:max****ui 文档编号:6334104 上传时间:2020-02-23 格式:PPT 页数:56 大小:1.41MB
返回 下载 相关 举报
C语言程序设计选择结构程序设计.ppt_第1页
第1页 / 共56页
C语言程序设计选择结构程序设计.ppt_第2页
第2页 / 共56页
C语言程序设计选择结构程序设计.ppt_第3页
第3页 / 共56页
点击查看更多>>
资源描述
第4章选择结构程序设计 C语言程序设计 北京航空航天大学交通科学与工程学院徐国艳 2020 2 23 2 本章主要内容 4 1关系运算符和关系表达式4 2逻辑运算符和逻辑表达式4 3if语句4 1 1if语句的一般形式4 1 2if语句的嵌套4 4switch语句4 2 1switch语句的一般形式4 2 2break语句4 5选择结构程序设计举例 2020 2 23 3 4 1关系运算符和关系表达式一 关系运算符及其优先顺序1 关系运算符 关系运算符的优先级高于赋值运算符 但低于算术运算符 2 优先顺序 例如 c a b等价于c a b a b c等价于 a b c 错误表达式 2020 2 23 4 二 关系表达式用关系运算符将两个表达式连接起来的式子称为关系表达式 关系表达式的值是一个逻辑值 即 真 或 假 用 1 或 0 表示 例如 当a 1 b 2 c 3时 a b值为0 若有d a b 则d的值为0b c值为1 若有d b c 则d的值为1 2020 2 23 5 4 2逻辑运算符和逻辑表达式一 逻辑运算符及其优先顺序1 逻辑运算符 逻辑非 逻辑与 逻辑或 2 优先顺序 参见P365附录C 算术关系位逻辑条件赋值 高低 高 低 2020 2 23 6 3 逻辑运算的真值表 2020 2 23 7 二 逻辑表达式1 用逻辑运算符将关系表达式或逻辑量连接起来的式子 称为逻辑表达式 2 逻辑表达式的运算结果 用 1 代表 真 0 代表 假 2020 2 23 8 简单分支语句 语句一般格式if 表达式 语句 功能 计算表达式的值 如果是一个非0值 即逻辑真 就执行内嵌语句 否则 即逻辑假 跳过内嵌语句 顺序执行后续语句 4 3if语句 2020 2 23 9 简单分支语句的算法 例如 if x 0 m if a b c a a b b c 2020 2 23 10 双重分支语句 语句一般格式if 表达式 语句1else语句2功能 计算表达式的值 如果它的值是一个非0值 逻辑真 就执行内嵌语句1 之后跳过内嵌语句2 执行后续语句 否则跳过内嵌语句1 执行内嵌语句2 之后执行后续语句 2020 2 23 11 双重分支语句的算法 例如 if x 0 m elsem if ch a 2020 2 23 12 多重分支语句 语句一般格式if 表达式1 语句1elseif 表达式2 语句2 elseif 表达式m 语句melse语句n语句n 1功能 依次计算并判断表达式i 为非0时执行它后面的语句 都为0时 执行语句n无论执行完那个语句分支 都转到后续语句n 1 2020 2 23 13 多重分支语句的算法 流程图 2020 2 23 14 多重分支语句的算法 N S结构图 例如 if a 0 x 1 elseif a 0 x 0 elsex 1 2020 2 23 15 if语句的简单应用 例4 1 输入一个字符 如果是大写字母 则将其转换为小写字母输出 否则直接输出 输入 用getchar或scanf函数ch是否为大写字母 ch A ch 65 ch 90 大写字母转换为小写字母 ch ch 32输出 用putchar或printf函数 思路 2020 2 23 16 程序 include stdio h voidmain charch ch getchar if ch A 程序运行情况如下 G g 可使用条件表达式代替 putchar ch A putchar n 条件运算符和条件表达式 有一种if语句 当被判别的表达式的值为 真 或 假 时 都执行一个赋值语句且向同一个变量赋值如 if a b max a elsemax b max a b a b 条件运算符 max a b a b 条件表达式 条件运算符和条件表达式 有一种if语句 当被判别的表达式的值为 真 或 假 时 都执行一个赋值语句且向同一个变量赋值如 if a b max a elsemax b 条件表达式的一般形式为表达式 表达式 表达式 条件运算符和条件表达式 条件运算符的执行顺序 求解表达式1 若为非0 真 则求解表达式2 此时表达式2的值就作为整个条件表达式的值 若表达式1的值为0 假 则求解表达式3 表达式3的值就是整个条件表达式的值 条件运算符和条件表达式 条件运算符优先于赋值运算符条件运算符的结合方向为 自右至左 以下为合法的使用方法 a b max a max b a b printf d a printf d b 条件运算符和条件表达式 例4 1输入一个字符 判别它是否大写字母 如果是 将它转换成小写字母 如果不是 不转换 然后输出最后得到的字符 用条件表达式 条件运算符和条件表达式 includeintmain charch scanf c 条件运算符和条件表达式 2020 2 23 24 4 3 2if语句的嵌套 如果if的内嵌语句中又使用了一个if语句 则构成if语句的嵌套 例4 2 比较两个整数的关系 includevoidmain intx y printf EnterintegerXandY scanf d d 应该正确判断 if的内嵌语句if和else的配对 提倡锯齿形缩格书写有利于阅读程序 2020 2 23 25 if语句嵌套的形式 简单if语句的嵌套形式if 表达式 if语句双重 或多重 分支if语句的嵌套形式if 表达式 if语句elseif语句 可以是各种形式的if语句 可以是各种形式的if语句 如果是简单if语句 必须用 括起 2020 2 23 26 例如 if c 50 printf 50 50 printf 50150 n if c 50 printf 50 c 100 n elseprintf c 50 n 与哪个if配对 2020 2 23 27 再例如 if a b if a c if a d m 1 elsem 2 elsem 3 问题 哪一个else和哪一个if相匹配 规则 在嵌套的if else语句中 else总是与上面的离它最近的尚未配对的if配对 2020 2 23 28 举例 例4 3 输入一个数 判断它是奇数还是偶数 如果是奇数则进一步判断它是否为5的倍数 2020 2 23 29 程序 includevoidmain intx scanf d 2020 2 23 30 学习if语句的难点 if else语句的配对正确用表达式描述条件例如 当x大于5小于10时令x自增if 5 x 10 x 正确判断内嵌语句例如 if x y x x 3 y y 2 elsex x 3 y y 2 if x 5 2020 2 23 31 熟悉常用的if表达式形式 例如有定义 inta 3 b 0 下面哪个表达式执行语句 b 2 1 if a 0 b 2 2 if a 1 b 2 3 if a 0 b 2 4 if a 1 b 2 5 if a 0 b 2 6 if a b 2 7 if a b 2 等价于 等价于 2020 2 23 32 4 4switch语句 switch语句的一般形式switch 表达式 case常量表达式1 语句序列1case常量表达式2 语句序列2 case常量表达式n 语句序列ndefault 语句序列n 1 功能 计算表达式的值 与常量表达式的值比较 等于第i个值时 顺序执行语句序列i i 1 n 1若与所有常量表达式值都不相等 执行语句序列n 1 2020 2 23 33 switch语句的算法描述 N S结构图 例如 switch a case5 printf 当a等于5 输出 当a等于2 输出 当a是其他值 输出 2020 2 23 34 说明 case常量表达式i 等价于语句标号 计算出的表达式值等于哪个语句标号 就从哪个位置开始顺序向下执行语句序列 语句位置影响运行结果 例如 switch a case2 printf default printf case5 printf switch与break语句结合才能实现程序的分支 break break break 2020 2 23 35 switch语句的简单应用 例4 4 已知x 100 y 15 要求输入一个算术运算符 或 并对x和y进行指定的算术运算 思路 设x和y为float型变量并赋初值 输入的运算符op为char型变量 根据op的值 为 进行x和y的相加 相减 相乘 相除运算 选择分支 还要考虑到输入字符不是 或 时的情况 2020 2 23 36 程序 include stdio h include math h voidmain floatx 100 y 15 z charop op getchar switch op case z x y break case z x y break case z x y break case z x y break default z 0 if fabs z 1e 6 printf f c f f n x op y z elseprintf cisnotanoperator n op 实型数通常不使用z 0或z 0的比较可用fabs z 代替 2020 2 23 37 注意 switch语句的书写格式 语句体本身必须用花括号括起 case和default后面如果有多条语句 可以不必使用花括号 case和常量表达式之间必须有空格 default可以写在语句体的任何位置 也可以省略不写 break语句可以改变case的语句标号作用 终止后续case语句序列的执行 switch语句和break语句结合 可以实现程序的选择控制 break语句还可以在循环语句中使用 允许switch嵌套使用 但同一个switch语句中 任意两个case的常量表达式值不能相同 2020 2 23 38 4 4选择结构程序设计举例 例4 5 求一元二次方程ax2 bx c 0的根 思路 一元二次方程的根取决于系数a b c求根公式 判别式d b2 4ac当d 0时 方程有两个相等的实根 x1 x2 b 2 a 当d 0时 方程有两个不相等的实根 x1 b sqrt d 2 a x2 b sqrt d 2 a 当d 0时 方程有两个虚根 x1 jp ipix2 jp ipi 实部jp b 2 a 虚部ip sqrt d 2 a 2020 2 23 39 算法 2020 2 23 40 程序 include stdio h include math h voidmain floata b c d x1 x2 lp ip scanf f f f 2020 2 23 41 程序 续 elseif d 1e 6 不相等的实根 x1 b sqrt d 2 a x2 b sqrt d 2 a printf hastworealroots n printf x1 8 4f x2 8 4f n x1 x2 else 虚根 lp b 2 a ip sqrt d 2 a printf hastwocomplexroots n printf x1 8 4f 8 4fi n lp ip printf x2 8 4f 8 4fi n lp ip 2020 2 23 42 举例 续 例4 6 输入年份 判别该年是否为闰年 思路 年份year为闰年的条件为 能够被4整除 但不能被100整除的年份 能够被400整除的年份 只要满足任意一个就可以确定它是闰年 例如 1996年 2000年是闰年1998年 1900年不是闰年 设定标志变量leap 只要符合其中一个条件的就是闰年 令leap 1 否则令leap 0 2020 2 23 43 算法 year 4 0 year 100 0 2020 2 23 44 程序 include stdio h voidmain intyear leap scanf d 例4 7要求按照考试成绩的等级输出百分制分数段 A等为85分以上 B等为70 84分 C等为60 69分 D等为60分以下 成绩的等级由键盘输入 解题思路 判断出这是一个多分支选择问题根据百分制分数将学生成绩分为4个等级如果用if语句 至少要用3层嵌套的if 进行3次检查判断用switch语句进行一次检查即可得到结果 includeintmain chargrade scanf c 值为A includeintmain chargrade scanf c 不能少 includeintmain chargrade scanf c 值为C includeintmain chargrade scanf c 值为F switch语句的作用是根据表达式的值 使流程跳转到不同的语句switch语句的一般形式 switch 表达式 case常量1 语句1case常量2 语句2 case常量n 语句ndefault 语句n 1 整数类型 包括字符型 switch语句的作用是根据表达式的值 使流程跳转到不同的语句switch语句的一般形式 switch 表达式 case常量1 语句1case常量2 语句2 case常量n 语句ndefault 语句n 1 不能相同 scanf c scanf c scanf c 2020 2 23 56 作业 P11136910
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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