第6章 循环控制_第1页
第6章 循环控制_第2页
第6章 循环控制_第3页
第6章 循环控制_第4页
第6章 循环控制_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、第第6章章 循环控制循环控制 2 第第6章章 循环控制循环控制 6.1 while循环与循环与for循环循环 6.2 do-while循环循环 6.3 break语句与语句与continue语句语句 6.4 goto 语句与标号语句与标号 3 6.1 for循环与循环与while循环循环 1. for语句语句 for语句的基本形式如下:语句的基本形式如下: for(;) for语句的语义如图所示语句的语义如图所示: 判 e 2 求 e 1 T F 执 行 s求 e 3 4 例例: 求求1100之间所有奇数之和。之间所有奇数之和。 include main() int i,sum=0; for(

2、i=1;i=100;i+=2) sum+=i; printf(sum=%dn,sum); 运行输出:运行输出: sum=2500 6.1 for循环与循环与while循环循环 5 下面是几种不同的表示方法:下面是几种不同的表示方法: (1) 表达式表达式1和表达式和表达式3是逗号表达式,如是逗号表达式,如; int sum,i; for(sum=0,i=1;i=100;i+,i+) sum+=i; 其中其中sum=0和循环控制变量无关。和循环控制变量无关。 (2) 省略表达式省略表达式1和表达式和表达式3,如,如: int sum=0,i=1; for( ; i100) break; 6.1

3、for循环与循环与while循环循环 7 (4) 省略循环体,把循环体变成空语句,原来省略循环体,把循环体变成空语句,原来 的工作放到循环头中完成,如的工作放到循环头中完成,如 int i,sum=0; for(i=1;i=100;sum+=i,i+=2); 这时应注意,原循环体中的语句一定要放这时应注意,原循环体中的语句一定要放 在控制变量增值之前,否则就会出错。在控制变量增值之前,否则就会出错。 6.1 for循环与循环与while循环循环 8 2. while语句语句 while语句的基本形式为:语句的基本形式为: while() while语句的语义如图所语句的语义如图所 示。其含义是

4、:首先计算表示。其含义是:首先计算表 达式的值,只要为真就执行达式的值,只要为真就执行 循环体语句循环体语句s,直到表达式求,直到表达式求 值为假,然后退出循环。在值为假,然后退出循环。在 循环体中,一定要对循环控循环体中,一定要对循环控 制变量进行修改。制变量进行修改。 表 达 式语 句 s T F 6.1 for循环与循环与while循环循环 9 例例:求求1100之间所有偶数之和。之间所有偶数之和。 include main() intsum, i; sum=0;i=2; while(i=100) sum=sum+i; i+=2; printf(sum=%dn,sum); 运行输出:运行

5、输出: sum=2550 6.1 for循环与循环与while循环循环 10 while语句多用在循环次数预先难以确定的循环中。语句多用在循环次数预先难以确定的循环中。 例:例:输入并输出一个字符串,遇输入并输出一个字符串,遇“”结束。结束。 include main() charc; while(c=getchar()!=) putchar(c); 运行程序,当输入为:运行程序,当输入为: This is a string 则输出为:则输出为: This is a string 说明:说明:程序在执程序在执 行时并不是输入一行时并不是输入一 个字符后立即把它个字符后立即把它 送到屏幕,而是先

6、送到屏幕,而是先 放入内存缓冲区中,放入内存缓冲区中, 只有在打了回车符只有在打了回车符 之后才把缓冲区里之后才把缓冲区里 的内容一块输出。的内容一块输出。 6.1 for循环与循环与while循环循环 11 例:例:求两个正整数求两个正整数a,b的最大公约数的最大公约数 GCD(Greatest Common Divisor)。 include main() intu,v,t; printf(Input2integers:n); scanf(%d%d, while(v) t=u%v; u=v; v=t; printf(The GCD=%dn,u); 说明:说明:程序中程序中 while(v)

7、等价于等价于 while(v!=0) 6.1 for循环与循环与while循环循环 12 1. do-while语句语句 一般形式为:一般形式为: do while() 其语义如图所示:进入其语义如图所示:进入do-while 循环后,首先执行一次循环体,循环后,首先执行一次循环体, 然后再测试表达式然后再测试表达式e,如其为真,如其为真 则继续执行循环体,直至表达式则继续执行循环体,直至表达式 求值为假。求值为假。 6.2 do-while语句语句 语句s 表达式e T F 13 现在我们再来观察前面的输入字符串的例子,现在现在我们再来观察前面的输入字符串的例子,现在 要求结束符要求结束符“

8、”也要输出出来:也要输出出来: include main() char c; do c=getchar(); putchar(c); while(c!=); 运行:运行: 输入字符串:输入字符串:this is a string 则输出为:则输出为: this is a string 6.2 do-while语句语句 14 例:例:输入一个正整数,然后按反向输出。比如输入一个正整数,然后按反向输出。比如 输入输入12345,则输出为,则输出为54321。 编程思路:编程思路:输入时一次把一个整数完整地输入,输入时一次把一个整数完整地输入, 而输出则是一次一个数字地输出,并且要求把最而输出则是一

9、次一个数字地输出,并且要求把最 低位先输出,所以首先应该把最低位数字分离出低位先输出,所以首先应该把最低位数字分离出 来输出,然后再分离出下一个最低位数字来输出,然后再分离出下一个最低位数字, 怎样才能把最低位分离出来呢怎样才能把最低位分离出来呢?可用对可用对10求模的求模的 方法。然后用对方法。然后用对10求商的方法求出除掉最低位后求商的方法求出除掉最低位后 的数,作为进一步倒置输入的基数。的数,作为进一步倒置输入的基数。 6.2 do-while语句语句 15 include main() int number,digit; printf(Input an integern); scanf

10、(%d, do digit=number%10; printf(%d,digit); number/=10; while(number); printf(n); 运行输出:运行输出: Input an integer 12345 54321 6.2 do-while语句语句 16 2. 循环语句的嵌套循环语句的嵌套 循环嵌套以构成多重循环,这在解决很多循环嵌套以构成多重循环,这在解决很多 实际问题中是经常遇到的。实际问题中是经常遇到的。C语言中的三种循环语言中的三种循环 结构可以互相组合使用。结构可以互相组合使用。 例例 : 计算计算1到到5的乘法表。的乘法表。 include main()

11、int i,j; 6.2 do-while语句语句 17 for(i=1;i=5;i+) for(j=1;j=5;j+) printf(%d*%d=%2d,i,j,i*j); printf(n); 运行程序,发现有同义反复的式子,如运行程序,发现有同义反复的式子,如 2*3=6和和3*2=6这种情况。这种情况。 6.2 do-while语句语句 18 6.3 break语句与语句与continue语句语句 1. break语句语句 break语句的作用是终止一段程序的执行,语句的作用是终止一段程序的执行, 主要用在两个地方:主要用在两个地方: (1) break语句和语句和switch语句相结

12、合,使控制语句相结合,使控制 从从switch中退出来;中退出来; (2) 在循环体中,在循环体中,break的作用是立即终止的作用是立即终止 循环。循环。 19 include main() int i=0; for( ; ; ) printf(%4d,i); i+; if(i=5) break; 运行输出为:运行输出为: 0 1 2 3 4 当当i的值为的值为5时终止时终止for循环循环 6.3 break语句与语句与continue语句语句 20 例:例: 判定正整数判定正整数n是否为素数。是否为素数。 编程思路:编程思路:首先确定判断素数的算法。首先确定判断素数的算法。 根据定义,如果

13、根据定义,如果n被从被从2到到n-1之间所有的数都之间所有的数都 除不尽,则除不尽,则n为素数,如果不到为素数,如果不到n-1就除尽了,就除尽了, 说明说明n不是素数。不是素数。 6.3 break语句与语句与continue语句语句 21 include main() int n,i,j; printf(Input an Integern); scanf(%d, for(i=2;i=n-1;i+) if(n%i=0) break; if(i=n-1) printf(%d is not a primen,n); else printf(%d is a primen,n); 6.3 break语

14、句与语句与continue语句语句 22 while(e1) if(e2) continue; do if(e2) continue; while(e1) for(e1;e2;e3) if(e) continue; 2. continue语句语句 和和break语句相反,在循环体中语句相反,在循环体中continue的作用不的作用不 是跳出循环体。对是跳出循环体。对while和和do-while语句来说,语句来说,continue 的作用是跳到条件表达式处,对的作用是跳到条件表达式处,对for语句来说,语句来说, continue的作用是跳到的作用是跳到for语句头中的第语句头中的第3个表达式

15、处,个表达式处, 从而忽略循环体中处在它以下的那些语句。从而忽略循环体中处在它以下的那些语句。 6.3 break语句与语句与continue语句语句 23 例例: 把输入串中除小写元音字母以外的字符把输入串中除小写元音字母以外的字符 打印出来。打印出来。 include main() char c; while(c=getchar()!=n) if(c=ac=ec=ic=oc=u) continue; putchar(c); 6.3 break语句与语句与continue语句语句 24 例例: 输出输出100之内之内3的整倍数。的整倍数。 include main() int i; for(

16、i=1;i=100;i+) if(i%3!=0) continue; printf(%4d,i); 6.3 break语句与语句与continue语句语句 25 当当i不是不是3的倍数时,的倍数时,continue转向转向for头部的头部的 i+处。如用处。如用do-while语句书写,程序为:语句书写,程序为: include main() int i=1; do i+; if(i%3!=0) continue; printf(%4d,i); while(i100); 6.3 break语句与语句与continue语句语句 26 goto语句的一般形式是:语句的一般形式是: goto ; 其

17、功能是把控制转到标号标识符所标志的地方。其功能是把控制转到标号标识符所标志的地方。 标号标号的命名同变量命名的形式相同,标号的命名同变量命名的形式相同,标号 的后面要紧跟一个冒号。标号可以位于对应的的后面要紧跟一个冒号。标号可以位于对应的 goto语句所在函数的任何语句前面。标号的作语句所在函数的任何语句前面。标号的作 用域是整个函数。用域是整个函数。 6.4 goto 语句与标号语句与标号 27 例:例:求求1100的整数之和。的整数之和。 include main() int i,sum=0; i=1; loop: sum+=i; i+; if(i=100) goto loop; printf(sum=%dn,sum); 6.4 goto 语句与标号语句与标号 28 例:例:#include main() int i,t; for(t=1;t5;t+) for(i=0;i=100,i+) if(i=5) goto end; printf(%4d,i) ; printf(n); end: ; 运行输出:运行输出: 0 1 2 3 4 标号标号end在外循环在外循环for的的 循环体外,当内循环中循环体外,当内循环中i=5 时,时,goto不仅跳出内循环,不仅跳出内循环, 也跳出了外循环。也跳出了外循

温馨提示

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

评论

0/150

提交评论