《C语言程序设计第6章(循环控制).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第6章(循环控制).ppt(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第六章第六章 循环控制循环控制本章要点本章要点:建立循环程序设计的基本概念和逻辑思建立循环程序设计的基本概念和逻辑思维维 掌握掌握C语言循环程序设计的方法语言循环程序设计的方法6.1 概述概述1.1.引入循环控制语句的作用引入循环控制语句的作用 当满足一定条件时当满足一定条件时,重复执行一段程序重复执行一段程序.2.2.设置循环需要考虑的问题设置循环需要考虑的问题 循环初值循环初值;循环条件的设置循环条件的设置;循环体应包循环体应包括的语句;括的语句;循环条件的修改。循环条件的修改。3.C3.C语言中可用以下语句实现循环语言中可用以下语句实现循环 循环结构主要有:循环结构主要有:(1)用)用g
2、oto语句和语句和if语句构成循环;语句构成循环;(2)用)用while语句;语句;(3)用)用do-while语句;语句;(4)用)用for语句。语句。6.2 goto6.2 goto语句以及用语句以及用gotogoto语句构成循环语句构成循环 一般形式:一般形式:goto 标号;标号;标号:语句标号:语句 其中:其中:标号用标识符表示,即由字母、数字和下划线组标号用标识符表示,即由字母、数字和下划线组成,且首字符必须为字母或下划线。成,且首字符必须为字母或下划线。不能用整数不能用整数来作标号来作标号。用途:用途:1.与与if语句一起构成循环结构语句一起构成循环结构。2.从循环体中跳到循环体
3、外从循环体中跳到循环体外(一般指最深层)。一般指最深层)。3.改变程序自上而下的执行顺序。改变程序自上而下的执行顺序。缺点:滥用缺点:滥用goto语句,可使程序无规律、可读性差。语句,可使程序无规律、可读性差。例例6.1 用用if语句和语句和goto语句构成循环,求语句构成循环,求和和 s=1+2+100main()int i,sum=0;i=1;loop:if(i=100)sum=sum+i;i+;goto loop;printf(“%d”,sum);6.3 while语句语句一般形式:一般形式:while(表达式表达式)语句语句功能:功能:当表达式为非当表达式为非0值时,执行值时,执行wh
4、ile语句中的内嵌语句语句中的内嵌语句。特点:特点:先判断表达式,后执行语句先判断表达式,后执行语句。流程图:流程图:表达式语句非00说明:说明:(1)执行)执行while循环语句时,如果表达式的值第一次计算循环语句时,如果表达式的值第一次计算就等于就等于0,则循环体一次也不执行。,则循环体一次也不执行。(2)发生下列情况之一时,)发生下列情况之一时,while循环结束执行:循环结束执行:表达式的值为表达式的值为0;循环体内遇到循环体内遇到break语句;语句;循环体内遇到循环体内遇到goto 语句,且与该语句,且与该goto语句配合语句配合 使用使用的标号所指定的语句在本循环体外;的标号所指
5、定的语句在本循环体外;循环体内遇到循环体内遇到return语句,此时退出语句,此时退出while循环后,循环后,执行的流程从包含该执行的流程从包含该while语句的函数返回到调用函语句的函数返回到调用函数。数。例例6.2 求求main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(“%d”,sum);i=1,sum=0i=100?sum=sum+ii=i+1零零非零非零说明:说明:1)循环体中如果包含一个以上的语句,应该用花括)循环体中如果包含一个以上的语句,应该用花括号括起来;号括起来;2)在循环体中应有使循环趋于结束的语句,避免进)在循环
6、体中应有使循环趋于结束的语句,避免进入死循环;在本例中,设置循环条件为入死循环;在本例中,设置循环条件为i100,然后语句中,然后语句中有出有出i+,这样就不会出现死循环,这样就不会出现死循环。6.4 do-while语句语句一般形式:一般形式:do 循环体语句循环体语句 while(表达式表达式);特点:特点:先执行循环体,然后判断条件是否成立,先执行循环体,然后判断条件是否成立,成立继续执行,否则退出循环;成立继续执行,否则退出循环;流程图:流程图:循环体语句表达式非00例例 6.3用用do-while语句求语句求main()int i,sum=0;i=1;do sum=sum+i;i+;
7、while(i=100);printf(“%d”,sum);表达式=0?语句零零非零非零i=100?sum=sum+ii=i+1i=1while语句与语句与do-while语句之间的区别和相同点语句之间的区别和相同点1)do-while语句结构可以转换成语句结构可以转换成while结构结构,可,可以认为以认为do-while结构是由一个语句加一个结构是由一个语句加一个while结构构成;结构构成;2)当)当while后的表达式为后的表达式为真时,时,while语句语句 和和dowhile语句的语句的结果相同结果相同,但是对于,但是对于while后后面的表达式一开始就为面的表达式一开始就为0值值
8、,两种循环的,两种循环的结果结果不同不同;main()int i,s=0;scanf(“%d”,&i);while(i=10)s=s+i;i+;printf(“s=%dn”,s);输入:输入:1 打印:打印:55输入:输入:11 打印:打印:0main()int i,s=0;scanf(“%d”,&i);do s=s+i;i+;while(i=10);printf(“s=%dn”,s);输入:输入:1 打印:打印:55 输入:输入:11 打印:打印:116.5 for语句语句for语句的一般形式为:语句的一般形式为:for(表达式表达式1;表达式;表达式2;表达式;表达式3)语句语句执行过程流
9、程图:执行过程流程图:表达式表达式1表达式表达式2真语句语句表达式表达式3假for语句的语句的下一语句下一语句例:例:for(i=1;i=100;i+)sum=sum+ii=1i=100真真sum=sum+ii+假假它相当于它相当于 i=1;while(i=100)sum=sum+i;i+;说明:说明:(1)for语句的一般形式中的语句的一般形式中的“表达式表达式1”可以省可以省略略,此时,此时应在应在for语句之前给循环变量赋初值。语句之前给循环变量赋初值。比如:比如:for(i=1;i=100;i+)sum=sum+i;可写为:可写为:i=1;for(;i=100;i+)sum=sum+i
10、;(2)表达式表达式2不能省略不能省略,否则会导致死循环;,否则会导致死循环;(3)表达式表达式3可以省略可以省略,但此时应另外设法保证,但此时应另外设法保证循环能正常结束。比如:循环能正常结束。比如:for(i=1;i=100;i+)sum=sum+i;可写为:可写为:for(i=1;i=100;)sum=sum+i;i+;(4)表达式表达式1可以为设置循环变量初值的赋值表可以为设置循环变量初值的赋值表达式,也达式,也可以是与循环变量无关的其他变量表可以是与循环变量无关的其他变量表达式达式。此外。此外表达式表达式1和和表达式表达式3还可以是逗号表还可以是逗号表达式,即包含一个以上的简单表达式
11、,中间用达式,即包含一个以上的简单表达式,中间用逗号间隔。逗号间隔。例:例:for(sum=0;i=100;i+)sum=sum+i;for(i=0,j=100;i=j;i+,j-)k=i+j;(5)表达式表达式2一般是关系表达式或逻辑表达式,也一般是关系表达式或逻辑表达式,也可以为数值表达式或字符表达式可以为数值表达式或字符表达式,只要其值为非,只要其值为非零,就执行循环体。零,就执行循环体。例:例:for(;(c=getchar()!=n;)printf(“%c”,c);此句的作用是每读入一个字符后输出该字符,直到此句的作用是每读入一个字符后输出该字符,直到输入一个输入一个“换行符换行符”
12、为止为止。(6)for语句简单、方便,使用灵活,不仅可以用语句简单、方便,使用灵活,不仅可以用于循环次数已经确定的情况,而且可以用于循环于循环次数已经确定的情况,而且可以用于循环次数不确定只给出循环结束条件的情况,它次数不确定只给出循环结束条件的情况,它完全完全可以取代可以取代while和和do while语句语句。6.6 循环的嵌套循环的嵌套 C语言中,允许三种循环(语言中,允许三种循环(while循环、循环、do-while循环循环和和for循环)循环)相互嵌套相互嵌套和和进行多层嵌套进行多层嵌套。下面几种都是合下面几种都是合法的嵌套形式:法的嵌套形式:for(;)while()for循环
13、体嵌套循环体嵌套while循环体循环体 for(;)for(;)for循环体嵌套循环体嵌套for循环循环 do do while();while();do_while循环体循环体嵌套嵌套do_while循环循环 while()do while();while循环体嵌套循环体嵌套do_while循环循环 while()for(;)while循环体嵌套循环体嵌套for循环循环 do for(;)while();do_while循环体嵌套循环体嵌套for循环循环例例7:for 语句的循环嵌套例子。语句的循环嵌套例子。for(i=1;i=2;i+)for(j=1;j=2;j+)printf(“%3d”
14、,i+j);printf(“n”);output:2 3 3 4for(i=1;i=2;i+)for(j=1;j=2;j+)printf(“%3d”,i+j);printf(“n”);output:2 3 3 46.8 break语句和语句和continue语句语句6.8.1 break语句语句break语句的一般形式:语句的一般形式:break;作用:只能用于作用:只能用于循环语句循环语句和和switch语句,用来从循环体语句,用来从循环体内跳出循环体,以提前内跳出循环体,以提前结束循环结束循环。例:例:for(r=1;r 100)break;printf(“%f”,area);6.8.2
15、continue语句语句一般形式:一般形式:continue;作用:作用:结束结束本次本次循环循环,即跳过循环体中下面尚未,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判执行的语句,接着进行下一次是否执行循环的判定。定。contiune语句和语句和break语句的区别是:语句的区别是:contiune语句只是语句只是终止本次循环终止本次循环,不是终止,不是终止整个循环,而整个循环,而break语句是语句是结束整个循环结束整个循环;详细的流程图分析,可参见详细的流程图分析,可参见教科书教科书.例例6.5 把把100200之间的不能被之间的不能被3整除的数输出;整除的数输出;ma
16、in()int n;for(n=100;n=10-6pi=pi+tn=n+2s=-st=s/npi=pi*4输出输出pi#include 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);例例6.7 求求Fibonacci数列的数列的40个数。个数。Fibonacci数列为:数列为:f1=1,f2=1for i=1 to 20输出f1,f2f1=f1+f2f2=f2+f1main()long int f1,f
17、2;int i;f1=1;f2=1;for(i=1;i=真真k+1假假输出:输出:m是素是素数数输出:输出:m不是不是素数素数#includemain()int m,i,k;scanf(“%d”,&m);k=sqrt(m);for(i=2;i=k+1)printf(“%d is prime numbern”,m);else printf(“%d is not prime numbern”,m);例6.9在此基础上提出求素数的范围,这种情况可嵌套一个for循环即可处理。例例6.10 译密码。对字符的处理办法为:译密码。对字符的处理办法为:先判定它是否为大写字符或小写字符,若是,则将其值加先判定它是否为大写字符或小写字符,若是,则将其值加4,变成其后的第四个字母。如果加,变成其后的第四个字母。如果加4后字符值大于后字符值大于Z或或z,则在加,则在加4后再减去后再减去26,转换为字母表前面的字母。,转换为字母表前面的字母。#include main()char c;while(c=getchar()!=n)if(c=a&c=A&cZ&cz)c=c-26;printf(“%c”,c);
限制150内