《循环程序设计》课件_第1页
《循环程序设计》课件_第2页
《循环程序设计》课件_第3页
《循环程序设计》课件_第4页
《循环程序设计》课件_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

第5章循环控制程序设计1.目的、要求掌握实现循环的3种方法及其比较。掌握循环的嵌套。掌握break和continue语句的使用。2.重点、难点循环结构的灵活应用。1可整理ppt第5章循环控制程序设计1可整理ppt循环型程序设计

循环结构在程序设计中十分重要。所谓循环结构就是当给定条件成立时,反复执行某程序段,直到条件不成立为止。给定的条件称为循环条件,反复执行的程序段称为循环体。循环结构是结构化程序三种基本结构之一,可用于实现循环的C语句有:

goto语句+if语句

while语句

do—while语句

for语句2可整理ppt循环型程序设计循环结构在程序设计中十分重要。所谓问题提出打印整数1-10打印整数1-100打印整数1-n方法一:方法二:printf(“%d”,1);printf(“%d”,2);……printf(“%d”,10);printf(“%d%d%d…%d”,1,2,3,…10);printf(“%d”,i);i++;printf(“%d”,i);i++;……printf(“%d”,i);i++;i=1;程序段

inti=1;while(i<=10){printf("%d",i);i++;}循环不变式3可整理ppt问题提出打印整数1-10打印整数1-100打印整数1-n方法goto语句及其构成的循环goto语句为无条件转向语句,一般形式为:

goto语句标号;语句标号的命名规则与变量名相同。

goto语句程序的可读性差、无规律,不符合结构化程序设计原则,因而只有在万不得已时才使用。[例]:if—goto循环main(){inti,sum=0;i=1;loop:if(i<=100) {sum=sum+i; i++; gotoloop;}printf("%d",sum);}4可整理pptgoto语句及其构成的循环goto语句为无条件转向语句,一while结构的应用while语句用于实现“当型”循环结构,一般形式为:

while(条件表达式)循环体当表达式为非0时,执行while的内嵌语句。特点:先判断表达式,后执行语句。

5可整理pptwhile结构的应用while语句用于实现“当型”循环结构,注意:循环体可以是用花括号括起的复合语句; 循环体中应有使循环趋于结束的语句,否则将进入死循环。用计数法设置循环条件时,应特别注意“边界值”的选取。6可整理ppt注意:6可整理pptwhile语句的意义为:计算表达式的值,若表达式的值为真(非0)时,则执行循环体语句;不断反复,直到表达式的值为假(0),则不执行循环体语句,而直接转向循环体外的第一条语句。注意,whlie语句后没有分号(;)。

为了保证循环体可以结束,通常采用每循环一次向某种方向改变表达式的值,使得表达式的值最终可以为假。还有一种方法是在某种条件下,强行从循环体中跳出(如使用break语句)。

若表达式的值永远为真,则循环体被不断地执行,也就是说,永远不能从循环中退出,我们通常称这种循环为“死循环”。在绝大多数情况下,都不允许死循环。PA假真A当P为真7可整理pptwhile语句的意义为:计算表达式的值,若表达计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0时结束循环,转去执行while后面的语句。

当表达式为真语句N-S结构图NY流程图表达式非0?语句循环控制条件循环体循环不变式改变循环条件8可整理ppt计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行【例5.2】编写程序,求100个自然数的和即:SUM=1+2+3+…+100

sum=0sum+1sumsum+2sumsum+3sumsum+100sum循环不变式sum=sum+?main(){inti,sum;i=1;sum=0;while(i<=100)

{sum=sum+i;i++;

}printf("sum=%d\n",sum);}……

i=1,sum=0

当i<=100sum=sum+ii++输出sumi:循环控制变量sum:累加器9可整理ppt【例5.2】编写程序,求100个自然数的和sum=0sum+为了保证循环正常运行,应该特别注意:循环控制条件的描述控制条件的初始状态(初始值)循环体内部对控制条件的影响10可整理ppt为了保证循环正常运行,应该特别注意:10可整理ppt用于实现“直到型”循环结构,一般形式为:

do

循环体

while(条件表达式);

先执行语句,再判断表达式的值,直到表达式的值为0时结束循环。特点:先执行语句,后判断表达式。

do……while结构的应用PA假真A直到P为真

11可整理ppt用于实现“直到型”循环结构,一般形式为:do……while

循环体当表达式为真N-S结构图NY循环体表达式非0?流程图main(){inti=1,sum=0;do{sum=sum+i;i++;}while(i<=100);printf("%d\n",sum);}用do-while语句求100个自然数的和12可整理ppt循环体N-S结构图NY循环体表达式非0区别:do-while语句先执行循环体再判断条件,循环体至少执行一次;while语句先判断条件再执行循环体,循环体有可能一次也不执行do—while循环体中一定要有能使表达式值趋于0的操作(如i++),否则会出现死循环。

13可整理ppt区别:13可整理ppt对于do-while语句还应注意以下几点:在if语句、while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号;do-while语句也可以组成多重循环,而且也可以和while语句相互嵌套;在do和while之间的循环体由多个语句组成时,必须用{}括起来;do-while和while语句相互替换时,要注意修改循环控制条件;14可整理ppt对于do-while语句还应注意以下几点:14可整理ppt例:求i+(i+1)+(i+2)+…+10,其中i由键盘输入,分别用两种语句编程while循环程序do-while循环程序#include<stdio.h>main(){inti,sum=0;scanf("%d",&i);while(i<=10){sum=sum+i;i++;}printf("i=%d,sum=%d\n",i,sum);}#include<stdio.h>main(){inti,sum=0;scanf("%d",&i);do{sum=sum+i;i++;}while(i<=10);printf("i=%d,sum=%d\n",i,sum);}15可整理ppt例:求i+(i+1)+(i+2)+…+10,其中i由键盘输入例:输入一些数,求和,直到输入负数为止#include<stdio.h>main(){intx,sum=0;scanf("%d",&x);while(x>=0){sum=sum+x;scanf("%d",&x);}printf("sum=%d",sum);}#include<stdio.h>main(){intx,sum=0;do{scanf("%d",&x);sum=sum+x;}while(x>=0);printf("sum=%d",sum);}输入:1,2,5,-10输入:-10,1,2,5结果:sum=8结果:sum=-2结果:sum=0结果:sum=-1016可整理ppt例:输入一些数,求和,直到输入负数为止#include<st一般形式为:

for(表达式1;表达式2;表达式3)

语句

最简单、最易理解的形式为:for(循环变量初值;循环条件;循环变量增值)语句如:for(i=1;i<=100;i++)sum=sum+i;求解表达式1表达式2语句求解表达式3for语句的下一语句for结构的语法0非017可整理ppt一般形式为:求解表达式1表达式2语句求解表达式3for语句的for语句一般格式

for(表达式1;表达式2;表达式3)

语句功能:计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。循环控制条件循环体循环初始条件循环变量改变18可整理pptfor语句一般格式功能:循环控制条件循环体循环初始条件循环变

for(表达式1;表达式2;表达式3)语句表达式1;while(表达式2)

{

语句表达式3;

}等价于19可整理pptfor(表达式1;表达式2;表达式3)语句表达式1;等价于N-S结构图for(表达式1;表达式2;表达式3)

语句NY流程图计算表达式1

计算表达式3表达式2为真?例如:main(){inti,sum;sum=0;

for(i=1;i<=100;i++)sum=sum+i;printf("sum=%d\n",sum);}可部分或全部省略,但“;”不可省略for语句用while实现

exp1;while(exp2){语句;exp3;}20可整理pptN-S结构图for(表达式1;表达式2;表达式3)NY流程⑴表达式1、2、3全省略,即:

for(;;)

就等同于:while(1),会无限循环(死循环)注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行⑵省略表达式1和表达式3,即:

for(;表达式2;)

就等同于:while(表达式2)⑶省略表达式2,即:

for(表达式1;;表达式3)

就等同于:表达式1;while(1){…表达式3;}21可整理ppt⑴表达式1、2、3全省略,即:注意:在省略某个表达式时,应3.限定转向语句

break:终止循环或多路选择结构。

continue:结束本次循环。函数调用和返回:转向被调函数和从被调函数返回。while()

{|break;

|}while()

{|continue;

|}22可整理ppt3.限定转向语句while()while(后续语句…break;…YN表达式?后续语句…break;…表达式?YNbreak语句功能:利用break语句能够强迫终止本层循环,转到后续语句执行。while语句do-while语句后续语句计算表达式3计算表达式1…break;…表达式2?YNfor语句23可整理ppt后续语句…YN表达式?后续语句…表达式?YNbreak语句功后续语句…continue;

…YN表达式?后续语句…continue;…表达式?YNcontinue语句功能:中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。while语句do-while语句后续语句计算表达式3计算表达式1…continue;…表达式2?YNfor语句24可整理ppt后续语句…YN表达式?后续语句…表达式?YNcontinue[例]:用while语句求n项和#include<stdio.h>main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d\n",sum);}25可整理ppt[例]:用while语句求n项和#include<stdi[例]:用while语句将输入字符原样输出#include"stdio.h"main(){intc;while((c=getchar())!='\n')putchar(c);}26可整理ppt[例]:用while语句将输入字符原样输出#include[例]:等待按下C键#include"stdio.h"voidwait_a_char(){charch;printf("请输入正确的密码:\n");scanf("%c",&ch);while(ch!='c'){printf("密码输入不正确,请重输!");scanf("%c",&ch);}return;}main(){wait_a_char();printf("passwordok!\n");}27可整理ppt[例]:等待按下C键#include"stdio.h"2[例]:用do……while语句求n项和main(){inti,sum=0;i=1;do{sum=sum+i;i++;}while(i<=100);printf("%d\n",sum);}28可整理ppt[例]:用do……while语句求n项和main()28可几种循环的比较1)虽然4种循环通常可以互相代替,但不提倡用goto循环。2)对while和do—while循环,在循环体中包含应反复执行的操作语句;而对for循环,可将循环体中的操作全部放到表达式3中。因此for语句的功能更强,可完全代替while循环。3)对while和do—while循环,循环变量的初始化应在while和do—while语句之前完成,而for语句可在表达式1中完成。4)while和for是先判断后执行,do—while是先执行后判断。5)while、do—while、for可用break和continue控制。29可整理ppt几种循环的比较1)虽然4种循环通常可以互相代替,但不提倡用g循环的嵌套

对于相互嵌套的循环,应遵循以下原则:

1、内外循环不得交叉;

2、外循环的控制变量不能与任何一个内循环变量相同,但几个并列的内循环允许用相同的控制变量;

一个循环(称为“外循环”)的循环体内包含另一个循环(称为“内循环”)。内循环中还可以包含循环,形成多层循环。(循环嵌套的层数理论上无限制),三种循环(while循环、do-while循环、for循环)可以互相嵌套。30可整理ppt循环的嵌套对于相互嵌套的循环,应遵循以下原则while(){┆

while()

{…}}

for(;;){┆

while()

{...}

┆}

for(;;){┆

for(;;)

{....}

}

do{┆

do{...}while();

}while();

for(;;){┆

do

{...}

while();

}31可整理pptwhile()for(;;)for(;;)f#include<stdio.h>main(){inti,j;for(i=0;i<5;i++){for(j=0;j<=i;j++)printf(“%3d”,j);printf(“\n”);}}运行结果:

001012012301234

循环嵌套举例一32可整理ppt#include<stdio.h>运行结果:循环嵌套举例一3#include<stdio.h>main(){inti,j;for(i=1;i<=9;i++){for(j=1;j<=i;j++){printf(“%dX%d=%d”,i,j,i*j);}printf(“\n”);}}循环嵌套举例二:打印九九乘法表运行结果:1X1=12X1=22X2=43X1=33X2=63X3=94X1=44X2=84X3=124X4=16

……33可整理ppt#include<stdio.h>循环嵌套举例二:打印九九乘#include<stdio.h>main(){inti,j;intsum1,sum2=0;for(i=1;i<=5;i++){sum1=1;for(j=1;j<=i;j++)sum1=sum1*j;sum2=sum2+sum1;}printf(“1!+2!+3!+4!+5!=%d\n”,sum2);}循环嵌套举例三:计算1!+2!+3!+4!+5!sum1=1;for(j=1;j<=5;j++)sum1=sum1*j;求5!34可整理ppt#include<stdio.h>循环嵌套举例三:计算1!+#include<stdio.h>main(){intn;for(n=100;n<=200;n++){if(n%3==0) continue;printf("%d",n);}}[例]:求100~200间不能被3整除的数35可整理ppt#include<stdio.h>[例]:求100~200间#include<stdio.h>main(){inta,sum=0;printf("输入一批数:\n");scanf("%d",&a);for(;;){if(a<0)break;sum=sum+a;scanf("%d",&a);}printf("此次输入的正数之和是%d\n",sum);}[例]:统计输入正数的和的程序36可整理ppt#include<stdio.h>[例]:统计输入正数的和的#include<stdio.h>main(){inti=0;for(;;){i++;if(i==3){printf(“next,”);continue;}printf(“%d”,i);if(i==5){printf(“break,”);break;}}printf(“End!\n”);}例:一个特殊形式的循环程序运行结果:12next,45break,End!37可整理ppt#include<stdio.h>例:一个特殊形式的循环程序程序举例例1-1求1+2+3+…+n算法:i=1tons=s+tt++i++i=1tons=s+ii++for(i=1;i<=n;i++)s=s+i;

38可整理ppt程序举例例1-1求1+2+3+…+n算法:i程序举例例1-2求1+1/2+1/3+…+1/n算法:i=1tons=s+tt++i++i=1tons=s+tt=1.0/ii++s=0;for(i=1;i<=n;i++)s=s+1.0/i;

39可整理ppt程序举例例1-2求1+1/2+1/3+…+1程序举例例1-3求1-1/2+1/3-1/4…1/n算法:i=1tons=s+tt=1.0/ii++i=1tons=s+tt=1.0/i*flagflag=(-1)*flagi++s=0;flag=1;for(i=1;i<=n;i++){s=s+1.0/i*flag;flag=-flag;}

40可整理ppt程序举例例1-3求1-1/2+1/3-1/4算法:i=1tons=s+tt=1.0/ii++i=1tons=s+tt=1.0/i*flagflag=(-1)*flagi++s=0;t=1;tt=1;flag=1;for(i=1;i<=n;i++){s=s+1.0/tt*flag;flag=-flag;tt=2*i+1;}

例1-4求1-1/3+1/5-1/7…1/ni=1tons=s+tt=1.0/tt*flagflag=(-1)*flagtt=2*i+1i++i=1tons=s+tt=1.0/(2*i-1)*flagflag=(-1)*flagi++s=0;t=1;tt=1;flag=1;for(i=1;i<=n;i++){s=s+1.0/(2*i-1)*flag;flag=-flag;}

41可整理ppt算法:i=1tons=0;t=1;tt=1;flag=1算法:i=1tons=s+tt=i/(i+1)i++i=1tons=s+tt=i/(i+1)*flagflag=(-1)*flagi++s=0;flag=1;for(i=1;i<=n;i++){s=s+1.0*i/(i+1)*flag;flag=-flag;i++;}

例1-5求s=1/2-2/3+3/4-4/5+……(-1)n-1n/(n+1)42可整理ppt算法:i=1tons=0;flag=1;例1-54#include<math.h>#include<stdio.h>main(){intflag=1;floats,t,tt,pi;s=0;t=1.0;tt=1.0;while((fabs(t))>=1E-6){s=s+t;tt=tt+2;flag=-flag;t=1.0/tt*flag;}pi=s*4;printf("pi=%10.7f\n",pi);}例2-1求1-1/3+1/5-1/7…,直到最后一项的绝对值<10-6算法:while|t|>=1E-6s=s+tt=1.0/tt*flagflag=(-1)*flagtt=tt+243可整理ppt#include<math.h>例2-1求1-1/3+1例3-1求n!算法:i=1tons=s*tt++i++i=1tont=t*ii++t=1;for(i=1;i<=n;i++)t=t*i;

44可整理ppt例3-1求n!算法:i=1tont=1;44可整理p例3-2求xn算法:i=1tont=t*xi++#include<stdio.h>main(){intn=10,x,i;longintt=1;scanf("%d",&x);for(i=1;i<=n;i++)t=t*x;printf("%d的%d次方是:%d\n",x,n,t);}

45可整理ppt例3-2求xn算法:#include<stdio.h>4#include<stdio.h>main(){intx1,x2,i,t;x1=x2=1;printf("%d%d",x1,x2);for(i=1;i<=18;i++){t=x1+x2;printf("%d",t);x1=x2;x2=t;}printf("\n");}例4-1输出Fibonacci数列前20个数1,1,2,3,5,8,13,…x1x2tx1x2t算法:x1=x2=1;t=x1+x2;x1=x2;x2=t;x1x2t46可整理ppt#include<stdio.h>例4-1输出Fibona例5-1求最大数abcmaxmaxmax循环不变式scanf(“%d”,&x)xmax#include<stdio.h>main(){inta,b,c,max;printf("inputa,b,c:\n");scanf("%d%d%d",&a,&b,&c);max=a;if(max<b)max=b;if(max<c)max=c;printf("maxis%d",max);}47可整理ppt例5-1求最大数abcmaxmaxmax循环不变式#inc例5-2输入一个正整数n,再输入n个数,输出n个数中的最大数abcmaxmaxmax循环不变式scanf(“%d”,&x)xmax…max#include<stdio.h>main(){inti,x,n,max;printf("inputn:\n");scanf("%d",&n);if(n>0){scanf("%d",&x);max=x;for(i=1;i<n;i++){scanf("%d",&x);if(max<x)max=x;}printf("maxis%d",max);}}48可整理ppt例5-2输入一个正整数n,再输入n个数,输出n个数中的最大#include"math.h"main(){inti,m;scanf("%d",&m);for(i=2;i<m;i++)if(m%i==0)break;if(i>=m)printf("%disaprimenumber\n",m);elseprintf("%disnotaprimenumber\n",m);}例6-1判断m是否是素数算法:除了1和m,不能被其它整数整除

m%2%3%4%5…%(m-1)是素数&&!=0!=0!=0!=0!=0不是素数||==0==0==0==0==0循环结束两个出口:

1、自然结束!(i<m)即i>=m2、强制终止(m%i==0)break49可整理ppt#include"math.h"例6-1判断m是否是素#include"math.h"main(){intm,k,i,n=0;for(m=101;m<=200;m=m+2){if(n%10==0)printf("\n");k=sqrt(m);for(i=2;i<=k;i++)if(m%i==0)break;if(i>=k+1){printf("%d",m);n=n+1;}}printf("\n");}例6-2求100-200间的全部素数50可整理ppt#include"math.h"例6-2求100-200例7-1将一个正整数逆序输出123455432112345%10=512345/10=12341234%10=41234/10=123123%10=3123/10=1212%10=212/10=11%10=11/10=0结束循环不变式:x%10x=x/10循环条件:x!=0scanf(“%d”,&x)while(x!=0){digit=x%10;x=x/10;printf(“%d”,digit);}51可整理ppt例7-1将一个正整数逆序输出12345543211循环编程注意事项:写出循环不变式和循环条件,其中循环条件包括:指定循环次数、判断某项的值、输入一个特殊数作为结束。循环分类:求和、求积求最大值、最小值Fibonacci数列,数列中某项的值与前若干项有关判断素数、完数拆分一个整数输入一些字符,统计7.穷举法

52可整理ppt循环编程注意事项:循环分类:52可整理ppt#include<stdio.h>main(){intn=0;printf("输入一行字符:\n");while(getchar()!='\n')n++;printf("%d",n);}1.统计从键盘输入一行字符的个数课堂练习53可整理ppt#include<stdio.h>1.统计从键盘输入一行字符#include<stdio.h>main(){intn=100;while(n){printf(“%d”,n);n--;}}2.在屏幕上从大到小输出100以内的整数54可整理ppt#include<stdio.h>2.在屏幕上从大到小输出1程序一

#include<stdio.h>main(){inti,j=1;for(i=1;i<=5;i++){printf("%d",i);j++;}printf("\n*****\n");pri

温馨提示

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

评论

0/150

提交评论