c程序设计第6章 循环控制.ppt
重点重点:循环的概念循环的概念 实现循环的各种方法实现循环的各种方法 (if和和goto,while,do while,for)循环的嵌套和退出循环的嵌套和退出第6章 循 环 控 制6.2 goto语句以及用语句以及用goto语句构成循环语句构成循环标号标号:语句标号用标识符表示语句标号用标识符表示goto 语句标号;语句标号;goto L1;L2:语句语句 .L1:语句语句 goto L2;例:例:goto语句的作用语句的作用:(1)与与if语句一起构成循环结构。语句一起构成循环结构。(2)从循环体中跳转到循环体外(多重从循环体中跳转到循环体外(多重)。L1:if(e)循环体循环体 goto L1;(当型循环)当型循环)L2:循环体循环体 if(e)goto L2;(直到型循环)直到型循环)当型当型循环与直到型循环的区别循环与直到型循环的区别?例例6.1 求求 s=1+2+3+.+n 的值。的值。main()int i=1,sum=0,n;scanf(“%d”,&n);L1:sum=sum+i;i+;if(i=n)goto L1;printf(“s=%d”,sum);main()int i=1,sum=0,n;scanf(“%d”,&n);L1:if(i=n)sum=sum+i;i+;goto L1;printf(“s=%d”,sum);6.3while语句语句while语句形式如下:语句形式如下:while(表达式表达式)循环体循环体循环体可以是一个或多循环体可以是一个或多个语句个语句()。非非00循环体循环体e当表达式当表达式 e 值为值为非非0时,执行循环体,然后时,执行循环体,然后重复执行重复执行while语句;当语句;当e 的值为的值为0 时,结束时,结束循环,执行后继语句。循环,执行后继语句。注意:结束条件和循环体注意:结束条件和循环体例例6.2 求求 s=1+2+3+.+n 的值的值(用用while循环循环)。main()int i=1,s=0,n;scanf(“%d”,&n);while(i=n)s=s+i;i+;printf(“s=%d”,s);while(i=n)s+=i+;?6.4 do while语句语句do while语句形式为语句形式为:do 循环体语句循环体语句 while(表达式表达式);执行:执行:先执行一次循环体,然后判别表达先执行一次循环体,然后判别表达式,当表达式的值为非零式,当表达式的值为非零(“真真”)时,返时,返回重新执行循环体语句,如此反复,直到回重新执行循环体语句,如此反复,直到表达式的值等于表达式的值等于0为止,此时循环结束。为止,此时循环结束。例例6.3 用用do while计算计算1+2+3+nmain()int i=1,s=0,n;scanf(“%d”,&n);do s=s+i;i+;while(i=n);printf(“s=%d”,s);/*do-while/while 区区别别*/6.5 for 语语 句句C语句的语句的for语句最灵活,已知循环次数或语句最灵活,已知循环次数或未知循环次数均可有,可完全代替未知循环次数均可有,可完全代替while等。等。for语句的一般形式为:语句的一般形式为:for(表达式表达式1;表达式;表达式2;表达式;表达式3)循环体循环体(1)先求解表达式先求解表达式1。(2)求解表达式求解表达式2,若其,若其值为真值为真(值为非值为非0),则,则执行执行for语句的循环体,语句的循环体,然后执行下面第然后执行下面第(3)步。步。若为假若为假(值为值为0),则结,则结束循环,转到第束循环,转到第(5)步。步。(3)求解表达式求解表达式3。转。转(2)(5)循环结束,执行循环结束,执行for语句下面的一个语句。语句下面的一个语句。常用形式:常用形式:for(循环变量赋初值;循环条件;循环变循环变量赋初值;循环条件;循环变量增值量增值)循环体循环体main()int i,s=0,n;scanf(“%d”,&n);for(i=1;i=n;i+)s=s+i;printf(“s=%d”,s);相当于:相当于:i=1;while(iwhile(1)(6)表达式表达式1设置循环变量初值的赋值表达式设置循环变量初值的赋值表达式 for(sum=0,i=1;i=100;i+)sum=sum+i;例例6.5 给小学生出给小学生出10道道100以内的加法练习题。以内的加法练习题。分析:分析:1、出题出题 2、回答、回答 3、判断、判断#include“stdlib.h”main()int i,x,y,z;for(i=1;i=3)(3个个一行一行)main()long i=1,j=1,k;int n;printf(“%8ld%8ld”,i,j);for(n=3;n=30;n+)k=i+j;printf(“%8ld”,k);if(n%3=0)printf(“n”);i=j;j=k;6.6 循环的嵌套循环的嵌套一个循环体内又包含另一个一个循环体内又包含另一个完整的循环完整的循环结构,结构,称为循环的嵌套。多层循环。称为循环的嵌套。多层循环。while、dowhile和和for循环可以互相嵌循环可以互相嵌套。套。(1)while()(2)do (3)for()while()do for()while()while()例例6.7 计算计算1!+2!+3!+n!main()int n,i,j;long s,jc=0;scanf(%d,&n);for(i=1;i=n;i+)s=1;for(j=1;j=i;j+)s=s*j;jc=jc+s;printf(n%ldn,jc);6.8.1break语句语句break语句用来从循环体内跳出当前循环语句用来从循环体内跳出当前循环。如:如:for(r=1;r100)break;/*与与if语句一起用语句一起用*/printf(%f,area);6.8break语句和continue语句循循 环环break;6.8.2 continue语句语句continue;其作用为结束本次循环,其作用为结束本次循环,即跳过循环体中下面尚即跳过循环体中下面尚未执行的语句。未执行的语句。while(表达式表达式1)if(表达式表达式2)continue;while(表达式表达式1)if(表达式表达式2)break;例例6.5 把把100200之间不能被之间不能被3整除的数输出。整除的数输出。main()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(%d,n);6.9 程序举例程序举例例例6.6 用用/41-1/3+1/5-1/7+公公式求式求的近似值,的近似值,直到最后一项的直到最后一项的绝对值小于绝对值小于10-6为止。为止。图图6.126.12程序如下:程序如下:#includemain()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.14例例6.8 判断判断m是否素数。是否素数。让让m被被2到到m-1 除,如果除,如果m能被能被2m-1 之中之中任何一个整数整除,则提前结束循环,此任何一个整数整除,则提前结束循环,此时时i必然小于或等于必然小于或等于k(即即m);如果如果m不能被不能被2k(即即m)之间的任一整数整除,则在完之间的任一整数整除,则在完成最后一次循环后,成最后一次循环后,i还要加还要加1,因此,因此i=k+1,然后才终止循环。在循环之后判别然后才终止循环。在循环之后判别i的值的值是否大于或等于是否大于或等于k+1,若是,则表明未曾若是,则表明未曾被被2k之间任一整数整除过,因此输出之间任一整数整除过,因此输出“是素数是素数”。#include main()int m,i,k;scanf(%d,&m);k=sqrt(m+1);for(i=2;i=k+1)printf(%d is a Prime mubern,m);else printf(%d is not a Prime numbern,m);例例6.9 求求100200间的全部素数。间的全部素数。#include main()int m,k,i,n=0;for(m=101;m=200;m=m+2)k=sqrt(m);for(i=2;i=k+1)printf(%d ,m);n=n+1;if(n%10=0)printf(n);printf(n);习题:6.1 6.2 6.3 6.4 6.5 6.6 6.8 6.10习题习题6.1 输入两个正整数输入两个正整数m和和n,求其最大公约数和最小求其最大公约数和最小公倍数。公倍数。6.2 输入一行字符,分别统计出其中英文字母、空格、输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。数字和其他字符的个数。6.3 求求Sn=a+aa+aaa+aaa n个个a之值,其中之值,其中a是是一个数字。例如:一个数字。例如:2+22+222+2222+22222(此时此时n=5),n由键盘输入。由键盘输入。6.4 求求 (即求即求1!+2!+3!+4!+20!)。6.5 打印出所有的打印出所有的“水仙花数水仙花数”,所谓,所谓“水仙花数水仙花数”是指一个是指一个3位数,其各位数字立方和等于该数本身。位数,其各位数字立方和等于该数本身。例如,例如,153是一水仙花数,因为是一水仙花数,因为153=13+53+33。6.16.6 一个数如果恰好等于它的因子之和,这个数就称一个数如果恰好等于它的因子之和,这个数就称为为“完数完数”。例如,。例如,6的因子为的因子为1、2、3,而,而6=1+2+3,因此因此6是是“完数完数”。编程序找出。编程序找出1000之内的之内的所有完数,并按下面格式输出其因子:所有完数,并按下面格式输出其因子:6itS factorS are 1,2,36.7 有一分数序列有一分数序列2/1,3/2,5/3,8/5,13/8,21/13,求出这个数列的前求出这个数列的前20项之和。项之和。6.8 猴子吃桃问题。猴子第一天摘下若干个桃子,当猴子吃桃问题。猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,就只剩一个桃子了。求第一天共天早上想再吃时,就只剩一个桃子了。求第一天共摘多少桃子。摘多少桃子。6.9 用迭代法求用迭代法求 。求平方根的迭代公式为求平方根的迭代公式为要求前后两次求出的要求前后两次求出的x的差的绝对值小于的差的绝对值小于10-5。6.10 打印出以下图案。打印出以下图案。*