c语言-第5章选择结构程序设计.ppt

上传人:max****ui 文档编号:6332197 上传时间:2020-02-23 格式:PPT 页数:34 大小:434.81KB
返回 下载 相关 举报
c语言-第5章选择结构程序设计.ppt_第1页
第1页 / 共34页
c语言-第5章选择结构程序设计.ppt_第2页
第2页 / 共34页
c语言-第5章选择结构程序设计.ppt_第3页
第3页 / 共34页
点击查看更多>>
资源描述
2020 2 23 1 第5章选择结构程序设计 要设计选择结构程序 要考虑两个方面的问题 一是在C语言中如何来表示条件 二是在C语言中实现选择结构用什么语句 在C语言中表示条件 一般用关系表达式或逻辑表达式 实现选择结构用if语句或switch语句 5 1关系运算及其表达式5 2逻辑运算及其表达式5 3if语句5 4switch语句5 5选择结构程序举例良好的源程序书写风格 注释 2020 2 23 2 第五章选择结构程序设计 根据选择结构的组成特点 分析问题时着重明确以下两点 1 条件是什么2 条件成立和不成立时分别执行什么操作 2020 2 23 3 引例 需考虑 输入x 判断x的值 根据x值 计算y值 输出y值 显然 顺序程序不能够实现 须引入选择结构程序 关系运算 Enterx 2x 2 00y 0 4546 2020 2 23 4 5 1关系运算及其表达式 所谓 关系运算 实际上就是 比较运算 即将两个数据进行比较 判定两个数据是否符合给定的关系 例如 a b 中的 表示一个大于关系运算 如果a的值是5 b的值是3 则大于关系运算 的结果为 真 即条件成立 如果a的值是2 b的值是3 则大于关系运算 的结果为 假 即条件不成立 2020 2 23 5 5 1 1关系运算符及其优先次序1 关系运算符C语言提供6种关系运算符 大于 大于或等于 等于 不等于 注意 在 语言中 等于 关系运算符是双等号 而不是单等号 赋值运算符 2 优先级 1 在关系运算符中 前4个优先级相同 后2个也相同 且前4个高于后2个 2 与其它种类运算符的优先级关系关系运算符的优先级 低于算术运算符 但高于赋值运算符 P366 2020 2 23 6 5 1 2关系表达式1 关系表达式的概念 用关系运算符将两个表达式连接起来 进行关系运算的式子 例如 下面的关系表达式都是合法的 a b a b c d a 3 b a b b c 2 关系表达式的值 逻辑值 非 真 即 假 由于 语言没有逻辑型数据 所以用 整数 表示 逻辑真 用整数 表示 逻辑假 2020 2 23 7 例如 假设n1 3 n2 4 n3 5 则 1 n1 n2的值 2 n1 n2 n3的值 3 n1 n3 n2的值 4 n1 n2 n3的值思考题 任意改变n1或n2的值 会影响整个表达式的值吗 再次强调 C语言用整数 1 表示 逻辑真 用整数 0 表示 逻辑假 所以 关系表达式的值 还可以参与其它种类的运算 例如算术运算 逻辑运算等 Return 0116 2020 2 23 8 5 2逻辑运算及其表达式 关系表达式只能描述单一条件 例如 x 0 如果需要描述 x 0 同时 x 10 就要借助于逻辑表达式了 5 2 1逻辑运算及其优先次序 逻辑运算符及其运算规则 1 C语言提供三种逻辑运算符 逻辑与 相当于 同时 且 逻辑或 相当于 或者 逻辑非 相当于 否定 2020 2 23 9 例如 下面的表达式都是逻辑表达式 x 0 x5 x 0 year 4 0 year 100 0 year 400 0 2 运算规则1 当且仅当两个运算量的值都为 真 时 运算结果为 真 否则为 假 2 当且仅当两个运算量的值都为 假 时 运算结果为 假 否则为 真 3 当运算量的值为 真 时 运算结果为 假 当运算量的值为 假 时 运算结果为 真 例如 假定x 5 则 x 0 x5 的值为 假 2020 2 23 10 2 逻辑运算符的运算优先级 P93 1 逻辑非的优先级最高 逻辑与次之 逻辑或最低 即 非 与 或 2 与其它种类运算符的优先关系 算术运算 关系运算 赋值运算 2020 2 23 11 5 2 2逻辑表达式1 逻辑表达式 是指用逻辑运算符将1个或多个表达式连接起来 进行逻辑运算的式子 在C语言中 用逻辑表达式表示多个条件的组合 例如 year 4 0 year 100 0 year 400 0 是一个判断一个年份是否是闰年的逻辑表达式 逻辑表达式的值也是一个逻辑值 非 真 即 假 2020 2 23 12 2 逻辑量的真假判定 和非 语言用整数 表示 逻辑真 用 表示 逻辑假 判断一个数据的 真 或 假 时 却以 和非 为根据 如果为 则判定为 逻辑假 如果为非 则判定为 逻辑真 例如 假设num 12 则 num的值num 1 num31的值 011 2020 2 23 13 3 说明 1 逻辑运算符两侧的操作数 除可以是 和非 的整数外 也可以是其它任何类型的数据 如实型 字符型等 2 在计算逻辑表达式时 只有在必须执行下一个表达式才能求解时 才求解该表达式 即并不是所有的表达式都被求解 即 1 对于逻辑与运算 如果第一个操作数被判定为 假 系统不再判定或求解第二操作数 2 对于逻辑或运算 如果第一个操作数被判定为 真 系统不再判定或求解第二操作数 例如 假设n1 1 n2 2 n3 3 n4 4 x 1 y 1则求解表达式 x n1 n2 y n3 n4 后 x y 表达式的值 2020 2 23 14 5 3if语句和条件运算符 5 3 1if语句 例5 1 输入任意三个整数n1 n2 n3 求三个数中的最大值 例代码文件名 L5 1 C 功能 说明if语句的格式 includemain intn1 n2 n3 max printf Pleaseinputthreenumbers scanf d d d 程序运行情况如下 Pleaseinputthreenumbers 11 22 18 Thethreenumbersare 11 22 18max 22 这种优化形式的基本思想是 首先取一个数预置为max 最大值 然后再用max依次与其余的数逐个比较 如果发现有比max大的 就用它给max重新赋值 比较完所有的数后 max中的数就是最大值 这种方法 对从3个或3个以上的数中找最大值的处理 非常有效 max n1 if n2 max max n2 2020 2 23 15 例5 2 输入任意三个数n1 n2 n3 按从小到大的顺序排序输出 例代码文件名 L5 2 C P98 includemain intn1 n2 n3 temp printf Pleaseinputthreenumbers scanf d d d 程序运行情况如下 Pleaseinputthreenumbers 22 18 11 Threenumbersaftersorted 11 18 22 2020 2 23 16 1 if语句的一般格式if 表达式 语句组1 else 语句组2 1 if语句中的 表达式 必须用 和 括起来 2 else子句 可选 是if语句的一部分 必须与if配对使用 不能单独使用 3 当if和else下面的语句组 仅由一条语句构成时 也可不使用复合语句形式 即去掉花括号 2020 2 23 17 2 if语句的执行过程 1 缺省else子句时 P96 当 表达式 的值不等于0 即判定为 逻辑真 时 则执行语句组1 否则直接转向执行下一条 如图5 5 a 所示 2 指定else子句时当 表达式 的值不等于0 即判定为 逻辑真 时 则执行语句组1 然后转向下一条语句 否则 执行语句组2 如图5 5 b 所示 3 if语句的嵌套与嵌套匹配原则if语句允许嵌套 所谓if语句的嵌套是指 在 语句组1 或 和 语句组2 中 又包含有if语句的情况 if语句嵌套时 else子句与if的匹配原则 与在它上面 距它最近 且尚未匹配的if配对 为明确匹配关系 避免匹配错误 建议 将内嵌的if语句 一律用花括号括起来 2020 2 23 18 例5 3 写一程序 从键盘上输入一个年份year 4位十进制数 判断其是否闰年 算法设计要点 1 闰年的条件是 能被4整除 但不能被100整除 或者能被400整除 2 如果 能被 整除 则余数为 即如果 的值等于 则表示 能被 整除 3 首先将是否闰年的标志leap预置为0 非闰年 这样仅当year为闰年时将leap置为1即可 这种处理两种状态值的方法 对优化算法和提高程序可读性非常有效 2020 2 23 19 includemain intyear leap 0 leap 0 预置为非闰年 printf Pleaseinputtheyear scanf d 利用逻辑运算能描述复杂条件的特点 可将上述程序优化如下 includemain intyear printf Pleaseinputtheyear scanf d 参考程序如下 例代码文件名 L5 3 C 功能 说明if语句的嵌套格式和用法 2020 2 23 20 4 说明 1 if后面的 表达式 除常见的关系表达式或逻辑表达式外 也允许是其它类型的数据 如整型 实型 字符型等 2 if语句允许嵌套 但嵌套的层数不宜太多 在实际编程时 应适当控制嵌套层数 2 3层 3 语句组1 和 语句组2 可以只包含一个简单语句 也可以是复合语句 务必牢记 不管是简单语句 还是复合语句中的各个语句 每个语句后面的分号必不可少 例如 例5 1 中的 if n1 n2 max n1 elsemax n2 if行后面的赋值语句 max n1 分号不能省略 但不要误认为if和else是2个独立的语句 它们都属于if语句中的一部分 else是if语句的子句 2020 2 23 21 5 3 2条件运算符1 一般格式 表达式1 表达式2 表达式3条件表达式中的 表达式1 表达式2 表达式3 的类型 可以各不相同 2 运算规则如果 表达式1 的值为非0 即逻辑真 则运算结果等于 表达式2 的值 否则 运算结果等于 表达式3 的值 如图5 11所示 3 运算符的优先级与结合性条件运算符的优先级 高于赋值运算符 但低于关系运算符和算术运算符 其结合性为 从右到左 即右结合性 2020 2 23 22 includemain charch printf Inputacharacter scanf c 例5 4 从键盘上输入一个字符 如果它是大写字母 则把它转换成小写字母输出 否则 直接输出 例文件名 L5 4 C 2020 2 23 23 5 4switch语句 C语言提供了switch语句直接处理多分支选择 例5 5 从键盘上输入一个百分制成绩score 按下列原则输出其等级 score 90 等级为A 80 scoremain intscore grade printf Inputascore 0 100 scanf d 2020 2 23 24 case8 printf grade B n break case7 printf grade C n break case6 printf grade D n break case5 case4 case3 case2 case1 case0 printf grade E n break default printf Thescoreisoutofrange n 程序运行情况如下 Inputascore 0 100 85 grade B 2020 2 23 25 1 switch语句的一般形式switch 表达式 case常量表达式1 语句组 break case常量表达式2 语句组 break case常量表达式 语句组 break default 语句组 break 2 执行过程1 当switch后面 表达式 的值 与某个case后面的 常量表达式 的值相同时 就执行该case后面的语句 组 当执行到break语句时 跳出switch语句 转向执行switch语句的下一条 2 如果没有任何一个case后面的 常量表达式 的值 与 表达式 的值匹配 则执行default后面的语句 组 然后 再执行switch语句的下一条 2020 2 23 26 3 说明 1 switch后面的 表达式 可以是int char和枚举型中的一种 2 每个case后面 常量表达式 的值 必须各不相同 否则会出现相互矛盾的现象 即对表达式的同一值 有两种或两种以上的执行方案 3 case后面的常量表达式仅起语句标号作用 并不进行条件判断 系统一旦找到入口标号 就从此标号开始执行 不再进行标号判断 所以必须加上break语句 以便结束switch语句 思考题 如果去掉 例5 5 程序中的所有break语句 且输入的成绩为75 输出会如何 2020 2 23 27 4 各case及default子句的先后次序 不影响程序执行结果 5 多个case子句 可共用同一语句 组 例如 在 例5 5 中 case10 和case9 共用语句 printf grade A n break case5 case0 共用语句 printf grade E n break 6 用switch语句实现的多分支结构程序 完全可以用if语句或if语句的嵌套来实现 2020 2 23 28 5 5选择结构程序设计举例 include includemain floata b c disc x1 x2 p q scanf f f f 例5 6 求一元二次方程ax2 bx c 0的解 a 0 P108 例代码文件名 L5 6 C 说明 由于实数在计算机中存储时 经常会有一些微小误差 所以本例判断disc是否为0的方法是 判断disc的绝对值是否小于一个很小的数 例如10 6 2020 2 23 29 例5 7 已知某公司员工的保底薪水为500 某月所接工程的利润profit 整数 与利润提成的关系如下 计量单位 元 P110 profit 1000没有提成 1000 profit 2000提成10 2000 profit 5000提成15 5000 profit 10000提成20 10000 profit提成25 算法设计要点 为使用switch语句 必须将利润profit与提成的关系 转换成某些整数与提成的关系 分析本题可知 提成的变化点都是1000的整数倍 1000 2000 5000 如果将利润profit整除1000 则当 profit 1000对应0 11000 profit 2000对应1 22000 profit 5000对应2 3 4 55000 profit 10000对应5 6 7 8 9 1010000 profit对应10 11 12 为解决相邻两个区间的重叠问题 最简单的方法就是 利润profit先减1 最小增量 然后再整除1000即可 profit 1000对应01000 profit 2000对应12000 profit 5000对应2 3 45000 profit 10000对应5 6 7 8 910000 profit对应10 11 12 2020 2 23 30 例代码文件名 AL5 7 C includemain longprofit intgrade floatsalary 500 printf Inputprofit scanf ld 2020 2 23 31 良好的源程序书写风格 注释 必要的注释 可有效地提高程序的可读性 从而提高程序的可维护性 在 语言源程序中 注释可分为三种情况 1 在函数体内对语句的注释 2 在函数之前对函数的注释 3 在源程序文件开始处 对整个程序的总体说明 函数体内的语句 是由顺序结构 选择结构和循环结构等三种基本结构构成的 在什么地方加以注释的原则是 如果不加注释 理解起来就会有困难 或者虽无困难 但浪费时间 1 顺序结构在每个顺序程序段 由若干条语句构成 之前 用注释说明其功能 除很复杂的处理外 一般没有必要每条语句都加以注释 2020 2 23 32 2 选择结构在C语言中 选择结构是由if语句和switch语句来实现的 一般地说 要在前面说明其作用 在每个分支条件语句行的后面 说明该分支的含义 如下所示 1 if语句 说明功能 if 条件表达式 条件成立时的含义 else 入口条件含义 2020 2 23 33 2 switch语句 说明功能 switch 表达式 case常量表达式1 该入口值的含义 语句组 case常量表达式n 该入口值的含义 语句组 default 该入口值的含义 语句组 如果条件成立时 或入口值 的含义 已经很明确了 也可不再加以注释 Return 2020 2 23 34 周一上机题目 1 教材P111 习题5 52 写一程序 从键盘上输入一个年份year 4位十进制数 判断其是否闰年 3 教材P112 习题5 94 教材P111 习题5 6
展开阅读全文
相关资源
相关搜索

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


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

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


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