第6章 循环结构程序设计_第1页
第6章 循环结构程序设计_第2页
第6章 循环结构程序设计_第3页
第6章 循环结构程序设计_第4页
第6章 循环结构程序设计_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、本章内容本章内容1.循环结构概述循环结构概述2.go to语句及用语句及用go to语句构成的循环语句构成的循环3.While语句的使用语句的使用4.Do While语句的使用语句的使用5.For 语句的使用语句的使用6.循环的嵌套循环的嵌套7.Break语句和语句和Continue语句的使用语句的使用8.程序举例程序举例概概 述述 循环结构是程序中一种很重要的结构。其特点是,在给定循环结构是程序中一种很重要的结构。其特点是,在给定条件成立时,反复执行某一程序段,直到条件不成立为止。条件成立时,反复执行某一程序段,直到条件不成立为止。 给定的条件称为循环条件,反复执行的程序段称为循环体。给定的

2、条件称为循环条件,反复执行的程序段称为循环体。 语言提供多种循环语句,组成各种不同形式的循环结构。语言提供多种循环语句,组成各种不同形式的循环结构。 (1)用)用goto语句和语句和if语句构成循环语句构成循环 (2)用)用while语句语句 (3)用)用do-while语句语句 (4)用)用for语句语句表达式表达式语句语句表达式表达式语句语句a) 当型循环当型循环b) 直到循环直到循环YNNY循环结构类型循环结构类型无条件转移语句无条件转移语句goto语句语句 一般格式:一般格式: goto 语句标号;语句标号; 语句标号是按标识符规定书写的符号,放在某一语句行的语句标号是按标识符规定书写

3、的符号,放在某一语句行的前面,标号后加冒号前面,标号后加冒号(:)。 语句标号起标识语句的作用,与语句标号起标识语句的作用,与goto 语句配合使用。语句配合使用。 goto语句及用语句及用goto语句构成的循环语句构成的循环 语言不限制程序中使用标号的次数,但各标号不得重名。语言不限制程序中使用标号的次数,但各标号不得重名。 goto语句的语义是改变程序流向,转去执行语句标号所标识语句的语义是改变程序流向,转去执行语句标号所标识的语句。的语句。 如:如: label1: i+; goto label1; 用用goto语句与语句与if语句实现循环语句实现循环形式形式1:loop1: 语句;语句

4、; if (表达式)(表达式) goto loop1;形式形式2:loop1: if (表达式)(表达式) goto loop2; 语句;语句; goto loop1;loop2 :注意:在结构化程序设计中一般不主张使用注意:在结构化程序设计中一般不主张使用goto语句,语句, 以以免造成程序流程的混乱,使理解和调试程序都产生困难。免造成程序流程的混乱,使理解和调试程序都产生困难。例例1: 编程序求:编程序求:s=1+2+3+100main() int s=0,n=1; loop: s=s+n; n+; if (n100) goto loop2; s=s+n; n+; goto loop1;

5、loop2: printf(S=%d,s); #includestdio.h void main() int n=0; printf(input a stringn); loop: if(getchar()!=n) n+; goto loop; printf(%d,n); 例例2:统计从键盘输入一行字符的个数。:统计从键盘输入一行字符的个数。while 语句语句执行过程执行过程是:计算表达式的值,当值为真是:计算表达式的值,当值为真(非非0)时,时, 执执行循环体语句。如右上图。行循环体语句。如右上图。 while语句的一般形式为:语句的一般形式为: while(表达式表达式) 语句;语句;

6、其中表达式是循环条件,语句为循其中表达式是循环条件,语句为循环体,若是多个语句则必须用环体,若是多个语句则必须用 组成组成复合语句。复合语句。表达式语句YN例例1: 编程序求:编程序求:s=1+2+3+100void main() int s=0,n=1; while (n=100) s=s+n; n+; printf(S=%d,s); do-while语句的一般形式为:语句的一般形式为: do 语句;语句; while (表达式表达式); 其中:语句是循环体,其中:语句是循环体, 表达式是循环条件。表达式是循环条件。 表达式语句NY 执行过程是:先执行循环体语句一次,执行过程是:先执行循环体

7、语句一次, 再判别表达再判别表达式的值,若为真式的值,若为真(非非0)则继续循环,否则终止循环。则继续循环,否则终止循环。Dowhile语句语句例例1: 编程序求:编程序求:s=1+2+3+100void main() int s=0,n=1; do s=s+n; n+; while (n=100); printf(“s=%d,s); void main() int s=0,n=1; while (n=100) s=s+n; n+; printf(S=%d,s); 1.在在if语句、语句、while语句中,表达式后面都不能加分号,而在语句中,表达式后面都不能加分号,而在 do-while语句的

8、表达式后面则必须加分号。语句的表达式后面则必须加分号。2.do-while语句也可以组成多重循环,而且也可以和语句也可以组成多重循环,而且也可以和while语语句相互嵌套。句相互嵌套。3.当循环体由多个语句组成时,也必须用当循环体由多个语句组成时,也必须用 括起来组成一括起来组成一个复合语句。个复合语句。4.如果循环至少要执行一次,如果循环至少要执行一次, while和和do-while语句可以相语句可以相互替换。互替换。使用使用while和和do-while语句应注意以下几点:语句应注意以下几点:for语句语句 for语句是语言所提供的功能更强,使用更广泛的一种语句是语言所提供的功能更强,使

9、用更广泛的一种循环语句。循环语句。使用一般形式为:使用一般形式为: for (表达式表达式1;表达式;表达式2;表达;表达3) 语句;语句; 表达式表达式1通常用来给循环变量赋初值,一般是赋值表达式。通常用来给循环变量赋初值,一般是赋值表达式。也允许在也允许在for语句外给循环变量赋初值,此时可以省略该表达语句外给循环变量赋初值,此时可以省略该表达式。式。 表达式表达式2通常是循环条件,一般为关系或逻辑表达式。通常是循环条件,一般为关系或逻辑表达式。 表达式表达式3通常可用来修改循环变量的值,一般是赋值语句。通常可用来修改循环变量的值,一般是赋值语句。 1.首先计算表达式首先计算表达式1的值。

10、的值。 2.再计算表达式再计算表达式2的值,若值为的值,若值为真真(非非0)则执行循环体一次,否则跳则执行循环体一次,否则跳出循环。出循环。 3.然后再计算表达式然后再计算表达式3的值,转的值,转回第回第2步重复执行。步重复执行。 表达式2语句YN语句求解表达式1求解表达式3for 语句的执行过程语句的执行过程for语句的执行过程:语句的执行过程: 在整个在整个for循环过程中,表达式循环过程中,表达式1只计算一次,表达式只计算一次,表达式2和表达式和表达式3则可能计算多次。循环体可能多则可能计算多次。循环体可能多次执行,也可能一次都不执行。次执行,也可能一次都不执行。 main() int

11、n,s=0; for(n=1;n=100;n+) s=s+n; printf(s=%dn,s); 本例本例for语句中的表达式语句中的表达式3为为n+,实际上也是一种赋值,实际上也是一种赋值语句,相语句,相当于当于n=n+1,以改变循环变量的值。,以改变循环变量的值。例:用例:用for语句计算语句计算s=1+2+3+.+99+1001.for语句中的各表达式都可省略,但分号间隔符不能少。语句中的各表达式都可省略,但分号间隔符不能少。 如:如:for(;表达式;表达式2;表达式;表达式3) 省去了表达式省去了表达式1。 for(表达式表达式1;表达式;表达式3) 省去了表达式省去了表达式2。 f

12、or(表达式表达式1;表达式;表达式2;) 省去了表达式省去了表达式3。 for(;) 省去了全部表达式。省去了全部表达式。2.在循环变量已赋初值时,可省去表达式在循环变量已赋初值时,可省去表达式1。3.省去表达式省去表达式2或表达式或表达式3则相当于则相当于while语句语句,并且造成无限并且造成无限循环,这时应在循环体内设法结束循环。循环,这时应在循环体内设法结束循环。在使用在使用for语句中要注意以下几点:语句中要注意以下几点:main() int n=1,s=0; for(;n=100;n+) s=s+n; printf(s=%dn,s); main() int n=1,s=0; fo

13、r(;n100) break; printf(s=%dn,s); for( ; ; )等效于等效于while( 1) 4. for语句中的三个表达式都可以是逗号表达式,即每个表语句中的三个表达式都可以是逗号表达式,即每个表达式都可由多个达式都可由多个表达式组成。表达式组成。main() int n,s; for(n=1,s=0;n=100;n+) s=s+n; printf(s=%dn,s); main() int n,s; for(n=1,s=0;n=100; s+=n, n+); printf(s=%dn,s); 这里为什么要加;这里为什么要加; #includestdio.h void

14、main() int n=0; printf(input a string:n); for(;getchar()!=n;n+) ; printf(%d,n); 例:统计从键盘输入一行字符的个数。例:统计从键盘输入一行字符的个数。getchargetchar()()是使用输入缓冲区的(按了回车之后才会真正是使用输入缓冲区的(按了回车之后才会真正输入),可以用输入),可以用getchegetche()()函数,这个函数不使用缓冲区,函数,这个函数不使用缓冲区,直接输入直接处理直接输入直接处理, ,需要的头文件是需要的头文件是“conio.hconio.h”。 本例中,省去了本例中,省去了for语句

15、的表达式语句的表达式1,表达式,表达式3也不是用来修也不是用来修改循环变量,而是用作输入字符的计数。这样就把本应在循改循环变量,而是用作输入字符的计数。这样就把本应在循环体中完成的计数放在表达式中完成了。因此循环体是空语环体中完成的计数放在表达式中完成了。因此循环体是空语句。句。 注意的是,空语句后的分号不可少,如缺少此分号,则把注意的是,空语句后的分号不可少,如缺少此分号,则把后面的后面的printf 语句当成循环体来执行。反过来说,如循环体语句当成循环体来执行。反过来说,如循环体不为空语句时,不为空语句时, 决不能在表达式的括号后加分号,决不能在表达式的括号后加分号, 这样又这样又会认为循

16、环体是空语句而不能执行循环体。会认为循环体是空语句而不能执行循环体。 说说 明:明:循环的嵌套循环的嵌套 for语句也可与语句也可与while,do-while语句相互嵌套,构成多重循语句相互嵌套,构成多重循环。以下形式都合法的嵌套。环。以下形式都合法的嵌套。(4) while( ) for( ) (1) while( ) while( ) (2) do do while( ) while();(3) for( ) for( ) (7) while( ) do while( ); (5) for( ) while( ) (6) dofor( ) while( );(8) for( ) do w

17、hile( ); 例:打印如下形式的九九乘法表例:打印如下形式的九九乘法表void main() int x,y; for(x=1;x=9;x+) for(y=1;y=9;y+) printf(%d*%d=%2d ,x,y,x*y); printf(n); break语句和语句和continue语句语句break语句语句 break语句只能用在语句只能用在switch 语句或循环语句中,其作用语句或循环语句中,其作用是跳出是跳出switch语句或跳出本层循环,转去执行后面的程序。语句或跳出本层循环,转去执行后面的程序。 break语句的一般形式为:语句的一般形式为: break; break语

18、句用于循环体中,一般与语句用于循环体中,一般与 if 语句联合使用。语句联合使用。#includestdio.hvoid main() char a,b; printf(input a string:n); b=getchar(); while(a=getchar()!=n) if(a=b) printf(same charactern); break; b=a; 功能是:功能是: 检查输入的一行中有无相邻两字符相同。检查输入的一行中有无相邻两字符相同。分析下面程序的功能分析下面程序的功能main() int n; for(n=7;n=100;n+) if (n%7!=0) continue;

19、 printf(%d ,n); main() int n; for(n=7;n=100;n+) if (n%7=0) printf(%d ,n); continue语句只能用在循环体中,其一般格式是:语句只能用在循环体中,其一般格式是: continue; 其语义是:结束本次循环,即不再执行循环体中其语义是:结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。语句之后的语句,转入下一次循环条件的判断与执行。 注意:本语句只结束本层本次的循环,并不跳出循环。注意:本语句只结束本层本次的循环,并不跳出循环。continue语句语句程序举例程序举例例例6

20、.6 利用公式利用公式 /4 1-1/3+1/5-1/7+求求,直到最后一,直到最后一项小于项小于1E-6。#include void main() int s; float n,t,pi; t=1 ; pi=0 ; n=1.0 ; s=1; while (fabs(t)1e-6) pi=pi+t; n=n+2; s= -s; t=s/n; pi=pi*4; printf(pi=%10.6fn,pi); #include math.hvoid main() int m,i,k; printf(Enter m=n); scanf(%d,&m); k=sqrt(m); for(i=2;ik

21、) printf(Yesn); else printf(Non); 输入输入m当当ikYN打印打印Yesbreak打印打印No程序流程图程序流程图算法:算法: 判断一个整数判断一个整数m是否是素数。是否是素数。#include math.hvoid main() int n=0,i,k,m; for (m=101;m=199;m+) k=sqrt(m); for(i=2;ik) n+; printf(%d ,m); if (n% 10=0) printf(n); 例例6.9 打印打印输出输出100200之间之间的素数。的素数。算法:算法: 字符的加密、解密字符的加密、解密加密的思想是:加密的思

22、想是: 将每个字母将每个字母C C加(或减)一序数加(或减)一序数k k,即用它后的第,即用它后的第k k个字母个字母代替,变换式公式:代替,变换式公式: c=c+kc=c+k 例如序数例如序数k k为为5 5,这时,这时 “ “A”A”“F”“F”, “ “a”a”“f”“f”,“B”B”“G”“G” 当加序数后的字母超过当加序数后的字母超过“Z”Z”或或“z”z”则则 c=c+k -26c=c+k -26 例如:例如:You are good You are good Dtz fwj ltti Dtz fwj ltti 解密为加密的逆过程解密为加密的逆过程 将每个字母将每个字母C C减(或

23、加)一序数减(或加)一序数k k,即,即 c=c-k,c=c-k, 例如序数例如序数k k为为5 5,这时,这时 “ “Z”Z”“U”“U”, “ “z”z”“u”“u”,“Y”Y”“T”“T” 当加序数后的字母小于当加序数后的字母小于“A”A”或或“a”a”则则 c=c-k +26c=c-k +26#include stdio.hmain() char c; while(c=getchar()!=n) if(c=a & c=A & cZ & cz) c=c-26; printf(%c,c); 加密程序如下:加密程序如下:#include stdio.hmain() char c; while(c=getchar()!=n) if(c=a & c=A & c=Z) c=c-4; if (cA | c=a-4) c=

温馨提示

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

评论

0/150

提交评论