分支结构程序设计.ppt

上传人:w****2 文档编号:6385550 上传时间:2020-02-24 格式:PPT 页数:32 大小:254.05KB
返回 下载 相关 举报
分支结构程序设计.ppt_第1页
第1页 / 共32页
分支结构程序设计.ppt_第2页
第2页 / 共32页
分支结构程序设计.ppt_第3页
第3页 / 共32页
点击查看更多>>
资源描述
前面两章介绍了变量 常量 表达式 语句等概念 若干条语句按照一定的顺序排列可以构成解决某个问题的程序 C语言有顺序程序结构 分支程序结构 循环程序结构三种基本程序结构 它们是构成结构化程序的基础 本章重点阐述分支结构程序设计 3 1算法与基本程序结构 著名的计算机科学家沃思 N Wirth 曾提出一个经典公式 数据结构 算法 程序这一公式说明程序由数据结构和算法两部分构成 数据结构 DataStructure 是数据的描述和组织形式 算法 Algorithm 是指对操作步骤的描述 编写程序的关键就在于合理地组织数据和设计算法 3 1 1算法简介 1 算法的定义所谓算法 是一个有限规则的集合 其中的规则描述了解决某个特定问题的运算序列 也就是为解决一个具体问题而采取的确定的有限操作步骤 这里所讨论的算法仅仅指计算机算法 即在计算机中能够实现的算法 算法可划分为数值算法和非数值算法 数值算法用于解决求数值解的问题 如计算方程的根 计算积分等 非数值算法解决需要用分析推理 逻辑推理才能解决的问题 如查找 排序 人工智能中的许多算法 3 1 1算法简介 2 算法的特征计算机能够实现的算法必须具备以下的特征 有穷性 算法所包含的操作步骤应该是有限的 并且每一步都能在合理的时间内计算完成 否则该算法便失去实际意义 确定性 算法的每个操作步骤描述都应该是确定的 不允许存在二义性 不能有多种理解 如条件判断时 各分支之间不允许存在重叠 有效性 算法中的每个操作步骤都能够被计算机有效执行 并且能得到确定的结果 例如 将一个整数除0便是一个无效的操作步骤 存在零个或多个输入 算法在执行过程中往往需要输入信息 但也可以没有输入 可以通过键盘 磁盘文件等设备进行输入 存在若干输出结果 算法就是对数值进行运算或对某种数据进行处理 具备输出结果是必然的要求 可以向显示器 打印机或磁盘文件等设备进行输出 3 1 2算法的表示 进行算法设计时 可以使用自然语言 传统流程图 NS流程图 伪代码等描述方法进行描述 流程图表示方法是常用的表示方法 1 自然语言描述自然语言就是人们日常生活中所使用的语言 可以使用人类语言加上数学语言描述一个算法的实现 特点是通俗易懂 但描述不直观 容易造成歧义 例如用自然语言描述n 的求解过程 因为n 1 2 3 n n 可以用n次乘法来实现 用自然语言的描述步骤如下 第一步 读取n的值 第二步 如果n 0 提示 输入错误 跳至第四步 第三步 如果n 0 则1 给存放结果的变量result和代表乘数的变量i赋初值1 2 计算result result i 3 将乘数变量i增加1 即i i 1 得到下一个乘数 4 如果i n 跳转到2 重复执行2 和3 否则执行5 5 输出result第四步 结束算法 3 1 2算法的表示 2 传统流程图描述用自然语言描述算法容易产生歧义 对于分支和循环结构描述不方便 流程图采用图形符号配合文字说明来表示各种操作 这种方法形象直观 易于理解 常用的流程图符号如图3 1所示 3 1 2算法的表示 使用传统流程图描述的n 的算法如图3 2所示 传统流程图描述形象 各种操作比较直观 不容易产生歧义 容易转化为程序 缺点是占用的篇幅多 不太适合描述大型复杂算法 NS流程图是对传统流程图的改进 更适合结构化程序设计 3 1 2算法的表示 3 NS流程图描述NS流程图与传统流程图相比 取消流程线的使用 算法只能自上而下执行 更适合结构化程序设计 NS流程图是推荐使用的算法描述工具 用NS流程图描述的的计算能n 的算法如图3 3所示 图3 3n 算法的NS流程图描述 3 1 3基本程序结构 1966年 Bohm和Jacopini的研究表明 所有程序都可以由顺序结构 分支结构和循环结构这三种基本结构完成 1 顺序结构 是最简单的一种结构 顺序结构中的各部分操作按照书写顺序依次执行 不存在任何跳转 2 分支结构 也叫选择结构 通过一个判断框来描述 选择执行分支操作 如图3 2所示 nn是否成立决定是否继续循环 3 2关系运算和逻辑运算 分支结构是三种基本结构之一 大多数程序都会包含分支结构 分支结构根据条件判断选择后续执行的分支操作 决定分支选择的关键条件是判断的真假 C语言通过关系运算和逻辑运算实现条件判断 3 2 1关系运算 1 6个关系运算符C语言中共有6个关系运算符 它们是 大于 大于或等于 小于 小于等于 等于 不等于6个关系运算符都是双目运算符 由关系运算符连接两个运算对象就构成了关系表达式 如果运算对象满足指定的关系 则表达式的值为 真 用1代表 反之如果不满足指定的关系 则表达式的值为 假 用0代表 2 关系运算符的优先级问题在6个关系运算符中 50 当把握不准运算符的优先级时 使用括号是一种明智的选择 在书写关系表达式时 应避免在同一表达式中连续运用多个关系运算符 这样的表达式容易造成误解 例如a的值为10 则表达式20 a 100运算结果为 3 2 1关系运算 结果z被赋值为0 1 3 2 2逻辑运算 C语言中使用逻辑运算符实现 与 或 非 逻辑运算 由逻辑运算符连接的表达式构成逻辑表达式 1 3个逻辑运算符C语言中有3个逻辑运算符 逻辑与双目运算符 逻辑或双目运算符 逻辑非单目运算符参与逻辑运算的运算对象可以是任意数据类型 但常见的是关系表达式 也可以是数值和字符 运算结果为逻辑真或假 即1或0 C语言还规定 将不为0的任意数据当成1 真 参与运算 如2 2的结果为1 逻辑表达式是逻辑值之间的运算 假设a和b为逻辑值 则逻辑运算的规则如表3 1所示 1 0 3 2 2逻辑运算 2 逻辑运算符的优先级三个逻辑运算符中 运算符比较特殊 是单目运算符 优先级比较高 比算术运算符和关系运算符都高 而结合性是右结合 如a为10 b为20 则 a b 20为0 等价 a b 20 a b 20为0 等价 a b 20 强调一点 对于一些特殊情况 C语言有一些特殊规定 如计算a b c之类的情况 只有当a的结果为真时 才计算表达式b 只有a b均为真 才去计算表达式c 遇到一个为假的表达式 后面的表达式便不用计算 而并不是计算出所有的表达式 再进行逻辑运算 目的当然是提高运算速度 结果z被赋值为1 3 2 2逻辑运算 例 intz x y a 1 b 2 c 3 d 4 x y z 10 z x a b 首先计算x a b 相当于x a b x被赋值为0 根据上面所讲的规则 整个逻辑表达式运算结束 z被赋值为0 而y c d并未得到执行 所以y仍保持10不变 运算符的优先级和结合性非常复杂也非常重要 也是非常容易出错的地方 除了多上机实践以外 应避免书写过于复杂的逻辑表达式 可以通过括号明确优先计算的表达式 3 3if语句 C语言使用if语句实现二路分支结构程序 使用switch语句实现多路分支结构程序 if语句有不带else的语句和if else语句两种形式 可组成三种分支结构 单分支 if 表达式 语句双分支 if 表达式 语句1else语句2 多分支 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式m 语句melse语句n 3 3 1简单if语句 if语句的基本形式为 if 表达式 语句if语句执行时 首先计算表达式的值 表达式可以是条件表达式和逻辑表达式 也可以是普通的表达式 普通表达式计算结果非0即真 如果表达式结果为真 执行其后的语句 如果结果为假 则跳过其后的语句 直接执行if语句的下一条语句 具体流程图如图3 4所示 if语句中所带的语句可以是单条语句 也可以是用一对 括起来的复合语句 3 3 1简单if语句 例3 1 输入两个整数 找出最大值 inta b max printf Pleaseinputtwointegers scanf d d 程序运行结果如下 Pleaseinputtwoingegers 3 5 Themaxnumberis 3查找最大值时 先将a当成最大值并赋值给max 然后判断b a 如果b比a大 则表达式成立 将b重新赋值给max 如果b不比a大 则max中存储的a值已经是最大值 不用重新赋值 直接输出即可 3 3 1简单if语句 例3 2 计算一元二次方程的根 已知一元二次方程为ax2 bx c 0 通过键盘输入a b c的值 求解方程的实根 程序的运行结果 Pleaseinputthecoefficientsa b c 11 5 2 5 Root1 1 000000 Root2 2 500000 3 3 2if else语句 if else语句的基本形式为 if 表达式 语句1else语句2if else语句执行时 首先计算表达式的值 如果计算结果为真 执行语句1 如果计算结果为假 则执行语句2 具体流程图如图3 5所示 3 3 2if else语句 编写程序 由用户输入一个浮点数 计算并输出该数的绝对值 正数的绝对值等于其自身 负数的绝对值等于该数乘 1 floatf input fabs printf Inputafloatnumber scanf f 例3 3 求绝对值 3 3 3if语句的嵌套 if或if else语句中可以包含其它的语句或复合语句 当然也可以包含另一个if语句 在if语句中包含另外的一个或多个if语句称为if语句的嵌套 if语句的嵌套主要应用于复杂逻辑的判断 多分支典型结构 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式m 语句melse语句n 3 3 3if语句的嵌套 编写程序 由计算机随机生成一个随机数 由用户进行猜测 如果猜对了 程序输出 Right 如果猜错了 程序输出 Error 并提示猜大了还是猜小了 程序中的难点是如何生成一个随机数 调用库函数中的rand 函数可以生成一个介于0 RAND MAX之间的随机整数 RAND MAX由系统决定 但要包含stdlib h头文件 如果要得到某个范围的随机数 如0 100 可以通过简单的运算获得 rand 100即可得到0 100之间的随机数 程序生成一个随机数后 要求用户输入猜测数据后 可以通过嵌套的if语句进行判断 程序的流程图如图3 6所示 例3 4 猜数字游戏 3 3 3if语句的嵌套 3 3 4if语句使用注意事项 简单的if语句用于判断是否执行某个分支 if else语句实现在两个分支之间选择一个分支执行 而嵌套的if语句用于实现在多个分支之间的选择 在实际编程时 应避免嵌套层次过多的情况 当选择分支非常多时 可考虑下面将介绍的更加简洁的switch语句 使用嵌套的if语句时 要格外注意if和else的配对关系 配对原则 else与上方最近的未配对的if相匹配 以及逻辑表达式的书写 下面通过示例说明大家在学习中容易产生的错误 例 if T1 或if T1 if T2 语句1 if T2 语句1 else语句2 else语句2 3 3 4if语句使用注意事项 例3 5 计算个人所得税 假设一个人的月收入为x 则其应交纳的个人所得税由下面的函数确定0 x 1600 tax x 1600 0 1 16005000 if x 1600 tax 0 elseif x 5000 tax x 1600 0 1 elsetax 340 x 5000 0 2 3 4switch语句 switch语句的一般形式为 switch 表达式 case常量1 语句1break case常量2 语句2break case常量n 语句nbreak default 语句n 1 switch语句的执行过程是 首先计算表达式的值 然后将计算结果与case后面的常量进行匹配 发现一个匹配的项目后 开始执行其后的语句 直到遇到break跳出整个switch语句 如果没有找到与表达式相匹配的项 则直接执行default后面的语句 3 4switch语句 例3 6 将百分制成绩转换成学分积点用户从键盘输入应该百分制的整型成绩 按下面的规则将其转换成相应的学分积点 假定成绩为x 4 5 x 90 4 0 80 x 90 学分积点 3 5 70 x 80 3 0 60 x 70 0 x 60 程序运行结果 Inputyourscore 89 Score 89 Credit 4 0 switch score 10 case10 case9 credit 4 5 break case8 credit 4 0 break case7 credit 3 5 break case6 credit 3 0 break default credit 0 3 4switch语句 switch语句的几点重要说明 switch语句中的表达式通常为整型或字符型 配套的常量类型也应该是字符型或整型 如果是字符 记住一定要用单引号括起来 如 A 而不能用 A 所有case分支中的常量不能重复出现 所有case分支的顺序没有关系 通常情况下 每个分支的语句后都要加一个break语句 表示跳出switch语句 每个分支的语句可以是单条语句 也可以是多条语句 多条语句不用加花括号 程序在执行时 去匹配某个case分支 然后开始执行其后的语句 执行完该分支的语句后 如果有break语句 则结束整个switch语句 否则继续执行下面的语句 直到遇到break或整个switch语句的最后 有时候 可以特意省略某个分支的break语句 让两个分支共享某些代码 如本题中的case10后语句和break均被省略 表明不管是匹牌到10还是9 都去执credit 4 5 从而简化了代码 避免在case分支中书写大量的代码 以保持程序结构的简洁清晰 3 5条件运算符 在C语言中有一个特殊的需要三个运算对象的运算符 即条件运算符 使用条件运算符可以替代简单的if语句 实现简单的二路分支选择 由条件运算符构成的表达式称为条件表达式 条件表达式的一般格式为 条件表达式1 表达式2 表达式3该运算符在运算时 首先计算条件表达式1的值 如果为真 计算表达式2的值并将计算结果作为整个条件表达式的结果 如果为假 计算表达式3的值并将计算结果作为整个条件表达式的结果 3 5条件运算符 例3 7 计算两个数中的最大值用户通过键盘输入两个浮点数 通过条件运算符求两个数中的最大值 scanf f f 执行条件表达式max a b a b时 先判断a b 如果a确实大于b 则将a值赋给max 否则当a小于等于b时 将b赋值给max 实现了题目的要求 程序运行结果 Inputtwofloatnumber 5645 6Themaxnumberis 56 000000 本章小结 算法是指导程序设计的思想 在程序设计之前应养成设计算法的习惯 通过绘制流程图来描述程序设计算法 C语言有三种基本程序结构 顺序结构 分支结构和循环结构 所有复杂的逻辑都可以由这三种结构复合而成 分支结构是程序设计中的基本结构 根据逻辑判断选择分支执行 逻辑判断需要用到关系运算符和逻辑运算符 需要熟练掌握这些运算符的运算规则以及优先级 实现分支结构可以使用if switch语句或条件表达式 条件表达式适用于简单的二路选择 if语句通过嵌套可以实现比较复杂的逻辑判断 switch语句适用于非常有规律的多个分支选择 在实际编程中 可以根据需要灵活选择某种方式来实现分支结构 但要养成良好的代码书写习惯 对于if和else配对拿捏不准的可以借助复合语句块的方法来解决 对于逻辑表示把握不好的可以通过加 的方式解决 复习题
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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