欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > PPT文档下载
     

    第6章循环结构.ppt

    • 资源ID:2987517       资源大小:969.52KB        全文页数:81页
    • 资源格式: PPT        下载积分:8
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要8
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第6章循环结构.ppt

    本章主要内容 概述 用while语句实现循环 用dowhile语句实现循环 用for语句实现循环 循环的嵌套 几种循环语句的比较 break语句和continue语句 程序举例,第六章 循环控制,6.1 概述,循环结构: 程序设计中, 经常需要重复相同的计算或处理过程。 例如:全班有50个学生,统计各学生三 门课的平均成绩。,scanf(“%f,%f,%f”,输入学生1的三门课成绩,并计算平均值后输出,scanf(“%f,%f,%f”,输入学生2的三门课成绩,并计算平均值后输出,要对50个学生进行相同操作,重复50次,循环结构两大要素: 循环体 可重复执行的语句或语句组 循环条件 条件表达式,指出什么时候执行循环体,什么时候结束循环。,循环体语句,条件表达式,循环体语句,条件表达式,真,假,while的后续语句,1形式 : while(条件表达式) 循环体语句,§6.3 while语句,例0:用 while 语句实现在屏幕上输出10行“I love programming!”。,分析: 设计变量并赋初值 用int型变量i表示行数,初值为1 设计循环条件 i10 设计循环体 printf(“I love programming!n”); i+; 用循环语句实现,void main() int i; i=1; while(i=10) printf(“I love programming!n”); i+; ,条件表达式 必须加括号,括号后不能有;,循环体包含多条语句时, 不能少,例1:用 while 语句实现 1+2+3+···+100,分析: 设计变量并赋初值 1. 用int型变量sum存放和,初值为0 2. 用int型变量i表示累加变量,初值为1 设计循环体 sum=sum+i; i+; 设计循环条件 i100 用循环语句实现,程序流程图:,开始,初始化 sum=0; i=1;,判断:i=100 ?,sum=sum+i;,i=i+1;,输出 sum,结束,真,假,真,sum=sum+i;,i=i+1;,判断:i=100 ?,#include void main() int i, sum=0; i=1; while(i=100) sum=sum+i; i+; printf(“%d“,sum); ,循环结束后,i的值是多少?,101,使用说明: 1) 在while的循环体中一定要有使循环趋于结束的语句;否则将形成死循环; 2) 注意循环操作的范围、花括号、分号的使用; 3) 注意给循环变量赋初值的位置及初值的正确性;,#include void main( ) int sum=0, i=1; while (i=100) sum=sum+i; i+; printf(“sum%dn“,sum); ,程序:,i+; sum+=i;,i=0;,100,例 2求1到100之间的奇数之和,偶数之积 。,sum=0 mul=1,i=100,i能整除2?,yes,no,mul=mul*i,sum=sum+i,输出sum, mul,i+;,i=1,main( ) double mul=1; int i=1, sum=0; while (i=100) if (i%2=0) mul=mul*i; else sum=sum+i; i+; printf(“sum=%dn“,sum); printf(“mul=%en“,mul); ,main( ) int i,k1,k2,k; i=1;k1=1;k2=2; while (i=5) k=k1+k2; k1=k2; k2=k; i+; printf(“%5d“,k); ,例 3读程序练习:,3 5 8 13 21,1形式:do 语句 while(表达式);,§6.4 do-while语句,循环体语句,条件表达式,循环体语句,条件表达式,真,假,例 1用do_while 语句实现 1+2+3+···+100,分析: 设计变量并赋初值 1. 用int型变量sum存放和,初值为0 2. 用int型变量i表示累加变量,初值为1 设计循环体 sum=sum+i; i+; 设计循环条件 i100 用循环语句实现,void main( ) int i,sum=0; i=1; do sum=sum+i; i+; while (i=100); printf(“sum=%d“,sum); ,i+; sum+=i;,i=0;,100,例2:计算表达式,1×2 2×3 3×4 n×(n+1),1 1 1 1,+,+,+,+,+,的值,直到某一项的值小于10-3次方为止。,分析:1. 累加项 t= 2. 循环条件为: t10 -3,i×(i+1),1,main( ) float sum=0,t; int i=1; do t=1.0/(i*(i+1); sum=sum+t; i+; while (t=1e-3); printf(“sum=%fn“,sum); ,while循环与do_while循环小结: 1. 循环体内必须有使循环趋于终止的条件,while (i=100) sum=sum+i; i+; ,do sum=sum+i; i+; while (i=100);,2. 注意循环初值与循环条件,i=1; while (i=100) sum=sum+i; i+; ,i=0; while (i100) i+; sum=sum+i; ,3. do_while 循环的循环体至少执行一 次, while循环的循环体可能一次 也不执行。,4. 在循环体至少执行一次的前提下, do_while与while 循环等价。,例3: 求 n!,main( ) int i=1,n; double m=1; scanf(“%d“, ,main( ) int i=1,n; double m=1; scanf(“%d“, ,1. 一般形式: for (表达式1; 表达式2; 表达式3) 语句,for 的循环体,括号不可少,分号不可少,§6.5 for语句,求表达式1,判表达式2,语句,求表达式3,for语句的下一个语句,真,非0,假,值为0,for语句执行 过程示意,for (表达式1; 表达式2; 表达式3) 语句,表达式1只执行1次; 表达式2、3和内嵌语句执行多次,通常: 表达式1用于对循环变量赋初值; 表达式2给出循环条件; 表达式3使循环变量增值;,循环类型:当型,for语句等价于下列语句: 表达式1; while (表达式2) 语句; 表达式3; ,例: #include void main() int i, sum=0; for (i=1;i=100;i+) sum=sum+i; printf(“sum=%dn”,sum); ,例:for(i=0; i=10; i=i+2) printf(“%3d”, i); printf(“ni=%d”, i); 运行结果:0 2 4 6 8 10 i=12 例:for(i=10; i; i-) printf(“%d,”, i); 运行结果:10,9,8,7,6,5,4,3,2,1,例:for(i=1, j=6; ij; i+, j-) printf(“%d*%d=%dn”, i, j, i*j); 运行结果:1*6=6 2*5=10 3*4=12,3. 说明 : 1)表达式1可省略,但分号不能省 ; 如 :int i=1,sum=0; for (;i=100;i+) sum=sum+i; 2)若表达式2省略,循环条件永远为真 ; 如: for(i=1; ;i+) printf(“%d,”,i);,死循环,3)表达式3也可省略,但应设法保证循环正常结束 ; 如 : for (i=1;i=100;) sum=sum+i; i+; 4)可只给循环条件; i=1; for (;i=100;) sum=sum+i; i+; ,5)三个表达式都可省 ; for (;) 相当于 while (1) 6)表达式1和表达式3可以是逗号表达式 ; 如 : for (i=1,sum=0;i=100;i+) sum=sum+i;,7)表达式2一般为关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值为非零就执行循环体 。 如: for (;(c=getchar( )!='n') printf(“%c,“,c); 注: 尽量避免用实型变量控制循环次数。,在循环体内尽量避免改变循环变量的值, 否则将难以预知循环次数。,例: void main( ) int i; for(i=1;i=20;i+) i=i+5; printf(“%5d“,i); printf(“n“); ,运行结果为: 6 12 18 24,修改了循环变量,概念 :一个循环体内又包含另一个完整的循环结构 。,§6.6 循环的嵌套,例:do-while嵌套 例:do-while、for混合嵌套 do do do for(e1;e2;e3) while(e1); while(e); while(e);,错误的循环交叉形式:,说明 :1)三种循环可以互相嵌套 2)嵌套可以是多层的,* * * * * * * * * * * * * * * * * * * * * * * * *,main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=5;j+) printf (“*“); printf(“n“); ,例:在屏幕上输出一个由5*5星号组成的方形。,四种循环一般可互相代替 循环次数已知时,常用for 循环次数未知时,常用while或do-while。 3. while和do-while循环的循环体中应包括使循环趋于结束的语句。 4. for的功能强于while和do-while 5. 循环变量初始化的位置不同。 6. while和for循环是当型循环, do-while循环是直到型循环,§6.7 几种循环的比较,一、break语句 作用 : 1) 从循环体内跳出,即提前结束循环 ,接着执行循环下面的语句 ; 2) break语句只能 用于循环语句和 switch 语句 。,§6.8 break语句和continue语句,#include void main( ) int r; float area; for(r=1; r100) break; printf(“r=%d,area=%-7.2fn”, r, area); printf(“r=%d”,r); ,计算半径为1到10的各圆面积,直到面积大于100为止。,注意: 在循环中使用了break语句后,循环语句的结束可能有两种: 1. 正常结束(正常出口);由于循环条件表达式为假 2. 非正常结束(异常出口):由break语句引起。,使用说明: 1) 内循环中的break仅跳出内循环结构;,if(e) break;,2) 被循环语句嵌套的switch中出现的break,仅跳出switch;,switch(e) break; ,二、continue 语句 作用 :结束本次循环,即跳过循环体中语句中下面尚未执行的语句,接着执行下一次是否执行循环的判定。,for (n=100;n=200;n+) if (n%3= =0) continue; printf(“%d”,n); ,if (n%3!=0) printf(“%d”,n);,例:for中用 continue 例:while中用continue for(e1; e2; e3 ) while( e1 ) if (e) continue; if(e) continue; ,三、break语句和continue语句的区别是 : 1)continue 语句只结束本次循环,不终止整个循环的执行; 2)break 语句是终止整个循环的执行,不再进行条件判断。,例: 从键盘上任意输入一个正整数,判断其是否为素数。,素数:除了1和它本身之外没有其他因子的数。换句话说只要有因子(除了1和它本身之外)则该数一定不是素数,判断m是否素数:(穷举法) for(i=2;i=m-1;i+) if(m%i=0),若此循环正常结束则m是素数。,则m不是素数,成立,im-1,void main( ) int m,i; scanf(“%d“, ,方法1,main( ) int m, i, k=1; scanf(“%d“, ,方法2,标志变量,例用公式求的近似值,直到最后一项的绝对值小于10-6为止 。 /41-1/3+1/5-1/7+ 算法分析: 1. 循环累加 pi=pi+t; 2. 交替改变符号 s= -s; 3. 每项分子为 1 ,分母 n=n+2;,§6.9 程序举例,#include void main( ) int s; float n,t,pi; t=1;pi=0;n=1;s=1; while (fabs(t)=1e-6) pi=pi+t; n=n+2; s=-s; t=s*1.0/n; printf(“pi=%10.6fn“,4*pi); ,程序 :,例 求Fibonacci数列:1,1,2,3,5,8,的前40个数 。,f1 f2 1 1,f1=f1+f2; f2=f2+f1;,fi=fi-1+fi-2,f1,2,f2,3,void main( ) long int f1,f2; int i; f1=1; f2=1; for (i=1;i=20;i+) printf(“%12ld %12ld“,f1,f2); if (i%2= =0) printf(“n“); f1=f1+f2; f2=f2+f1; ,与此解题方法类似的有:(迭代法) 1、编写求 20+21+22+23+···+263 的程序 。 2、求1!+2!+3!+20!。 3、有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13 求出这个数列的前20项之和 4、求: Sn=a+aa+aaa+aaaaaa,其中a是一个数字,n表示a的位数,n要求由键盘输入。 等等。,void main( ) int i,j,m=0; for(j=100;jj-1) printf(“%5d“,j); m+; if(m%10=0) printf(“n“); printf(“ m=%dn“,m); ,例:求100200之间的所有素数及素数的个数。,输出10个素数后换行,与此解题方法类似的有:(穷举法、列举法) 1、输出所有的水仙花数。 2、找出11000之间的全部同构数 。一个数等于它的平方数的右端,就称为同构数。如 :5的平方是25,25的平方是625。 3、编程找出1000之内的所有完数。一个数恰好等于它的因子之和,这个数就称为“完数”。例如:6的因子为1,2,3,而6=1+2+3,因此6是完数。,同构数 : 一个数等于它的平方数的右端。 如 :5的平方是25 25的平方是625,例 :找出11000之间的全部同构数 。,分析:1. 用i表示11000之间的数 2. 用n表示i的位数 3. 同构数的条件: i*i%(int)pow(10,n) = = i,m=i;n=0; do n+; m=m/10; while(m!=0);,#include “math.h“ main( ) int n,m; long i; for(i=1;i=1000;i+) m=i;n=0; do n+; m=m/10; while(m!=0); if(i*i%(int)pow(10,n)=i) printf(“%5ld“,i); printf(“n“); ,一个数恰好等于它的因子之和,这个数就称为“完数”。 例如:6的因子为1,2,3,而6=1+2+3,因此6是完数。 编程找出1000之内的所有完数,并按 下面格式输出其因子 6 its factors are 1,2,3,例 ,main( ) int i,j,k; for (i=2;i=1000;i+) k=0; for (j=1;j=i/2;j+) if (i%j=0) k=k+j; if (i=k) printf(“%d its factors are %d”,i,1); for (j=2;j=i/2;j+) if (i%j=0) printf(“,%d”,j); printf(“n”); ,程序 :,例:从键盘输入字符直到输入字符#为止,并统计 输入字母的个数。 特点:循环次数事先无法确定 #include void main( ) char ch; int count=0; do ch=getchar( ); if(ch=A ,例:从键盘输入字符直到输入字符#为止,并统计 输入字母的个数。方法2: #include void main( ) char ch; int count=0; while(1) ch=getchar( ); if(ch=A ,例: 在屏幕上输出以下图形。,* * * * *,分析:(设N=5) 第1行: 4个空格 1个“*” 换行符 第2行: 3个空格 3个“*” 换行符 第3行: 2个空格 5个“*” 换行符 第4行: 1个空格 7个“*” 换行符 第5行: 0个空格 9个“*” 换行符,由此归纳出:第i行的空格数5-i个; 第i行的“*”数是2i-1个。,void main( ) int i, j; for(i=1;i=5;i+) for (j=1;j=5-i;j+) printf(“ “); for(j=1;j=2*i-1;j+) printf(“*“); printf(“n“); ,本章小结,本章介绍的内容 介绍了while、dowhile、for三种循环结构的使用和它们之间的区别,以及break、continue的用法 要求达到的目标 掌握while、dowhile、for语句的用法 会使用这三种结构进行循环程序设计 理解 break 和 continue在程序控制中的作用,图形 1:(法一) main( ) int i; for (i=1;i=5;i+) printf (“ * * * * *n”); ,* * * * * * * * * * * * * * * * * * * * * * * * *,图形 1:(法二) main( ) int i; for (i=1;i=25;i+) if (i%5=0) printf (“ *n”); else printf (“ *”); ,* * * * * * * * * * * * * * * * * * * * * * * * *,图形 2:(法三) main( ) int i,j; for (i=1;i=5;i+) for ( j=1;j=i;j+) printf ( “ “); printf (“ * * * * *n”); ,* * * * * * * * * * * * * * * * * * * * * * * * *,图形 2:(法三) main( ) int i,j; for (i=1;i=5;i+) for ( j=1;j5+i;j+) if (ji) printf ( “ “); else printf (“ *”); printf(“n”); ,* * * * * * * * * * * * * * * * * * * * * * * * *,图形 3: main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=5-i:j+) printf ( “ “); for (j=1;j=5;j+) printf (“ *”); printf(“n”); ,* * * * * * * * * * * * * * * * * * * * * * * * *,图形 4 : main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=i;j+) printf (“ *”); printf(“n”); ,* * * * * * * * * * * * * * *,图形 4 : main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=i;j+) printf (“ *”); printf(“n”); ,* * * * * * * * * * * * * * *,图形 5:(法一) main( ) int i,j; for (i=1;i=5;i+) for (j=1;j=5-i;j+) printf (“ “); for (j=1;j=i;j+) printf (“ *”); printf(“n”); ,* * * * * * * * * * * * * * *,图形 5:(法二) main( ) int i,j; for ( i=1;i=5;i+) for ( j=1;j=5;j+) if ( i+j6 ) printf (“ “); else printf (“ *”); printf(“n”); ,* * * * * * * * * * * * * * *,main( ) int i,j,n; scanf(“%d”, ,例:在屏幕上输出一个由n*n个星号组成的方形。,* * * * * * * * * * * * * * * * * * * * * * * * *,main( ) int i,j; for (i=1;i=5;i+) for (j=1;ji;j+) printf(“ “); for (j=1;j=5;j+) printf(“ *“); printf(“n“); ,算法1分析: 设该三位数为 i (100i999),与之对应的个位、十位、百位数字分别为k1、k2 、k3,则有以下关系: i=k13+k23+k33 数字分离: (1) 个位: k1=i%10 (2) 十位: k2=i/10%10 (3) 百位: k3=i/100,例:打印水仙花数。 如:153=13+53+33,例: i=543 k1=543%10值为3 k2=543/10%10值为4 k3=543/100值为5,main( ) int i,k1,k2,k3; for (i=100;i=999;i+) k1=i%10; k2=i/10%10; k3=i/100; if (i=k1*k1*k1+k2*k2*k2+k3*k3*k3) printf(“%d=%d3+%d3+%d3n“, i,k1,k2,k3); ,方法1:,算法分析2: 设该三位数的百位、十位、个位 数字分别为k1、k2 、k3, 则有以下关 系: k1*100+k2*10+k3=k13+k23+k33 k1取值19, k2 、k3取值09,main( ) int k1,k2,k3,i; for (k1=1;k1=9;k1+) for (k2=0;k2=9;k2+) for (k3=0;k3=9;k3+) i=k1*100+k2*10+k3; if (i=k1*k1*k1+k2*k2*k2+k3*k3*k3) printf(“%d=%d3+%d3+%d3n“, i,k1,k2,k3); ,方 法 2,例: 找出101200之间各个位数字之和能被5整 除的所有数。,算法分析: 拆数方法:s=s+m%10 m=m/10 循环条件:m0 打印方式:每打印10个数,输出一个'n',第几次循环,s的值,m的值,1,3,2,3,10,12,27,2,0,如: m=273 s的初值为0,main( ) int i,m,s,k=1; for(i=10;i0); if (s%5=0) printf(“%5d“,i); if (k%10=0) printf(“n“);k+; printf(“n“); ,

    注意事项

    本文(第6章循环结构.ppt)为本站会员(本田雅阁)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开