第五章循环结构程序设计ppt课件_第1页
第五章循环结构程序设计ppt课件_第2页
第五章循环结构程序设计ppt课件_第3页
第五章循环结构程序设计ppt课件_第4页
第五章循环结构程序设计ppt课件_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

第5章循环结构程序设计,C语言程序设计,.,2,循环结构的应用场合,循环结构是指根据问题的需要任意次地重复执行一行或多行语句。具体地说就是某些语句在某一条件成立时,需要重复执行,直到条件不成立时才结束重复执行。循环结构的应用场合计算1+2+3+n,属于循环累加问题,总共执行n次。计算n!=123n,属于循环累乘问题,执行n次。计算e的近似值,e=1+1/1!+1/2!+1/3!+1/n!,直到满足精度的要求,即最后一项的绝对值小于10-5时循环停止。循环次数事先未知。以二维形式打印乘法九九表,属于双重循环问题。,.,3,循环结构类型,.,4,本章主要内容,5.1C语言的循环语句5.1.1while语句(当型循环)5.1.2do-while语句(直到型循环)5.1.3for语句5.1.4三种循环语句的比较和使用5.2循环的跳转5.2.1break语句5.2.2continue语句5.3循环嵌套5.4循环结构程序设计举例,.,5,5.1.1while语句,语句一般格式while(表达式)语句,一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式用来控制循环体是否执行,称为内嵌语句,可以是基本语句、控制语句,也可以是复合语句是循环重复执行的部分,.,6,5.1.1while语句,功能:计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0时结束循环,转去执行while后面的语句。,循环控制条件,循环体,.,7,5.1.1while语句(举例),【例5.1】编写程序,求100个自然数的和即:s=1+2+3+100,思路:寻找加数与求和的规律,加数i从1变到100,每循环一次,使i增1,直到i的值超过100。i的初值设为1。求和设变量sum存放和,循环求sum=sum+i,直至i超过100。,.,8,算法和程序:,#includemain()inti,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);,程序输出结果:sum=5050,i:循环控制变量sum:累加器,.,9,注意:,如果while的(表达式)值为0,则循环体一次也不执行(例如当i的初值=101)。在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。,思考程序段的输出?while(i=100)i+;sum=sum+i;,运行后,输出:sum=5150原因是什么?,.,10,注意(续):,为了保证循环正常运行,应该特别注意:循环控制条件的描述控制条件的初始状态(初始值)循环体内部对控制条件的影响,.,11,5.1.1while语句(举例),【例5.2】编写程序,从键盘输入字符,直到输入的字符为0时停止,统计输入的字符个数。,求累加和:确定变量len,初值为0确定循环条件:输入字符不为0,即getchar()!=0,思路:,程序#includevoidmain()charch;intlen=0;printf(请输入字符:n);while(ch=getchar()!=0)putchar(ch);len+;printf(字符个数为:%dn,len);,自学:P58例4-1;P61例4-2。,.,12,5.1.2do-while语句,语句一般格式do语句while(表达式);功能:先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为0结束循环,转去执行while下面的语句。,.,13,do-while循环的算法,N-S结构图,main()inti=1,sum=0;dosum=sum+i;i+;while(i=100);printf(%dn,sum);,例:用do-while语句求100个自然数的和,.,14,5.1.2do-while语句(说明:),while和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构。,区别:do-while语句先执行循环体再判断条件,循环体至少执行一次;while语句先判断条件再执行循环体,循环体有可能一次也不执行。dowhile循环体中一定要有能使表达式值趋于0的操作(如i+),否则会出现死循环。,.,15,while和do-while的用法比较,输入一些数,求和,直到输入负数为止。#includevoidmain()intx,sum=0;doscanf(%d,#includevoidmain()intx,sum=0;scanf(%d,输入125-10,输入-10125,sum-x,.,16,5.1.2do-while语句(简单应用),【例5.3】用辗转相除法求m和n的最大公约数。,所谓辗转相除法,即用两数中较大数m除较小数n求余数r,然后再用较小数(赋给m)除余数(赋给n)求余数r,依次类推,当所得余数为0时停止,最后的较大数m就是最大公约数。,程序#includevoidmain()intm,n,r;scanf(%d,%d,自学:P62例4-3。,.,17,5.1.3for语句,语句一般格式for(表达式1;表达式2;表达式3)语句,功能:计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。,循环初始条件,循环控制条件,循环体,.,18,for语句的算法,例如:求100个自然数的和main()inti,sum;sum=0;for(i=1;i=100;i+)sum=sum+i;printf(sum=%dn,sum);,可部分或全部省略,但“;”不可省略,.,19,5.1.3for语句(省略表达式的for语句),省略表达式1,即:for(;表达式2;表达式3)此时应在for语句之前给循环变量赋初值。例如:,i=1;for(;i100),.,20,5.1.3for语句(省略表达式的for语句),省略表达式3,即:for(表达式1;表达式2;)等同于:表达式1;while(表达式2)(死循环)此时应在循环体中设置变量的增值。例如:,for(i=1;i100)i+;,总结:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行。,.,21,5.1.3for语句(说明:),所有用while语句实现的循环都可以用for语句实现。,等价于:,for(表达式1;表达式2;表达式3)语句;,表达式1;while(表达式2)语句;表达式3;,for语句中的表达式1和表达式3,既可以是一个简单表达式,也可以由逗号运算符将多个表达式连接起来。,例如:,for(i=0,sum=0;i=100;i+,i+)sum+=i;,for(i=0,sum=0;i5)for(n=0;n26;n+)printf(%c,n+A);作用是输出26个大写字母for(sum=0,i=1;i=100;sum=sum+i,i+=2);作用是计算100以内的奇数和,.,25,5.1.43种循环语句的比较和使用,while和do-while语句的表达式只有一个,for语句有三个。while和for先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。,while语句多用于循环次数不定的情况do-while语句多用于至少要运行一次的情况for语句多用于要赋初值或循环次数固定的情况,.,26,5.1.43种循环语句的比较和使用,循环语句的选择if(循环次数已知)使用for语句else/*循环次数未知*/if(循环条件在进入循环时明确)使用while语句else/*循环条件需要在循环体中明确*/使用do-while语句,.,27,5.1.43种循环语句使用(课堂练习),K1:求1+2+3+4+nK2:求1+1/2+1/3+1/4+1/nK3:求1-1/2+1/3-1/4+1/nK4:求1-1/3+1/5-1/7+前n项之和K5:输入100个整数,求其中正数之和K6:输入一个正整数n,再输入n个数,输出最大值(P71例4-7),.,28,5.1.43种循环语句使用(课堂练习),K1:求1+2+3+4+n,算法:i=1tons=s+ii+,程序段:s=0;for(i=1;i=n;i+)s=s+i;,.,29,5.1.43种循环语句使用(课堂练习),K2:求1+1/2+1/3+1/4+1/n,算法:i=1tons=s+tt=1.0/ii+,程序段:s=0;for(i=1;i=n;i+)s=s+1.0/i;,.,30,5.1.43种循环语句使用(课堂练习),K3:求1-1/2+1/3-1/4+1/n,算法:i=1tons=s+tt=1.0/i*flagflag=-flagi+,程序段:s=0;flag=1;for(i=1;i=n;i+)s=s+1.0/i*flag;flag=-flag;,.,31,5.1.43种循环语句使用(课堂练习),K4:求1-1/3+1/5-1/7+前n项之和,算法:i=1tons=s+tt=1.0/i*flagflag=-flagtt=tt+2i+,程序段:s=0;flag=1;tt=1for(i=1;i0sum=sum+xi+,.,33,5.1.43种循环语句使用(课堂练习),K6:输入一个正整数n,再输入n个数,输出最大值(P71例4-7),思路:,voidmain()inti,max,n,x;scanf(%d,max,x,循环,.,34,5.2循环的跳转,有如下两种语句实现跳转:break语句continue语句在循环语句的循环体中使用,可以进行循环的流程控制,.,35,5.2.1break语句,功能:利用break语句能够强迫终止本层循环,转到后续语句执行。,while语句,do-while语句,for语句,.,36,5.2.1break语句,intx,n=0,s=0;while(n10)scanf(%d,intx,n=0,s=0;doscanf(%d,for(n=0,s=0;n10;n+)scanf(%d,程序功能:从键盘输入不超过10个数,求和,一旦输入负数立即停止输入。,.,37,5.2.1break语句(举例),算法:除了1和m,不能被其它数整除。设i取值2,m-1如果m不能被该区间上的任何一个数整除,即对每个i,m%i都不为0,则m是素数只要找到一个i,使m%i为0,则m肯定不是素数m%2%3%4%5%(m-1)不是素数|=0=0是素数im/2)printf(yesn)elseprintf(non”);,【例5.5】输入一个正整数m,判断它是否为素数。,.,38,#includeintmain(void)inti,m;printf(“Enteranumber:);scanf(%d,5.2.1break语句(举例),问题:能否改写为:for(i=2;i=1;i-)if(m%i=0,.,40,5.2.2continue语句,功能:中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。,while语句,do-while语句,for语句,.,41,5.2.2continue语句(与break区别),intx,n=0,s=0;while(n10)scanf(%d,intx,n=0,s=0;doscanf(%d,for(n=0,s=0;n10;n+)scanf(%d,程序功能:从键盘输入10个数,统计其中的正数和。,.,42,5.2.2continue语句(举例),【例5.6】把100200之间能被7整除的数,以十个数为一行的形式输出,最后输出一共有多少个这样的数。,算法:,.,43,5.2.2continue语句(举例),#includemain()intn,j=0;for(n=100;n=200;n+)if(n%7!=0)continue;printf(%6d,n);j+;if(j%10=0)printf(n);printf(nj=%dn,j);,.,44,5.3循环的嵌套,如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套。典型形式:,(1)while()while().,(2)dodowhile();.while();,(3)while()dowhile();.,(4)for(;)dowhile();while().,.,45,5.3循环的嵌套(注意:),while、do-while、for循环语句可以并列,也可以相互嵌套,但要层次清楚,不能出现交叉。多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。例如:,for(a=1;a=10;a+)for(b=0;b=5;b+),外循环执行了10次,内循环执行6次循环正常结束时,内循环执行了106=60次,.,46,5.3循环的嵌套(举例),【例5.7】P67例4-5:求1!+2!+n!(n由输入决定),分析:这是一个累加求和问题,共循环n次,每次累加1项,循环算式:sum=sum+第i项(i!),因此累加求和的for语句为:for(i=1;i=n;i+)item=i!;sum=sum+item;,进一步改写为:for(i=1;i=n;i+)item=1;for(j=1;j=i;j+)item=item*j;sum=sum+item;,.,47,5.3循环的嵌套(举例),【例5.7】求1!+2!+n!(n由输入决定),程序:#includeintmain(void)inti,j,n;doubleitem,sum;sum=0;scanf(“%d“,item=1;for(i=1;i=n;i+)for(j=1;j=i;j+)item=item*j;sum=sum+item;,问题:内层循环的初始化能否改为:,.,48,5.3循环的嵌套(举例),【例5.7】求1!+2!+n!(n由输入决定),for(i=1;i=n;i+)item=1;for(j=1;j=i;j+)item=item*j;sum=sum+item;,分析嵌套循环的执行过程:,外层循环变量i的每个值内层循环变量j变化一个轮次;内外层循环变量不能相同分别用i和j,.,49,5.3循环的嵌套(举例),【例5.7】求1!+2!+n!(n由输入决定),如果理解了阶乘的含义,该题实际也可用单循环来编程,程序如何写?,累加求和的for语句为:sum=0;for(i=1;i=n;i+)item=i!;sum=sum+item;,改写为:item=1;for(i=1;i=n;i+)item=item*i;sum=sum+item;,.,50,5.3循环的嵌套(举例),【例5.8】编写程序,输出如下九九乘法表。,12436948121651015202561218243036714212835424981624324048566491827364554637281,分析:这是一个典型的双重循环问题。需要两个循环变量i、j。,i,j,外循环变量i用于控制输出行数,因此初值为1,终值为9。,内循环变量j用于控制输出列数,因此初值为1,终值为当前外循环的i值(为什么?)。,.,51,5.3循环的嵌套(举例),【例5.8】编写程序,输出九九乘法表。,程序:,#includemain()inti,j;for(i=1;i10;i+)for(j=1;j=i;j+)printf(j=i)?%4dn:%4d,i*j);,通过条件表达式判断当输出一行(一个内循环结束)后实现换行输出。,.,52,5.4循环结构程序设计,循环程序的实现要点:归纳出哪些操作需要反复执行?循环体这些操作在什么情况下重复执行?循环条件选用合适的循环语句forwhiledo-while循环具体实现时考虑(循环条件):事先给定循环次数,首选for通过其他条件控制循环,考虑while或do-while,.,53,确定:循环条件和循环不变体,123455432112345%10=512345/10=12341234%10=41234/10=123123%10=3123/10=1212%10=212/10=11%10=11/10=0结束,循环不变式x%10 x=x/10循环条件x=0,scanf(“%d”,5.4循环结构程序设计(举例),【例5.9】P72例4-8:将一个正整数逆序输出。,思考:用do-while实现?,.,54,5.4循环结构程序设计(举例),【例5.10】按每行输出5个数的形式输出Fibonacci数列的前20项。,思路:Fibonacci数列的前几项是:1、1、2、3、5、8、13、21、34、。此数列的变化规律是:,设变量f1、f2和f3,并为f1和f2赋初值1,令f3=f1+f2得到第3项;将f1f2,f2f3,再求f3=f1+f2得到第4项;依此类推求第5项、第6项,这是一种递推算法应采用循环实现,.,55,【例5.10】:算法和程序,#includemain()inti,f1,f2,f3;f1=f2=1;printf(n%8d%8d,f1,f2);for(i=3;i=20;i+)f3=f1+f2;f1=f2;f2=f3;printf(%8d,f3);if(i%5=0)printf(n);,.,56,5.4循环结构程序设计(举例),【例5.11】编程序求21000以内的完数。,完数:一个数的因子(除了这个数本身)之和等于该数本身。,思路:设定i从2变到10000,对每个i找到其因子和s;判定is?若相等,则i为完数,否则不是。,例如:6的因子是1、2、3,因子和1+2+36因此6是完数。,使用穷举算法用双层循环实现,.,57,【例5.11】:算法和程序,#includemain()inti,j,

温馨提示

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

评论

0/150

提交评论