《循环结构》PPT课件_第1页
《循环结构》PPT课件_第2页
《循环结构》PPT课件_第3页
《循环结构》PPT课件_第4页
《循环结构》PPT课件_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

.,1,第四章循环结构,4.1用格里高利公式求的近似值(while语句)4.2统计一个整数的位数(do-while语句)4.3判断素数(break和continue语句)4.4求1!+2!+.+100!(循环嵌套)4.5循环结构程序设计,.,2,本章要点,什么是循环?为什么要使用循环?如何实现循环?实现循环时,如何确定循环条件和循环体?怎样使用while和do-while语句实现次数不确定的循环?while和do-while语句有什么不同?如何使用break语句处理多循环条件?如何实现多重循环?,.,3,for语句一般应用形式:,for(循环变量赋初值;循环条件;循环变量增值)循环体语句,#includevoidmain()inti,sum=0;for(i=1;i=0.0001)item=flag*1.0/denominator;pi=pi+item;flag=-flag;denominator=denominator+2;pi=pi*4;printf(“pi=%fn”,pi);,不确定循环次数,for(i=1;i=100;i+),.,6,4.1.2while语句,while(条件)循环体语句;,循环条件,循环体,.,7,一般形式:,while(表达式)循环体语句;,执行流程:当表达式为真(非0值)时,执行循环体语句;直到表达式为假,循环终止,4.1.2while语句,特点:先判断表达式,后执行循环体(当型),求1+2+100的和sum=0;i=1;while(i=100)sum=sum+i;i+;,此处无分号;,.,8,一般形式:,while(表达式)循环体语句,4.1.2while语句,说明:循环体有可能一次也不执行(一开始条件就不成立)当表达式为真(非0值)时,即可继续执行循环循环体包括一个以上语句的用组成复合语句有使循环趋向结束的语句,如i+无限循环:也即无循环结束条件while(1)循环体;下列情况,退出while循环:条件表达式不成立(为零)循环体内遇break,特点:先判断表达式,后执行循环体(当型),sum=0;i=1;while(i=100)sum=sum+i;i+;printf(“%d”,sum);,用一对大括号将若干语句顺序组合在一起就是一个复合语句,.,9,例用while循环求1+2+100的累加和,#includevoidmain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);,循环结构的五要素:循环初值,循环条件,循环终值,循环变量增值,循环体,.,10,例用while循环求1+2+n的累加和,#includevoidmain()inti,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);,求前n项的和可用scanf读入n,#includevoidmain()inti,sum=0,n;i=1;printf(“Entern:”);scanf(“%d”,.,11,while语句和for语句都是在循环前先判断条件while和for的比较,while语句说明,表达式1;while(表达式2)循环体语句;表达式3;,for(表达式1;表达式2;表达式3)循环体语句,for(i=1;i=1e-6)s=s+t;n=n+2;m=-m;t=m/n;pi=s*4;printf(pi=%fn,pi);,.,14,例4-2从键盘输入一批学生的成绩,计算平均分分析:求累加和确定循环条件不知道输入数据的个数,无法事先确定循环次数用一个特殊的数据作为正常输入数据的结束标志,比如选用一个负数作为结束标志。,4.1.3统计输入的一批学生的平均成绩,例4-2从键盘输入一批学生的成绩,计算平均分#includevoidmain()intnum;doublegrade,total;num=0;total=0;printf(“Entergrades:n);scanf(“%lf”,.,16,4.2统计一个整数的位数,从键盘读入一个整数,统计该数的位数。4.2.1程序解析4.2.2do-while语句4.2.3循环语句的选择,.,17,例4-3#includevoidmain()intcount,number;count=0;printf(“Enteranumber:);scanf(%d,4.2.1程序解析统计一个整数的位数,while(number!=0)number=number/10;count+;,.,18,4.2.2do-while语句,do循环体语句while(表达式);,先循环,后判断,真,假,表达式,循环体语句,do-while的下一条语句,.,19,while是先判别条件,再决定是否循环;do-while是先至少循环一次,然后再根据循环的结果决定是否继续循环。,while和do-while的比较,while(number!=0)number=number/10;count+;,donumber=number/10;count+;while(number!=0);,.,20,例while和dowhile比较,#includevoidmain()inti,sum=0;scanf(%d,#includevoidmain()inti,sum=0;scanf(%d,结论:当while后的表达式第一次的值为“真”时,两种结果相同,否则不同,输入:10,输出:sum=10输出:sum=10,输入:11,输出:sum=11输出:sum=0,.,21,三种循环结构:求1100的和,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);,sum=0;i=1;dosum+=i;i+;while(i=100);printf(%d,sum);,sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);,.,22,几种循环的比较,1、三种循环语句在处理循环问题时,一般可以相互替代,2、对于循环次数不确定的问题,可以用while或do-while语句来实现。while语句为先判断后执行,do-while语句则先执行后判断。,3、对于循环次数确定的问题,用for语句更方便。for语句也为先判断后执行。,.,23,4.2.3循环语句的选择,if(循环次数已知)使用for语句else/*循环次数未知*/if(循环条件在进入循环时明确)使用while语句else/*循环条件需要在循环体中明确*/使用do-while语句,.,24,4.3判断素数,输入一个正整数m,判断它是否为素数。4.3.1程序解析4.3.2break语句和continue语句,.,25,4.3.1程序解析判断素数,算法:一个正整数m,除了能被1和它本身(m)整除外,不能被其它数整除,该数就是素数。设i取值2,m-1如果m不能被该区间上的任何一个数整除,即对每个i,m%i都不为0,则m是素数只要找到一个i,使m%i为0,则m肯定不是素数m不可能被大于m/2的数整除i取值2,m-1、2,m/2、2,for(i=2;im/2)printf(yesn)elseprintf(non”);,.,26,intmain(void)inti,m;printf(“Enteranumber:);scanf(%d,例4-4源程序判断素数,for(i=2;i=a,只将小写字母转成大写字母输出,将小写字母转成大写字母输出如果是大写字母,则直接输出,.,31,一般形式:continue;功能:结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断,如果条件成立,继续执行循环。说明:仅用于循环语句中continue语句仅结束本次循环,但break语句则是结束整个循环过程。,例输出1到100之间能被9整除的数#includevoidmain()inti;for(i=1;i0)num+;sum+=n;行不?,注意:scanf的输入格式是用124569还是用12,45,69,for循环中scanf的输入格式要用空格或回车,.,34,4.4求1!+2!+.+100!,累乘求阶乘,累加求和(循环100次)item=i!sum=sum+item;4.4.1程序解析计算i的阶乘4.4.2嵌套循环用循环计算i的阶乘以及阶乘的和,#includedoublefact(intn);intmain(void)inti;doublesum;sum=0;for(i=1;i=100;i+)sum=sum+fact(i);printf(1!+2!+3!+100!=%en,sum);return0;doublefact(intn)inti;doubleresult=1;for(i=1;i=n;i+)result=result*i;returnresult;,4.4.1程序解析求1!+2!+.+100!,.,36,4.4.2嵌套循环,求6!阶乘item=1;for(j=1;j=6;j+)item=item*j;,累加和for(i=1;i=100;i+)item=1;for(j=1;j=i;j+)item=item*j;sum=sum+item;,求阶乘1!=12!=1*2=1!*23!=1*2*3=2!*3j!=1*2*.*j=(j-1)!*j,求阶乘的和1!+2!+.+100!,例4-6源程序,#includevoidmain()inti,j;doubleitem,sum;/*item存放阶乘*/sum=0;for(i=1;i=100;i+)item=1;/*每次求阶乘都从1开始*/for(j=1;j=i;j+)/*内层循环算出item=i!*/item=item*j;sum=sum+item;printf(1!+2!+3!+100!=%en,sum);,求阶乘1!=12!=1*2=1!*23!=1*2*3=2!*3j!=1*2*.*j=(j-1)!*j,.,38,内层循环的初始化,for(i=1;i=100;i+)item=1;for(j=1;j=i;j+)item=item*j;sum=sum+item;,求1!+2!+.+100!,item=1;for(i=1;i=100;i+)for(j=1;j=i;j+)item=item*j;sum=sum+item;,求1!+1!*2!+1!*2!*100!,.,39,例lt4-star:根据输入的边长,输出正方形,#includevoidmain()inti,j,n;printf(inputn:);scanf(%d,.,40,例lt4-99循环嵌套,输出九九表,#includevoidmain()inti,j;for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);,变量i控制行,变量j控制列i=1,j从19循环,输出i*ji=2,j从19循环,输出i*j,for(i=1;i10;i+)for(j=1;j10;j+)printf(%4d,i*j);printf(“n”);,.,41,例lt4-99a循环嵌套,输出九九表,#includevoidmain()inti,j;for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j=i;j+)printf(j=i)?%4dn:%4d,i*j);,变量i控制行,变量j控制列i=1,j从1i循环,输出i*ji=2,j从1i循环,输出i*j,for(i=1;i10;i+)for(j=1;ji;j+)printf(%4d,i*j);printf(“n”);,.,42,for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);,.,43,分析嵌套循环的执行过程,for(i=1;i=100;i+)item=1;for(j=1;j=i;j+)item=item*j;sum=sum+item;,外层循环变量i的每个值内层循环变量j变化一个轮次;内外层循环变量不能相同分别用i和j,.,44,for(i=1;i=100;i+)for(j=1;j=i;j+)printf(%d%dn,i,j);,.,45,4.5循环程序设计,循环程序的实现要点:归纳出哪些操作需要反复执行?循环体这些操作在什么情况下重复执行?循环条件选用合适的循环语句forwhiledo-while循环具体实现时考虑(循环条件):事先给定循环次数,首选for通过其他条件控制循环,考虑while或do-while,.,46,#includeintmain(void)inti,mark,max,n;printf(Entern:);scanf(%d,例4-7输入一批学生的成绩,求最高分(for),max,mark,Entern:5Enter5maks:6788735482Max=88,Entern:0,.,47,#includevoidmain()intmark,max;printf(“Entermarks:);scanf(%d,例4-7输入一批学生的成绩,求最高分(while),.,48,#includeintmain(void)intmark,max;max=-1;/*给max赋一个小初值*/printf(“Entermarks:);doscanf(%d,例4-7输入一批学生的成绩,求最高分(do-while),Entermarks:6788735482-1Max=88,Entermarks:-1,.,49,例lt4-chicken:现有100元,要求买100只鸡,假定母鸡每只3元,公鸡每只2元,小鸡每只5角。列出所有可能的买鸡方案。设母鸡个数为m,公鸡个数为g,小鸡个数为x。根据题意,有以下公式成立:0.5*x+2*g+m*2=100,#includevoidmain()intx,g,m,n=0;for(m=0;m=100;m+)for(g=0;g=100;g+)x=100-m-g;if(0.5*x+2*g+m*3=100)n+;printf(“n第%d种方案是:”,n);printf(“x=%d,g=%d,m=%dn”,x,g,m);,#includevoidmain()intx,g,m,n=0;for(x=0;x=100;x+)for(g=0;g=100;g+)m=100-x-g;if(0.5*x+2*g+m*3=100)n+;printf(“n第%d种方案是:”,n);printf(“x=%d,g=%d,m=%dn”,x,g,m);,优化程序1、各种鸡至少买一只2、各种鸡最多能买几只,例4-10求Fibonacci序列:1,1,2,3,5,8,13,的前10项,1,1,2,3,5,8,13,x1x2xx1x2x,x1=x2=1;x=x1+x2;x1=x2;x2=x;,x1=1;x2=1;printf(%6d%6d,x1,x2);/*输出头两项*/for(i=1;i=8;i+)/*循环输出后8项*/x=x1+x2;/*计算新项*/printf(%6d,x);x1=x2;/*更新x1和x2*/x2=x;,求Fibonacci序列:1,1,2,3,5,8,13,的前n项,.,51,例4-11古典算术问题搬砖头,某地需要搬运砖块,已知男人一人搬3块,女人一人搬2块,小孩两人搬一块。问用45人正好搬45块砖,有多少种搬法?,for(men=0;men=45;men+)for(women=0;women=45;women+)for(child=0;child=45;child+)if(men+women+child=45),.,52,例4-11源程序(2),for(men=0;men=15;men+)for(women=0;women=22;women+)child=45womenmen;if(men*3+women*2+child*0.5=45)printf(men=%dwomen=%dchild=%dn,men,women,child);,for(men=0;men=45;men+)for(women=0;women=45;wo

温馨提示

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

评论

0/150

提交评论