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

上传人:max****ui 文档编号:6335323 上传时间:2020-02-23 格式:PPT 页数:64 大小:730.31KB
返回 下载 相关 举报
C语言选择结构程序设计.ppt_第1页
第1页 / 共64页
C语言选择结构程序设计.ppt_第2页
第2页 / 共64页
C语言选择结构程序设计.ppt_第3页
第3页 / 共64页
点击查看更多>>
资源描述
第五章选择结构程序设计 5 1关系运算符和表达式5 2逻辑运算符和表达式5 3if语句5 4条件运算符和表达式5 5switch语句 5 1关系表达式 由关系运算符 圆括号把两个表达式连接起来的式子 表示条件若所表示的条件成立 则其值为1 非0 否则其值为0 关系运算符 例 a 2 3 9 a a 8 x y 3 k z a 3 k l 97 8 表达式值为1 优先 成立为1不成立为0 非 注意 数学中多个条件 例a b c d应表示为a b b c c d不能顺手也写为a b c d关系运算符都是双目运算符 其结合性均为左结合 关系运算符的优先级低于算术运算符 高于赋值运算符 在六个关系运算符中 的优先级相同 高于 和 和 的优先级相同 5 2逻辑表达式 由逻辑运算符 圆括号把表达式连接起来的式子 表示条件若所表示的条件成立 其值为1 非0 否则其值为0逻辑运算符 与 或 非 和 均为双目运算符 具有左结合性 为单目运算符 具有右结合性 逻辑运算符和其它运算符优先级的关系可表示如下 非 与 或 和 低于关系运算符 高于算术运算符 按照运算符的优先顺序可以得出 a b c d等价于 a b c d b c dc x yc x y b 例 设x 0 y 2 a 8 k 1 q 1 z 1 则1 x y 3 a 8 2 3 1 0 1 02 x y a 2 97 13 x y 3 k z a 0 3 1 a 0 0 04 x 7 a 0 7 97 1 97 15 x y 3 a 8 2 3 1 0 1 0 16 k q 1 07 x 1 0 1 逻辑表达式的跳跃 作第一个 知道结果 后面不作 如 非0 不算 0 要算 0 不算 非0 要算 1 执行inta b c a b c 0 a b后a b值分别为0 6 a 1停止不算 值为0赋给a 停止不算 3 执行inta b c a b c 1 a后a b c值分别为0 1 0 1 a 0 2 不算 值为0 3 c 0 4 整体为0 例1 main charc k inti 1 j 2 k 3 floatx 3e 5 y 0 85 printf d d n x y x printf d d n x i 运行结果 0 01 00 1 0 X为非0 为非0 后面不算 为0 后面不算 判断某一年是否闰年 闰年的条件是符合下面两个条件之一 1 能被4整除 但不能被100整除 2 能被4整除 又能被400整除 因为能够被400整除一定能被4整除所以第二个条件可以简化为能够被400整除 判断闰年的条件可以用一个逻辑表达式表示 year 4 0 year 100 0 year 400 0表达式为 真 闰年条件成立 是闰年 否则非闰年 5 3选择结构 if语句 5 3 1if语句的三种形式1 第一种形式为基本形式 ifif 表达式 语句语义 如果表达式的值为真 则执行其后的语句 否则不执行该语句 其过程可表示为下图 表达式可以是任意合法表达式 后面不能加 例2 voidmain inta b max printf ninputtwonumbers scanf d d 输入 2346输出 max 46 此语句用于提示输入 max 23 max 46 例3 voidmain inta b c t printf ninputtwonumbers scanf d d d 输入 1 6 2 输出 621 实现数的互换 功能 输入三个数 按照从大到小顺序输出 例4 从键盘输入一个字符 判断它是否小写字母 若是 将其转换成大写字母 否则不进行转换 作后输出该字母 includemain charc a c getchar if c z a c 判断非小写字母情况 if c a a c 32 判断是否是小写字母情况 printf c n a main charc c getchar if c a c 32 printf c n c 2 第二种形式为 if elseif 表达式 语句1 else语句2 语义 如果表达式的值为真 则执行语句1 否则执行语句2 后面不能加 voidmain inta b printf inputtwonumbers scanf d d 输入 2346输出 max 46 输入两个整数 输出其中大数 例2的改写 3 第三种形式为if else if形式 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 elseif 表达式m 语句m else语句n 语义 依次判断表达式的值 当出现某个值为真时 则执行其对应的语句 然后跳到整个if语句之外继续执行程序 如果所有的表达式均为假 则执行语句n 然后继续执行后续程序 后面不能加 此为真 做语句1 其它语句都不做 上面的语句为以下三种格式 1 空语句2 一个语句 不引起转移 3 前后加大括号的语句 复合语句 也叫程序段 如 inta floatb a 3 b 7 0 允许在复合语句前部定义变量 只能在复合语句中使用 inta a 3 floatb b 7 0 变量要在最前面定义 不能写成 include stdio h voidmain 输入 Acharc 输出 Thisisacapitalletterc getchar if c 0 例5 4 在使用if语句中应注意以下问题 1 在三种形式的if语句中 在if之后均为表达式 该表达式通常是逻辑表达式或关系表达式 但也可以是其它表达式 如赋值表达式等 甚至也可以是一个变量 例如 if a 5 语句 if b 语句 都是允许的 只要表达式的值为非0 即为 真 如在 if a 5 中表达式的值永远为非0 所以其后的语句总是要执行的 当然这种情况在程序中不一定会出现 但在语法上是合法的 又如 有程序段 if a b printf d a elseprintf a 0 本语句的语义是 把b值赋予a 如为非0则输出该值 否则输出 a 0 字符串 这种用法在程序中是经常出现的 为赋值运算符 比较运算符为 2 在if语句中 条件判断表达式必须用括号括起来 在语句之后必须加分号 3 在if语句的三种形式中 所有的语句应为单个语句 如果要想在满足条件时执行一组 多个 语句 则必须把这一组语句用 括起来组成一个复合语句 但要注意的是在 之后不能再加分号 例如 if a b a b else a 0 b 10 if a b a b else a 0 b 10 不能写成 if语句的嵌套 当if语句中的执行语句又是if语句时 则构成了if语句嵌套的情形 其一般形式可表示如下 if 表达式 或if 表达式 if语句 if语句 elseif语句 在嵌套内的if语句可能又是if else型的 这将会出现多个if和多个else重叠的情况 这时要特别注意if和else的配对问题 加 如 if 表达式1 if 表达式2 语句1 else语句2 其中的else究竟是与哪一个if配对呢 是if 表达式1 还是if 表达式1 if 表达式2 if 表达式2 语句1 语句1 elseelse语句2 语句2 注意 if与else的配对关系 else总是与它前面最近的if配对 因此对上述例子应按前一种情况理解 例10 写出下面两程序的输出结果 1 voidmain intx 2 y 1 z 2 if x y if y 0 z 0 elsez 1 printf d n z 结果 一个语句 2 voidmain inta 1 b 3 c 5 d 4 if a b if c d x 1 elseif a c if b d x 2 elsex 3 elsex 6 elsex 7 printf d n x 结果 2 为了使逻辑关系清晰 1 按下面所示书写程序 voidmain inta 1 b 3 c 5 d 4 if a b if c d x 1 elseif a c if b d x 2 elsex 3 elsex 6 elsex 7 printf d n x 2 适当地加大括号 x 3 if x0 y 1 printf x 0 y d n y 把上面与下面比较x 3 if x 0 if x 0 y 1 printf x 0 y d n y else y 1 printf x 0 y d n y 结果 x 0 y 1 无结果 例11 voidmain inta b printf pleaseinputA B scanf d d 输入 输出 if a b if a b printf A B n elseprintf A B n elseprintf A B n 2346 A B 5 4条件运算符和条件表达式 在条件语句中 只执行单个的赋值语句时 可使用条件表达式来实现 条件运算符为 和 它是一个三目运算符 即有三个参与运算的量 条件表达式的一般形式为 表达式1 表达式2 表达式3求值规则为 如果表达式1的值为真 则以表达式2的值作为条件表达式的值 否则以表达式2的值作为整个条件表达式的值 非0 0 例如条件语句 if a b max a elsemax b 可用条件表达式写为 max a b a b 执行该语句的语义是 如a b为真 则把a赋予max 如a b为假 则把b赋予max 使用条件表达式时 还应注意以下几点 1 条件运算符的运算优先级低于关系运算符和算术运算符 但高于赋值符 因此 max a b a b可以去掉括号而写为max a b a b2 条件运算符 和 是一对运算符 不能分开单独使用 3 条件运算符的结合方向是自右至左 例如 a b a c d c d应理解为a b a c d c d 这也就是条件表达式嵌套的情形 即其中的表达式3又是一个条件表达式 例6 计算 方法一 voidmain floatx y scanf f 表达式 成立值为1 y x 3 x x 2 3 x 7 x x 例7 从键盘输入任意的两个实数 按从小到大顺序输出这两个数 请编程实现 voidmain floata b scanf f f 代替 复合语句可以定义变量 a a b b a b a a bt a a b b t 例8 计算 方法一 main floatx y scanf f 1 x 可省略吗 可以 方法二 voidmain floatx y scanf f 可省略 y x 1 x x 10 2 x 1 3 x 11 可省略 方法三 if x 10 if x 1 y x elsey 2 x 1 elsey 3 x 11 后不能加 和 可一起省略 y x 10 x 1 x 2 x 1 3 x 11 若上面分段函数改为则程序改为voidmain floatx y scanf f 此语句出错与否都输出 此程序有否缺陷 程序应改为voidmain floatx y scanf f 例18 求方程ax2 bx c 0的两个实根 includevoidmain doublea b c x1 x2 disc scanf lf lf lf b b 4 a c 0 有解 题目改为 求二次方程ax2 bx c 0的两个根 a 0 一定有解要认真分析题目 达到题目要求 voidmain doublea b c x1 x2 disc p q scanf lf lf lf 5 5switch语句 另一种分支语句 5 5 1格式 switch 任意类型表达式 case常量表达式1 语句1 case常量表达式2 语句2 case常量表达式n 语句n default 语句n 1 注 常量表达式中运算对象只能为常量或符号常量 整型或字符型 各个值必须互不相同 default允许出现在前面或中间 switch 任意类型表达式 后不带分号 不要忘记空格 不带 5 5 2功能 若switch后面表达式值的整数 字符常量 部分与某个case后面表达式值相等 则就执行该case后面的语句 否则就执行default后面的语句 例13 voidmain inta printf inputintegernumber scanf d 输入 3 输出 WednesdaThursdayFridaySaturdaySundayerror case常量表达式 相当于一个语句标号 表达式的值和某标号相等则转向该标号执行 但不能在执行完该标号的语句后自动跳出整个switch语句 所以出现了继续执行所有后面case语句的情况 5 5 3break语句 专用于跳出switch语句 在每一case语句之后增加break语句 使每一次执行之后均可跳出switch语句 从而避免输出不应有的结果 voidmain switch a case1 printf Monday n break case2 printf Tuesday n break case3 printf Wednesday n break case4 printf Thursday n break case5 printf Friday n break case6 printf Saturday n break case7 printf Sunday n break default printf error n Switch语句常用形式 switch 任意类型表达式 case整型或字符型常量表达式1 语句1 break case整型或字符型常量表达式2 语句2 break case整型或字符型常量表达式n 语句n break default 语句n 1 default后面不加break 在使用switch语句时还应注意以下几点 1 case后的各常量表达式的值不能相同 否则会出现错误 2 case后 允许有多个语句 可以不用 括起来 3 case和default子句的先后顺序可以变动 而不会影响程序执行结果 4 default子句可以省略不用 例14 若有宏定义 definek2和定义 floatw inta 2 b 则合法的switch语句是 A switch w B switch a b case1 0 printf n case1printf n case2 0 printf n caseaprintf n C switch w 1 76 D switch a casek 1 printf n case1 printf n default printf n case2 printf n case1 2 printf n default printf n C 不能为实型 不能为变量 少 不能加分号 例15 先接收从键盘输入的一个等级制成绩 然后输出对应的百分制成绩 转换规则如下 A 85 100B 70 84C 60 69D 60 voidmain chargrade scanf c 例16 先接收从键盘输入的一个百分制成绩 然后输出对应的五分制成绩 转换规则如下 90 100A80 89B70 79C60 69D 60E voidmain intcj printf Inputaintegernumber 0 100 n scanf d 90 100A80 89B70 79C60 69D 60E 例17 计算器程序 用户输入运算数和四则运算符 输出计算结果 voidmain floata b charc printf inputexpression a b n scanf f c f 字符相当于整数 输入 11 13输出 25 000000 本例可用于四则运算求值 switch语句用于判断运算符 然后输出运算值 当输入运算符不是 时给出错误提示 例19 输入某年某月某日 判断这一天是这一年的第几天 需考虑闰年的情形 注 符合以下条件之一是闰年 能被4整除 但不能被100整除 能被400整除 算法分析 以5月4日为例 先把1 4月份的天数加起来 然后再加上本月的4天即本年的第几天 闰年情形只需当输入月份大于3时需要考虑 若是闰年 2月份应是29天 voidmain intday month year sum 0 scanf d d d 加上3月份31天 case3 判断是否闰年 if year 4 0 例20 P110运输公司对用户计算运费 路程 skm 越远 每吨 千米运费越低 标准如下 S 250没有折扣250 s 5002 折扣500 s 10005 折扣1000 s 20008 折扣2000 s 300010 折扣3000 s015 折扣设每吨 千米运费为p 货物重量为w 距离为s 折扣为d 则总运费为 f p w s 1 d 输入 p w s 计算运费 voidmain intc s floatp w d f scanf f f s 折扣变化都是250的倍数 s 250则 S 250 1250 s 500 1 2 500 s 1000 2 4 1000 s 2000 4 8 2000 s 3000 8 12 3000 s0 12 case4 case5 case6 case7 d 8 break case8 case9 case10 case11 d 10 break case12 d 15 break f p w s 1 d 100 0 printf f f f s 250则 S 250 1250 s 500 1 2 500 s 1000 2 4 1000 s 2000 4 8 2000 s 3000 8 12 3000 s0 12 运费
展开阅读全文
相关资源
相关搜索

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


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

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


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