




已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章c程序的三种基本结构 1 理解程序控制的方法和作用 2 学会制定简单程序的算法 3 掌握选择结构的使用方法 4 掌握实现循环的各种方法 5 掌握break continue的用法 本章目标 4 1C程序三种基本结构 从结构化程序设计角度出发 程序只有三种结构 顺序结构 选择结构 循环结构 1 顺序结构 表示 先执行A 再执行B 2 选择结构 表示为 存在某条件P 若P为真 则执行A 否则执行B 另一种选择结构 多分支结构 3 循环结构 表示为 1 当型结构当P条件成立时 T 反复执行A 直到P为 假 时才停止循环 有两种结构 当型和直到型 2 直到型 先执行A 再判断P 若为F 再执行A 如此反复 直到P为F 已证明 上述三种结构组成的程序可以解决全部的问题 所以任何一种高级语言都具备上述三种结构 函数调用语句 如 printf 1 表达式语句 赋值语句 如 i i 1 i x y 空语句 任何事情都不做 C程序语句可分为五大类 如 4 2C语句 2 控制语句 改变语句的执行顺序 if else 条件 for 循环 while 循环 do while 循环 switch 多分支选择 表示条件 表示语句 continue 结束本次循环 break 中止整个循环 return 函数返回 3 限定转向 无条件转向 语句 5 终止程序运行语句 4 无条件转移语句 goto exit 6 复合语句 语句体 用 括起来的一系列语句 如 z x y t z 100 printf f t 1 if 表达式 语句 一 if语句的三种形式 执行过程 当表达式的值为 真 非零 时 执行语句 否则 不执行语句 如 if x y z x 4 3选择结构程序设计 2 if 表达式 语句1else语句2 执行过程 当表达式的值为 真 非零 时 执行语句1 否则 执行语句2 如 if x y z x elsez y 3 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式m 语句melse语句n 如 if grade 85 level A elseif grade 70 level B elseif grade 60 level C elselevel D if语句说明 if后面的表达式一般为逻辑表达式或关系表达式 也可以是任意数值类型表达式 该语句是合法的 if 3 printf ok if语句中的 语句 为一个简单语句或复合语句 如 下面程序段是否有错 if x 0 printf Xispositive x elseprintf Xisnegative if x 0 printf Xispositive x elseprintf Xisnegative 二 if语句的嵌套 在if语句中又包含一个或多个if语句称为if语句的嵌套 一般形式 if 条件1 if 条件2 语句1else语句2elseif 条件3 语句3else语句4 内嵌if 内嵌if 如 if x 0 if y 0 printf x 0 y 0 elseprintf x 0 y0 printf x0 elseprintf x 0 y 0 说明 else与if的匹配原则是 一个else应与其之前距离最近且没有与其它else配对的if配对 if n 6 if n 12 printf 6 n 12 elseprintf n 6 if n 6 if n 12 printf 6 n 12 elseprintf n 6 三 用if语句实现选择结构举例 main intx y scanf d main floata b c scanf f f f 程序2 将程序1的if语句改为 exp52 c includemain intx y scanf d 程序1 exp51 c includemain intx y scanf d 程序4 将程序1的if语句改为 exp54 c includemain intx y scanf d 程序3 将程序1的if语句改为 exp53 c includemain intx y scanf d 1 程序1和程序2是正确的 它们代表的函数为 2 程序3和程序4是错误的 它们代表的函数为 结论 四switch多分支选择语句 用if或if else或它们的嵌套也可使程序实现多路分支 但容易出现下面的问题 可读性差 破坏结构 解决问题的方法 采用switch语句 switch 变量 case常量表达式1 语句体1case常量表达式2 语句体2 case常量表达式n 语句体ndefault 语句体 n 1 一般形式 根据表达式的取值 判断其与哪一个常量表达式相等 如 表达式i 则自语句i开始执行 直到语句n 1止 若与所有常量表达式值不相等 则从default后的语句开始执行 功能 注 default可有可无 例 根据成绩等级打印百分数段 switch grade case A printf 85 100 n case B printf 70 84 n case C printf 60 69 n case D printf 60 n default printf error n 程序如下 exp55 c includemain chargrade scanf c 运行结果为 A 程序运行结果不在预料之中 产生错误的原因 没有完全起到分支作用 85 10070 8460 69 60Error switch 表达式 case常表1 语句1 break case常表2 语句2 break case常表n 语句n break default 语句n 1 一般形式为 解决办法 增加break语句 使之跳出switch结构 修改程序为 exp56 c includemain chargrade scanf c 1 常量表达式的值必须互不相等 否则会有二异性 2 case顺序无关紧要 3 不一定非用break不可 有时几种情况合并执行一组语句 注意 switch grade case A case B case C printf 60 n break case D printf 60 n break 例如 4 4循环结构 循环结构的特点是 程序的流程是在给定条件时 反复执行 某个程序段 语言中可以用以下语句来实现循环 用goto语句和if语句构成循环 用while语句 用do while语句 用for语句 4 4 1goto语句和goto语句构成的循环 一 goto语句 goto语句为无条件转向语句 其作用为 使程序的执行无条件地转移到指定处 如 gotolabel 1 goto123 执行过程 执行语句时 程序转移到以标号为前缀的语句处继续执行 如 p1 x gotop1 说明 goto语句是一种非结构化语句 结构化程序设计方法不提倡使用goto语句 因为滥用goto语句将使程序流程无规律 可读性差 但也不是绝对禁止使用 只有在能够大大提高程序效率时才使用 且记 不要从循环体外跳到循环体内 二 用goto语句和if语句构成循环 例 计算10 并输出结果 main inti 1 sum 1 loop if i 10 sum sum i i gotoloop printf 10 d n sum 运行结果 10 24320 本应是 10 3628800 main inti 1 longsum 1 loop if i 10 sum sum i i gotoloop printf 10 ld n sum 4 4 2while语句 例 将上面计算10 并输出结果的程序用while语句写出 main inti 1 longintsum 1 while i 10 sum sum i i printf 10 ld n sum main inti 1 longintsum 1 loop if i 10 sum sum i i gotoloop printf 10 ld n sum 循环结构的术语 1 循环条件 是循环结构中的测试表达式 如 while i 10 2 循环体 是在每个循环周期均要执行一次的语句 语句可以是任何语句 简单语 复合语句 空语句均可以 如 上例while语句中用花括号括起来的复合语句 3 循环控制变量 是在循环条件中控制条件是真是假的变量 如 上例while语句中使用的变量i 注意 循环条件中的表达式一般是逻辑表达式和关系表达式 也可以是算数表达式 非0为真 0为假 一般表达式中应含有循环控制变量 while 3 和while 0 虽然从程序设计的角度上说是不合理的 但是合法的 while 3 语句表示无限循环while 0 语句表示不进入循环体 要写出一个正确的循环结构 对控制变量要做三方面工作 控制变量赋初值 把控制变量写入正确的循环条件 控制变量的更新 调整 4 4 3do while语句 分号不能少 例 将上面计算10 并输出结果的程序用do while语句写出 main inti 1 longintsum 1 while i 10 sum sum i i printf 10 ld n sum main inti 1 longintsum 1 do sum sum i i while i 10 printf 10 ld n sum 我们将while和do while循环做一下比较 main inti longsum 1 scanf d main inti longsum 1 scanf d 输入 9 输出 90 输入 11 输出 1 输入 9 输出 90 输入 11 输出 11 比较上面两个程序 虽然结构是相同的 在输入值为有效值时结果相同 但当输入无效值时输出结果是不同的 为什么 while与do while的主要区别 4 4 4for语句 表达式1 一组初始化表达式 表达式2 循环控制条件 表达式3 在执行完循环体语句之后执行的表达式 我们前面已经说明 要正确表达循环结构应注意三方面的问题 控制变量的初始化 循环的条件和控制变量的更新 for语句在书写形式上正好体现了这种紧密的逻辑关系 执行过程 例 将上面计算10 的程序用for语句写出 main inti longsum for i 1 sum 1 i 10 i sum sum i printf 10 ld n sum main inti longsum for i 1 sum 1 i 10 sum sum i i printf 10 ld n sum 空语句 说明 表达式1 用于进入循环体之前给某些变量赋初值 若省略 可在for语句前给变量赋初值 main inti 1 longsum 1 for i 10 i sum sum i printf 10 ld n sum for循环的三个表达式起着不同的作用 根据需要可以省略 表达式2 决定循环的条件 若省略 则为无限循环 表达式3 用于循环一次后对某些变量进行修改 若省略 可在循环体内对变量进行修改 main inti longsum 1 for i 1 i 10 sum sum i i printf 10 ld n sum for语句最为灵活 它完全可以代替的while语句 如 i 1 while i 10 sum sum i i 等效于 for i 1 i 10 i sum sum i for语句功能很强 其中表达式1和表达式3可以是逗号表达式 但为增强程序的可读性 一般不要把与循环无关的东西放到for语句中 如 sum 1 for i 1 i 10 i sum sum i 三种循环语句的总结 三种循环语句共同的特点是 当循环控制条件非零时 执行循环体语句 否则终止循环 循环语句可以是任何语句 简单语句 复合语句 空语句均可以 while和for语句先判断循环控制条件 do while语句后判断循环控制条件 所以 while和for语句的循环体可能一次也不执行 而do while语句的循环体至少也要执行一次 在循环体内或循环条件中必须有使循环趋于结束的语句 否则会出现死循环等异常情况 三种循环可以处理同一问题 一般情况可以互相代替 但在实际应用中 我们要根据具体情况来选用不同的循环语句 选用的一般原则如下 如果循环次数在执行循环体之前就已确定 一般用for语句 如果循环次数是根据循环体的执行情况确定的 一般用while语句或者do while语句 循环次数确定例 inti longsum 1 for i 1 i 10 i sum sum i 循环次数不确定例 charcdo c getchar printf c c while c q c Q 当循环体至少执行一次时 用do while语句 反之 如果循环体可能一次也不执行时 用while语句 循环体至少执行一次 只有当用户键入q或Q 才结束循环 charcdo c getchar printf c c while c q c Q 循环体可能一次不执行 只有不是q或Q的字符才被打印 charc c getchar while c q c Q printf c c c getchar 4 4 5循环的嵌套 例 在屏幕上打印一个8行7列的星号矩阵 includemain inti for i 0 i 7 i printf 打印第1行星号 printf n for i 0 i 7 i printf 打印第2行星号 printf n for i 0 i 7 i printf 打印第8行星号 什么叫循环嵌套 一个循环的循环体中套有另一个循环叫循环嵌套 这种嵌套过程可以一直重复下去 一个循环外面包围一层循环称为二重循环 一个循环外面包围二层循环称为三重循环 一个循环外面包围多层循环称为多重循环 while do while for可以互相嵌套自由组合 例 将上例 打印8行7列的星号矩形 用二重循环实现 includemain inti k for i 0 i 8 i for k 0 k 7 k printf printf n 4 4 6break和continue语句 一 break语句 功能 结束当前的一层循环 解释 break语句只能用于循环语句和Switch语句 例 打印半径为1 10的圆的面积 如果面积超过100 则不再打印 include definePI3 14159main intr floatarea for r 1 r100 0 break printf area f n area printf now r d n r 注意 在嵌套循环中使用break语句 它只影响包含它的最内层循环 即程序仅跳出包围该break的那层循环 例 编写程序 输出三角乘法表 main inti j for i 1 ii break printf 3d i j printf n 运行结果 12436948121651015202561218243036714212835424981624324048566491827364554637281 功能 结束循环体 进入下一个循环周期 解释 一旦执行了continue语句 程序就跳过循环体中位于该语句后的所有语句 提前结束本次循环周期并开始下一个循环周期 二 continue语句 6 9程序举例 例6 6用 4 1 1 3 1 5 1 7 1 9 求 近似的值 直到最后一项的绝对值小于10 6为止 include math h main ints floatn t sum pi t 1 sum 0 n 1 s 1 while fabs t 000001 sum sum t n n 2 s s t s n pi sum 4 printf pi f n pi 运行结果 3 141594 第几个月小兔子对数中兔子对数老兔子对数总数1100120101310124111352125 例6 7斐波纳契数列 1 1 2 3 5 8 例6 7求斐波纳契数列 1 1 2 3 5 8 的前20个数 该数列特点 第1 2两个数是1 1 从第3个数开始 该数是其前两个数之和 main intf1 1 f2 1 i for i 1 i 10 i printf 6d 6d n f1 f2 f1 f1 f2 f2 f1 f2 运行结果 11235813213455891442333776109871597258441816765 例6 7求斐波纳契数列 1 1 2 3 5 8 的前40个数 main longintf1 1 f2 1 i for i 1 i 20 i printf 12ld 12ld f1 f2 if i 2 0 printf n f1 f1 f2 f2 f1 f2 运行结果 1123581321345589144233377610987258441816765 例6 8判断M是否为素数 includemain intm i k scanf d 素数的定义 只能被1和它他本身整除的正整数 例6 9求出100 200以内的所有素数 main intm k i n 0 for m 101 m k 1 printf d m n n 1 if n 10 0 printf n printf n 例6 10译密码 密码规律为 每个字母用其后第四个字母代替 26个字母循环排列 include stdio h main charc c1 while c getchar n if c a Ch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智慧城市试题及答案
- 淄博口语考试题目及答案
- 社会资本在社会融合中的创新作用-洞察及研究
- 教师招聘之《小学教师招聘》考试综合练习及完整答案详解(名校卷)
- 教师招聘之《幼儿教师招聘》测试卷含答案详解(综合卷)
- 教师招聘之《小学教师招聘》练习题库含答案详解(考试直接用)
- 教师招聘之《小学教师招聘》题库检测题型及完整答案详解(有一套)
- 计算机软件许可合同范本3篇
- XX酒店钢结构施工组织设计方案
- 老师师德心得体会-五篇
- 畜禽疫病防控技术课件教学
- 2025静脉输液规范
- 大学英语 专升本 课件 第十节 定语从句
- 瑜伽急救知识培训课件
- 2《中国人首次进入自己的空间站》课件【知识精研】统编版语文八年级上册
- 切口妊娠介入治疗
- 2024年高校红十字应急救护大赛理论考试题库(含答案)
- 2024年福建省公务员录用考试《行测》真题及答案解析
- c02激光治疗皮肤病
- 占道施工安全培训
- 智能建造施工技术 课件 项目1 智能建造施工概论
评论
0/150
提交评论