




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本章主要内容本章主要内容概述概述用用while语句实现循环语句实现循环用用dowhile语句实现循环语句实现循环用用for语句实现循环语句实现循环循环的嵌套循环的嵌套几种循环语句的比较几种循环语句的比较break语句和语句和continue语句语句程序举例程序举例 第六章 循环控制6.1 概述 循环结构循环结构: 程序设计中程序设计中, 经常需要重复相同的经常需要重复相同的计算或处理过程。计算或处理过程。例如:全班有例如:全班有50个学生,统计各学生三个学生,统计各学生三 门课的平均成绩。门课的平均成绩。scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2+s3)
2、/3;printf(“aver=%7.2f”,aver); 输入学生输入学生1的三门课成绩,并计算平均值后输出的三门课成绩,并计算平均值后输出scanf(“%f,%f,%f”,&s1,&s2,&s3);aver=(s1+s2+s3)/3;printf(“aver=%7.2f”,aver); 输入学生输入学生2的三门课成绩,并计算平均值后输出的三门课成绩,并计算平均值后输出要对要对50个学生进行相同操作个学生进行相同操作重复重复50次次循环结构两大要素:循环结构两大要素:循环体循环体 可重复执行的语句或语句组可重复执行的语句或语句组循环条件循环条件 条件表达式,指出什么时候执行循环体,条件表达式
3、,指出什么时候执行循环体,什么时候结束循环。什么时候结束循环。循环体语句条件表达式循环体语句条件表达式真假while的后续语句1形式形式 : while(条件表达式)(条件表达式)循环体语句循环体语句 6.3 while语句语句例例0:用:用 while 语句实现在屏幕上输出语句实现在屏幕上输出10行行“i love programming!”。分析分析: 设计变量并赋初值设计变量并赋初值 用用int型变量型变量i表示行数,初值为表示行数,初值为1设计循环条件设计循环条件 i10设计循环体设计循环体 printf(“i love programming!n”); i+;用循环语句实现用循环语句
4、实现void main() int i; i=1; while(i=10) printf(“i love programming!n”); i+; 循环变量循环变量赋初值赋初值循环变量循环变量增值增值循环条件循环条件循环体循环体条件表达式条件表达式必须加括号,括必须加括号,括号后不能有;号后不能有;循环体包含多条语循环体包含多条语句时,句时, 不能少不能少例例1:用:用 while 语句实现语句实现 1+2+3+100分析分析: 设计变量并赋初值设计变量并赋初值 1. 用用int型变量型变量sum存放和,初值为存放和,初值为0 2. 用用int型变量型变量i表示累加变量,初值为表示累加变量,初
5、值为1设计循环体设计循环体 sum=sum+i; i+;设计循环条件设计循环条件 i100用循环语句实现用循环语句实现程序流程图:程序流程图:开始初始化 sum=0; i=1;判断:i=100 ?sum=sum+i;i=i+1;输出 sum结束真假真sum=sum+i;i=i+1;判断:i=100 ?#include void main() int i, sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum);循环结束后循环结束后,i的的值是多少?值是多少?101使用说明:使用说明:1) 在在while的循环体中一定要有使循环趋于结束的的循
6、环体中一定要有使循环趋于结束的语句;否则将形成语句;否则将形成死循环死循环;2) 注意循环操作的范围、花括号、分号的使用;注意循环操作的范围、花括号、分号的使用;3) 注意给循环变量赋初值的位置及初值的正确性;注意给循环变量赋初值的位置及初值的正确性;#include void main( ) int sum=0, i=1; while (i=100) sum=sum+i; i+; printf(sum%dn,sum); 程序程序: i+; sum+=i;i=0;100例例 2求求1到到100之间的奇数之和,偶数之积之间的奇数之和,偶数之积 。sum=0 mul=1 i=100 i能整除能整除
7、2?yesnomul=mul*isum=sum+i输出输出sum, muli+;i=1main( ) double mul=1; int i=1, sum=0; while (i=100) if (i%2=0) mul=mul*i; else sum=sum+i; i+; printf(sum=%dn,sum); printf(mul=%en,mul); main( ) int i,k1,k2,k; i=1;k1=1;k2=2; while (i=5) k=k1+k2; k1=k2; k2=k; i+; printf(%5d,k); 例例 3读程序练习:读程序练习: 3 5 8 13 21 1
8、形式:形式:do 语句语句 while(表达式)(表达式); 6.4 do-while语句语句循环体语句条件表达式循环体语句条件表达式真假例例 1用用do_while 语句实现语句实现 1+2+3+100分析分析: 设计变量并赋初值设计变量并赋初值 1. 用用int型变量型变量sum存放和,初值为存放和,初值为0 2. 用用int型变量型变量i表示累加变量,初值为表示累加变量,初值为1设计循环体设计循环体 sum=sum+i; i+;设计循环条件设计循环条件 i100用循环语句实现用循环语句实现void main( ) int i,sum=0; i=1; do sum=sum+i; i+; w
9、hile (i=1e-3); printf(sum=%fn,sum); while循环与循环与do_while循环小结循环小结:1. 循环体内必须有使循环趋于终止的条件循环体内必须有使循环趋于终止的条件 while (i=100) sum=sum+i; i+;do sum=sum+i; i+; while (i=100);2. 注意循环初值与循环条件注意循环初值与循环条件i=1;while (i=100) sum=sum+i; i+;i=0;while (i100) i+; sum=sum+i;3. do_while 循环的循环体至少执行一循环的循环体至少执行一 次次, while循环的循环体
10、可能一次循环的循环体可能一次 也不执行。也不执行。 4. 在循环体至少执行一次的前提下,在循环体至少执行一次的前提下, do_while与与while 循环等价。循环等价。 例例3: 求求 n! main( ) int i=1,n; double m=1; scanf(%d,&n); while(i=n) m=m*i; i+; printf(%10.0fn,m); printf(“i=%dn”,i); main( ) int i=1,n; double m=1; scanf(%d,&n); do m=m*i; i+; while(i=n); printf(%10.0fn,m); printf(
11、“i=%dn”,i); 1. 一般形式:一般形式: for (表达式表达式1; 表达式表达式2; 表达式表达式3) 语句语句 for 的循环体的循环体括号不可少括号不可少分号不可少分号不可少 6.5 for语句语句求表达式求表达式1判表达式判表达式2语句语句求表达式求表达式3for语句的下一语句的下一个语句个语句 真真,非非0假假,值为值为0for语句执行过程示意for (表达式表达式1; 表达式表达式2; 表达式表达式3) 语句语句表达式表达式1只执只执行行1次;次;表达式表达式2、3和内嵌语句执和内嵌语句执行多次行多次通常:通常:表达式表达式1用于用于对循环变量赋初值对循环变量赋初值;表达
12、式表达式2给出给出循环条件循环条件; 表达式表达式3使使循环变量增值循环变量增值;循环类型:循环类型:当型当型for语句等价于下列语句:语句等价于下列语句:表达式表达式1;while (表达式(表达式2) 语句;语句; 表达式表达式3;例例:#include void main()int i, sum=0;for (i=1;i=100;i+) sum=sum+i;printf(“sum=%dn”,sum);例:例:for(i=0; i=10; i=i+2) printf(“%3d”, i); printf(“ni=%d”, i); 运行结果:运行结果:0 2 4 6 8 10 i=12例:例:
13、for(i=10; i; i-) printf(“%d,”, i); 运行结果:运行结果:10,9,8,7,6,5,4,3,2,1,例:例:for(i=1, j=6; ij; i+, j-) printf(“%d*%d=%dn”, i, j, i*j);运行结果:运行结果:1*6=6 2*5=10 3*4=12 3. 说明说明 : 1)表达式)表达式1可省略,但分号不能省可省略,但分号不能省 ;如如 :int i=1,sum=0; for (;i=100;i+) sum=sum+i; 2)若表达式)若表达式2省略,循环条件永远为真省略,循环条件永远为真 ;如如: for(i=1; ;i+)pr
14、intf(“%d,”,i); 死循环死循环3)表达式)表达式3也可省略,但应设法保证循环正常结束也可省略,但应设法保证循环正常结束 ;如如 : for (i=1;i=100;) sum=sum+i; i+; 4)可只给循环条件)可只给循环条件;i=1; for (;i=100;) sum=sum+i; i+; 5)三个表达式都可省)三个表达式都可省 ; for (;) 相当于相当于 while (1) 6)表达式)表达式1和表达式和表达式3可以是逗号表达式可以是逗号表达式 ;如如 : for (i=1,sum=0;i=100;i+) sum=sum+i;7)表达式)表达式2一般为关系表达式或逻
15、辑表达式,但一般为关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为也可以是数值表达式或字符表达式,只要其值为非零非零就执行循环体就执行循环体 。 如如: for (;(c=getchar( )!=n;) printf(%c,c);注注: 尽量避免用尽量避免用实型变量实型变量控制循环次数。控制循环次数。在循环体内尽量避免改变循环变量的值在循环体内尽量避免改变循环变量的值, 否否则将难以预知循环次数。则将难以预知循环次数。例:例:void main( ) int i; for(i=1;i=20;i+) i=i+5; printf(%5d,i); printf(n);运行结果为:
16、运行结果为: 6 12 18 24修改了循环变量修改了循环变量 概念概念 :一个循环体内又包含另一个完整的循环结构:一个循环体内又包含另一个完整的循环结构 。 6.6 循环的嵌套循环的嵌套例:do-while嵌套 例:do-while、for混合嵌套 do do do for(e1;e2;e3) while(e1); while(e); while(e); 外循环外循环 内循环内循环 外循环外循环 内循环内循环1 内循环内循环2三重循环三重循环错误的循环交叉形式:错误的循环交叉形式: 说明说明 :1)三种循环可以互相嵌套)三种循环可以互相嵌套 2)嵌套可以是多层的)嵌套可以是多层的 * * *
17、 * * * * * * * * * * * * * * * * * * * * * *main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=5;j+) printf (*); printf(n); 1. 四种循环一般可互相代替四种循环一般可互相代替 3. while和和do-while循环的循环体中应包括使循循环的循环体中应包括使循环趋于结束的语句。环趋于结束的语句。4. 6. while和和for循环是当型循环循环是当型循环, do-while循环是直到型循环循环是直到型循环 6.7 几种循环的比较几种循环的比较一、一、break语句语句 作用作用 :
18、1) 从循环体内跳出,即提前结束循环从循环体内跳出,即提前结束循环 ,接着,接着执行循环下面的语句执行循环下面的语句 ; 2) break语句语句只能只能 用于用于循环语句和循环语句和 switch 语语句句 。6.8 break语句和语句和continue语句语句#include void main( )int r; float area; for(r=1; r100) break; printf(“r=%d,area=%-7.2fn”, r, area); printf(“r=%d”,r);计算半径为计算半径为1 1到到1010的的各圆面积,直到面各圆面积,直到面积大于积大于100100为
19、止。为止。 r= 6 注意:注意: 在循环中使用了在循环中使用了break语句后,循环语句的结束可语句后,循环语句的结束可能有两种:能有两种:1. 正常结束(正常出口);由于循环条件表达式为假正常结束(正常出口);由于循环条件表达式为假2. 非正常结束(异常出口):由非正常结束(异常出口):由break语句引起。语句引起。使用说明:使用说明:1) 内循环中的内循环中的break仅跳出内循环结构;仅跳出内循环结构; if(e) break;2) 被循环语句嵌套的被循环语句嵌套的switch中出现的中出现的break,仅,仅跳出跳出switch;switch(e) break; 二、二、conti
20、nue 语句语句作用作用 :结束:结束本次本次循环,即跳过循环体中语句中下面尚循环,即跳过循环体中语句中下面尚未执行的语句,接着执行下一次是否执行循环的判定。未执行的语句,接着执行下一次是否执行循环的判定。 for (n=100;n=200;n+) if (n%3= =0) continue; printf(“%d”,n); if (n%3!=0) printf(“%d”,n);例:for中用 continue 例:while中用continue for(e1; e2; e3 ) while( e1 ) if (e) continue; if(e) continue; 三、三、break语句和
21、语句和continue语句的区别是语句的区别是 : 1)continue 语句只结束语句只结束本次循环本次循环,不终止整,不终止整个循环的执行;个循环的执行; 2)break 语句是语句是终止整个循环终止整个循环的执行,不再的执行,不再进行条件判断。进行条件判断。 例:例: 从键盘上任意输入一个正整数,判断其是否为素数。从键盘上任意输入一个正整数,判断其是否为素数。素数:除了素数:除了1和它本身之外没有其他因子的数。换句和它本身之外没有其他因子的数。换句话说只要有因子(除了话说只要有因子(除了1和它本身之外)则该数一定和它本身之外)则该数一定不是素数不是素数判断判断m是否素数:是否素数:(穷举
22、法穷举法) for(i=2;im-1void main( ) int m,i; scanf(%d,&m); for(i=2;im-1) printf(%d is a prime,m); else printf(%d is not a prime,m); 非正常出口非正常出口方法方法1main( ) int m, i, k=1; scanf(%d,&m); for(i=2;i=m-1;i+) if(m%i= =0) k=0;break; if(k) printf(%d is a prime,m); else printf(%d is not a prime,m);方法方法2标志变量标志变量例用公
23、式求例用公式求的近似值,直到最后一项的的近似值,直到最后一项的绝对值小于绝对值小于10-6为止为止 。 /41-1/3+1/5-1/7+算法分析:算法分析: 1. 循环累加循环累加 pi=pi+t; 2. 交替改变符号交替改变符号 s= -s; 3. 每项分子为每项分子为 1 ,分母分母 n=n+2; 6.9 程序举例程序举例 #include void main( ) int s; float n,t,pi; t=1;pi=0;n=1;s=1; while (fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s*1.0/n; printf(pi=%10.6fn,4*
24、pi); 程序程序 :例例 求求fibonacci数列:数列:1,1,2,3,5,8,.的前的前40个数个数 。 f1 f2 1 1f1=f1+f2; f2=f2+f1; fi=fi-1+fi-2f12f23. void main( ) long int f1,f2; int i; f1=1; f2=1; for (i=1;i=20;i+) printf(%12ld %12ld,f1,f2); if (i%2= =0) printf(n); f1=f1+f2; f2=f2+f1; 与此解题方法类似的有与此解题方法类似的有:(迭代法迭代法)1、编写求、编写求 20+21+22+23+263 的程
25、序的程序 。2、求、求1!+2!+3!+20!。3、有一个分数序列、有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13求出这个数列的前求出这个数列的前20项之和项之和4、求、求: sn=a+aa+aaa+aaaaaa,其中其中a是一是一个数字个数字,n表示表示a的位数,的位数,n要求由键盘输入。要求由键盘输入。等等。等等。void main( ) int i,j,m=0; for(j=100;j=200;j+) for(i=2;ij-1) printf(%5d,j); m+; if(m%10=0) printf(n); printf( m=%dn,m);例:求例:求10020
26、0之间的所有素数及素数的个数。之间的所有素数及素数的个数。输出输出10个素数后换行个素数后换行与此解题方法类似的有与此解题方法类似的有:(穷举法、列举法穷举法、列举法)1、输出所有的水仙花数。、输出所有的水仙花数。2、找出、找出11000之间的全部同构数之间的全部同构数 。一个数等于。一个数等于它的平方数的右端,就称为同构数。如它的平方数的右端,就称为同构数。如 :5的平方的平方是是25,25的平方是的平方是625。3、编程找出、编程找出1000之内的所有完数。一个数恰好等之内的所有完数。一个数恰好等于它的因子之和,这个数就称为于它的因子之和,这个数就称为“完数完数”。例如:。例如:6的因子为
27、的因子为1,2,3,而,而6=1+2+3,因此,因此6是完数。是完数。同构数同构数 : 一个数等于它的平方数的右端。一个数等于它的平方数的右端。 如如 :5的平方是的平方是25 25的平方是的平方是625 例例 :找出找出11000之间的全部同构数之间的全部同构数 。分析:分析:1. 用用i表示表示11000之间的数之间的数 2. 用用n表示表示i的位数的位数 3. 同构数的条件同构数的条件: i*i%(int)pow(10,n) = = im=i;n=0;do n+; m=m/10; while(m!=0); #include math.h main( ) int n,m; long i;
28、for(i=1;i=1000;i+) m=i;n=0; do n+; m=m/10; while(m!=0); if(i*i%(int)pow(10,n)=i) printf(%5ld,i); printf(n); 一个数恰好等于它的因子之和,这个数一个数恰好等于它的因子之和,这个数就称为就称为“完数完数”。例如:例如:6的因子为的因子为1,2,3,而,而6=1+2+3,因,因此此6是完数。是完数。编程找出编程找出1000之内的所有完数,并按之内的所有完数,并按下面格式输出其因子下面格式输出其因子6 its factors are 1,2,3 例 main( ) int i,j,k; for
29、(i=2;i=1000;i+) k=0; for (j=1;j=i/2;j+) if (i%j=0) k=k+j; if (i=k) printf(“%d its factors are %d”,i,1); for (j=2;j=i/2;j+) if (i%j=0) printf(“,%d”,j); printf(“n”); 程序 :例:从键盘输入字符直到输入字符例:从键盘输入字符直到输入字符#为止,并统计为止,并统计 输入字母的个数。输入字母的个数。特点:特点:循环次数事先无法确定循环次数事先无法确定#include void main( ) char ch; int count=0; do
30、 ch=getchar( ); if(ch=a&ch=a&ch=z) count+; while(ch!=# ); printf(”count=%dn”, count); 例:从键盘输入字符直到输入字符例:从键盘输入字符直到输入字符#为止,并统计为止,并统计 输入字母的个数。方法输入字母的个数。方法2:#include void main( ) char ch; int count=0; while(1) ch=getchar( ); if(ch=a&ch=a&ch=z) count+; if(ch= =#) break; printf(”count=%dn”, count); 例例: 在屏幕
31、上输出以下图形。在屏幕上输出以下图形。 * * * *分析:(设分析:(设n=5n=5)第第1 1行:行: 4 4个空格个空格 1 1个个“* *” 换行换行符符 第第2 2行:行: 3 3个空格个空格 3 3个个“* *” 换行换行符符第第3 3行:行: 2 2个空格个空格 5 5个个“* *” 换行换行符符第第4 4行:行: 1 1个空格个空格 7 7个个“* *” 换行换行符符第第5 5行:行: 0 0个空格个空格 9 9个个“* *” 换行换行符符由此归纳出:第由此归纳出:第i i行的空格数行的空格数5-i5-i个;个; 第第i i行的行的“* *”数是数是2i-12i-1个。个。 v
32、oid main( ) int i, j; for(i=1;i=5;i+) for (j=1;j=5-i;j+) printf( ); for(j=1;j=2*i-1;j+) printf(*); printf(n); 本章小结 本章介绍的内容本章介绍的内容 介绍了介绍了while、dowhile、for三种循环结构三种循环结构的使用和它们之间的区别,以及的使用和它们之间的区别,以及break、continue的用法的用法 要求达到的目标要求达到的目标 掌握掌握while、dowhile、for语句的用法语句的用法 会使用这三种结构进行循环程序设计会使用这三种结构进行循环程序设计 理解理解 b
33、reak 和和 continue在程序控制中的作用在程序控制中的作用图形图形 1:(法一):(法一)main( ) int i; for (i=1;i=5;i+) printf (“ * * * * *n”); * * * * * * * * * * * * * * * * * * * * * * * * *图形图形 1:(法二):(法二)main( ) int i; for (i=1;i=25;i+) if (i%5=0) printf (“ *n”); else printf (“ *”); * * * * * * * * * * * * * * * * * * * * * * * * *
34、图形图形 2:(法三):(法三)main( ) int i,j; for (i=1;i=5;i+) for ( j=1;j=i;j+) printf ( “ “); printf (“ * * * * *n”); * * * * * * * * * * * * * * * * * * * * * * * * *图形图形 2:(法三):(法三)main( ) int i,j; for (i=1;i=5;i+) for ( j=1;j5+i;j+) if (ji) printf ( “ “); else printf (“ *”); printf(“n”); * * * * * * * * * *
35、 * * * * * * * * * * * * * * *图形图形 3:main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=5-i:j+) printf ( “ “); for (j=1;j=5;j+) printf (“ *”); printf(“n”); * * * * * * * * * * * * * * * * * * * * * * * * *图形图形 4 :main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=i;j+) printf (“ *”); printf(“n”); * * * * * * * * * * * * 图形图形 4 :main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=i;j+) printf (“ *”); printf(“n”); * * * * * * * * * * * * 图形图形 5:(法一):(法一)main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=5-i;j+) printf (“ “); for (j=1;j=i;j+) printf (“ *”); printf(“n”); * * * * * * * * * * *
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蔬菜种植生态环境保护与修复考核试卷
- 谷物磨制新技术与发展趋势考核试卷
- 通信设备专业安全性能强化考核试卷
- 纸制品行业生产安全管理与事故处理考核试卷
- 通讯设备软件更新与优化考核试卷
- 畜产品加工市场动态分析与竞争策略的制定考核试卷
- 服务标准化与工艺品市场服务考核试卷
- 物业管理中的社会责任与可持续发展考核试卷
- 艺术品拍卖实战考核试卷
- 抖音用户个人信息保护与隐私政策执行合同
- 2024年中考地理专项复习:材料分析题(解析版)
- 基于项目式学习的思政教学实践探索
- 2020-2021学年四川省凉山州八年级(下)期末物理试卷
- 《(近)零碳园区评价技术规范》
- 2024-2025学年中考数学专项复习:函数之新定义问题(含答案)
- 鹤壁市第一届职业技能大赛 保健按摩师项目技术工作文件
- 中建室外景观园林专项施工方案
- 锅炉生产单位质量安全员、安全总监-特种设备考试题库
- 2023年上海铁路局集团有限公司招聘笔试真题
- 游艇概论-第6章-游艇的动力装置
- 2024年度中国钠离子电池报告
评论
0/150
提交评论