C 语言 第06章课件_第1页
C 语言 第06章课件_第2页
C 语言 第06章课件_第3页
C 语言 第06章课件_第4页
C 语言 第06章课件_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第六章循环控制6.3用while语句实现循环6.4用do-while语句实现循环6.5用for语句实现循环6.6循环的嵌套6.8break语句和continue语句6.9案例:围着操场跑5圈12345重复多次同样的事情,可用循环解决没跑完五圈吗?跑是否6.1概述初始情况我们可以用表达式语句完成;条件表示一般仍然用关系表达式或逻辑表达式循环部分结构C语言提供了3条循环语句来实现(1)用while语句。(2)用do-while语句。(3)用for语句。初始化6.3用while语句实现循环一、while循环的一般形式如下:

初始化部分;while(表达式)

{语句}表达式语句非00如果值为真如果值为假

二、while语句的执行过程是:1.先执行初始化部分2.计算while后面圆括号内表达式的值;

3.如果其值为“真”(非0),则执行语句部分(即循环体);重复2。4.如果值为“假”(0)时,循环结束,程序控制转至循环结构的下一语句。

案例T6_1.c:求1~5的累计和分析:设一个累加器,将1~5一一的累加到里面

加到sum中0sumi112336410515初始情况:i=sum=重复5次做的事是:重复做的条件:10sum=sum+i同时i要增1i为1~5都要做三、程序练习:1.求1+2+……+100之和;50502.求2+4+……+100之和;25503.求1+3+……+99之和;25004.求1~100的偶数和及奇数和;5.输入N个学生成绩,求其平均值;求和算法:sum=0;x=初始值;while(条件){sum=sum+x;

下一个x的变化;}源代码:#include<stdio.h>voidmain(){charch;intcount=0;printf("Typeinasentence,thenpress<Enter>\n");ch=getchar();/*初始化第一个字符*/while(ch!=′\n′)/*循环条件*/{if(ch==‘A’)count++;/*循环体*/ch=getchar();}printf("\nAcountis%d.\n",count);}[程序演示]6.4用do-while语句实现循环一、do-while循环的一般形式如下:初始化部分;

do{语句}

while(表达式);初始化表达式语句非00如果值为真如果值为假

二、do—while语句的执行过程是:1.先执行初始化部分2.执行语句部分(即循环体);

3.计算while后面圆括号内表达式的值;如果其值为“真”(非0),重复2。4.如果值为“假”(0)时,循环结束,程序控制转至循环结构的下一语句。

改写案例T6_1.c:求1~5的累计和。初始化表达式语句非00sum=0,i=1sum+=ii=i+1i<=5#include<stdio.h>voidmain(){intsum,i;sum=0,i=1;do{sum=sum+i;i=i+1;}while(i<=5);printf(“sum=%d”,sum);}while和do_while之间的区分1.对同一个问题用while语句处理,也可以用do_while语句处理,并且初始化部分、循环体部分、条件部分都是一样的。2.样式上不同点,while语句中while(条件)后无“;”,而do_while语句中while(条件)后一定要加“;”。3.执行上不同点,while语句是先判定条件,再执行循环体,如果一开始条件为假,则有可能一次也不执行循环体,故又称0次循环。do_while语句是先执行循环体,再判定条件,如果一开始条件为假,则也要先执行一次循环体,故又称1次循环。例:若x的初始值从8开始,比较下面两个程序的运行结果。

#include<stdio.h>voidmain(){intsum,i;sum=0,i=8do{sum=sum+i;i=i+1;}while(i<=5);printf(“sum=%d”,sum);}#include<stdio.h>voidmain(){intsum,i;sum=0,i=8;while(i<=5){sum=sum+i;i=i+1;}printf(“sum=%d”,sum);}结果为sum=8结果为sum=0#include<stdio.h>voidmain(){intx,sum;sum=0;do{scanf("%d",&x);sum=sum+x;}while(x!=-1)sum=sum+1;/*为什么要加这条语句*/printf("sumis:%d\n",sum);[程序演示]求解表达式36.5用for语句实现循环一、for循环语句的一般形式如下:

for(表达式1;表达式2;表达式3){循环体语句;}

求解表达式1表达式2语句非00如果值为真如果值为假for语句最简单的应用形式,也是最容易理解的形式:

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

例如,求1~5之和;(控制循环次数的是从几加到几结束)可写为

for(i=1;i<=5;i++)sum=sum+i;循环变量为控制循环次数的变量(循环条件中的变量)案例T6_4.c:计算1至50中是7的倍数的数值之和。#include<stdio.h>voidmain(){inti,sum=0;for(i=1;i<=50;i++)if(i%7==0)sum+=i;printf("sum=%d\n",sum);}[程序演示]

所以for语句中的表达式1,可以看成初始化部分,表达式2可以看成条件部分,表达式3可以看成循环的一部分。

sum=0;i=0;while(i<=5){sum=sum+i;i=i+1;}for(sum=0,i=0;i<=5;sum+=i,i++);sum=0;i=0;for(;i<=5;){sum+=i;i++;}6.6循环的嵌套

当一个循环体内又包含另一个完整的循环结构时,称为多重循环或循环嵌套,其循环结构可用上述三种循环语句的任意一种。例如,下面是两种循环嵌套的示意图。(1)while(){

while(){}}……(2)for(;;){

do{}while();}………i=1i<=N画第i行;#defineN3#include<stdio.h>voidmain(){inti;i=1;while(i<=N){

画第i行*;

printf(“\n”);}}for(j=1;j<=i;j++){printf(“*”);}[程序演示]注:循环嵌套中每层循环变量名一般是不能一样的。换行j=1j<=i画一个*程序练习:1.输出以下图形当N=3时,输出*********2.输出九九乘法表1*1=11*2=22*2=41*3=32*3=63*3=9 ……1*9=92*9=183*9=27……9*9=81

当N=4时,输出****************画图算法:一般设置两个两层循环,外层循环控制画几行,内层循环控制每一行如何画for(i=1;i<=N;i++)/*i变量控制从第1行画到第N行*/{

画出每i行;/*用循环设置第i行如何画*/

换行;}#defineN9#include<stdio.h>voidmain(){inti,j;

for(i=1;i<=N;i++){

for(j=1;j<=i;j++)printf(“%d*%d=%d\t”,j,i,j*i);printf(“\n”);}}[程序演示]6.8break语句和continue语句一、break语句1.形式为:break;

2.作用:

结束本层循环(用在循环体中)3.一般使用形式

与if语句联合使用if(条件)break;例:#include<stdio.h>voidmain(){inti,sum=0;

for(i=1;i<=100;i++){

if(sum>12)break;printf(“sum=%d\n”,sum);}}结果为:sum=154.使用break语句应注意如下几个问题:(1)break语句只能用于switch结构或循环结构,如果在程序中有下列语句:

if(…)break;则此时的if语句一定位于循环体中或switch结构中,break语句跳出的也不是if语句,而是跳出包含此if语句的循环结构或switch结构。

(2)在循环语句嵌套使用的情况下,break语句只能跳出(或终止)它所在的循环,而不能同时跳出(或终止)多层循环,如:

for(…){for(…){…break;}

…/*注1*/}例:#include<stdio.h>voidmain(){inti,j,sum=0;

for(i=1;i<=5;i++){

for(j=1;j<=i;j++){sum=i*j;if(sum>=10)break;}printf(“j=%d\tsum=%d\n”,j,sum);}}结果为:j=1sum=1j=2sum=4j=3sum=9j=3sum=12j=2sum=10案例T6_6.c:求m是否是素数。素数(>=2的整数):只能被1和本身整除的整数判断方法:拿m去整除2~m-1中所有的数,如果有一个能被整除,则不是素数,如果都不能整除,则为素数。

m%2==0?m%3==0?……m%(m-1)==0?[程序演示]m%i==0?(i从2到m-1)break法#include<stdio.h>voidmain(){inti,m;printf(“pleaseinputanum:”);scanf(“%d”,&m);

for(i=2;i<=m-1;i++){if(m%i==0)break;}if(i>m-1)printf(“%disaprimenum.\n”);elseprintf(“%disnotaprimenum.\n”);}[程序演示]flag法#include<math.h>#include<stdio.h>voidmain(){inti,m,k,flag=1;/*flag为1则为素数,为0则为素数*/printf(“pleaseinputanum:”);scanf(“%d”,&m);k=sqrt(m);/*简化为1~*/

for(i=2;i<=k&&flag;i++){if(m%i==0)flag=0;/*可得m为非素数*/}if(flag)printf(“%disaprimenum.\n”);elseprintf(“%disnotaprimenum.\n”);}[程序演示]二、continue语句1.continue语句的一般形式如下:

continue;2.continue语句的作用是:

结束本次循环,即跳过循环体中下面尚未执行的语句,直接进行下一次是否执行循环的判定。

其执行过程是:终止当前这一轮循环,即跳过循环体中位于continue后面的语句而立即开始下一轮循环;对于while和do-while来讲,这意味着立即执行条件测试部分,而对于for语句来讲,则意味着立即求解表达式3。案例T6_7.c:把100到150之间的不能被3整除的数输出,要求一行输出10个数。main(){intn,i=0;for(n=100;n<=150;n++){if(n%3==0)/*能被3整除,不用输出,结束本次循环*/continue;printf("%4d",n);i++;if(i%10==0)printf("\n");}}[程序演示]运行结果:1001011031041061071091101121131151161181191211221241251271281301311331341361371391401421431451461481496.9程序举例案例T6_8.c:用公式求出π的近似值,直到最后一项的绝对值小于10-6为止。分析:这是一个求和问题,可以看成

sum=sum+xx从1到(+)x=sign*

符号sign一次正一次负;

n为1,3,5,7……

#include<stdio.h>#include<math.h>voidmain(){floatsum,pi,x,intn,sign=1;sum=0;n=1;x=sign*n;while(fabs(x)>=1e-6){sum=sum+x;n=n+2;sign=sign*-1;x=sign*n;}pi=sum*4;printf(“pi=%f”,pi);}[程序演示]#include<stdio.h>#include<math.h>voidmain(){floatsum,pi,x,intn,sign=1;sum=0;n=1;x=sign*n;while(fabs(x)>=1e-6){sum=sum+x;n=n+2;sign=sign*-1;x=sign*n;}pi=sum*4;printf(“pi=%f”,pi);}[程序演示]案例T6_9.c:求Fibonacci数列前20个数。这个数列有如下特点:第1、2两个数为1、1。从第三个数开始,该数是其前两个数之和。F1=1(n=1)F2=1(n=2)Fn=Fn-1+Fn-2(n>=3)

分析:已知F1和F2,从F3求到F20(重复17次)F3=F1+F2F4=F2+F3F5=F3+F4……形式一样,变量名不一样FFFF1F1=F2F2=F3=FF2F1F2#include<stdio.h>voidmain(){intF1,F2,F,i;F1=1;F2=1;printf(“%5d%5d”,F1,F2);for(i=3;i<=20;i++){F=F1+F2;printf(“%5d”,F);if(i==5)printf(“\n”);F1=F2;F2=F;}}[程序演示]案例T6_10.c:输入20个数,求其中的最大值方法:擂台法:擂台……比拼,设2号赢,1号滚蛋,擂台上此时站的是2号3号与擂台上的人继续比拼,设2号赢,3号滚蛋,擂台上此时站的可能还是2号以此类推从2号到最后一个人一一的与擂台上的人比拼,谁赢,谁站在擂台上,谁输谁滚蛋,最后在擂台上就是最强的。#include<stdio.h>voidmain(){intx,max,i;/*擂台用max表示*/scanf(“%d”,&x);/*输入第1个数*/max=x;/*第1个先站在擂台上*/for(i=2;i<=20;i++){scanf(“%d”,&x);/*输入下一个数*/if(x>max)max=x;/*x与max比拼,比

max大,x就是max*/

温馨提示

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

评论

0/150

提交评论