第6章 循环控制_第1页
第6章 循环控制_第2页
第6章 循环控制_第3页
第6章 循环控制_第4页
第6章 循环控制_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

第6章循环控制,什么情况下需要用循环结构?,例子:1)计算一个学生5门课的平均成绩。2)计算一个班50名学生的5门课的平均成绩。,循环结构就是用来处理需要重复处理的问题。,什么是循环结构?,循环结构:用来处理需要重复处理的问题。构造一个有效循环的条件:(1)循环体:需要重复执行的操作。(2)循环结束的条件:即在什么情况下停止重复的操作。,C语言实现循环的语句:1)while语句实现循环2)dowhile语句实现循环3)for语句实现循环,6.3用while语句实现循环while语句用来实现“当型”循环结构。其一般形式如下:while(表达式)语句,特点:先判断表达式,后执行语句。,例6.2求1+2+3+100。#includevoidmain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);,注意:(1)循环体如果包含一个以上的语句,应该用花括弧括起来,以复合语句形式出现。如果不加花括弧,则while语句的范围只到while后面第一个分号处。(2)在循环体中应有使循环趋向于结束的语句。,特点:先执行语句,后判断表达式。,6.4用dowhile语句实现循环一般形式为:do循环体语句while(表达式);,例6.3用dowhile语句求1+2+3+100。,#includevoidmain()inti,sum=0;i=1;dosum=sum+i;i+;while(i=100);printf(%d,sum);,运行结果:5050,while循环与dowhile循环的比较总结:,1)while循环先判断表达式,后执行循环体语句。2)dowhile循环先执行循环体语句,后判断表达式。3)当循环条件和循环体相同时,while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。,while和do-while循环的比较。voidmain()voidmain()intsum=0,i;intsum=0,i;scanf(“%d”,,说明:当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同。否则,二者结果不相同。,6.3用for语句实现循环for语句的一般形式为:for(表达式1;表达式2;表达式3)语句,for(表达式1;表达式2;表达式3)语句,例如:for(i=1;i=100;i+)sum=sum+i;,i=1;while(i=100)sum=sum+i;i+;,用for语句简单。方便。,说明:for语句的一般形式中的“表达式1”可以省略。注意省略表达式1时,其后的分号不能省略。如:i=1;for(;i=100;i+)sum=sum+i;,说明:(2)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始终为真。例如:for(i=1;i+)sum=sum+i;它相当于:i=1;while(1)sum=sum+1;i+;,说明:(3)表达式3也可以省略。例如:for(i=1;i=100;)sum=sum+i;i+;,说明:(4)可以省略表达式1和表达式3,只有表达式2,即只给循环条件。例如:for(;i=100;)while(i=100)sum=sum+i;相当于sum=sum+i;i+;i+;,说明:(5)3个表达式都可省略。例如:for(;)语句相当于while(1)语句即不设初值,不判断条件(认为表达式2为真值),循环变量不增值。无终止地执行循环体。,说明:(6)表达式1和表达式3可以是一个简单的表达式,也可以是逗号表达式,即包含一个以上的简单表达式,中间用逗号间隔。如:for(i=0,j=100;i=j;i+,j-)k=i+j;,例如:for(i=1;i=100;i+,i+)sum=sum+i;相当于for(i=1;i=100;i=i+2)sum=sum+i;,说明:(7)表达式2一般是关系表达式(如i=100)或逻辑表达式(如ab(c=getchar()!=n;i+=c);,说明:for(;(c=getchar()!=n;)printf(%c,c);,for循环程序举例,相传古代印度国王舍罕要褒赏聪明能干的宰相达依尔,国王问他要什么?达依尔回答说:“国王只要在国际象棋的棋盘第1个格子放1粒麦子,第2个格子放2粒麦子,第3个格子中放4粒麦子,以后按此比例每一格加一倍,一直放到第64格(国际象棋的棋盘是8*8=64格),我感恩不尽,其他什么都不要了。”国王想,这有多少?还不容易?于是让人扛来一袋小麦,但不到一会儿全用没了,再来一袋很快又用完嘞。结果全印度的粮食全部用完还不够。国王纳闷,怎样也算不清这笔帐。现在我们用计算机来算一下。,例:国王的小麦,麦子的总粒数是:,1+2+22+23+263,#includevoidmain()doublep=1,t=1,v;/*p当前一个格子中的麦子粒数,t麦子总粒数,v麦子总体积*/inti;for(i=1;i64;i+)p=p*2;t=t+p;v=t/1.42e8;/*1立方米包含小麦1.42*108粒*/printf(”total=%en”,t);printf(“volume=%en”,v);,运行结果total=1.844674e+019volnme=1.299066e+011,第一次循环第二次循环第三次循环i=1i=2i=3p=2p=22p=23t=1+2t=1+2+22t=1+2+22+23最后一次循环i=63p=263t=1+2+22+23+263,问题:,(1)程序执行了63次循环,那么怎样实现累加64个格子的小麦呢?(2)如果把第6行改为:for(i=1;i=64;i+),结果会怎样?(3)如果把第6行改为:for(i=0;i64;i+),结果会怎样?,#includevoidmain()doublep=1,t=1,v;/*p当前一个格子中的麦子粒数,t麦子总粒数,v麦子总体积*/inti;for(i=1;i64;i+)p=p*2;t=t+p;v=t/1.42e8;printf(”total=%en”,t);printf(“volume=%en”,v);,for(i=1;i=64;i+),for(i=0;i64;i+),第一次循环第二次循环第三次循环i=1i=2i=3p=2p=22p=23t=1+2t=1+2+22t=1+2+22+23最后一次循环i=64p=264t=1+2+22+23+264,第一次循环第二次循环第三次循环i=0i=1i=2p=2p=22p=23t=1+2t=1+2+22t=1+2+22+23最后一次循环(第64次循环)i=63p=264t=1+2+22+23+264,for的一般形式为:for(表达式1;表达式2;表达式3)语句;for(;)语句;初始化:总是一个赋值语句,它用来给循环控制变量赋初值;条件表达式:是一个关系表达式,它决定什么时候退出循环;增量:定义循环控制变量每循环一次后按什么方式变化。,总结:,课后练习6.6:输出所有的水仙花数,所谓水仙花数是指一个3位数,其各位数字立方和等于该数本身。例如,153是一水仙花数,因为153=13+53+33。,#includevoidmain()inti,j,k,n;printf(narcissusnumbers:n);for(n=100;n1000;n+)i=n/100;j=n/10-i*10;k=n%10;if(n=i*i*i+j*j*j+k*k*k)printf(%dn,n);printf(n);,一个循环体内又包含另一个完整的循环结构称为循环的嵌套。内嵌的循环中还可以嵌套循环,这就是多层循环。,6.6循环的嵌套,三种循环(while循环、do-while循环和for循环)可以互相嵌套。(1)while()(2)do(3)for(;)while()dofor(;)while();while();,(4)while()(5)for(;)(6)dodowhile()for(;)while()while(),打印出以下图案:,*j3空格k1个*i1行*2空格3个*2行*1空格5个*3行*0空格,7个*4行*1空格5个*1行*2空格3个*2行*3空格1个*3行,#includevoidmain()inti,j,k;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf(“”);for(k=1;k=2*i-1;k+)printf(“*”);printf(“n”);,for(i=1;i=3;i+)for(j=1;j=i;j+)printf(“);for(k=1;k=7-2*i;k+)printf(“*”);printf(“n”);,问题:,*,*,*,#includevoidmain()inti,j,k;for(i=1;i=3;i+)for(j=1;j=4-i;j+)printf();for(k=1;k=2*i-1;k+)printf(*);printf(n);for(i=1;i=3;i+)for(j=1;j=i;j+)printf();for(k=1;k=7-2*i;k+)printf(*);printf(n);,#includevoidmain()inti,j,k;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf();for(k=1;k=5;k+)printf(*);printf(n);,#includevoidmain()inti,j,k;for(i=1;i=3;i+)for(j=1;j=5-i;j+)printf();for(k=1;k=2*i-1;k+)printf(*);printf(n);,for(i=1;i=3;i+)for(j=1;j=3-i;j+)printf();for(k=1;k=3+2*i;k+)printf(*);printf(n);for(i=1;i=3;i+)for(j=1;j100时(r=6),执行break语句,提前结束循环,即不再继续执行其余的几次循环。,6.8.2用continue语句提前结束本次循环continue语句一般形式:continue;continue语句作用:结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。,continue语句和break语句的区别是:continue语句只结束本次循环,而不是终止整个循环的执行。break语句则是结束整个循环过程,不再判断执行循环的条件是否成立。,如果有以下两个循环结构:,(2)while(表达式1)if(表达式2)continue;,(1)while(表达式1)if(表达式2)break;,(1)while(表达式1)if(表达式2)break;,(2)while(表达式1)if(表达式2)continue;,#includevoidmain()intn;for(n=100;n=200;n+)if(n%3=0)continue;printf(“%d”,n);printf(“n”);,例6.5把100-200间的不能被3整除的数输出。,运行下面程序段输出什么?#includevoidmain()inti=0;while(i=a,运行结果:china!Glmre!,例6.7求fibonacci数列40个数。,这个数列有如下特点:第1,2两个数为1,1。从第3个数开始,该数是其前面两个数之和。即:f1=1(n=1)f2=1(n=2)fn=fn-1+fn-2(n3),#includevoidmain()longintf1,f2;inti;f1=1;f2=1;for(i=1;i=a,习题6.4,#includevoidmain()floats=0,t=1;intn;for(n=1;n20;n+)t=t*n;s=s+t;printf(1!+2!+.+20!=%fn,s);d,other=%d,letters,space,digit,other);,习题6.8,

温馨提示

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

评论

0/150

提交评论