第4章流程控制.ppt_第1页
第4章流程控制.ppt_第2页
第4章流程控制.ppt_第3页
第4章流程控制.ppt_第4页
第4章流程控制.ppt_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

C语言程序设计 TheCProgrammingLanguage 耿小庆 第四章流程控制 4 1结构化程序设计 4 2C语句概述 4 3选择语句 4 4循环语句 4 5辅助控制语句 4 6习题 第四章流程控制 结构化程序设计思想算法传统流程图表示的三种结构N S方框图表示的三种结构小结 4 1结构化程序设计 4 1 1结构化程序设计思想任何程序都可以用三种基本结构表示 即用顺序 Composition 选择 Alternation 和循环 Iteration 结构来表示 这三种结构反复组合 嵌套构成的程序称为结构化程序 顺序结构的程序流程是按照语句的顺序依次执行 选择结构是根据给定的条件进行判断 由判断结构决定执行两支或多支程序段中的一支 循环结构是在给定条件成立的情况下 反复执行某个程序段 优点结构化程序层次分明 结构清晰 有效地改善了程序的可靠性 从而大大地提高了程序设计的质量和效率 4 1概述 4 1结构化程序设计 自顶向下 逐步求精 4 1 2算法 算法 是为解决一个具体问题而采取的确定的有限的操作步骤 数据结构 算法 程序N Wirth算法的表示方法 传统的流程图N S方框图自然语言伪码问题求解图 PAD 4 1结构化程序设计 4 1 3传统流程图表示的三种结构 4 1结构化程序设计 4 1 3传统流程图表示的三种结构顺序结构 Composition 4 1结构化程序设计 4 1 3传统流程图表示的三种结构选择结构 Alternation 4 1结构化程序设计 4 1 3传统流程图表示的三种结构循环结构 Iteration 1 当型 2 直到型 4 1结构化程序设计 实例1 计算1 2 3 100的值 4 1结构化程序设计 这是一款意大利生产的多功能厨具 请猜价格 600 答案是 720 低了 800 750 700 高了 高了 正确 这是一款瑞士生产的多功能刀具 请猜价格 600 高了 500 高了 时间到 1个商标 720 低了 答案是 428 4 1结构化程序设计 实例2 幸运52 幸运52 的传统流程图 传统流程图的优缺点优点 形象直观 各种操作一目了然 不会产生 歧义性 便于理解 算法出错时容易发现 并可直接转化为程序 缺点 所占篇幅较大 由于使用流程线 过于灵活 不受约束 使用者可使流程线任意转移 从而造成程序阅读和修改的困难 不利于结构化程序的设计 4 1结构化程序设计 4 1 4N S方框图N S方框图是由美国学者I Nassi和B Schneiderman于1973年提出的 N S方框图的重要特点就是完全取消了流程线 这样 算法被迫只能顺序执行 从而避免了流程的任意转向 保证了程序的质量 尤其适合结构化程序的设计 N S方框图的另一个优点是既形象直观 又节省篇幅 4 1结构化程序设计 4 1结构化程序设计 4 1 4N S方框图顺序结构 Composition 4 1结构化程序设计 4 1 4N S方框图选择结构 Alternation 4 1结构化程序设计 4 1 4N S方框图循环结构 Iteration 1 当型 2 直到型 实例1的N S方框图 4 1结构化程序设计 表达式语句表达式 赋值语句i 10 函数调用语句printf Hello n 流程控制语句选择if else else if switch case循环for while do while辅助控制break continue goto return空语句 什么也不干for i 1 i 5000 i 延时for i 0 i 100 a i 0 语法要求复合语句 多个简单句 语法上等同于一个简单语句可以嵌套使用分程序 数据说明一定要在所有执行语句之前 4 2C语句概述 4 3选择语句 输入三个数 按从小到大输出main floata b c t scanf f f f 4 3 1if语句格式 if 表达式 语句 说明 一般语言 if后是关系或逻辑表达式 而C无要求if只是测试表达式的值 当表达式的值为非0时 执行语句if 表达式 if 表达式 0 if 表达式 if 表达式 0 语句 为一条语句或复合语句 4 3选择语句 4 3 2if else语句格式 if 表达式 语句1 else语句2 说明 表达式仍为一般表达式 当表达式非0时 执行语句1 否则 执行语句2 语句1 语句2 均为一条语句或复合语句 4 3选择语句 根据需要交换两个变量的值 includemain inta b x ch printf Entertwointegers scanf d d 加上 就行了 if n 0 if a b z a elsez b 4 3选择语句 要想在n 0时执行z b 怎么办呢 给你出个难题 现有程序段if n 0 if a b z a elsez b 什么时候执行z b 太简单了 else总是与其上最近的且未与其他else配对的if配对 因此n 0并且a b时执行z b 4 3 3分支嵌套else总与其上最近的且未与其他else配对的if配对要想与其他if匹配加 书写形式不能代替逻辑关系 4 3选择语句 4 3 4else if语句格式 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式n 语句n else语句n 1 功能 逐个判断表达式的值 对首次为真者执行其后的语句 然后继续执行n 1条语句后的语句 全不为真时执行else后的语句 main intmagic 200 guess printf Pleaseguessamagicnumber scanf d 4 3选择语句 main intmagic 200 guess printf Pleaseguessamagicnumber scanf d 猜数数游戏 由计算机 想 一个数请人猜 若猜对了则给出提示 Right 否则提示 Wrong 并告诉人是大还是小了 4 3选择语句 输入学号及成绩 并根据成绩定等级main intscore snum chargrade scanf d d 4 3选择语句 4 3 5开关分支switch case格式 switch 表达式 case值1 语句组1 break case值2 语句组2 break case值n 语句组n break default 语句组n 1 break 功能 根据表达式的值与各个case判断值的比较情况决定执行哪个语句组 4 3选择语句 4 3 5开关分支switch case注意 表达式的值可为任意类型 但一般为整型或字符型数据 判断值的类型与其要一致case判断值必须为常量或常量表达式 且判断值必须互不相同default缺省时 当所有case判断不符时 则直接自动退出switch当break语句不缺省时 case和default的顺序可以任意break语句缺省时 系统将继续执行下一条case语句组 可以使用case重叠共用一个语句组 4 3选择语句 运输公司计算运费的原则是距离越远 每公里收费越低s 300015 p 单价w 重量d 折扣f运费p W S 1 d main ints floatp w d f scanf f f d 4 3选择语句 统计输入的一行字符中的英文各元音字母的个数 不区分大小写 includemain intna ne ni no nu charc na ne ni no nu 0 while c getchar n switch c case A case a na break case E case e ne break case I case i ni break case O case o no break case U case u nu break printf na d ne d ni d no d nu d n na ne ni no nu 4 3选择语句 输入学号及成绩 并根据成绩定等级main intscore snum chargrade scanf d d 4 4循环语句 循环就是反复执行一段程序 被反复执行的程序段称为循环体 循环必须能结束 通常需要循环变量来控制循环 4 4 1while语句当型格式 while 表达式 循环体语句 说明 进入循环前要作初始化工作循环体中应有使条件向假方向变化的语句表达式为常数 非O 是无限循环 需配合其他语句加以控制循环体可以是空语句 4 4循环语句 4 4循环语句 计算1 2 3 100的值main intsum 0 i 1 while i 100 sum i sum i i printf sumof1 100is d n sum 求个位数为6且能被3整除的5位数共有多少个 main inti 0 longm 10006 while m 99996l if m 3 0 if m 3 3 m i m 10 printf Itis d n i 4 4循环语句 求出200 800之间所有既能被7又能被11整除的整数main inti 0 m 200 while m 800 if m 7 0 4 4 2dowhile语句格式 do 循环体 while 表达式 说明 先执行一次循环体 再判表达式在不知道循环次数 且又必须执行一次循环体时 4 4循环语句 4 4循环语句 计算1 2 3 100的值main intsum 0 i 1 do sum i i while i 100 printf sumof1 100is d n sum 某数用3除余2 用5余3 用7余2 main inti 0 do i while i 3 2 4 4 3for语句格式 for 表达式1 表达式2 表达式3 循环体 执行顺序 1 执行表达式1 2 判断表达式2 如果表达式2成立 则执行循环体 如果表达式2不成立 则执行 4 3 再执行表达式3 然后回到 2 4 说明 表达式均可省略 分号不能省略for 表达式1和3可为逗号表达式for i 0 j 100 i j i j 表达式2多为关系或逻辑表达式for low high 4 4循环语句 4 4循环语句 计算1 2 3 100的值eg main intsum 0 i for i 1 i 100 i sum i printf sumof1 100is d n sum 4 4循环语句 4 4 4循环的嵌套多重循环在C语言中 当一个循环结构的循环体内有另一个循环结构时 称为多重循环或循环嵌套 前面介绍的三种循环结构可以相互嵌套 当一个循环的循环体仅是另一个单一的循环结构时 外层循环不需要使用大括号包围它的循环体 打印乘法口诀表for i 1 i 9 i for j 1 j 9 j printf 5d i j printf n 1234567892468101214161836912151821242748121620242832365101520253035404561218243036424854714212835424956638162432404856647291827364554637281 12436948121651015202561218243036714212835424981624324048566491827364554637281 12345678946810121416189121518212427162024283236253035404536424854495663647281 4 5辅助控制语句 4 5 1break语句功能 中断循环过程 退出循环体从包含它的switch退出说明 强行退出仅退出一层循环或一层switch4 5 2continue语句功能 使本次循环短路 继续执行下一次循环 4 5辅助控制语句 跳过负元素 求为正元素之和main intn sum 0 while 1 scanf d printf sum d n sum 4 5辅助控制语句 4 5 3转向语句goto格式 goto标号 error for if gotoerror goto破坏结构化 不用 4 5 4返回语句return格式 return值 return 值 4 6习题 简单应用见书 谭 例题枚举法求最小公倍数找出100 999之间的所有水仙花数 各位立方和 本身 153等 百钱买百鸡 百马运百货求素数编程序找出1000之内的所有完数 一个数恰好等于其因子之和如6 1 2 3 4 6习题 递推法公式类1 2 3 20 1 1 1 1 2 1 10 4 1 1 3 1 5 1 7 1 9 10 6求 a aa aaa aa aaa 2 n 72 22 222 2222 22222 222222 2222222其它猴子吃桃珠穆朗玛峰皮球落地 最小公倍 最大公约 main inta b bei printf Pleaseentertwointegers scanf d d main inta b bei chu yu printf Pleaseentertwointegers scanf d d 水仙花数 main inti j k m n for i 1 i 9 i for j 0 j 9 j for k 0 k 9 k m i 100 j 10 k n i i i j j j k k k if m n printf 5d m main intm i j k for m 100 m 999 m i m 100 j m i 100 10 j m 100 10 k m 10 if i i i j j j k k k m printf 5d m 百钱买百鸡 百马拉百货 main inti j k for i 1 i 20 i for j 1 j 33 j k 100 i j if 5 i 3 j k 3 100 main inti j k for i 1 i 34 i for j 1 j 50 j for k 2 k 100 k 2 if i 3 j 2 k 2 100 素数 判断一个数是否为素数 includemain longm inti sqrtm printf Pleaseenteranumbers scanf ld 素数 求一个区间中所有的素数 includevoidmain void longa b m inti sqrtm count 0 printf Pleaseentertwonumbers scanf ld ld 完数 main inti j s n 0 printf 1000之内的完数 for i 1 i 1000 i s 0 for j 1 j i j if i j 0 s j if s i printf 5d i n if n 10 0 printf n 4 1 1 3 1 5 1 7 1 9 求 includemain ints 1 longn 1 doublepi 0 t 1 doublepi 0 s 1 t 1 n 1 while fabs t 1e 6 pi t n 2 s s t double s n t s n pi 4 printf PI f n pi 1 2 3 20 main inti floats 0 t 1 for i 1 i 20 i t i s t printf Result f n s 1 1 2 1 3 1 10 main inti longt 1 floats 0 for i 1 i 10 i t i s 1 0 t printf Result f n s a aa aaa aa aa main inti a n doublet 0 s 0 printf d d 猴子吃桃 main inti n for i 9 n 1 i 1 i n n 1 2 printf Thefirstdayhave d n n 猴子第一天摘下若干个桃子 当即吃了一半 还不过瘾 又多吃了一个 第二天又将剩下的桃子吃了一半 并多吃了一个 以后每天早上都这样 第十天想再吃时 只剩一个桃子 求第一天共摘多少桃子 珠穆朗玛峰 main doublehigh 0 00009 intn 0 while high 8848 n high 2 prin

温馨提示

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

评论

0/150

提交评论