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

下载本文档

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

文档简介

1、第第5章章 循环结构程序设计循环结构程序设计当型循环:当型循环:直到型循环:直到型循环:假假真真PA假假真真PA两个要素:两个要素:(1)决定是否执行语句组的条件称为)决定是否执行语句组的条件称为“循环控制条件循环控制条件”。(2)重复执行的语句组称为)重复执行的语句组称为“循环体循环体”。第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.1 用用ifgoto语句实现循环语句实现循环1goto语句语句goto语句为无条件转向语句。语句为无条件转向语句。其一般形式为:其一般形式为: goto 语句标号语句标号;功能:功能:在程序执行过程中,如果遇到在程序执行过程中,如果

2、遇到goto语句,则程序流语句,则程序流程无条件地转向语句标号后的语句继续执行。程无条件地转向语句标号后的语句继续执行。例:例: goto label; label: x=a+b; 第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.1 用用ifgoto语句实现循环语句实现循环1goto语句语句说明:说明:(1)语句标号是一个用户标识符,在程序中一个语句的前面,)语句标号是一个用户标识符,在程序中一个语句的前面,表示转向的地址。表示转向的地址。(2)语句标号仅仅对)语句标号仅仅对goto 语句有效,对其他语句不影响。语句有效,对其他语句不影响。同一个程序中,不允许有同名

3、的语句标号。同一个程序中,不允许有同名的语句标号。(3)由于滥用)由于滥用goto语句将导致程序流程无规律、可读性差,语句将导致程序流程无规律、可读性差,不符合结构化程序设计原则,因此结构化程序设计方法限不符合结构化程序设计原则,因此结构化程序设计方法限制使用制使用goto语句。语句。(4)goto语句的主要作用是:与条件语句语句的主要作用是:与条件语句if配合使用,用来配合使用,用来实现条件转移、构成循环、跳出循环体等功能。实现条件转移、构成循环、跳出循环体等功能。第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.1 用用ifgoto语句实现循环语句实现循环1got

4、o语句语句2ifgoto语句构成循环语句构成循环 #include main() char c;loop: c=getchar(); if(c=n) goto end; putchar(c); goto loop;end: printf(The endn);例:例:例例5.1 求求s=1+2+3+100的值。的值。流程图:流程图: s=0 i=1s=s+ii=i+1i100真真假假程序:程序:#include main() int i,s; s=0; i=1;loop: if(i=100) s=s+i; i=i+1; goto loop; printf(s=%d,s); 第第5章章 循环结构程

5、序设计循环结构程序设计5.1 循环语句循环语句5.1.2 while语句语句while语句用来实现语句用来实现“当型当型”循环结构。循环结构。while语句的语句的一般形式如下:一般形式如下: while(表达式表达式) 语句语句 /*循环体循环体*/ 功能:功能:当表达式的值为真时,执行当表达式的值为真时,执行while语句中的循环体。语句中的循环体。假假真真表达式表达式语句语句第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.2 while语句语句while语句用来实现语句用来实现“当型当型”循环结构。循环结构。while语句的语句的一般形式如下:一般形式如下:

6、while(表达式表达式) 语句语句 /*循环体循环体*/ 功能:功能:当表达式的值为真时,执行当表达式的值为真时,执行while语句中的循环体。语句中的循环体。假假真真表达式表达式语句语句例例5.2 求求s=1+2+3+100的值。的值。流程图:流程图: s=0 i=1s=s+ii=i+1i100真真假假程序:程序:#include main() int i,s; s=0; i=1;loop: if(i=100) s=s+i; i=i+1; goto loop; printf(s=%d,s); #includemain() int i,s; s=0; i=1; while (i=100) s

7、=s+i; i= i +1; printf(s=%d,s);第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.2 while语句语句说明:说明:(1)循环体如果包含一个以上的语句,应该用花括号括起来,)循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句的形式出现,否则以复合语句的形式出现,否则while语句的范围只到语句的范围只到while后面第一个分号处,即循环体是一个语句。后面第一个分号处,即循环体是一个语句。(2)在循环体中应有使循环趋向于结束的语句,即设置修改)在循环体中应有使循环趋向于结束的语句,即设置修改循环条件的语句,否则,循环体要么一次也不执

8、行,要么循环条件的语句,否则,循环体要么一次也不执行,要么是死循环。是死循环。(3)while语句的特点是先判断表达式的值,然后执行循环语句的特点是先判断表达式的值,然后执行循环体中的语句,如果表达式的值一开始为假(值为体中的语句,如果表达式的值一开始为假(值为0),则循),则循环体一次也不执行,转入环体一次也不执行,转入while语句的下一语句去执行。语句的下一语句去执行。第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.3 dowhile语句语句dowhile语句用来实现语句用来实现“直到型直到型”循环结构。循环结构。dowhile语句的语句的一般形式如下:一般形

9、式如下: do 语句语句 /*循环体循环体*/ while(表达式表达式); 功能:功能:先执行一次循环体,然后判断表达式的先执行一次循环体,然后判断表达式的值,当表达式的值为真时,返回重新执行循值,当表达式的值为真时,返回重新执行循环体,如此反复,直到表达式的值等于假为环体,如此反复,直到表达式的值等于假为止,此时循环结束。止,此时循环结束。假假真真语句语句表达式表达式例例5.3 求求s=1+2+3+100的值。的值。#include main() int i,s; s=0; i=1;loop: if(i=100) s=s+i; i=i+1; goto loop; printf(s=%d,s

10、); #includemain() int i,s; s=0; i=1; while (i=100) s=s+i; i= i +1; printf(s=%d,s);#includemain() int i,s; s=0; i=1; do s=s+i; i= i +1; while (i=100); printf(s=%d,s);第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.3 dowhile语句语句说明:说明:(1)在)在dowhile语句的循环体中也应有使循环趋向于结束的语句的循环体中也应有使循环趋向于结束的语句,即设置修改循环条件的语句,否则,循环体要么只执语

11、句,即设置修改循环条件的语句,否则,循环体要么只执行一次,要么是死循环。行一次,要么是死循环。(2)如果)如果dowhile语句的循环体部分是多个语句组成的,也语句的循环体部分是多个语句组成的,也必须用左右花括号括起来,使其形成复合语句。必须用左右花括号括起来,使其形成复合语句。(3)用)用while语句和用语句和用dowhile语句处理同一问题时,若二语句处理同一问题时,若二者的循环体部分一样,其结果也一样。但在者的循环体部分一样,其结果也一样。但在while后面的表后面的表达式一开始就为假时,两种循环的结果是不同的,达式一开始就为假时,两种循环的结果是不同的,dowhile语句中循环体至少

12、要执行一次。语句中循环体至少要执行一次。第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.4 for语句语句for语句主要用在循环次数确定的情况下。语句主要用在循环次数确定的情况下。for语句的一般形式如下:语句的一般形式如下: for(表达式表达式1;表达式表达式2;表达式表达式3) 语句语句 /*循环体循环体*/功能:功能: (1)先计算表达式)先计算表达式1的值。的值。(2)计算表达式)计算表达式2 的值,若结果为真,则执行后面的循环体;的值,若结果为真,则执行后面的循环体;若结果为假,则结束循环。若结果为假,则结束循环。(3)若结果为真,则执行后面的循环体后,

13、进行表达式)若结果为真,则执行后面的循环体后,进行表达式3 的的计算,完成一次循环。计算,完成一次循环。(4)再次计算表达式)再次计算表达式2 的值,开始再次循环,直到计算表达的值,开始再次循环,直到计算表达式式2的值为假,结束循环。的值为假,结束循环。表达式表达式1假假真真表达式表达式2语句语句表达式表达式3例例5.3 求求s=1+2+3+100的值。的值。#includemain() int i,s; s=0; i=1; while (i=100) s=s+i; i= i +1; printf(s=%d,s);#includemain() int i,s; s=0; i=1; do s=s

14、+i; i= i +1; while (i=100); printf(s=%d,s);#includemain() int i,s; s=0; for(i=1;i=100;i=i+1) s=s+i; printf(s=%d,s);第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.4 for语句语句(1)for语句的条件测试在前,所以循环体可能一次也不执语句的条件测试在前,所以循环体可能一次也不执行。行。(2)在)在for语句中,使循环趋向于结束的语句,即设置修改语句中,使循环趋向于结束的语句,即设置修改循环条件的语句,一般是表达式循环条件的语句,一般是表达式3语句,也

15、可以放在循环语句,也可以放在循环体中。体中。(3)如果)如果for语句的循环体部分是多个语句组成的,也必须语句的循环体部分是多个语句组成的,也必须用左右花括号括起来,使其形成复合语句。用左右花括号括起来,使其形成复合语句。说明:说明:第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.4 for语句语句说明:说明:(4)for语句中的表达式语句中的表达式1和表达式和表达式3都可以是一个简单都可以是一个简单的表达式,也可以是逗号连接的多个表达式,此时的逗的表达式,也可以是逗号连接的多个表达式,此时的逗号作为运算符使用。号作为运算符使用。 例:例: for(s=0,i=1;

16、i=100;i+) s=s+i; for(i=1,j=100;i=j;i+,j-) k=i+j;第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.4 for语句语句说明:说明:(5)for语句中的表达式语句中的表达式2一般是关系表达式或逻辑表达式,一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,如果其值为非但也可以是数值表达式或字符表达式,如果其值为非0,即,即为真,就执行循环体。为真,就执行循环体。(6)for语句中的三个表达式都可以省略,但用于三个表达式语句中的三个表达式都可以省略,但用于三个表达式之间的分隔符之间的分隔符“;”不能省略。不能省略。

17、第第5章章 循环结构程序设计循环结构程序设计5.1 循环语句循环语句5.1.4 for语句语句说明:说明:1)省略表达式)省略表达式1时,应在时,应在for语句之前给循环变量赋初值,语句之前给循环变量赋初值,例如:例如:i=1; for(;i=100;i+) s=s+i;执行时,跳过执行时,跳过“计算表达式计算表达式1”这一步,其他不变。这一步,其他不变。2)省略表达式)省略表达式2时,认为表达式时,认为表达式2始终为真,循环无终止地进行下始终为真,循环无终止地进行下去。去。例如:例如:for(i=1; ;i+) s=s+i;3)省略表达式)省略表达式3时,无修改循环条件的语句,此时应在循环体

18、中增时,无修改循环条件的语句,此时应在循环体中增加修改循环条件的语句,保证循环正常结束。加修改循环条件的语句,保证循环正常结束。例如:例如:for(i=1; i=100;) s=s+i; i+; 4)三个表达式都省略时,)三个表达式都省略时,其形式如下:其形式如下: for ( ; ; ) 此时,此时,for语句不设初值,不判断条件(认为表达式语句不设初值,不判断条件(认为表达式2的值为真),的值为真),不修改循环条件,循环无终止地进行下去。不修改循环条件,循环无终止地进行下去。第第5章章 循环结构程序设计循环结构程序设计5.2 多重循环多重循环 在循环体语句中又包含有另一个完整的循环结构的在

19、循环体语句中又包含有另一个完整的循环结构的形式,称为形式,称为循环的嵌套(又称双重循环)循环的嵌套(又称双重循环)。如果内循环。如果内循环体中又有嵌套的循环语句,则构成体中又有嵌套的循环语句,则构成多重循环。多重循环。嵌套在循环体内的循环体称为嵌套在循环体内的循环体称为内循环内循环,外面的循环称为,外面的循环称为外循环外循环。while、dowhile、for三种循环都可以互相嵌套。三种循环都可以互相嵌套。第第5章章 循环结构程序设计循环结构程序设计5.2 多重循环多重循环双重循环的双重循环的执行过程执行过程用流程图表示为用流程图表示为:外循环表达式外循环表达式1循环结束循环结束真真真真内循环

20、表达式内循环表达式1内循环体内循环体外循环表达式外循环表达式2假假内循环表达式内循环表达式2假假内循环表达式内循环表达式3外循环表达式外循环表达式3例例5.5 编写一程序,输出如下九九乘法表。编写一程序,输出如下九九乘法表。11=1 12=2 19=921=2 22=4 29=1891=9 92=18 99=81开始开始结束结束 输出输出ab=c a=1假假真真a=9b=b+1b=1真真b=9a=a+1假假#include main() int a,b,c; for(a=1;a=9;a+) for(b=1;b=9;b+) c=a*b; printf(%d%d=%d,a,b,c); printf

21、(n); 第第5章章 循环结构程序设计循环结构程序设计5.3 break和和continue语句语句5.3.1 break语句语句格式:格式:break;功能:功能:该语句可以使程序运行时中途退出一个循环体。该语句可以使程序运行时中途退出一个循环体。假假真真表达式表达式1假假表达式表达式2真真break第第5章章 循环结构程序设计循环结构程序设计5.3 break和和continue语句语句5.3.1 break语句语句说明:说明:(1)break语句不能用于循环语句和开关语句之外的任何语句不能用于循环语句和开关语句之外的任何其他语句。其他语句。(2)在多重循环的情况下,使用)在多重循环的情况

22、下,使用break语句时,仅仅退出语句时,仅仅退出包含包含break语句的那层循环体,即语句的那层循环体,即break语句不能使程序语句不能使程序控制退出一层以上的循环。控制退出一层以上的循环。(3)在几种循环中,主要是在循环次数不能预先确定的情)在几种循环中,主要是在循环次数不能预先确定的情况下使用况下使用break语句,在循环体中增加一个分支结构。当语句,在循环体中增加一个分支结构。当某个条件成立时,由某个条件成立时,由break语句退出循环体,从而结束循语句退出循环体,从而结束循环过程。环过程。例例5.6 判断一个数判断一个数m是否是素数。是否是素数。开始开始输出输出“不是素数不是素数”

23、真真i=m-1i=i+1i=2m%i=0假假输入输入mi=m-1真真假假真真假假结束结束输出输出“是素数是素数”#include main() int m,i; scanf(%d,&m); for(i=2;i=m-1;i+) if(m%i=0) break; if(i=m-1) printf(%d不是素数不是素数,m); else printf(%d是素数是素数,m);第第5章章 循环结构程序设计循环结构程序设计5.3 break和和continue语句语句5.3.2 continue语句语句格式:格式:continue;功能:功能:结束本次循环,即跳过循环体中下面尚未执行的语句,结束本次循环

24、,即跳过循环体中下面尚未执行的语句,继续进行下一次循环。继续进行下一次循环。说明:说明:continue语句只结束本次循环,而不是终止整个循环语句只结束本次循环,而不是终止整个循环的执行。的执行。假假真真表达式表达式1真真表达式表达式2假假continue例例5.7 输出输出100200之间的不能被之间的不能被3整除的数。整除的数。开始开始真真m=200m=100m%3=0假假假假结束结束真真m=m+1输出输出m#include main() int m; for(m=100;m=200;m+) if(m%3=0) continue; printf(%d, m); 第第5章章 循环结构程序设计

25、循环结构程序设计5.4 应用举例应用举例例例5.8 求求Fibonacci数列的前数列的前40个数。已知:个数。已知:f1=1,f2=1。开始开始真真i=20f1=1;f2=1;假假结束结束i=i+1输出输出f1,f2f1=f1+f2;f2=f1+f2#include main() long int f1,f2; int i; f1=1;f2=1; for(i=1;i=20;i+) printf(%8ld %8ld ,f1,f2); if(i%4=0)printf(n); f1=f1+f2; f2=f2+f1; 第第5章章 循环结构程序设计循环结构程序设计5.4 应用举例应用举例例例5.9 统

26、计从键盘输入的一行字符的个数(以回车键作为输入结统计从键盘输入的一行字符的个数(以回车键作为输入结束标记)。束标记)。开始开始真真ch!=nnum=0;假假结束结束输入下一个字符给输入下一个字符给chnum=num+1输入第一个字符给输入第一个字符给ch输出输出num#include main() char ch; int num=0; ch=getchar(); while(ch!=n) num+; ch=getchar(); printf(num=%dn,num); 第第5章章 循环结构程序设计循环结构程序设计5.4 应用举例应用举例例例5.10 编写一程序,求任意编写一程序,求任意10个

27、整数中的最大值。个整数中的最大值。开始开始结束结束输出输出maxi=1假假真真i=9i=i+1输入输入a输入输入a,max=amaxa真真max=a假假#include main() int max,i,a; scanf(%d,&a); max=a; for(i=1;i=9;i+) scanf(%d,&a); if(maxa) max=a; printf(max=%d,max);第第5章章 循环结构程序设计循环结构程序设计5.4 应用举例应用举例例例5.11 编写一程序,输出图形:编写一程序,输出图形: * * * * * * * *结束结束假假开始开始a=1a=8真真输出空格输出空格b=b+

28、1b=1b=a真真假假输出输出*b=b+1b=1b=8a=a+1#include main() int a,b; for(a=1;a=8;a+) for(b=1;b=a;b+) printf( ); for(b=1;b=8;b+) printf(* ); printf(n ); 第第5章章 循环结构程序设计循环结构程序设计5.4 应用举例应用举例循环算法小结:循环算法小结:(1)在循环程序设计中,使用较多的算法是)在循环程序设计中,使用较多的算法是穷举法和递推法。穷举法和递推法。穷举法:穷举法:穷举法的基本思想是,对问题的所有可能状态一一测穷举法的基本思想是,对问题的所有可能状态一一测试,直到

29、找到问题的解或将全部可能状态都测试过为止。试,直到找到问题的解或将全部可能状态都测试过为止。递推法:递推法:递推法的基本思想是,不断用新值取代变量的旧值,递推法的基本思想是,不断用新值取代变量的旧值,或由旧值递推出变量的新值。在递推算法中,要重点考虑以下或由旧值递推出变量的新值。在递推算法中,要重点考虑以下因素:因素:变量的初值。变量的初值。递推公式。递推公式。递推次数。递推次数。第第5章章 循环结构程序设计循环结构程序设计5.4 应用举例应用举例循环算法小结:循环算法小结:(2)在循环程序设计中,)在循环程序设计中,循环控制有两种方法:循环控制有两种方法:1)标志法:)标志法:主要用在循环次

30、数不确定的情况下。其基本思想是,主要用在循环次数不确定的情况下。其基本思想是,设置一标志变量,标志变量的值随着循环发生变化,每循环一次,设置一标志变量,标志变量的值随着循环发生变化,每循环一次,就测试一次标志变量的值,当标志变量的值等于指定标志值时,就测试一次标志变量的值,当标志变量的值等于指定标志值时,结束循环。如例结束循环。如例5.9。2)计数法:)计数法:主要用在循环次数确定的情况下。其基本思想是,主要用在循环次数确定的情况下。其基本思想是,设置一计数变量,每循环一次,计数变量增设置一计数变量,每循环一次,计数变量增1(即计一次数),(即计一次数),直到计数变量的值到达指定次数。直到计数

31、变量的值到达指定次数。 第第5章章 循环结构程序设计循环结构程序设计5.5 本章考点本章考点nwhile语句的格式及功能。语句的格式及功能。ndowhile语句的格式及功能。语句的格式及功能。nfor 语句的格式及功能。语句的格式及功能。n双重循环的概念及执行过程。双重循环的概念及执行过程。nbreak语句的格式及功能。语句的格式及功能。ncontinue语句的格式及功能。语句的格式及功能。n循环算法。循环算法。第第5章章 循环结构程序设计循环结构程序设计5.6 典型试题详解典型试题详解1有以下程序段:有以下程序段: int k=0; while(k=1)k+;while循环执行的次数是循环执

32、行的次数是_。A)无限次)无限次 B)有语法错误,不能执行)有语法错误,不能执行C)一次也不执行)一次也不执行 D)执行)执行1次次正确答案:正确答案:A(知识点:(知识点:while语句的格式与功能、运算符语句的格式与功能、运算符=和和=)试题分析:试题分析:while后控制循环的表达式为后控制循环的表达式为k=1,即每次循环,即每次循环都是将都是将1赋给赋给k,再判断,再判断k的值是否真,而不是判断的值是否真,而不是判断k是否是否等于等于1。运算符。运算符=和和=是不同的。是不同的。第第5章章 循环结构程序设计循环结构程序设计5.6 典型试题详解典型试题详解2以下叙述正确的是以下叙述正确的是_。A)dowhile语句构成的循环不能用其他语句构成的循环来代替语句构成的循环不能用其他语句构成的循环来代替B)dowhile语句构成的循环只能用语句构成的循环只能用break语句退出语句退出C)用)用dowhile语句构成的循环,在语句构成的循环,在while后的表达式为非零时结束循环后的表达式为非零时结束循环D)用)用do-while语句构成

温馨提示

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

最新文档

评论

0/150

提交评论