C程序设计教程第4章_选择.ppt_第1页
C程序设计教程第4章_选择.ppt_第2页
C程序设计教程第4章_选择.ppt_第3页
C程序设计教程第4章_选择.ppt_第4页
C程序设计教程第4章_选择.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章 选择结构程序设计 本章要点 关系运算符和关系表达式逻辑运算符和逻辑表达式用if语句实现选择结构用switch语句实现多分支选择结构 主要内容 4 1关于算法4 2条件判断4 3用if语句实现选择结构4 4利用switch语句实现多分支选择结构4 5程序举例 教学目的与要求 教学重点与难点 掌握两种分支语句的语法规则和功能 学会用分支方法进行简单分支程序设计 能使用分支语句编写程序 关系运算符与逻辑运算符及其组成的具有逻辑值的表达式 两种分支语句的格式及基本应用 一个程序应包括两个方面的内容 对数据的描述 数据结构 datastructure 对操作的描述 算法 algorithm 著名计算机科学家沃思提出一个公式 数据结构 算法 程序 数据结构 算法 程序设计方法 语言工具 完整的程序设计应该是 4 1关于算法4 1 1算法的概念 广义地说 为解决一个问题而采取的方法和步骤 就称为 算法 方法1 1 2 3 4 一直加到100加99次方法2 100 1 99 2 98 49 51 50 100 49 100 50加51次 对同一个问题 可有不同的解题方法和步骤 例 求 4 1 2怎样表示算法 可以用不同的方法表示算法 常用的有 自然语言传统流程图结构化流程图伪代码 1 用自然语言表示算法 自然语言就是人们日常使用的语言 可以是汉语或英语或其它语言 用自然语言表示通俗易懂 但文字冗长 容易出现 歧义性 自然语言表示的含义往往不大严格 要根据上下文才能判断其正确含义 描述包含分支和循环的算法时也不很方便 因此 除了那些很简单的问题外 一般不用自然语言描述算法 2 用流程图表示算法 美国国家标准化协会ANSI AmericanNationalStandardInstitute 规定了一些常用的流程图符号 3 用N S流程图表示算法 既然用基本结构的顺序组合可以表示任何复杂的算法结构 那么 基本结构之间的流程线就属多余的了 1973年美国学者I Nassi和B Shneiderman提出了一种新的流程图形式 在这种流程图中 完全去掉了带箭头的流程线 全部算法写在一个矩形框内 在该框内还可以包含其它的从属于它的框 或者说 由一些基本的框组成一个大的框 这种流程图又称N S结构化流程图 N S流程图用以下的流程图符号 1 顺序结构 2 选择结构 3 循环结构 4 用伪代码表示算法 概念 伪代码是用介于自然语言和计算机语言之间的文字和符号来描述算法 特点 它如同一篇文章一样 自上而下地写下来 每一行 或几行 表示一个基本操作 它不用图形符号 因此书写方便 格式紧凑 也比较好懂 也便于向计算机语言算法 即程序 过渡 用处 适用于设计过程中需要反复修改时的流程描述 IFxispositiveTHEN printx ELSE print x也可以用汉字伪代码表示 若x为正打印x 否则 打印 x 也可以中英文混用 如 IFx为正 printx ELSE print x 例 打印x的绝对值 的算法可以用伪代码表示为 4 2条件判断4 1关系运算符和关系表达式关系运算符种类 结合方向 自左向右优先级别 例c a b c a b a b c a b ca bc a b c 关系表达式 用关系运算符将两个表达式连接起来的式子 关系表达式的值 是逻辑值 真 或 假 用1和0表示 例inta 3 b 2 c 1 d f a b a b cb cbf a b c 表达式值1 表达式值1 表达式值0 d 1 f 0 关系运算注意 例注意区分 与 inta 0 b 1 if a b if a b printf aequaltob elseprintf anotequaltob 例应避免对实数作相等或不等的判断如1 0 3 0 3 0 1 0结果为可改写为 fabs 1 0 3 0 3 0 1 0 1e 6 0 4 2 2逻辑运算符和表达式逻辑运算符种类 逻辑运算真值表 C语言中 运算量 0表示 假 非0表示 真 运算结果 0表示 假 1表示 真 低 例ab x ya b x y a a b 优先级 结合方向 a b x y a x x b a b x y a a b 例a 4 b 5 aa ba b a b4 0 25 3 2 8 4 0 c d 值为1 值为0 值为1 值为1 值为1 值为1 5 3 2 8 4 0 值为1 短路特性 逻辑表达式求解时 并非所有的逻辑运算符都被执行 只是在必须执行下一个逻辑运算符才能求出表达式的解时 才执行该运算符 例a m a b n c d 结果m 0 n 1 4 3用if语句实现选择结构 4 3 1if语句的三种基本形式 1 if 表达式 语句例 if x y printf d x 2 if 表达式 语句1else语句2例 if x y printf d x elseprintf d y 3 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式m 语句melse语句n 例 if number 500 cost 0 15 elseif number 300 cost 0 10 elseif number 100 cost 0 075 elseif number 50 cost 0 05 elsecost 0 几点说明 1 3种形式的if语句中在if后面都有表达式 一般为逻辑表达式或关系表达式 例如 if a b 在执行if语句时先对表达式求解 若表达式的值为0 按 假 处理 若表达式的值为非0 按 真 处理 执行指定的语句 假如有以下if语句 if 3 printf O K 由此可见 表达式的类型不限于逻辑表达式 可以是任意的数值类型 包括整型 实型 字符型 指针型数据 例如 下面的if语句也是合法的 if a printf d a 2 第二 第三种形式的if语句中 在每个else前面有一分号 整个语句结束处有一分号 例如 if x y printf d x elseprintf d y 不要误认为上面是两个语句 if语句和else语句 它们都属于同一个if语句 else子句不能作为语句单独使用 它必须是if语句的一部分 与if配对使用 3 在if和else后面可以只含一个内嵌的操作语句 如上例 也可以有多个操作语句 此时用花括号 将几个语句括起来成为一个复合语句 例如 if a b c 例4 1输入两个实数 按代数值由小到大的顺序输出这两个数 includevoidmain floata b t scanf f f 例4 2输入三个数a b c 要求按由小到大的顺序输出 ifa b将a和b对换ifa c将a和c对换ifb c将b和c对换 includevoidmain floata b c t scanf f f f 4 3 2if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套 形式 if if 语句1else语句2elseif 语句3else语句4 内嵌if 匹配规则 else总是与它上面的 最近的 统一复合语句中的 未配对的if语句配对 例 if if 语句1elseif 语句2else语句3 例 if if 语句1 else语句2 当if和else数目不同时 可以加花括号来确定配对关系 1 x0 算法 或算法 输入x输入x若x0 则y 1若x 0 则y 0输出y若x 0 则y 1输出y includevoidmain intx y scanf d 上例中的程序段有四个 请判断哪个是正确的 程序1 程序2 if x 0 y 1 if x 0 y 1 elseelsey 0 if x 0 y 0 elsey 1 elsey 1 程序3 程序4 y 1 y 0 if x 0 if x 0 if x 0 y 1 if x 0 y 1 elsey 0 elsey 1 正确 正确 4 3 3条件运算符与表达式一般形式 expr1 expr2 expr3执行过程功能 相当于条件语句 但不能取代一般if语句 例求a b printf a b d n b 0 a b a b 例 a b Y N x 2 1 1 0 x 0 x x c a c z c a A c 条件运算符可嵌套如x 0 1 x 0 1 0 优先级 13 结合方向 自右向左如a b a c d c d a b a c d c d expr1 expr2 expr3类型可不同 表达式值取较高的类型 例x a b x 0 表达式值为 b x 0 表达式值为 a x y 1 1 5 x y 值为1 0 x y 值为1 5 条件运算符优先于赋值运算符 但优先级别比关系运算符和算术运算符都低 例如 max a b a b 1 max a b a b 1 例4 4输入一个字符 判别它是否大写字母 如果是 将它转换成小写字母 如果不是 不转换 然后输出最后得到的字符 includevoidmain charch scanf c 如果字符变量ch的值为大写字母 则条件表达式的值为 即相应的小写字母 如果ch的值不是大写字母 则条件表达式的值为 即不进行转换 知识回顾 一 运算符关系运算符 b a b c a b a b a c a b a b 二 语句1 if语句1 if 表达式 语句2 if 表达式 语句1else语句23 if 表达式1 语句1elseif 表达式2 语句2 elseif 表达式m 语句melse语句n2 if语句的嵌套 if if 语句1elseif 语句2elseif 语句3else语句4 4 4利用switch语句实现多分支选择结构 switch语句的格式 switch 表达式 case常量表达式 语句 case常量表达式 语句 case常量表达式 语句 default 语句 例 要求按照考试成绩的等级输出百分制分数段 用switch语句实现 switch grade case printf case printf case printf case printf default printf error 说明 1 switch后面括弧内的 表达式 标准允许它为任何类型 2 当表达式的值与某一个case后面的常量表达式的值相等时 就执行此case后面的语句 若所有的case中的常量表达式的值都没有与表达式的值匹配的 就执行default后面的语句 3 每一个case的常量表达式的值必须互不相同 否则就会出现互相矛盾的现象 对表达式的同一个值 有两种或多种执行方案 4 各个case和default的出现次序不影响执行结果 例如 可以先出现 default 再出现 case 然后是 case 5 执行完一个case后面的语句后 流程控制转移到下一个case继续执行 case常量表达式 只是起语句标号作用 并不是在条件判断 在执行switch语句时 根据switch后面表达式的值找到匹配的入口标号 就从此标号开始执行下去 不再进行判断 应该在执行一个case分支后 可以用一个break语句来终止switch语句的执行 6 多个case可以共用一组执行语句 4 5程序举例 例4 5写程序 判断某一年是否闰年 用下图来表示判断闰年的算法 includevoidmain intyear leap scanf d if year 4 0 运行情况 not leapyear leapyear 例4 6求 x2 方程的解 基本的算法 不是二次方程 b2 有两个相等实根 b2 有两个不等实根 b2 有两个共轭复根 include includevoidmain floata b c disc x1 x2 realpart imagpart scanf f f f elseif disc 1e 6 x1 b sqrt disc 2 a x2 b sqrt disc 2 a printf hasdistinctrealroots 8 4fand 8 4f n x1 x2 else realpart b 2 a imagpart sqrt disc 2 a printf hascomplexroots n printf 8 4f 8 4fi n realpart imagpart printf 8 4f 8 4fi n realpart imagpart 例4 7运输公司对用户计算运费 路程 越远 每公里运费越低 标准如下 没有折扣 折扣 折扣 折扣 折扣 折扣设每公里每吨货物的基本运费为 货物重为 距离为 折扣为 则总运费 的计算公

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论