谢丽聪老师C语言课件-6循环控制-2009_第1页
谢丽聪老师C语言课件-6循环控制-2009_第2页
谢丽聪老师C语言课件-6循环控制-2009_第3页
谢丽聪老师C语言课件-6循环控制-2009_第4页
谢丽聪老师C语言课件-6循环控制-2009_第5页
已阅读5页,还剩56页未读 继续免费阅读

下载本文档

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

文档简介

第六章循环控制 6 1概述6 2goto语句以及用goto语句构成循环6 3while语句和do while语句6 4for语句6 5循环的嵌套6 6break和continue语句 6 1循环控制概述 循环结构的特点 在给定条件成立时 反复执行某程序段 直到条件不成立为止 语言提供的循环结构类型如下 1 用goto语句和if语句构成循环 2 用while语句 3 用do while语句 4 用for语句 循环条件 循环体 6 2goto语句以及用goto语句构成循环 6 2 1形式 goto语句标号 6 2 2功能 一进入执行goto语句 立即转向去执行其后面标号所指示的语句 gotojump loop 语句1语句1语句2语句2 语句n语句njump 语句n 1gotoloop 用标识符表示 分号 冒号 冒号 6 2 3注意 结构化程序设计方法主张限制使用goto语句 一般只在下面两种结构中表示循环一 loop if 表达式 语句gotoloop 表达式值为零时 立即停止循环二 loop 语句if 表达式 gotoloop 表达式值非零时 立即停止循环 例 用goto语句和if语句构成循环 例用goto语句和if语句构成循环 voidmain inti sum 0 i 1 loop if i 100 sum sum i i gotoloop printf d n sum 运行结果 5050 i 101 形式 while 表达式 语句表达式值为零时 立即停止循环形式 do语句while 表达式 表达式值为零时 立即停止循环 至少执行一次循环语句 6 3while和dowhile语句 分号 while 表达式 do语句while 表达式 例1 写出下面程序的运行结果 1 voidmain inti 1 while i 3 printf d n i i 2 voidmain inti 1 while i 3 printf d n i i 结果123 结果死循环 循环体 空语句 注意 若把上面 去掉也死循环 复合语句作为循环体语句 3 voidmain intk 1 n 1 sum 0 do sum n n if sum 10 k 0 while k 1 printf sum d n sum 改为while k 1 死循环 0 1 1 2 3 3 6 4 10 结果 sum 10 例2用while语句和do while语句求 传统流程图表示算法 N S图表示算法 100 voidmain inti sum 0 i 1 运行结果 5050while i 100 sum i i printf d n sum voidmain inti sum 0 i 1 do sum i i while i 100 printf d n sum 注意 i和sum的初值i的终值 例3统计从键盘输入一行字符的个数 includevoidmain intn 0 printf inputastring n while getchar n n printf d n 只要从键盘输入的字符不是回车就继续循环 完成对输入字符个数计数 输入 ascdf 输出 5 例4 计算p 1 2 3 nvoidmain inti n longp scanf d 不用long会溢出 重复到n次 也可以写成i n 1 例5 计算s 1 2 3 n n 0 voidmain inti n longs t scanf d 保证达到计算n次 t 1 1 2 3 S 1 1 2 1 2 3 例6 计算下面二十个数的和 13 8 65 68 9 342 987voidmain inti 1 floatx sum 0 while i 20 scanf f 注 执行程序时输入13 8 6568 9 342 987 i 40 i 2 while语句中的表达式一般是关系表达或逻辑表达式 也可以是其它表达式 只要表达式的值为真 非0 即可继续循环 例7 voidmain inta 0 n printf ninputn scanf d 执行n次 每执行1次 n减1 a 2 a 输入 8 输出 02468101214 例8 while和do while循环比较 voidmain intsum 0 i scanf d do sum sum i i while i 10 输入 8 输入 11 sum 0 sum 11 6 4for语句 代替while语句 6 4 1形式 for 表达式1 表达式2 表达式3 语句要正确表达循环结构应注意三方面要求 1 循环控制变量的初始化 2 循环的条件 3 循环控制变量的值的更新 for语句在书写形式上集中体现了这三方面要求 6 4 2功能 for语句完全可以取代while语句 for 表达式1 表达式2 表达式3 语句它的执行过程如下 1 先求解表达式1 2 求解表达式2 若其值为真 非0 则执行for语句中指定的内嵌语句 然后执行第3 步 若其值为假 0 则结束循环 转到第5 步 3 求解表达式3 4 转回第2 步继续执行 5 循环结束 执行for语句下面的一个语句 用for语句改写前面的例2 例4 例5 例7 例2 求voidmain inti sum 0 i 1 do sum i i while i 100 printf d n sum voidmain inti sum 0 for i 1 i 100 i sum i printf d n sum 例4 计算p 1 2 3 nvoidmain inti n longp scanf d for i 1 p 1 i n i P i 中间用逗号 for i 1 p 1 i n P i i 例5 计算s 1 2 3 n n 0 voidmain inti n longs t scanf d for i 1 t 1 s 0 i n i t i s t 例7 计算下面二十个数的和 13 8 65 68 9 342 987voidmain inti 1 floatx sum 0 while i 20 scanf f for i 1 i 20 i scanf f for语句形式 for 循环变量赋初值 循环条件 循环变量增量 语句 总是一个赋值语句 它用来给循环控制变量赋初值 总是一个表达式 它用来判别循环是否终止 定义循环控制变量每循环一次后按什么方式变化 这三个部分之间用 分开 对于for循环中语句的一般形式 for 表达式1 表达式2 表达式3 语句就是如下的while循环形式 表达式1 while 表达式2 语句表达式3 例1 写出下面程序的输出结果 includevoidmain charc for c getchar putchar c c为 值为0 结束 可以是任意表达式 输入 a56 3h hj 输出 a56 3h 例2 下面程序的输出结果是 voidmain intx 10 y 10 i for i 0 x 8 y i printf 3d 3d x y A 10192B 9876C 101091D 10990 表达式1只做一次 9 1 8 C 2 注意 1 for循环中的 表达式1 表达式2 循环条件 和 表达式3 可以缺省 但 不能缺省 2 省略了 表达式1 表示不对循环控制变量赋初值 可在for循环里面或外面对其赋初值 例如 i 1 for i 20 i scanf f 4 省略了 表达式3 循环变量增量 则不对循环控制变量进行操作 这时可在语句体中加入修改循环控制变量的语句 例如 for i 1 i 100 sum sum i i 5 省略了 表达式1 和 表达式3 例如 for i 100 sum sum i i 相当于 while i 100 sum sum i i 6 3个表达式都可以省略 例如 for 语句相当于 while 1 语句7 表达式1可以是设置循环变量的初值的赋值表达式 也可以是其他表达式 例如 for sum 0 i 100 i sum sum i 8 表达式1和表达式3可以是一个简单表达式也可以是逗号表达式 for sum 0 i 1 i 100 i sum sum i 或 for i 0 j 100 i 100 i j k i j 9 表达式2一般是关系表达式或逻辑表达式 但也可是数值表达式或字符表达式 只要其值非零 就执行循环体 例如 for i 0 c getchar n i c 又如 for c getchar n printf c c 6 5循环的嵌套 1 各种循环结构的循环体中可以包含任一种完整的循环结构 选择结构 2 选择结构的任一分支中也可以包含任一种完整的循环结构 选择结构 3 且它们可多层嵌套 例1 while x y z for k 1 k 2 k if a 5 w 1 elseif a 5 switch结构 else for s 0 n 0 n 3 n s n 6 6break语句和continue语句 switch结构中的break 提前结束该结构循环结构中的break 提前结束该结构 while循环 do while循环 for循环 循环结构中的continue 提前结束本次循环 若在多层嵌套中使用break或continue 它只影响包含它的最内层结构 例1 写出以下程序的运行结果 voidmain intn for n 1 n 10 n if n 3 0 break printf 4d n printf n voidmain intn for n 1 n 10 n if n 3 0 cotinue printf 4d n printf n 结果 12 结果 12457810 例2 把100 200之间的不能被3整除的数输出 includevoidmain intn for n 100 n 200 n if n 3 0 continue printf d n printf n 能被3整除 则进行下一次循环 例3 计算下面若干个数的和 13 8 65 68 9 342 987 并统计个数 个数 100 includevoidmain inti 1 floatx sum 0 while i 100 scanf f 注 执行程序时输入13 8 6568 9 342 9871e36 求绝对值 理论上相等 实际上有误差 位置不能错 i 1 例4 voidmain intk j x 0 for k 1 k 4 k x if k 3 0 break for j k j 5 j x x printf d n x 结果 14 程序举例 例1 输出10 1000中所有十位数为3的数voidmain inti for i 10 i 1000 i if i 10 10 3 printf 5d i 如 i 1234i 10 123整数123 10 3 if i 10 103 continue printf 5d i 例2 voidmain intk for k 2 k 10 k 3 printf 4d k printf 4d k 运行结果 25811 例3 voidmain intk j 99 for k 1 k 2 k printf 1 d 5d n k j for j 5 j 7 j printf 2 d 5d n k j printf 3 d 5d n k j printf 4 d 5d n k j 例4 voidmain inti j k printf ijk n for i 0 i 2 i for j 0 j 2 j for k 0 k 2 k printf d d d n i j k 1 2 1 2 例5 输出100 200中所有素数m是素数 m不被2 3 4 m 1中任一个整除结果 101103107109113127131137139149151157163173173179181191193197199 执行m 11 m 15 k m 1 k m 1 for i 2 iki kk 10 i 11k 3i 3 i k 结束for循环 m i 0 break voidmain intm i k for m 100 m 200 m k m 1 for i 2 i k i if m i 0 break if i k printf disnotaprimenumber n m elseprintf disaprimenumber n m 只要有一个整除 后面无需判断 强迫循环结束 此时i k 循环正常结束 i k说明都不能整除 改为输入一个数 判断是否为素数 m 1 includevoidmain intm i k scanf d 输入 3 输入 6 例6 输出所有由1 2 3组成的三位数 111211311112212312113213313121221321122222322123223323131231331132231332133233333 voidmain inti j k for i 1 i 3 i for j 1 j 3 j for k 1 k 3 k printf d d d i j k d d d没有空格和逗号 起分隔符作用 上面改为不出现重复数字的三位数voidmain inti j k for i 1 i 3 i for j 1 j 3 j for k 1 k 3 k if i j 上面改为不出现重复字母的由X Y Z组成的三个子符的字符串voidmain inti j k for i X i Z i for j X j Z j for k X k Z k if i j 与int一样 例7 P1216 15

温馨提示

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

评论

0/150

提交评论