C语言第2章选择结构及其应用.ppt

上传人:max****ui 文档编号:6334409 上传时间:2020-02-23 格式:PPT 页数:52 大小:1.18MB
返回 下载 相关 举报
C语言第2章选择结构及其应用.ppt_第1页
第1页 / 共52页
C语言第2章选择结构及其应用.ppt_第2页
第2页 / 共52页
C语言第2章选择结构及其应用.ppt_第3页
第3页 / 共52页
点击查看更多>>
资源描述
第2章选择结构及其应用 C语言程序设计 第2章选择结构及其应用 关系运算符和关系表达式逻辑运算符和逻辑表达式if语句switch语句 概述 选择结构是程序的基本结构 所谓选择结构 就是根据不同的条件 选择不同的程序块 分程序 进行处理 例 if else if else嵌套 if if elseif else if 表达式 语句 if 表达式 语句 else语句 if 表达式 语句 if 表达式 语句 else语句 else语句 if 表达式 语句 elseif 表达式 语句 elseif 表达式 语句 else语句 switch switch 表达式 case常量1 语句1 case常量2 语句2 case常量n 语句n default 语句n 1 2 1关系运算符和关系表达式 关系运算符 关系运算符是对两个操作量进行大小比较的运算符 其操作结果是 真 或 假 用 1 表示真 0 表示假 大于或等于 大于 小于 与数学中的表示方法不一样 注意区分C中的 与 2 1关系运算符和关系表达式 关系表达式 是用关系运算符把操作对象连接起来而构成的式子 操作对象可以是各种表达式 关系表达式运算结果值为1或0 如 6 5 2 结果为 1 例 判断下列关系表达式的值 6 3 3 x 3 5 y 6 10 4 x 6 值为1 值为1 值为1 2 2逻辑运算符和逻辑表达式 逻辑真与逻辑假 逻辑运算是用来判断一件事情是 成立 还是 不成立 判断的结果只有两种 分别用数 1 和 0 来表示 其中 1 表示该逻辑运算的结果是 成立 的 0 表示该逻辑运算的结果是 不成立 的 C语言的数据类型里没有逻辑数据类型 但对参与逻辑运算的所有的数值 都将转换为 逻辑真 或 逻辑假 后才参与逻辑运算 如果参与逻辑判断的数值为 0 则把它作为 逻辑假 处理 如果参与逻辑判断的数值不为 0 则把它作为 逻辑真 处理 不是将数值1作为逻辑真 而是将非0的数值都作为逻辑真 上述的逻辑判断方法可以归纳为 判假不判真 非假即真 2 2逻辑运算符和逻辑表达式 逻辑运算符 逻辑非 单目运算符 逻辑与 双目运算符 逻辑或 双目运算符 逻辑运算把一切 非0 的数作为真 把 0 数作为假 逻辑运算是 非0 和 0 两类数据或真和假两种状态的运算 C语言中有三个逻辑运算符 逻辑与 逻辑或 逻辑非 与 逻辑与 有假则假 全真才真 S1 S2是两个开关 L是一个灯泡 在这个电路图中开关S1和S2只有两种状态 闭合 用1表示 和断开 用0表示 灯泡也只有两种状态 亮 用1表示 和不亮 用0表示 灯泡是否亮和两个开关的闭合 断开之间就形成了一种逻辑运算 例如 5 34 0 或 逻辑或 有真则真 全假则假 例如 5 34 0 非 逻辑非 例如 2 0 2 2逻辑运算符和逻辑表达式 逻辑表达式 是用逻辑运算符把操作对象连接起来而构成的式子 逻辑表达式运算结果值为1或0 注意区分逻辑量与逻辑值 例 4 7的逻辑值为1 逻辑量 凡是参加逻辑运算的变量 常量都是逻辑量 以0代表 假 以非0代表 真 逻辑值 逻辑量 逻辑表达式的运算结果的值就是逻辑值 逻辑值只能是 0 和 1 这二个数 1 表示逻辑真 成立 0 表示逻辑假 不成立 逻辑量与逻辑值间的关系 一切非 0 的逻辑量其逻辑值都为真 注意2 x 7在C语言中的表示方法 2 3if分支 if e S e的结果为真 非0 则执行S e的结果为假 0 则继续执行 格式 功能 e是表达式 一般为逻辑表达式或关系表达式 S是一条语句或分程序 程序块 用 括起来的复合语句 在执行if语句时 先对表达式e求解 若表达式的值为0 按 假 处理 若表达式e的值为非0 按 真 处理 如if 5 printf ok 就是一条合法的if分支语句 if if 表达式 语句 程序形式 程序流程 表达式 语句 真 假 关系或逻辑表达式等 一个if结构是一条语句 注意写法 例如 if x y printf thebiggeroneis d x Pleaseinputa 99 CR OK include stdio h main inta printf nPleaseinputa scanf d 运行程序 例 若输入一个整数是3的倍数 则显示 OK 否则什么也不显示 注意 判断是否相等用 而不能用赋值运算符 例2 3 求两个数a和b中较大的数 include stdio h voidmain inta b x 定义3个变量 printf pleaseinputtwointegers 屏幕输出提示语 scanf d d 输出结果 使用if分支语句需注意以下几点 1 if后面的表达式e必须用圆括号括起来 2 表达式e可以是任何有取值的表达式 表达式e结果为非0值即条件为真则执行S语句 只有表达式e的结果为0即条件为假时才跳过S语句继续执行程序中的下一条语句 3 尤其需要注意的是 表达式e中一定要区分赋值运算符 和关系运算符 例 y 8 if x 5 y 2x 只有在x值为5的时候y 2x这条语句才能执行 运行之后y值为10 但若写成 y 8 if x 5 y 2x 则不管x值为多少 y值都为10 4 if分支中的S语句可以是单语句 也可以是复合语句 若为复合语句一定要将所有的S语句用花括号 括起来 格式 功能 if e S1 elseS2 e是表达式 S1 S2是一个语句或分程序 程序块 也可以是空语句 e的结果为真 非0 则执行S1 e的结果为假 0 则执行S2 2 3 2if else分支语句 if分支只允许在条件为真时指定要执行的语句 而if else分支还可在条件为假时指定要执行的语句 if else if 表达式 语句1 else 语句2 程序形式 程序流程 表达式 语句2 语句1 假 真 没有表达式 关系或逻辑表达式等 if else分支中 每个else前有一分号 整个语句结束处有一分号 但要注意整个if else分支是一条语句 else分支必须是if语句的一部分 一定要与if配对使用 include stdio h main intnum printf nPleaseinputanumber scanf d Pleaseinputanumber 89 CR lessthanorequal100 运行程序 例 输入一个整数 判断其值是否大于100 include stdio h main inta b printf nPleaseinputaandb scanf d d Pleaseinputaandb 100 99 CR max 100 运行程序 例 输入两个整数 将较大的数输出 2 3 3多分支if elseif else形式 程序形式 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 else语句4 表达式 if elseif else多分支结构可以判断多种情况 A 90 A 90 100 B 80 B 80 89 C 70 C 70 79 D 60 D 60 69 E 0 E 0 59 main floatscore printf nEnterascore scanf f 例 学生成绩分A B C D E五等 任给一个成绩 判断它属于哪一等 用if elseif分支语句编程 该程序score大于100 输出A score小于0 输出ErroeData score值应在0 100之间 例 计算并输出y的值3x 1x 25 include math h include stdio h main floatx y scanf f 例 找出错误的if语句 1 if x y 2 if x y a 10elsea 100 3 if x y a 10 printf d a elsea 100 4 if 5 a 10 2 3 2 if x y a 10 elsea 100 3 if x y a 10 printf d a elsea 100 2 3 4嵌套的if语句 if e1 if e2 S3 elseS4 elseif e3 S5 elseS6 入口 入口 分支嵌套应注意 if和else的配对关系 程序的走向 即程序的入口和出口 执行部分和非执行 跳出 部分 if e1 S1 elseS2 在程序设计中 经常用到条件分支嵌套 条件分支嵌套就是在一个分支中包含 嵌套 另一个分支 每个分支都要有被执行的可能性 main intx y z min printf nPleaseinputx y z scanf d d d Pleaseinputx y z 100529 CR min 5 运行程序 例 任意输入三个整数 求其中最小的数 if与else配对关系 一个else总是与其上面距它最近的 并且没有其它else与其配对的if相配对 最好将程序中配对的if else的位置对齐 这样可以提高程序的可读性 程序的走向 即程序的入口和出口 执行部分和非执行 跳出 部分 每个if else有一个入口 两个出口 if与else配对关系与程序的走向 if e1 if e2 s1 elseif e3 s2 elses3 入口 if e1 if e2 s1 elseif e3 s2 elses3 入口 出口 if与else配对关系 对于选择结构的程序来说 每次运行程序时 只能从一个入口进 一个出口出 即只能有一个分支被执行 例 假定所有变量均已正确定义 下列程序段执行后 x的值是 a b c 0 x 35 if a x elseif b if c x 3 elsex 4 A 34B 4C 35D 3 答案 B if a x elseif b if c x 3 elsex 4 x 34 x 4 3 3 5开关分支 在计算机程序设计中 实际问题常常需要用到多分支的选择 if else语句只能有两个分支可供选择 不能满足多分支的需要 if elseif嵌套形式可以满足多分支的要求 也可选用switch语句 switch是多分支选择语句 其中 e是表达式 c1 是常量表达式 s1 s2 sn sn 1是一个语句或程序块 开关分支是分支结构的另一种形式 该语句执行时它根据条件的取值来选择程序中的一个分支 switch分支语句形式如下 switch e casec1 s1 break casec2 s2 break casecn sn break default sn 1 break 程序流程图 语句1 casec1 switch 表达式 语句n 语句n 1 casecn default 有break语句的执行情况 下一条语句 main chara printf Pleaseinputthesalarylevel n printf Between1to5 whichischartype n scanf c 例 输出不同工资水平的税率 switch语句的特点 在switch语句中 case常量表达式 只相当于一个语句标号 表达式的值和某标号相等则转向该标号执行 但不能在执行完该标号的语句后自动跳出整个switch语句 这与前面介绍的if分支语句完全不同 应特别注意 为此 语言提供了break语句 专用于跳出switch语句 break语句只有关键字break 没有参数 main chara printf Pleaseinputthesalarylevel n printf Between1to5 whichischartype n scanf c 例 输出不同工资水平的税率 例 计算器程序 用户输入运算数和四则运算符 输出计算结果 include stdio h voidmain floata b charc printf pleaseinputexpression a b n scanf f c f switch e casec1 s1 break casec2 s2 break casecn sn break default sn 1 break 整型 字符型常量 变量或枚举类型表达式 其结果值必须是整型数据或字符型数据 例 main chara switch 5 6 3 switch a 常量表达式 字符型变量 1 switch后面的e表达式可以是整型 字符型等类型表达式 使用switch case分支语句时 应注意以下几点 switch e casec1 s1 break casec2 s2 break casecn sn break default sn 1 break 例 case1 case a case120 2 case后面的ci为常量表达式 可以是一个整型 字符型常量数据或枚举常量 使用switch case分支语句时 应注意以下几点 switch e casec1 s1 break casecn sn break default sn 1 break casec2 s2 break 3 各个case及default default之后有break语句时 的次序是任意的 但各case后的常量 判断 值必须不同 使用switch case分支语句时 应注意以下几点 switch e casec1 s1 break casec2 s2 break casecn sn break 建议使用default语句 增加default会给switch分支的逻辑检查带来方便 4 在switch开关分支语句结构中 default部分不是必须的 如果没有default部分 则当e表达式的值与各case后的ci常量表达式的值都不一致时 则程序不执行该结构中的任何部分 使用switch case分支语句时 应注意以下几点 例 switch c case A uppernum case a lowernum default sum 例题分析 若c的取值是A 则三个分支即uppernum lowernum sum 都被执行 若c的取值是a 则最后两个分支即lowernum sum 被执行 若c的取值即不是A也不是a 则只执行sum 5 各分支语句中的break语句作用是控制程序退出switch结构 若程序没有break语句 则程序将继续执行下面一个case中的程序块 使用switch case分支语句时 应注意以下几点 6 在开关分支语句中 最后的break语句也可以省略 其作用也就消失 一般情况应使用它 switch e casec1 s1 break casec2 s2 break casecn sn break default sn 1 break 使用switch case分支语句时 应注意以下几点 例 switch c case1 case2 case3 printf taxis 30 n break case4 printf taxis 8 n break default printf taxis 0 n break 程序中case1 case2和case3共用case3语句 7 在switch开关分支语句结构中 如果几种情况 多个表达式取值 都执行相同的程序块时 则对应的多个case可共同使用同一个程序块 使用switch case分支语句时 应注意以下几点 includemain charscore printf nEnterthescore scanf c 思考 将此例根据学生成绩的等级打印分数段的if elseif语句改为用switch语句 比较两程序 8 switch语句用来实现多分支结构 条件判断如果有两个以上基于同一个数据类型变量的条件表达式时 选用switch语句比选用if elseif语句的嵌套形式更方便 使用switch case分支语句时 应注意以下几点 运行程序 main inta 2 b 7 c 5 switch a 0 case1 switch b 0 case0 printf break case1 printf break default printf break break case0 switch c 5 case0 printf break case1 printf break default printf break break default printf 例 读下面的程序 写出程序的输出结果 如果没有break结果 如果没有break结果 includemain charc b c getchar putchar c putchar n b c if c A AAa 程序运行 例 从键盘上输入一个字符 输出其对应的小写字符 include includemain floata b c rpart ipart x1 x2 p scanf f f f ax2 bx c 0 P b2 4ac P 0 P 0 例 求一元二次方程根的解 else rpart b 2 a ipart sqrt fabs p 2 a printf Therearetwocomplexroots printf nx1 f fi rpart ipart printf nx2 f fi rpart ipart main intc grade printf inputgrade 0 100 scanf d break inputgrade 0 100 89gradeB 运行程序 例 根据百分成绩 输出等级成绩ABCDE 用switch分支语句编程 main intgrade printf inputgrade 0 100 scanf d 例根据百分成绩 输出等级ABCD 用if elseif分支语句编程 100 出错 90 100 A 80 89 B 70 79 C 60 69 D 60 不及格 缩排 缩排是书写程序的一种方法 即语句相对于上一条语句后退若干个字符位置的书写方法 像写文章 每个段落的开始均缩进两个字的位置 缩排的目的是使源程序的层次清晰明了 增加源程序的可读性 良好的书写习惯无论对程序的编者还是对程序的学习者都是有好处的 main intx y z max printf nPleaseinputx y z scanf d d d 例如 在分支程序中 用缩排的书写方法 可清楚的看出程序的条件为真 条件为假时 程序的分支情况 第二章结束
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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