C语言循环结构_第1页
C语言循环结构_第2页
C语言循环结构_第3页
C语言循环结构_第4页
C语言循环结构_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

第六章整理课件

主要内容6.1概述6.2goto语句以及用goto语句构成循环6.3用while语句实现循环6.4用do-while语句实现循环6.5用for语句实现循环6.6循环的嵌套6.7几种循环的比较6.8break语句continue和语句6.9程序举例整理课件

6.1概述什么是循环?为什么要使用循环?问题1:问题2:求学生平均成绩

整理课件循环整理课件生活中的例子:击鼓传花:

大家坐成一个圈,鼓声响起的时候将花束顺序交到下一个人的手里,依次向下传递,当鼓声突然中断时停止传花,花束落在谁的手里便成为输家4×100米接力赛跑:

第1个人跑完100米后将接力棒传给第2个人,第2个人再跑100米,然后是第3个人,直到第4个人跑完最后一个100米共同点:都要完成相同的任务:量变的重复内容都有结束条件:发生质变的界限整理课件

6.2goto语句以及用goto语句构成循环

goto语句——无条件转向语句

goto语句标号;语句标号用标识符表示,例如:gotolabel_1;合法;goto123;不合法.整理课件【例6.1】用goto语句和if语句构成循环,计算sum=1+2+3+……+100

。main(){inti,sum=0;i=1;loop:if(i<=100){sum=sum+i;i++;

gotoloop;}printf("%d\n",sum);}整理课件

6.2goto语句以及用goto语句构成循环滥用goto语句将使程序流程无规律、可读性差.不建议使用goto语句。一般来说,可以有两种用途:(1)与if语句一起构成循环结构;(2)从循环体中跳转到循环体外。

整理课件

6.3用while语句实现循环while语句用来实现“当型”循环结构。一般形式:

while(表达式)语句

执行过程:计算表达式值,若该值为非0时,则执行while语句中的内嵌语句。然后重复上述步骤,直到表达式值为假(为0),则执行while语句的下一条语句。其特点是:先判断表达式,后执行语句。循环体语句整理课件

6.3用while语句实现循环注意:循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。在循环体中应有使循环趋向于结束的语句。整理课件1.计算sum=1+2+3+……+100整理课件第5章循环程序设计1.计算sum=1+2+3+……+100循环体循环控制条件循环控制变量循环的初始化#include<stdio.h>voidmain(){ inti=1,sum=0; while(i<=100) { sum=sum+i; i++; } printf(“Sum=%d\n”,sum);}整理课件第5章循环程序设计2.计算sum=2+4+6+……+100循环体循环控制条件循环控制变量循环的初始化#include<stdio.h>voidmain(){ inti=2,sum=0; while(i<=100) { sum=sum+i; i+=2; } printf(“Sum=%d\n”,sum);}整理课件2.计算sum=2+4+6+……+100循环体循环控制条件循环控制变量循环的初始化#include<stdio.h>voidmain(){ inti=2,sum=0; while(i<=100) { sum=sum+i; i+=2; } printf(“Sum=%d\n”,sum);}整理课件

6.4do-while语句

do-while语句的特点:先执行循环体,然后判断循环条件是否成立。一般形式:

do

循环体语句

while(表达式);执行过程:先执行一次指定的循环体语句,然后判别表达式,当表达式的值为非零(“真”)时,返回重新执行循环体语句,如此反复,直到表达式的值等于0为止,此时循环结束。整理课件

6.4用do-while语句实现循环while语句和用do-while语句的比较:二者是完全等价的。do-while语句有可能一次也不执行循环体。整理课件循环的变化:sum=1+2+3+……+100#include<stdio.h>voidmain(){ inti=1,sum=0;

while(i<=100) {sum=sum+i;i++;} printf(“Sum=%d\n”,sum);}#include<stdio.h>voidmain(){ inti=1,sum=0;

do { sum=sum+i; i++; }

while(i<=100); printf(“Sum=%d\n”,sum);}整理课件顺序打印1-10的阶乘,即1!,2!,…,10!本题的关键是求阶乘数学上,n!=1·2·3·…·(n-1)·n整理课件外循环内循环对比程序:(更优)#include<stdio.h>voidmain(){ inti=1; floatf=1;

while(i<=10) {f=f*i; printf("%2d!=%.0f\n",i,f); i++; }}思考一下:8-10的阶乘#include<stdio.h>voidmain(){ inti=1,j;

floatf; while(i<=10) { j=1; f=1; while(j<=i) { f=f*j; j++; } printf(“%2d!=%.0f\n”,i,f); i++; }}整理课件

6.5用for语句实现循环一般形式:

for(表达式1;表达式2;表达式3)语句表达式1:初始化表达式,只执行一次表达式2:循环控制表达式,控制循环的结束表达式3:增量表达式,使表达式2趋向于假整理课件

6.5用for语句实现循环for语句的执行过程:

(1)先求解表达式1。

(2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第(3)步。若为假(值为0),则结束循环转到第(5)步。

(3)求解表达式3。

(4)转回上面第(2)步骤继续执行。

(5)循环结束,执行for语句下面的一个语句

整理课件任意输入10个数,求平均值#include<stdio.h>voidmain(){ inti; floatx,sum=0; printf("Enter10numbersonebyone:\n");

for(i=1;i<=10;i++) { scanf("%f",&x); sum+=x; } printf("Averageis%f\n",sum/10);}整理课件例:顺序打印1-10的阶乘,即1!,2!,3!,…,10!#include<stdio.h>voidmain(){ inti,j; floatf;

for(i=1;i<=10;i++) { f=1;

for(j=1;j<=i;j++) f=f*j; printf("%2d!=%.0f\n",i,f); }}#include<stdio.h>voidmain(){ inti=1,j; floatf; while(i<=10) { j=1; f=1; while(j<=i) { f=f*j; j++; } printf(“%2d!=%.0f\n”,i,f); i++; }}整理课件例:打印几何图形对于这类问题,每行中星号的个数、总行数等都应该用循环结构进行控制,而不是直接输出若干行字符串#include<stdio.h>voidmain(){ inti,j;

for(i=1;i<=4;i++) { for(j=0;j<i;j++)putchar(''); for(j=1;j<=4;j++)putchar('*'); putchar('\n'); }}****************整理课件for语句的变化形式可以省略for语句的“表达式1”或“表达式3”,也可以都省略(“退化为”while语句)例:将用键盘输入的若干字符顺序输出到屏幕上#include<stdio.h>voidmain(){ charch; for(;(ch=getchar())!=‘\n’;) putchar(ch);}整理课件

6.6循环的嵌套一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。三种循环(while循环、do-while循环和for循环)可以互相嵌套。整理课件

6.6循环的嵌套下面几种都是合法的形式:(1)

while()(2)do(3)for(;;){…{…{while()dofor(;;){…}{…}{…}}while();}}while();

整理课件

6.6循环的嵌套(4)

while()(5)for(;;)(6)do{…{…{…do{…}while()for(;;){}while(){}…{…}…}}}while()

整理课件错误的嵌套形式循环必须是完整的,不允许内外循环交叉嵌套

f=1; while(i<10) { i=1; do { f=f*i; i++; } }while(i<10);混乱的控制条件内外循环的循环控制条件通常是分开的,相对独立的

i=1;s=0; while(i<3) { s=s+f; i=1;f=1; while(i<5) { i+=2; f=f*i; } i++;}整理课件

6.7几种循环的比较(1)四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用goto型循环。(2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i++,或i=i+1等)。整理课件

6.7几种循环的比较

for循环可以在表达式3中包含使循环趋于结束的操作,甚至可以将循环体中的操作全部放到表达式3中。因此for语句的功能更强,凡用while循环能完成的,用for循环都能实现。

(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。整理课件

6.7几种循环的比较(4)while循环、do-while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环(break语句和continue语句见下节)。而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。

整理课件

6.8break语句和continue语句

6.8.1break语句

break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句一般形式:

break;注意:break语句不能用于循环语句和switch语句之外的任何其他语句中。

整理课件

6.8break语句和continue语句

例:计算r=1到r=10时的圆面积,直到面积area大于100为止。

floatpi=3.14159;for(){area=pi*r*r;printf(″r=%f,area=%f\n″,r,area);}当area>100时,执行break语句,提前结束循环,即不再继续执行其余的几次循环。r=1;r<=10;r++r=1;r<=10;r++if(area>100)break;整理课件

6.8break语句和continue语句

6.8.2continue语句

作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定.一般形式:

continue;整理课件

6.8break语句和continue语句

continue语句和break语句的区别

continue语句只结束本次循环,而不是终止整个循环的执行。

while(表达式1)for

{…

if(表达式2)continue;

…}整理课件

6.8break语句和continue语句

continue和break的区别

break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。

while(表达式1)for

{…if(表达式2)break;…}整理课件

6.9程序举例

例6.6用π/4≈1-1/3+1/5-1/7+…公式求π的近似值,直到某一项的绝对值小于为止。N-S图表示算法

整理课件fabs(t()<=1e-6floats=1.0,pi=0;ints=1,n=1;while(){pi+=t;n+=2;s=-s;t=s/n;}pi*=4;整理课件

6.9程序举例

例6.7

求Fibonacci数列前40个数。这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:F(1)=1(n=1)F(2)=1(n=2)F(n)=F(n-1)+F(n-2)

(n≥3)

算法如图所示:整理课件

6.9程序举例

例6.8

判断m是否素数。算法思想:让m被2到除,如果m能被2~之中任何一个整数整除,则提前结束循环,此时i必然小于或等于k(即);如果m不能被2~k(即)之间的任一整数整除,则在完成最后一次循环后,i还要加1,因此i=k+1,然后才终止循环。在循环之后判别i的值是否大于或等于k+1,若是,则表明未曾被2~k之间任一整数整除过,因此输出“是素数”。整理课件整理课件floatk;intm,i=2;scanf(“%d”,&m);while(i<=k){i++;}if()printf(“是素数“);elseprintf(“不是素数”);}k=sqrt(m);if(m%i==0)break;i>k+1整理课件

6.9程序举例

例6.10

译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。

思路:可以按以下规律将电文变成密码:将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成

温馨提示

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

评论

0/150

提交评论