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

下载本文档

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

文档简介

1、第6章 循环控制结构 1本章要求:本章要求:v 掌握循环控制语句掌握循环控制语句forfor语句、语句、whilewhile语句、语句、dodowhilewhile语句以及他们的嵌套应用语句以及他们的嵌套应用;v 掌握掌握breakbreak语句、语句、continuecontinue语句的应用语句的应用;v 熟练掌握计数、累加、累乘等简单算法熟练掌握计数、累加、累乘等简单算法v 熟练掌握穷举法、迭代法熟练掌握穷举法、迭代法第第6章章 循环控制循环控制第6章 循环控制结构 2循环结构循环结构的特点:的特点: 在给定条件成立时,反复执行某程序段,在给定条件成立时,反复执行某程序段, 直到条件不成

2、立为止。直到条件不成立为止。注意两个概念:注意两个概念: 1 1、给定的条件称为、给定的条件称为循环条件循环条件 2 2、反复执行的程序段称为、反复执行的程序段称为循环体循环体在在C C语言中,实现循环结构的语句主要有语言中,实现循环结构的语句主要有3 3种:种: forfor语句语句 whilewhile do doWhileWhile第第6章章 循环控制循环控制第6章 循环控制结构 3循环结构循环结构引例:输入引例:输入10个数,打印输出其中最大的数。个数,打印输出其中最大的数。算法设计如下:算法设计如下:(1)输入)输入1个数个数,存入变量存入变量A中中,将记录数据个数的变量将记录数据个

3、数的变量N赋赋值为值为1,即,即N=1(2)将)将A存入表示最大值的变量存入表示最大值的变量Max中,即中,即Max=A(3)再输入一个值给)再输入一个值给A,如果,如果AMax 则则 Max=A, 否则否则Max不变不变(4)让记录数据个数的变量增加)让记录数据个数的变量增加1,即,即N=N+1(5)判断)判断N是否小于是否小于10,若成立则转到第(,若成立则转到第(3)步执行,)步执行,否则转到第(否则转到第(6)步。)步。(6)打印输出)打印输出max第6章 循环控制结构 4从从10个数中选出最大的数的流程图个数中选出最大的数的流程图NMaxMax =A输入输入A开始开始再输入给再输入给

4、AN=N+1打印打印Max结束结束YNNY第6章 循环控制结构 5循环结构循环结构 执行过程:计算表达式的值,当值为真执行过程:计算表达式的值,当值为真(非非0)时,时, 执行循环体语句。执行循环体语句。 while(表达式表达式) 语句;语句; 表达式是循环条件,语句为循环体表达式是循环条件,语句为循环体表达式语句非006.3 while6.3 while语句语句第6章 循环控制结构 6从从10个数中选出最大的数个数中选出最大的数void main()int a,max,n=1;scanf(%d,&a);max=a;while(nmax)max=a;printf(%dn,max);N

5、MaxMax =A输入输入A开始开始再输入给再输入给AN=N+1打印打印Max结束结束YNNY第6章 循环控制结构 7循环结构循环结构说明:说明: 计算计算的值,若表达式的值为真的值,若表达式的值为真(非非0)时,则执行时,则执行循环体语句;不断反复,直到表达式的值为假循环体语句;不断反复,直到表达式的值为假(0),则不执行,则不执行循环体语句,而直接转向循环体外的下一条语句。循环体语句,而直接转向循环体外的下一条语句。 是循环反复执行的程序,称为是循环反复执行的程序,称为“循环体循环体”,当需,当需要执行多条语句时,应使用要执行多条语句时,应使用“ ”括起来组成一个复合语句。括起来组成一个复

6、合语句。 while语句语句是先判断条件,后执行循环体,为是先判断条件,后执行循环体,为“当型当型”循循环,因此若条件不成立,有可能一次也不执行循环体。环,因此若条件不成立,有可能一次也不执行循环体。 第6章 循环控制结构 8循环结构循环结构例:求:例:求:s=1+2+3+s=1+2+3+100+100(累加法)(累加法)void main() int s=0,n=1; while (n=100) s=s+n; n+; printf(s=%d,s); 第6章 循环控制结构 9例例: 求求n!,!,n由键盘输入(累乘法)由键盘输入(累乘法)void main() int n,i,s; scanf

7、(%d,&n); s=1; i=1; /*给变量给变量s、i赋初值赋初值*/ while(i=n) s=s*i; i+; printf(%d!=%dn,n,s); 循环结构循环结构第6章 循环控制结构 10 例例6.6 利用公式利用公式 求求的值,要求:直的值,要求:直到最后一项的绝对值小于到最后一项的绝对值小于10-6为止。为止。循环结构循环结构思考与讨论:思考与讨论: 1)程序中控制循环结束的)程序中控制循环结束的变量变量t是多项式中的通项。是多项式中的通项。 2)如果程序中将变量)如果程序中将变量n n定义定义为整数,程序运行会出现什么为整数,程序运行会出现什么情况?情况? .7

8、1513114#include void main() float pi,t,n; int sign=1; pi=0.0; n=1.0; t=1.0; while (fabs(t) = 1e-6) t=sign/n; pi=pi+t; n=n+2; sign= -sign; pi=pi*4; printf(pi = %fn,pi);第6章 循环控制结构 11循环结构循环结构6.4 do.while6.4 do.while语句语句 do 语句;语句; while (表达式表达式); 执行过程:先执行循环体语句一次,再判别表达执行过程:先执行循环体语句一次,再判别表达式的值,若为真式的值,若为真(

9、非非0)则继续循环,否则终止循环。则继续循环,否则终止循环。第6章 循环控制结构 12循环结构循环结构例:求:例:求:s=1+2+3+s=1+2+3+100+100void main() int s=0,n=1; do s=s+n; n+; while (n=100); printf(s=%d,s); 第6章 循环控制结构 13循环结构循环结构使用使用while和和do-while语句应注意以下几点:语句应注意以下几点: 1.在在if语句,语句,while语句中,表达式后面都不语句中,表达式后面都不能加分号,而在能加分号,而在 do-while语句的表达式后面则必语句的表达式后面则必须加分号。

10、须加分号。 2.当循环体由多个语句组成时,也必须用当循环体由多个语句组成时,也必须用括起来组成一个复合语句。括起来组成一个复合语句。 3. 如果循环至少要执行一次,如果循环至少要执行一次, while和和do-while语句可以相互替换。语句可以相互替换。第6章 循环控制结构 14例例 计算计算 直到最后一项的绝对直到最后一项的绝对值小于值小于1e-7时为止。时为止。循环结构循环结构.!7! 5! 3sin753xxxxx#include void main() double s,t,x; int n; printf(please input x:); scanf(%lf,&x); t

11、=x; n=1; s=x;do n=n+2; t=-t*x*x/(n-1)/n; /* 计算通项计算通项 */ s=s+t; /* 累加求和累加求和 */ while(fabs(t)=1e-7); /* 当累加项的值大于当累加项的值大于1e-7继续循环继续循环 */ printf(sin(%f)=%lf,x,s); 第6章 循环控制结构 15循环结构循环结构 一、一、 for语句使用一般形式为:语句使用一般形式为: for(表达式表达式1;表达式;表达式2;表达;表达3) 语句;语句; 表达式表达式1(控制变量的初始化控制变量的初始化 ):): 用来给循环变量赋初值用来给循环变量赋初值,也允许

12、在也允许在for语语句外给循环变量赋初值,此时可以省略该表达式。句外给循环变量赋初值,此时可以省略该表达式。表达式表达式2(循环的条件循环的条件)循环条件,一般为关系表达式或逻辑表达式。循环条件,一般为关系表达式或逻辑表达式。 表达式表达式3(循环控制变量的更新(循环控制变量的更新 ) 用来修改循环变量的值,一般是赋值语句。用来修改循环变量的值,一般是赋值语句。6.5 for6.5 for循环语句循环语句 第6章 循环控制结构 16循环结构循环结构for语句的执行过程:语句的执行过程: 1.首先计算表达式首先计算表达式1的值。的值。 2.再计算表达式再计算表达式2的值,若值为真的值,若值为真(

13、非非0)则执行循环体一次则执行循环体一次,否则跳出循环。否则跳出循环。 3.然后再计算表达式然后再计算表达式3的值,转回的值,转回第第2步重复执行。步重复执行。 表达式表达式2 2语句语句非非0 00 0语句语句求解表达式求解表达式1 1求解表达式求解表达式3 3注意:注意:在整个在整个for循环过程中,表达循环过程中,表达式式1只计算一次,表达式只计算一次,表达式2和表达式和表达式3则可能计算多次。则可能计算多次。第6章 循环控制结构 17循环结构循环结构例:用例:用forfor语句计算语句计算s=1+2+3+.+99+100s=1+2+3+.+99+100 void main() int

14、n,s=0; for(n=1;n=100;n+) s=s+n; printf(s=%dn,s); void main() int s=0,n=1; while (n=100) s=s+n; n+; printf(“s=%d,s); 第6章 循环控制结构 18循环结构循环结构例:例: 求求n!,!,n由键盘输入(累乘法)由键盘输入(累乘法)void main() int n,i,s; scanf(%d,&n); s=1; i=1; /*给变量给变量s、i赋初值赋初值*/ while(i=n) s*=i; i+; printf(%d!=%dn,n,s); for(s=1, i=1;i=n;

15、i+) s=s*i; 第6章 循环控制结构 19循环结构循环结构有关有关forfor语句的几点说明:语句的几点说明: (1)for语句的一般形式中的语句的一般形式中的“ “表达式表达式1”可以省略,此时应可以省略,此时应在在for语句之前给循环变量赋初值。注意省略表达式语句之前给循环变量赋初值。注意省略表达式1时,其后的时,其后的分号不能省略。分号不能省略。例如:例如:i=1;i=1; for(; i=n; i+) t=t*i; 执行时,跳过执行时,跳过“ “求解表达式求解表达式1”这一步,其他不变。这一步,其他不变。 第6章 循环控制结构 20循环结构循环结构有关有关forfor语句的几点说

16、明:语句的几点说明: 2 2)如果表达式)如果表达式2 2省略,即不判断循环条件,循环无终止地省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式进行下去。也就是认为表达式2 2 始终为真,在形式上构成死循始终为真,在形式上构成死循环。环。例如:例如: for(i=1; ; i+) t=t*i;表达式表达式1 1是一个赋值表达式,表达式是一个赋值表达式,表达式2 2省略。它相当于:省略。它相当于: i=1; while(1) t=t*i; i+; 第6章 循环控制结构 21循环结构循环结构有关有关forfor语句的几点说明:语句的几点说明: 3)表达式)表达式3也可以省略,但此时程序

17、设计者应另外设法保也可以省略,但此时程序设计者应另外设法保证循环能正常结束,表达式证循环能正常结束,表达式3的功能放到循环体内。例如:的功能放到循环体内。例如:for(i=1;i=n;) t=t*i; i+; 4)可以省略表达式)可以省略表达式1和表达式和表达式3,只有表达式,只有表达式2,即只给循环,即只给循环条件,如:条件,如:for(;i=n;) while(i=n)t=t*i; 相当于相当于 t=t*i; i+; i+;第6章 循环控制结构 22循环结构循环结构有关有关forfor语句的几点说明:语句的几点说明: 5)3个表达式都可省略,例如:个表达式都可省略,例如: for(;) 语

18、句语句 相当于相当于 while(1)语句。语句。 即不设初值,不判断条件(认为表达式即不设初值,不判断条件(认为表达式2为真值),循环变为真值),循环变量不增值。循环为量不增值。循环为“死循环死循环”。 6)表达式)表达式1和表达式和表达式3可以是一个简单的表达式,也可以是可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。 例如:例如: for(t=1, i=1;i=n ; t=t*i, i+);第6章 循环控制结构 23循环结构循环结构三种循环语句比较三种循环语句比较 for ( ) while

19、( ) do . while(); 循循环环类类型型 当当型型循循环环 当当型型循循环环 直直到到循循环环 循循环环控控制制条条件件 表表达达式式 2 值值非非 0 表表达达式式值值非非 0 表表达达式式值值非非 0 循循环环变变量量初初值值 在在 for 语语句句行行中中 在在 while 之之前前 在在 do 之之前前 使使循循环环结结束束 表表达达式式 3 循循环环体体中中使使用用专专门门语语句句 循循环环体体中中使使用用专专门门语语句句 第6章 循环控制结构 24三种循环语句比较三种循环语句比较 说明:说明: 1)3种循环中种循环中for语句功能最强大,使用最多,任何情况的语句功能最强

20、大,使用最多,任何情况的循环都可使用循环都可使用for语句实现。语句实现。for语句与语句与while语句的等价代换形语句的等价代换形式如下:式如下:for(;) 语句语句; 2)当循环体至少执行一次时,用)当循环体至少执行一次时,用do.while语句与语句与while语句语句等价。如果循环体可能一次也不执行,则只能使用等价。如果循环体可能一次也不执行,则只能使用while语句或语句或for语句。语句。表达式表达式1;while (表达式表达式2) ; 表达式表达式3;第6章 循环控制结构 25循环结构循环结构6.6 6.6 循环的嵌套循环的嵌套多重循环结构多重循环结构一个循环内完整地包含另

21、一个循环结构,则称为多重循环一个循环内完整地包含另一个循环结构,则称为多重循环 嵌套一层称为二重循环,嵌套二层称为三重循环嵌套一层称为二重循环,嵌套二层称为三重循环 (4) while( ) for( ) (1) while( ) while( ) do do while( ); while( );(3) for( ) for( ) 第6章 循环控制结构 26循环结构循环结构(7) while( ) do while( ); (5) for( ) while( ) (6) dofor( ) while();(8) for( ) do while( ); 第6章 循环控制结构 27循环结构循环结

22、构void main() int i,j;for(i=1;i=3;i+)printf(i=%d ,i);for(j=1;j=3;j+)printf(j=%d ,j);printf(n);共执行共执行9次次共执行共执行3次次对于循环的嵌套,要注意以下事项:对于循环的嵌套,要注意以下事项:(1) 内循环变量与外循环变量不能同名;内循环变量与外循环变量不能同名;(2) 外循环必须完全包含内循环;外循环必须完全包含内循环;第6章 循环控制结构 28循环结构循环结构补充例题:补充例题:打印如下形式的九九乘法表打印如下形式的九九乘法表.void main() int x,y; for(x=1;x=9;x+

23、) for(y=1;y=9;y+) printf(%d*%d=%2d ,x,y,x*y); printf(n); 第6章 循环控制结构 29循环结构循环结构例例:打印由数字组成的如下所示金字塔图案打印由数字组成的如下所示金字塔图案 编程分析:打印图案一般可由多重循环实现,编程分析:打印图案一般可由多重循环实现,外循环用来控制打印的行数,内循环控制每行的外循环用来控制打印的行数,内循环控制每行的空格数和字符个数。实现打印上金字塔图案的程空格数和字符个数。实现打印上金字塔图案的程序如下:序如下:void main()void main() int i,k,j; int i,k,j; for(i=1

24、;i=9;i+) / for(i=1;i=9;i+) /* * 外循环控制打印行数外循环控制打印行数 * */ / for (k=1;k=10-i;k+)for (k=1;k=10-i;k+) / /* * 每行起始打印位置每行起始打印位置 * */ / printf( );printf( ); for (j=1;j=2for (j=1;j=2* *i-1;j+)i-1;j+) / /* * 内循环控制打印个数内循环控制打印个数* */ / printf(%c,48+i);printf(%c,48+i); printf(n); / printf(n); /* * 换行换行 * */ / 1 1

25、 222 222 33333 33333 4444444 4444444 555555555 555555555 66666666666 66666666666 7777777777777 7777777777777 888888888888888 888888888888888 9999999999999999 9999999999999999思考与讨论:思考与讨论: 1)如果将程序中的数值)如果将程序中的数值“10”改为改为“20”,程序的输出结果有什么不同?,程序的输出结果有什么不同?如果改为如果改为“5”,输出结果如何?,输出结果如何? 2)能否将语句)能否将语句“printf(%c,

26、48+i);”改为改为“printf(%c,0+i);”? 第6章 循环控制结构 30 其它控制语句其它控制语句 6.8.1 break6.8.1 break语句语句 作用范围:作用范围:switch 语句语句或或循环语句循环语句功能:功能:跳出跳出switch语句语句或跳出或跳出本层循环本层循环, 转去执行后面的程序。转去执行后面的程序。break语句的一般形式为:语句的一般形式为: break; 注意:注意:break语句用于循环体中,一般与语句用于循环体中,一般与if语句联合使用语句联合使用第6章 循环控制结构 31 其它控制语句其它控制语句 例例: 打印打印11000中能同时被中能同时

27、被3和和5整除的前整除的前10个数。个数。#include void main() int k,n=0;for(k=1;kn。2)m除以除以n得余数得余数r。3)若)若r=0,则,则n为求得的最大公约数,为求得的最大公约数,算法结束;否则执行算法结束;否则执行4)。)。4)mn,nr,再重复执行,再重复执行2)。)。(最小公倍数(最小公倍数=两个整数之积两个整数之积/最大公约最大公约数)。数)。(具体代码见习题解)(具体代码见习题解)第6章 循环控制结构 33求两个整数的最大公约数。(从最大公约数的定义出发)求两个整数的最大公约数。(从最大公约数的定义出发)循环结构循环结构编程分析:编程分析:

28、1)输入两个整数)输入两个整数m,n;2)比较)比较m、n的大小,令的大小,令t等于其中的较小值;等于其中的较小值;3)判断)判断t是否同时整除是否同时整除m、n,是则执行步骤,是则执行步骤5,否则执,否则执行步骤行步骤4;4)t的值递减的值递减1,重复步骤,重复步骤3;5)输出)输出t,即为,即为m、n的最大公约数。的最大公约数。(最小公倍数(最小公倍数=两个整数之积两个整数之积/最大公约数)。最大公约数)。第6章 循环控制结构 34 其它控制语句其它控制语句 6.8.2 continue6.8.2 continue语句语句 作用范围:作用范围:只能用在循环体中只能用在循环体中功能:功能:结

29、束结束本次循环本次循环,转入下一次循环,转入下一次循环 条件的判断与执行。条件的判断与执行。其一般格式是:其一般格式是: continue; 注意:注意:本语句只结束本语句只结束本层本次本层本次的循环,并的循环,并不跳出不跳出循环。循环。第6章 循环控制结构 35 其它控制语句其它控制语句 例例:计算半径为计算半径为1到到15的圆的面积,仅打印面积超过的圆的面积,仅打印面积超过50的圆面积。的圆面积。void main() int r; float area; for(r=1;r=15;r+) area=3.141593*r*r; if(area50.0) continue; printf(

30、square=%fn,area); 第6章 循环控制结构 36 其它控制语句其它控制语句 void main() int n; for(n=7;n=100;n+) if (n%7!=0) continue; printf(%d ,n); void main() int n; for(n=7;n=100;n+) if (n%7=0) printf(%d ,n); 使用使用continue不用不用continue第6章 循环控制结构 37break:语句只能用在语句只能用在switch 语句或循环语句中,语句或循环语句中, 其作用是跳其作用是跳出出switch语句或跳出语句或跳出本层本层循环,转去

31、执行后面的程序。循环,转去执行后面的程序。continue:结束本次循环,即不再执行循环体中:结束本次循环,即不再执行循环体中continue 语语句之后的语句,转入下一次循环条件的判断与执行。应注意句之后的语句,转入下一次循环条件的判断与执行。应注意的是,的是, 本语句只结束本语句只结束本层本次本层本次的循环,并不跳出循环。的循环,并不跳出循环。break与与continue的区别的区别 其它控制语句其它控制语句 第6章 循环控制结构 38 应用程序举例应用程序举例 #include math.hvoid main() int m,i,k; scanf(%d,&m); k=sqrt(

32、m); for(i=2;ik) printf(Yesn); else printf(Non); 例例6.86.8 判断一个给定的整数是否为素数判断一个给定的整数是否为素数输入输入mk=sqrt(m); i=2;ikYesNo结束结束YNNYYN第6章 循环控制结构 39 应用程序举例应用程序举例 #include math.hvoid main() int m,i,k; for(m=100;m=200;m+) k=sqrt(m); for(i=2;ik) printf(%dn,m); 例例6.96.9 求求100100200200间的全部素数间的全部素数第6章 循环控制结构 40 应用程序举例

33、应用程序举例 穷举法穷举法基本思想:一一列举各种可能的情况,并判断哪一种可能是符合要求基本思想:一一列举各种可能的情况,并判断哪一种可能是符合要求 voidvoid main()int x, y, z,n;printf( 5yun 1yun 0.5yunn);n=0;for(x=1; x=100;x+) for(y=1;y=100;y+) for(z=1;z=100;z+) if(x+y+z=100 & 5*x+y+0.5*z=100) printf(%d %d %dn,x,y,z); n+; printf( Total %d,n);例例:将一张面值为将一张面值为100元的人民币等值换成元的人民币等值换成100张张5元、

温馨提示

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

评论

0/150

提交评论