课件谭第六章循环控制_第1页
课件谭第六章循环控制_第2页
课件谭第六章循环控制_第3页
课件谭第六章循环控制_第4页
课件谭第六章循环控制_第5页
免费预览已结束,剩余33页可下载查看

下载本文档

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

文档简介

第六章循环控制

goto语句

while语句

do-while语句

for语句

break语句

continue语句程序举例本章要求及作业§6.1概述

循环:反复执行称为“循环体”的程序段。 循环控制常用于数学迭代、对象遍历等问题的求解,几乎所有实用程序都包含循环。

C语言中用如下语句实现循环:1、用goto语句和if语句构成循环。2、用while语句。3、用do-while语句。4、用for语句。§6.2goto语句一般形式:

goto

语句标号

功能:无条件转移语句说明:不能用整数作标号只能出现在goto所在函数内,且唯一只能加在可执行语句前面结构化程序设计方法主张限制使用goto语句。goto语句有两种用途,一是与if语句一起构成循环结构,另一是从循环体中跳转到循环体外。/*ch6_1.c*/#include<stdio.h>main(){inti,sum=0;i=1;loop:if(i<=100)

{sum+=i; i++;

gotoloop;

}printf("%d",sum);}sum=0+1sum==1+2=3sum=3+3=6sum=6+4……sum=4950+100=5050循环初值循环终值循环变量增值循环条件循环体[例6.1]

用if语句和goto语句构成循环,求。sum=sum+ii=i+1i<=100假真i=1,sum=0/*标号表示程序指令的地址/*无条件转向标号loop处的指令*/一般形式:while(表达式)

循环体语句;执行流程:§6.3while语句expr循环体假(0)真(非0)while当P为真

A作用:实现“当型”循环。当“表达式”非0(真)时,执行while语句中的内嵌“语句”。“语句”是被循环执行的程序,称为“循环体”特点:先判“表达式(条件)”,后执行语句。循环体有可能一次也不执行循环体可为任意类型语句,如果包含一个以上的语句,应该以复合语句形式出现.下列情况,退出while循环条件表达式不成立(为零)循环体内遇break,return,goto无限循环:while(1)

循环体;[例6.2]sum=sum+ii=i+1i<=100假真i=1,sum=0i<=100真假sum=sum+ii=i+1i=1,sum=0/*ch6_2.c*/#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d",sum);}循环初值循环终值循环变量增值循环条件循环体例显示1~10的平方/*ch6_2_1.c*/#include<stdio.h>main(){inti=1;while(i<=10){printf("%d*%d=%d\n",i,i,i*i);i++;}}运行结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100一般形式:do

循环体语句;

while(表达式);执行流程:§6.4do-while语句

do循环体expr假(0)真(非0)while直到P为假语句特点:“直到型”循环结构。先执行一次“语句”,判“表达式”,当“表达式”非0,再执行“语句”,直到“表达式”为0,循环结说明:1、至少执行一次循环体

2、do~while可转化成while结构expr循环体假(0)真(非0)循环体While循环[例6.3]

用do-while语句求。main(){inti,sum=0;i=1;

do

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

while(i<=100);printf("%d",sum);}注意:1、上面的流程图中循环条件是“当i≤100时循环”,

N-S图中的条件是“循环直到i>100”,这两者是等同的。2、同一个问题,既可以用while循环处理,也可以用

do-while循环处理。

i=1,sum=0直到i>100sum=sum+ii=i+1sum=sum+ii=i+1i<=100假真i=1,sum=0例while和do~while比较/*ch6_2.c*/#include<stdio.h>main(){inti,sum=0;scanf("%d",&i);do{sum+=i; i++;}while(i<=10);printf("%d",sum);}*ch6_3.c*/#include<stdio.h>main(){inti,sum=0;scanf("%d",&i);while(i<=10){sum+=i; i++;}printf("%d",sum);}§6.5for语句for语句常用于循环次数已知的循环控制;

也可以用于循环次数不确定而只给出循环结束条件的情况,它完全可以代替while语句。一般形式:

for(表达式1;表达式2;表达式3)语句执行过程:(1)求表达式1;(2)求表达式2,若为“真”,执行“语句”;若为假,转第(5)步。(3)求表达式3。(4)转第(2)步。(5)执行for语句下面的语句。循环初始条件判别循环条件修改循环条件main(){inti,sum=0;for(i=1;i<=100;i++)sum=sum+i;printf("%d\n",sum);}上述for语句也可以用如下while语句表示:i=1;while(i<=100){sum=sum+i;i++;}[例6.4]

用for语句求注意:for语句中expr1,expr2,expr3类型任意,都可省略,但分号;不可省无限循环:for(;;)for语句可以转换成while结构expr1;while(expr2){

循环体语句;

expr3;}for(循环变量赋初值;循环条件;循环变量增值){

循环体语句;}expr1expr2expr3#include<stdio.h>main(){inti,sum=0;for(i=1;i<=100;i++)sum+=i;printf("%d",sum);}例用for循环求

main(){inti,j,k;

for(i=0,j=100;i<=j;i++,j--)

{k=i+j; printf("%d+%d=%d\n",i,j,k);}}#include<stdio.h>main(){inti,c;

for(i=0;(c=getchar())!='\n';i+=3) printf("%c",i+c);}几点说明:1、for语句中的“表达式1”可以省略,此时应在for语句之前给循环变量赋初值。2、for语句中的“表达式2”如果省略,就认为表达式2始终为真。例如:for(I=1;;I++)sum=sum+I;他相当于: I=I; while(1) {sum=sum+1; I++;}3、for语句中的“表达式3”也可以省略,但此时程序员应设法保证循环能正常结束。如:for(I=1;I<=100;) {sum=sum+I;I++;}4、for语句中的表达式1、3省略,只有表达式2,即只给出循环的条件。5、for语句中的三个表达式都省略,如:for(;;)相当于:while(1)无终止的执行循环体。6、表达式1可以是设置循环变量初值的赋值表达式,也可以是其他与循环无关的表达式。如:for(sum=0,I=1;I<=100;I++,j--)sum=sum+I;7、表达式一般是关系表达式(如I<=100)或逻辑表达式(如s<b&&x<y),也可以是数值表达式或字符表达式。#include<stdio.h>main(){charc;for(;(c=getchar())!=‘\n’;)printf(“%c”,c);}运行puter↙(输入)computer(输出)输出c例:表达式1、表达式3是空语句.§6.6循环的嵌套循环嵌套:一个循环(称为“外循环”)的循环体内包含另一个循环(称为“内循环”)。内循环中还可以包含循环,形成多层循环。(循环嵌套的层数理论上无限制)。循环的嵌套三种循环可互相嵌套,层数不限外层循环可包含两个以上内循环,但不能相互交叉嵌套循环的执行流程(1)while(){……while(){……}…...}(2)do{……do{……}while();…...}while();(3)while(){……do{……}while();…….}(4)for(;;){……do{……}while();……while(){……}…...}内循环外循环内循环嵌套循环的跳转禁止:从外层跳入内层跳入同层的另一循环向上跳转例循环嵌套,输出九九表1234567891234567892468101214161836912151821242791827364554637281……………..ij/*ch6_5_1.c*/#include<stdio.h>main(){inti,j;for(i=1;i<10;i++)printf("%4d",i);printf("\n---------------------------------------\n");for(i=1;i<10;i++)for(j=1;j<10;j++) printf((j==9)?"%4d\n":"%4d",i*j);}i<10printf假(0)真(非0)i=1j++j=1j<10真(非0)假(0)i++for(i=1;i<10;i++)

for(j=1;j<10;j++)

printf((j==9)?"%4d\n":"%4d",i*j);内循环外循环§6.8break语句和continue语句一、break语句作用:跳出所在的多分支switch语句,跳出所在的whiledo-whilefor循环语句(提前结束循环)。当r=6时,area>100,执行break语句,提前结束循环,不再计算r=7~10的area。运行结果:

13.14212.57328.27450.27578.54

6113.10

7153.948201.069254.4710314.16例、#definepi3.14main(){intr;floatarea;for(r=1;r<=10;r++){area=pi*r*r;if(area>100)break; printf("%d,%6.2f\n",r,area);}}expr……break;……假(0)真(非0)whiledo……break;…...expr假(0)真(非0)whileexpr2……break;…...假(0)真(非0)forexpr1expr3switchexpr语句组1break;语句组2break;语句组nbreak;语句组break;…...const1const2constndefaultcase二、continue语句作用:功能:结束本次循环,跳过尚未执行的语句,进行下一次是否执行循环体的判断仅用于循环语句中。当n能被3整除时,执行continue语句,结束执行本次循环的循环体,即跳过printf语句。[例6.5]

把100~200之间不能被3整除的数输出。main(){intn;for(n=100;n<=200;n++){if(n%3==0)continue;printf("%d",n);}}continue语句expr……continue;……假(0)真(非0)while真(非0)do……continue;…...expr假(0)whileexpr2……continue;…...假(0)真(非0)forexpr1expr3三、break语句和continue语句的区别while(表达式1)while(表达式1){┇{┇

if(表达式2)break;if(表达式2)continue;

┇┇}}break语句跳出循环

continue语句结束本次循环体的执行,进入下一次循环§5.9程序举例

[例6.6]

用以下公式计算л的值,直到最后一项的绝对值小于1E-6为止。算法分析:1、每项的分母,等于前一项分母加2,用n=n+2实现,n的初值为1。2、每项的符号交替变化,用s=-s实现,s的初值为+1(第一项为正)。3、根据1和2,每一项的值t=s/n,第一项的值为1。#include"math.h"main(){ints;floatn,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.6f\n",pi);}运行结果:pi=3.141594[例6.7]

求Fibonacci数列:

1,1,2,3,5,8,....的前40个数,即:

F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n≥3)

1.算法:即:把40个数分为每2个一组,每组中的两个数的计算方法为:

f1=f2+f1f2=f1+f2f1f211f1=1f2=123f1=1+1=2f2=2+1=358f1=2+3=5f2=5+3=82.N-S流程图:3.程序:main(){longintf1,f2;/*长整型数*/

inti;

温馨提示

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

评论

0/150

提交评论