循环控制熟练掌握forwhiledowhile三种循环结构掌握循环的嵌套.ppt_第1页
循环控制熟练掌握forwhiledowhile三种循环结构掌握循环的嵌套.ppt_第2页
循环控制熟练掌握forwhiledowhile三种循环结构掌握循环的嵌套.ppt_第3页
循环控制熟练掌握forwhiledowhile三种循环结构掌握循环的嵌套.ppt_第4页
循环控制熟练掌握forwhiledowhile三种循环结构掌握循环的嵌套.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

第六章 循环控制,熟练掌握for、while、do_while三种循环结构 掌握循环的嵌套,学习要点,学习建议,难点,循环的嵌套 break和continue语句的正确使用,上机编程,设计简单的循环结构,注意设计错误并调试,第六章 循环控制,6.1 概述 6.2 goto语句以及用goto语句构成循环(略) 6.3 while语句 6.4 do-while语句 6.5 for语句(重点!) 6.6 循环的嵌套(重点!) 6.7 几种循环的比较(略) 6.8 break语句和continue语句 6.9 程序举例,6.1循环概述,一般需要使用循环的情况是: 有重复的操作(循环体); 循环次数可以控制 例 有60个学生,将成绩在80分以上者的学号和成绩打印出来.,什么是循环? 为什么要使用循环?,n表示学生学号,ni代表第i个学生的学号;g表示学生的成绩,gi代表第i个学生的成绩,S1: i=1 S2: 如果gi =80,则打印ni 、 gi S3: i=i+1 S4: 如果i=60,返回S2,否则,算法结束,循环体,循环条件,循环控制变量i,6.1循环概述,在C语言中可以用下列语句实现循环. goto和if结合 while for do-while,return,6.2 goto语句以及用goto语句构成循环,注意:结构化程序设计方法,主张限制使用goto语句。,无条件转向语句 格式:goto 语句标号; 例: goto loop1;,用途: (1)与if语句一起构成循环结构; (2)从多层循环的内层循环跳到外层循环,6.2 goto语句以及用goto语句构成循环,例6.1求,return,loop: if (i=100) sum =sum+ i; i+; goto loop;,6.3 while 语句,实现当型循环,一般形式如下: while (表达式) 语句组,真,假,例6.2 用while语句求,循环体内如果有一个以上的语句,则必须用 构成复合语句;,return,#include void main( ) int i=1,sum=0; /*初始化循环控制变量i和累计器sum*/ while( i=100 ) sum =sum+ i; i+; /*循环控制变量i增1*/ printf(“sum=%dn”,sum); ,要有修改循环变量、使循环趋于结束的语句.,6.4 用do-while语句实现循环,一般形式如下: do 循环体语句 while(表达式);,例6.3 用do-while语句求 #include void main() int i=1, sum=0; do sum =sum+ i; /*累加*/ i+; while(i=100); /*循环继续条件:i=100*/ printf(“sum=%dn”,sum); ,while语句和用do-while语句的比较: 在一般情况下,用while语句和用do-while语 句处理同一问题时,若二者的循环体部分是一 样的,它们的结果也一样。但是如果while后面 的表达式一开始就为假(0值)时,两种循环的结 果是否相同呢?,#include void main() int sum=0,i; scanf(“%d”, ,#include void main() int sum=0,i; scanf(“%d”, ,return,while语句和用do-while语句的比较:,i=1,i=11,6.5 用for语句实现循环,for语句的一般形式,for(表达式1;表达式2;表达式3) 语句,for语句最简单的应用形式,也就是最易理解的形式.,执行过程如图所示。 (1)求解“变量赋初值”表达式。 (2)求解“循环继续条件”表达式。如果其值非0,执行(3);否则,转至(4)。 (3)执行循环体语句组,并求解“循环变量增值”表达式,然后转向(2)。 (4)执行for语句的下一条语句。,6.5 for语句,例 求1100的累计和。 #include void main() int i,sum=0; printf(“sum=%dn“,sum); ,6.5 for语句,例 求1100的累计和。 #include void main() int i, sum=0; i=1; do sum =sum+ i; i+; while(i=100); printf(“sum=%dn”,sum); ,for(i=1; i=100; i+) sum=sum+ i;,例 求1100的累计和。 #include void main() int i,sum=0; for(i=1; i=100; i+) sum=sum+ i; /*实现累加*/ printf(“sum=%dn“,sum); ,6.5 for语句,for循环执行流程: i=1,i+ - i=2, i=100 sum=1+2=3,i+ - i=101, i100 退出循环, i=100 sum=0+1=1,#include void main() int i,sum=0; /*将累加器sum初始化为0*/ for( ; i=100; i+) sum =sum+ i; /*实现累加*/ printf(“sum=%dn“,sum);,for语句应用说明:,for(i=1; i=100; i+) sum =sum+ i;,循环变量赋初值,循环终止条件,循环变量增量,#include void main() int i,sum=0; i=1; for( ; i=100; ) sum =sum+ i; /*实现累加*/ printf(“sum=%dn“,sum); ,for(i=1; i=100; i+) sum =sum+ i;,#include void main() int i,sum=0; for(i=1; ; i+) sum =sum+ i; /*实现累加*/ printf(“sum=%dn“,sum); ,for(i=1; i=100; i+) sum =sum+ i;,表达式2可以省略, 但必须在循环体中补偿循环控制功能,否则构成死循环,if(i100) break; /*break语句的功能是退出它所在的循环*/,表达式1和表达式3可以是和初值、 增量无关的逗号表达式,sum=0; for(i=1; i=100; i+) sum =sum+ i;,for(i=1,sum=0; i=100; sum=sum+i, i+) ;,表达式1和表达式3可以是和初值、增量无关的逗号表达式,sum=0; for(i=1; i=100; i+) sum =sum+ i;,for(i=1,sum=0; i=100; sum=sum+i, i+) ;,for(i=1,sum=0; i=100; sum=sum+i+) ;,for(i=1,sum=0; i=100; i+, sum=sum+i) ;,以下程序的输出结果(!),main() int n; for(n=1;n=5;n+=2) printf(“n=%dn”,n);,main() int n; for(n=1;n=5;n+=2); printf(“n=%dn”,n);,运行结果 n=1 n=3 n=5,运行结果 n=7,for 语句和while语句是可以互换的. 表达式1; while(表达式2) 语句组; 表达式3; for(表达式1;表达式2;表达式3) 语句组; ,6.5 for语句,return,显然,用for语句简单、方便。,6.6 循环的嵌套(多重循环),一个循环体内可以包含另一个完整的循环结构,称为循环的嵌套。,(1) while( ) (2) for(;) (3) do do while( ) for(;) while( ) while( ),循环的嵌套(多重循环),输出第9行(用for如何实现?): for (i=1;i=9;i+) printf(“9%d=%d ”, i,9*i),输出第n行(用for如何实现?): for (i=1;i=n;i+) printf(“%d%d=%d ”,n,i,n*i),例:编程,输出下图的九九乘法表。,循环的嵌套(多重循环),输出乘法表(如何实现?): for (n=1;n=9;n+) for (i=1;i=n;i+) printf(“%d%d=%d ”,n,i,n*i); printf(“n”); ,输出第n行: for (i=1;i=n;i+) printf(“%d%d=%d ”,n,i,n*i);,问题1:外循环、内循环的循环次数是多少?,循环的嵌套,例:打印九九表 #include “stdio.h“ void main() int i,n; for (n=1;n=9;n+) for (i=1;i=n;i+) printf(“%d%d=%d “,n,i,i*n); printf(“n“); ,* * * * * * * *,循环的嵌套,分析: 行的控制 i:18 *的个数与当前行的关系 j=2*i-1 *前面的空格k与行的关系: 开始时,第一行有7个空格 每多一行,少一个空格k=8-i while (i=8) for (k=1;k=8-i;k+) 输出空格; for (j=1;j=(2*i-1);j+) 输出*; i+; ,#include main() int i,j,k; i=1; while (i=8) for (k=1;k=8-i;k+) printf(“ ”); for (j=1;j=(2*i-1);j+) printf(“*”); printf(“n”); i+; ,循环的嵌套,return,* * * * * * * *,6.7几种循环的比较,(2)for语句的功能更强,凡用while循环能完成的,用for循环都能实现。,(1)四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用goto型循环。,return,为了使循环控制更加灵活,语言提供了break语句和continue语句。 1一般格式: break; continue;,6.8 break 和continue,2功能 (1)break:强行结束循环,转向执行循环语句的下一条语句。,(2)continue:结束本次循环。 即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判断。,break语句用来从循环体里退出,中止循环 continue用来跳过剩下的语句,回到循环开始,break语句和continue语句,3说明 (1)break能用于循环语句和switch语句中,continue只能用于循环语句中。,6.8 break 和continue,(2)循环嵌套时,break和continue只影响包含它们的最内层循环,与外层循环无关。,例:计算r=1,2,10的圆面积,只到面积大于100为止;,#include void main( ) int r; float area; for(r=1;r100.0) printf(“Area is %fn”,area); ,break;,把100200之间的不能被3整除的打印出来.,6.8 break 和continue,void main() int n; for(n=100;n=200;n+) ,if(n%3= =0) printf(“不能被3整除的数是:%dn”,n);,return,continue;,6.9 程序举例,例6.6用/41-1/3+1/5-1/7+的公式求的近似值,直到最后一项的绝对值小于106为止,#include #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); ,下一个例程,P129 6.1 输入两个正整数m和n,求其最大公约数和最小公倍数。,例:m=4,n=6, 其最大公约数为i=2 最小公倍数46/2=12。 试探法,下一个例程,#include void main() int m,n,i; printf(“please input two integers n,mn“); scanf(“%d,%d“, ,if(nm) i=m;m=n;n=i;,for(i=m;i=1;i-) if(m%i=0),printf(“最大公约数是: %d.n“,i); printf(“最小公倍数是: %d.n“, m*n/i);,下一张,#include void main() int m,n,k,i,leap=1; printf(“please input two integers n,mn“); scanf(“%d,%d“, ,if(nm) k=m;m=n;n=k;,for(i=m;(i=1),i+;,下一张,printf(“最大公约数是: %d.n“,i); printf(“最小公倍数是: %d.n“, m*n/i);,例6.10 译密码。输入若干字符,若为字母字符则将它们变成其后的第四个字母,AE, wa.非字母字符不变. 思路:,1.建立循环, 循环控制条件是什么?,例6.10 译密码。输入若干字符,若为字母字符则将它们变成其后的第四个字母,AE, wa.非字母字符不变. 思路:,1.建立循环, 循环结束以输入回车符为准 while(c=getchar( )!=n) 循环体。 ,对比: while(c=getchar( )!=n),while(c=getchar( )!=n),例6.10 译密码。输入若干字符,若为字母字符则将它们变成其后的第四个字母,AE, wa.非字母字符不变. 思路:,2. 判断输入是否是字母,a bz 98 122 A B.Z 65 66. 90,if (c=a & c=A & c=Z),例6.10 译密码。输入若干字符,若为字母字符则将它们变成其后的第四个字母,AE, wa.非字母字符不变. 思路:,4. 若变换后超出z时,要轮回. (如何判断是否要轮回?如何轮回?),a b z 98 122 123 A B. Z 65 66. 90 91,3.变成其后的第四个字母?,c=c+4;,if (cZ 例:W:87,Z:90, WA,则:W426,例6.10 译密码。输入若干字符,若为字母字符则将它们变成其后的第四个字母,AE, WA.非字母字符不变. 思路:,3.变成其后的第四个字母 c=c+4;,4. 若变换后超出z时,要轮回. if (cZ & cz) c=c-26 例:W:87,Z:90, WA,则:W426,2. 判断输入是否是字母 if (c=a & c=A & c=Z),1.建立循环, 循环结束以输入回车符为准 while(c=getchar( )!=n),#include void main( ) char c; while(c=getchar( )!=n) if (c=a ,abdEgW efhIkA,例6.8 判断m是否素数。 素数:只能被1和其自已整除的数 算法思想:让m被2到 除,如果m能被2k之中任何一个整数整除,则说明m不是素数,提前结束循环,此时i必然小于或等于k;如果m不能被2k之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2k之间任一整数整除过,因此输出“是素数”。,例6.8 判断m是否素数。 算法思想:让m被2到 除,如果m能被2k之中任何一个整数整除,则说明m不是素数,提前结束循环,此时i必然小于或等于k;如果m不能被2k之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2k之间任一整数整除过,因此输出“是素数”。 如图所示:,#include #include void main() int m,i,k; scanf(“%d“, ,if(ik) printf(“%d 是素数n“,m); else printf(“%d 不是素数n“,m);,k=sqrt(m)

温馨提示

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

评论

0/150

提交评论