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

下载本文档

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

文档简介

1、第六章第六章 循环控制语句循环控制语句青岛理工大学琴岛学院青岛理工大学琴岛学院求任意一个整型数据的平方?求任意一个整型数据的平方?循环结构:循环结构:根据条件是否成立根据条件是否成立决定是否重复执行某个程序段决定是否重复执行某个程序段5 主要内容:主要内容:6.16.1 whilewhile语句语句6.26.2 do-whiledo-while语句语句6.36.3 forfor语句语句6.4 6.4 循环嵌套循环嵌套6.5 6.5 循环控制语句循环控制语句2021-10-14本章要点:本章要点:掌握掌握while、dowhile、for的格式与执行过程的格式与执行过程理解术语:循环条件、循环结

2、束条件、循环体理解术语:循环条件、循环结束条件、循环体能够利用三种语句编写简单的循环结构程序能够利用三种语句编写简单的循环结构程序能够读懂能够读懂for循环嵌套和循环嵌套和break、continue语句构成的程序语句构成的程序并能得出正确的结果并能得出正确的结果重点:三种语句的格式和执行过程重点:三种语句的格式和执行过程难点:循环嵌套的执行过程、难点:循环嵌套的执行过程、break、continue用法用法2021-10-1476.1 while6.1 while语句语句 while while (表达式表达式) 循环体语句循环体语句 l一般为一般为关系关系表达式表达式或或逻辑逻辑表达式,也

3、表达式,也可以是可以是C C语言其他类语言其他类型的合法表达式型的合法表达式 l用来控制循环体是用来控制循环体是否执行否执行l与与if(if(表达式表达式) )区别区别l称为称为内嵌语句内嵌语句,可以,可以是基本语句、控制语是基本语句、控制语句,也可以是复合语句,也可以是复合语句句l是循环重复执行的部是循环重复执行的部分分 l注意注意的有无的有无1 1、格式、格式2021-10-148功能:功能: 计算表达式的值计算表达式的值,为非,为非0 0(逻辑真)时,重复执行(逻辑真)时,重复执行内嵌内嵌语句语句,然后重新计算表达式的值,直到表达式的值为,然后重新计算表达式的值,直到表达式的值为0 0

4、时时结束循环,转去执行结束循环,转去执行whilewhile结构后面的语句。结构后面的语句。 当表达式为真 语句 表达式非0?语句循环控制条件循环控制条件循环体循环体6.1 while6.1 while语句语句 2 2、执行过程、执行过程2021-10-149【例【例6.16.1】编写程序,求编写程序,求1-1001-100这这100100个自然数的和个自然数的和即:即: 思路:寻找思路:寻找加数加数与与求和求和的规律的规律 6.1 while6.1 while语句语句 2021-10-1410算法和程序:算法和程序:程序输出结果:程序输出结果:s=5050 i=1,s=0 当i = 100

5、s=s+i i+输出s6.1 while6.1 while语句语句 循环结构中的术语:循环结构中的术语:循环条件与循环结束条件循环条件与循环结束条件循环变量以及循环变量初值循环变量以及循环变量初值循环体循环体避免死循环(循环体中有趋向于循环结束的语句)避免死循环(循环体中有趋向于循环结束的语句)2021-10-1412说明:说明: i i的初的初值值=101=101。死死循环循环 while (i=100) i+; s=s+i; 运行后,输出:运行后,输出:s=5150原因是什么?原因是什么? 6.1 while6.1 while语句语句 2021-10-148main( ) int numb

6、er=0; while(number+=1) printf(“*%dn”,number); printf(“*%dn”,number); 例:循环进行了多少次例:循环进行了多少次? ?输出的值输出的值? ?结果结果 : *1 *2 *3条件表达式条件表达式执行次数执行次数123条件表达式条件表达式中变量的值中变量的值012执行哪个执行哪个printf语句语句(1)(1)(2)(1)(2)输出输出number的值的值1236.1 while6.1 while语句语句 2021-10-1414【例例 6.26.2】显示显示110110的平方的平方#include main() int i=1; w

7、hile(iN,则求则求M%N,若余数若余数r为为0,则,则N即为是所求,若余数即为是所求,若余数r不为不为0,用,用N除除 r,再求再求其余数其余数直到余数为直到余数为0,则除数就是最大公约数。,则除数就是最大公约数。如:如:m=15;n=12;r=m%n,即,即r=3,其值!,其值!=0,继续用,继续用(n=12)%(r=3),其值为,其值为0 ,此时的此时的3即为所求即为所求2021-10-1476与与64的最的最大公约数为大公约数为46.2 do-while6.2 do-while语句语句定义m、n、rmnT F m和n交换r=m%nm=nn=r 当r != 0时输出最大公约数m算法描

8、述:求求76 与与 64的最大公约数的最大公约数r=76%64 , r 的值为的值为12 r不为不为0r=64%12 , r 的值为的值为4 r不为不为0r=12%4 , r 的值为的值为 0242021-10-14main( ) int m,n,t,r;scanf(“%d,%d”,&m,&n);if(mn) t=m; m=n; n=t; do r=m%n; m=n; n=r;while(r); 或或r!=0 printf(“%dn”,m);输入输入64,76交换交换m,n条件是:余数不为条件是:余数不为0除数做被除数,余数做除数除数做被除数,余数做除数程序代码:程序代码:6.2 do-whi

9、le6.2 do-while语句语句252021-10-1426 while和和do-while都能实现都能实现循环控制循环控制,while结构程结构程序通常都序通常都可以转换可以转换成成do-while结构结构do- while 语句语句先执行循环体再判断条件,循环体先执行循环体再判断条件,循环体至至少执行一次少执行一次; while 语句语句先判断条件再执行循环体,循环体有可能先判断条件再执行循环体,循环体有可能 一次也不执行一次也不执行 dowhile循环体中一定要有能使表达式值趋于循环体中一定要有能使表达式值趋于0的操的操 作作(如如i+),否则会出现否则会出现死循环死循环。 6.2

10、do-while6.2 do-while语句语句3 3、whilewhile语句与语句与do-whiledo-while语句的比较语句的比较2021-10-14 main()int s=0,x; scanf(%d,&x); while (x=10) s=s+x; x+; printf(s=%dn,s); main() int s=0,x; scanf(%d,&x); do s=s+x; x+; while(x=10); printf(s=%dn,s); 输入输入:12输出:输出:s=12循环至少循环至少执行一次执行一次循环没有循环没有被执行被执行输入:输入:12输出:输出:s=06.2 do-

11、while6.2 do-while语句语句276.2 do while语句语句总结do 、while都必须小写while后面的小括号()、分号;都不能省略循环条件可以是c语言中任意类型的表达式do while是先执行循环体,然后再判断循环条件do和while之间的部分是循环体,用括起来,如果循环体语句只有一条,则可以省略不写do while至少执行一次循环体避免“死循环”出现和while一样,比较适合只知道循环条件、不知道循环次数循环 主要内容:主要内容:6.16.1 whilewhile语句语句6.26.2 do-whiledo-while语句语句6.36.3 forfor语句语句6.4 6

12、.4 循环嵌套循环嵌套6.5 6.5 循环控制语句循环控制语句求求1-100的自然数求和:的自然数求和:main( ) int n, s=0; for(n=1 ; n=100 ;n+) s=s+n; printf(“%dn”,s); main( ) int n, s=0; n=1; while(n=100) s=s+n; n+; printf(“%dn”,s); main( ) int n, s=0; n=1; do s=s+n; n+; while(n=100) printf(“%dn”,s); 2021-10-14316.3 for6.3 for语句语句1 1、格式、格式初值表达式初值表达

13、式1 条件表达式条件表达式2 增量表达式增量表达式3for (表达式表达式1;表达式表达式2;表达式表达式3) 循环体语句循环体语句 32N-S结构图for (表达式1;表达式2;表达式3) 语句NY流程图计算exp1 循环体语句计算exp3exp2为真?例如:main( ) int i,s; s=0; for ( i=1; i=100; i+) s=s+i; printf(s=%dn,s);6.3 for6.3 for语句语句2 2、执行过程、执行过程20变量值发生变化变量值发生变化计算计算表达式表达式1 1初值初值; ;计算计算表达式表达式2 2并判断并判断,0 0 时跳出循环,非时跳出循

14、环,非0 0 时执行循环;时执行循环;当当表达式表达式2 2非非0 0,执行循环体语句执行循环体语句,计算,计算表达式表达式3 3增量增量; ;自动转到第二步自动转到第二步( (计算计算表达式表达式2 2).).继续执行。继续执行。 main( ) int n, s=0; for(n=1 ; n=100 ;n+) s=s+n; printf(“%dn”,s); 变量的增量变量的增量循环体循环体变量的初值变量的初值循环条件循环条件 变量初始化变量初始化 关系或逻辑表达式关系或逻辑表达式6.3 for6.3 for语句语句2 2、执行过程、执行过程2021-10-142021-10-14(1 1)

15、表达式)表达式1,1,表达式表达式2 2和表达式和表达式3 3均可均可缺省缺省for (;n100;n+) 缺省缺省e1, n 应在应在循环之前循环之前赋初值赋初值 for (n=0;n+) 缺省缺省e2, 造成死循环,不可使用!造成死循环,不可使用!for (n=0;n100;) 缺省缺省e3, n增量应在增量应在循环体内进行循环体内进行for (; ;) 缺省缺省e1,e2,e3 死循环死循环for (;n100;) 缺省缺省e1,e3分号始终不能缺省!分号始终不能缺省!不可用不可用 相当于相当于for( ; 1 ; )说明说明:6.3 for6.3 for语句语句342021-10-14

16、(1) for(初值初值;判断判断;增量增量) 语句;语句;(2)for(初值初值;判断判断;增量增量) 复合语句复合语句;(3)for(初值初值;判断判断;增量增量);(2 2)表达式表达式1 1和和表达式表达式3 3可以是与可以是与初值、增量初值、增量无关的逗号表达式无关的逗号表达式for (s=0,n=1;n=100;s=s+n, printf(“ %d” ,s) n+;for (s=0;n100;s=s+n,n+) printf(“ %d” ,s);求累加和求累加和n的初值在的初值在for之前完成之前完成增量在增量在for之外完成之外完成(3 3)forfor语句的语句的3 3种形式:

17、种形式:6.3 for6.3 for语句语句352021-10-14main() int n,s; for(n=1;n=10;n+=2) printf(n=%dn,n);main() int n,s; for(n=1;n=10;n+=2); printf(n=%dn,n);以下程序的输出结果区别以下程序的输出结果区别: :输出结果:输出结果:n=11输出结果:输出结果:n=1n=3n=5n=7n=9无循环体无循环体 循环体循环体;特点:先判断后循环特点:先判断后循环printf(n=%dn,n);6.3 for6.3 for语句语句362021-10-1437例:#include main(

18、) int i ; for(i=0;i10;i+) putchar(a+i); 运行结果:abcdefghij例:#include main( ) int i=0; for(;i10;) putchar(a+(i+); 例:#include main( ) int i=0; for(;i10;i+) putchar(a+i); 例:#include main( ) int i=0; for(;i10;putchar(a+i),i+) ; 6.3 for6.3 for语句语句2021-10-1438【例【例6.6】求求n! ,即计算即计算p=123n的值。的值。 思路:求阶乘与求累加的运算处理过

19、程类似,只要将“ ”变为“ ”,注意p的初值是1而不是0。设置: 乘数乘数i ,初值为1,终值为n(n是循环控制终值,需要从键盘输入) 累乘器累乘器 p ,每次循环令p = p*i6.3 for6.3 for语句语句求阶乘的分析过程:求阶乘的分析过程:p=12345(即即5!)2021-10-1440程序:程序:main( ) int i, n; long p; p=1; printf(Enter n:); scanf(%d,&n); for (i=1; i=n; i+) p = p * i; printf(p = %ld n,p);6.3 for6.3 for语句语句6.3 for语句语句总

20、结总结for语句比较适合循环次数确定、或循环条件在一个范围内的情况语句比较适合循环次数确定、或循环条件在一个范围内的情况for要小写要小写格式中三个表达式之间是分号;,不是逗号,且不能省略格式中三个表达式之间是分号;,不是逗号,且不能省略三个表达式都可以省略不写三个表达式都可以省略不写注意循环体用注意循环体用括起来,如果是一条语句,则可以省略不写。这个一条括起来,如果是一条语句,则可以省略不写。这个一条语句可以是表达式语句,可以是控制语句,可以是复合语句语句可以是表达式语句,可以是控制语句,可以是复合语句注意不能乱用分号,会改变控制范围注意不能乱用分号,会改变控制范围 如:如:int n=0,

21、i; for(i=1;i=3;i+); n+; printf(%d,n); 主要内容:主要内容:6.16.1 whilewhile语句语句6.26.2 do-whiledo-while语句语句6.36.3 forfor语句应用语句应用6.4 6.4 循环嵌套循环嵌套6.5 6.5 循环控制语句循环控制语句6.3 for6.3 for语句应用语句应用【例例6.76.7】从键盘上输入从键盘上输入一个整数一个整数a a,判定其是否,判定其是否为素数,如果是素数,则输出为素数,如果是素数,则输出“yesyes”,都在输出,都在输出“nono”。6.3 for6.3 for语句应用语句应用【例例6.76

22、.7】从键盘上输入从键盘上输入一个整数一个整数a a,判定其是否,判定其是否为素数,如果是素数,则输出为素数,如果是素数,则输出“yesyes”,都在输出,都在输出“nono”。6.3 for6.3 for语句应用语句应用【例例6.76.7】从键盘上输入从键盘上输入一个整数一个整数a a,判定其是否,判定其是否为素数,如果是素数,则输出为素数,如果是素数,则输出“yesyes”,都在输出,都在输出“nono”。循环条件:循环条件:r!=0循环变量的初值是:循环变量的初值是:r=n%i;循环体是:循环体是:i+;r=n%i;2021-10-1446#include int main() int

23、a,i=2, r; scanf(%d,&a); for(r=a%i;r&i=a) printf(%d is yes!n,a); else printf(%d is no!n,a);return 0;运行结果:运行结果:1717 is yes!6.3 for6.3 for语句应用语句应用2021-10-1447【例【例6.86.8】按每行输出按每行输出5 5个数的形式输出个数的形式输出FibonacciFibonacci数列的前数列的前2020项项 。思路:Fibonacci数列的前几项是:1、1、2、3、5、8、13、21、34、。此数列的变化规律是:6.3 for6.3 for语句应用语句应

24、用求求FibonacciFibonacci数列的前数列的前2020项。项。2021-10-1449算法和程序算法和程序: :f1=1,f2=1并输出for (i=3; i=20; i+) f3=f2+f1 f1=f2,f2=f3 输出f3 T F 换行6.3 for6.3 for语句应用语句应用2021-10-1450所有用所有用 while while 语句实现的循环都可以用语句实现的循环都可以用for for 语句实现。语句实现。 for(表达式表达式1;表达式表达式2 ;表达式表达式3) 语句;语句;表达式表达式1;while (表达式表达式2) 语句;语句; 表达式表达式3; 6.3

25、for6.3 for语句转换语句转换3 3、forfor语句、语句、whilewhile语句的相互转换语句的相互转换2021-10-1451三种循环语句的比较:三种循环语句的比较:whiledo-while表达式一个for三个while for先判断后执行do-while先执行后判断while语句多用于循环次数不定循环次数不定的情况do-while语句多用于至少要运行一次至少要运行一次的情况for语句多用于要赋初值赋初值或循环次数固定循环次数固定的情况6.3 for6.3 for语句比较语句比较2021-10-1452熟悉几个循环语句:熟悉几个循环语句:6.3 6.3 循环语句特殊用法循环语句

26、特殊用法l while (!x) x+; 当 x=0 时,执行循环体x+; lwhile (c=getchar( ) != n) n=n+1; n 称为计数器,作用是统计输入字符的个数lwhile (num+5); 先执行循环体x*=-3,再判断条件(x5) lfor (n=0; n26; n+) printf(%c , n+A); 作用是输出26个大写字母lfor (sum=0, i=1; i=100; sum=sum+i, i+=2) ;作用是计算100以内的奇数和 6.3 for语句的应用语句的应用总结:总结:1)本节课主要是)本节课主要是for循环的实际应用,确定循环体、分析出循环的实

27、际应用,确定循环体、分析出循环条件是解题的关键。循环条件是解题的关键。2)注意)注意for中三个表达式的作用中三个表达式的作用3)有些复杂的问题,单重的)有些复杂的问题,单重的for解决不了,需要用到循环嵌解决不了,需要用到循环嵌套套 主要内容:主要内容:6.16.1 whilewhile语句语句6.26.2 do-whiledo-while语句语句6.36.3 forfor语句语句6.4 6.4 循环嵌套循环嵌套6.5 6.5 循环控制语句循环控制语句思考,如何输出下列图形?思考,如何输出下列图形?用来输出一行中的用来输出一行中的7个个*字符:字符:重复书写三次相同的代码,重复书写三次相同的

28、代码,用来输出三行用来输出三行7列的列的*字符字符2021-10-1458如果循环语句的循环体内又包含了另一条循环语句,如果循环语句的循环体内又包含了另一条循环语句,则称为则称为循环的嵌套循环的嵌套。WhileWhile、do-whiledo-while和和forfor三种循环语句,可以嵌套本身,三种循环语句,可以嵌套本身,也可以相互嵌套。也可以相互嵌套。6.4 6.4 循环的嵌套循环的嵌套1 1、格式、格式几种循环嵌套格式如下(几种循环嵌套格式如下(6种):种):几种循环嵌套格式如下(几种循环嵌套格式如下(6种):种):循环嵌套执行过程:循环嵌套执行过程:无论上述无论上述6种中的哪一种嵌套格

29、式,种中的哪一种嵌套格式,程序的执行都是从外层循环进来,程序的执行都是从外层循环进来,当内层循环执行结束,再执行外层循环的第二次,当内层循环执行结束,再执行外层循环的第二次,类似于地球围绕太阳公转一圈时,自转了类似于地球围绕太阳公转一圈时,自转了365圈。圈。2021-10-1461注意:注意:whilewhile、do-whiledo-while、forfor循环语句可以并列,也可以相互嵌套,但要层次清楚,不能出现交叉。6.4 6.4 循环的嵌套循环的嵌套外循环外循环内循环内循环交叉循环交叉循环外循环外循环入口入口内循环出口内循环出口内循环出口内循环出口外循环出口外循环出口2021-10-1

30、462多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。例如:for(a=1;a=10;a+) for (b=0;b=5;b+) 6.4 6.4 循环的嵌套循环的嵌套2021-10-1463#include main( ) int i, j; for ( i=1; i10; i+ ) for ( j=1; j=i; j+ ) printf (j=i)?%4dn:%4d,i*j); 外循环语句内循环语句 for ( j=1; j=i; j+ )printf(%4d,i*j); printf(“n); if(j=i)printf(%4dn,i*j);else printf(%4d

31、,i*j);6.4 6.4 循环的嵌套循环的嵌套例如:输出乘法口诀的九九表例如:输出乘法口诀的九九表2021-10-1464【例【例6.9】编程序,输出以下图形。编程序,输出以下图形。 * * * *i 14j j 1i j18-2*i1双重循环双重循环6.4 6.4 循环的嵌套循环的嵌套2021-10-1465算法和程序:算法和程序:main( ) int i,j; for (i=1; i=4; i+) for (j=1; j=i-1; j+) printf( ); for (j=1;j=8-(2*i-1);j+) printf(*); printf(n); for (i=1; i=4; i

32、+) for (j=1; j=i-1; j+) 输出一个空格 for (j=1; j=8-(2*i-1); j+) 输出一个星号 换行10行行平移平移20个字符个字符6.4 6.4 循环的嵌套循环的嵌套2021-10-1466 分别用2、3、,m-1(1m101)尝试能否整除整数 。穷举算法穷举算法ik【例例6.10】编写程序,找出编写程序,找出2100以内的所有质数(素数)以内的所有质数(素数)6.4 6.4 循环的嵌套循环的嵌套2021-10-1467程序:程序:6.4 6.4 循环的嵌套循环的嵌套程序运行结果:程序运行结果:2、3、5、7、11、13、17、19、23、29、31、37、

33、41、43、47、53、59、61、67、71、73、79、83、89、976.4 循环嵌套循环嵌套总结总结1)注意循环嵌套的格式,不能交叉使用)注意循环嵌套的格式,不能交叉使用2)区分好循环嵌套和循环并列)区分好循环嵌套和循环并列3)掌握循环嵌套的执行过程,能够读懂程序)掌握循环嵌套的执行过程,能够读懂程序4)建议先写内层循环,然后再补充外层循环)建议先写内层循环,然后再补充外层循环5)注意内层循环变量赋初值的位置)注意内层循环变量赋初值的位置虽然,能判断虽然,能判断i是否为素数,但是程序的执行效率不高,改是否为素数,但是程序的执行效率不高,改进的办法,采用程序跳转语句:进的办法,采用程序跳

34、转语句: break;和;和continue; 主要内容:主要内容:6.16.1 whilewhile语句语句6.26.2 do-whiledo-while语句语句6.36.3 forfor语句语句6.4 6.4 循环嵌套循环嵌套6.5 6.5 循环控制语句循环控制语句2021-10-1471有如下两种语句实现跳转:语句语句语句语句 在循环语句的循环体中使用,可以进行循环的流程控制。6.5 6.5 循环控制语句循环控制语句2021-10-1472后续语句后续语句功能: 利用break语句能够强迫终止本循环强迫终止本循环,转到后续语句执行。while语句语句do-while语句语句后续语句for语句语句6.5 6.5 循环控制语句循环控制语句1 1、breakbreak语句语句2021-10-1473while (n5) scanf(%d,&x); s+=x; n+; printf(“%d”,s); if

温馨提示

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

评论

0/150

提交评论