程序的控制结构分支循环举例.ppt_第1页
程序的控制结构分支循环举例.ppt_第2页
程序的控制结构分支循环举例.ppt_第3页
程序的控制结构分支循环举例.ppt_第4页
程序的控制结构分支循环举例.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

程序的控制结构 教学目标 1 理解控制语句的作用和分类 掌握相关语句的使用方法 2 了解使用伪代码或流程图描述算法的方法 2 基本内容 3 1基本控制结构3 2选择结构3 3循环结构 3 3 1基本控制结构 三大基本程序结构 顺序结构 程序是按程序语句或模块在执行流中的顺序逐个执行 选择结构 程序是按设定的条件实现程序执行流的多路分支 循环结构 程序是按给定的条件重复地执行指定的程序段或模块 结论 理论上已经证明 用以上三种基本程序结构的组合可以实现任何复杂的算法 4 三大基本结构示意图 顺序结构选择结构 循环结构 5 模块 语句 A 模块 语句 B 条件 程序模块1 成立 不成立 程序模块2 条件 程序模块 不成立 成立 当型循环 程序模块 成立 不成立 条件 直到型循环 顺序结构的实现 r p p q q r 6 例3 1交换两个变量的值 includeusingnamespacestd intmain inta 1 b 2 inttmp 定义一个整型变量作为中间交换之用cout 交换前 a a b b endl tmp a a b b tmp cout 交换后 a a b b endl return0 7 3 2选择结构 C 语言中实现选择结构的语句形式主要有两种 if语句switch语句 8 1 if语句 一路分支 if 表达式 语句序列 两路分支 if 表达式 语句序列1else语句序列2 9 条件 成立 不成立 语句序列 条件 语句序列1 成立 不成立 语句序列2 语句序列可以是一个语句 也可以是用花括号括起来的复合语句结构 例3 2 判断成绩是否及格 includeusingnamespacestd intmain inti cout i if i 60 cout 及格 endl elsecout 不及格 endl return0 10 例3 3 求一元二次方程的根 include includeusingnamespacestd intmain doublea b c delta p q cout a b c if a 0 11 2 switch语句 多路 开关 选择语句 switch 表达式 case数值1 语句序列1 case数值2 语句序列2 case数值3 语句序列3 default 语句序列n 12 实现真正的多路选择 在每一个case模块的最后加上一个break语句 13 例3 2百分制化为优秀 良好 中等 及格和不及格的五级制成绩 算法分析 取一个百分成绩经过运算得到5级制成绩 构造什么样的表达式呢 百分成绩 10 共有5个分数档 选择分支大于2 因此用多路开关语句switch 计算结果应该是唯一的 转换后应从switch中break出来 14 includeusingnamespacestd intmain intgrade cout grade switch grade 10 根据转换值进行分支选择 case10 case9 cout 优秀 endl break case8 cout 良好 endl break case7 cout 中等 endl break case6 cout 及格 endl break default cout 不及格 endl return0 3 3循环结构 C 语言中实现循环结构的语句形式主要有三种 while语句do while语句for语句 16 while语句 do while语句 当型循环while 表达式 语句序列 直到型循环do 语句序列 while 表达式 17 循环体 循环体 条件 语句序列 成立 不成立 语句序列 不成立 成立 条件 案例 谁打烂了玻璃 有四个小孩踢皮球 不小心打烂了玻璃 老师问是谁干的 A说 不是我B说 是CC说 是DD说 他胡说现已知3个小孩说的是真话 一个小孩是假话 根据这些信息 编程找出打烂玻璃的孩子 18 教学设问如何求解逻辑问题 如何根据案例的问题描述给出对应的数学模型 用什么样的控制结构能够从许多种可能性中找出其中的一种或多种正确的解 打烂玻璃者为 C 更多案例见本书配套教材 C C 语言程序设计案例教程 罗建军等编著 清华大学出版社 A说 不是我B说 是CC说 是DD说 他胡说现已知3个人说的是真话 一个人是假话 数学模型 k 1k 3k 4k 4 k 1 k 3 k 4 k 4 3 设变量k表示打烂玻璃的孩子 按照这4种状态假定 逐一测试4个人的话有几个为真 如果不满3句为真 就否定这一假定 换下一个状态来试 includeusingnamespacestd intmain for intk 1 k 4 k if k 1 k 3 k 4 k 4 3 cout 打烂玻璃者为 char 64 k endl return0 21 进一步思考 考虑更加一般的情况 即本案例出现没有解或有多个解 要为上面的程序增加什么机制 怎么修改程序 如果题目改为有3个小孩说假话 1个小孩说真话 则打烂玻璃的孩子又是谁 22 例3 4 使用while语句计算1 2 3 100 includeusingnamespacestd intmain inti 1 sum 0 循环初始条件while i 100 sum sum i 累加求和i 改变循环条件 cout 1 2 3 100 sum endl return0 23 例3 5 使用do while语句计算1 2 3 100 includeusingnamespacestd intmain inti 1 sum 0 循环初始条件do sum sum i 累加求和i 改变循环条件 while i 100 cout 1 2 3 100 sum endl return0 24 for语句 for语句用来实现计数循环 for 表达式1 表达式2 表达式3 语句1 语句2 语句n 25 例3 6 使用for语句计算1 2 3 100 includeusingnamespacestd intmain intsum 0 for inti 1 i 100 i sum sum i 累加求和cout 1 2 3 100 sum endl return0 26 例3 7 制作乘法表 多重循环结构 循环的嵌套 includeusingnamespacestd intmain inti j for i 1 i 10 i for j 1 j i j cout j i i j t cout endl return0 27 九九乘法表输出 1 1 11 2 22 2 41 3 32 3 63 3 91 4 42 4 83 4 124 4 161 5 52 5 103 5 154 5 205 5 251 6 62 6 123 6 184 6 245 6 306 6 361 7 72 7 143 7 214 7 285 7 356 7 427 7 491 8 82 8 163 8 244 8 325 8 406 8 487 8 568 8 641 9 92 9 183 9 274 9 365 9 456 9 547 9 638 9 729 9 81 28 扩展阅读 3 4其他控制转移语句3 4 1switch语句 点击见前 3 4 2转向语句break语句 continue语句 goto语句3 4 3问号表达式表达式1 表达式2 表达式3 29 应用举例 例3 10计算保险经纪人月薪假定每一名保险经纪人的月工资都由三部分组成 底薪 奖金 业务提成 1 奖金的颁发方法为 如果经纪人已经在公司工作7年以下 含7年 奖金为每年10元 如果经纪人已经在公司工作7年以上 奖金为每年20元 2 业务提成的颁发方法为 如果经纪人该月销售额在9999元以下 含9999元 没有提成 如果经纪人该月销售额在10000 49999元之间 可得到3 的提成 如果经纪人该月销售额超过50000元 含 可得到5 提成 编程要求 当用户按照屏幕提示分别输入经纪人的底薪 工龄以及当月销售额后 程序计算并输出经纪人的月薪 30 includeusingnamespacestd intmain 声明部分 定义程序中将用到的变量doublebaseSalary bonus totalSale additionalBonus Salary intserviceYears cout baseSalary cout serviceYears 计算奖金bonusif serviceYears totalSale 计算提成additionalBonusif totalSale 10000 additionalBonus 0 elseif totalSale 50000 additionalBonus totalSale 0 03 elseadditionalBonus totalSale 0 05 计算经纪人的月薪SalarySalary baseSalary bonus additionalBonus cout 该经纪人的月薪为 Salary endl return0 应用举例 例3 11编写计算阶乘n 的程序 n n n 1 n 2 2 1 32 includeusingnamespacestd intmain intn 定义存放输入正整数值的变量intu 1 定义存放乘法结果的变量u并赋初值cout n for inti 1 i n i u u i cout n u endl return0 应用举例 例3 10计算自然常数e的值 33 算法分析 这是个级数计算问题 求n 1项累加和 用循环实现 循环终止的条件是第n项可以写成u u n 即累加和放在e中 可以写成e e u要设一个计数器n 每循环一次 n n 1 例3 12 计算常数e的值 includeusingnamespacestd intmain doublee 1 0 intn 0 doubleu 1 0 do n u u n e e u while u 1 0E 6 cout e e n n endl return0 应用举例 例3 13 求水仙花数如果一个三位数的个位数 十位数和百位数的立方和等于该数自身 则称该数为水仙花数 编一程序求出所有的水仙花数 153 1 3 5 3 3 3370 3 3 7 3 0 3371 3 3 7 3 1 3407 4 3 0 3 7 3 36 算法分析 用穷举法对100 999之间的每个数进行验证 验证公式为 hdn h 3 d 3 n 3如何分解一个3位数的百位 十位和个位 是关键 百位 n 100 整除100 丢弃小数 十位 n 10 10 整除10 得百十位 再对10取余数 得十位数 个位 n 10 n对10取余数 得个位 例 371h 371 100 3d 371 10 10 37 10 7n 371 10 1 includeusingnamespacestd intmain intn i j k for n 100 n 999 n n 1 i n 100 取出n的百位数j n 10 10 取数n的十位数k n 10 取出n的个位数if n i i i j j j k k k cout n i 3 j 3 k 3 endl return0 应用举例 例3 14 计算斐波那契数列一对兔子从出生后第3个月起每个月都生一对兔子 小兔子长到第三个月后每个月又生一对兔子 假如所有的兔子都不会死 求前24个月中每月的兔子数 F1 1 最初的一对兔子 F2 1 第2个月 最初的一对兔子长成 但尚未生育 F3 2 最初的兔子开始生育 Fn Fn 1 Fn 2 兔子数量的通项公式 即每月兔子数等于上两个月兔子数之和 从而形成了如下数列1 1 2 3 5 8 13 21 34 55 39 includeusingnamespacestd intmain intf1 1 intf2 1 inti for i 1 i 12 i cout f1 t f2 t f1 f1 f2 赋值号左边的f1代表第3个数 是第1 2个数之和f2 f2 f1 赋值号左边的f2代表第4个数 是第2 3个数之和 cout endl return0 40 应用举例 例3 15鸡兔同笼鸡和兔子关在一个笼子里 已知共有头36个 脚100个 求笼内关了多少只兔子和多少只鸡 分析 每只鸡有两只脚 每只兔子有四只脚 由题意得到如下方程 鸡的数目 2 兔子数目 4 100鸡的数目 兔子数目 36 4

温馨提示

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

评论

0/150

提交评论