C语言程序设计第5章循环结构程序设计.ppt

上传人:tia****nde 文档编号:12805541 上传时间:2020-05-25 格式:PPT 页数:54 大小:593.50KB
返回 下载 相关 举报
C语言程序设计第5章循环结构程序设计.ppt_第1页
第1页 / 共54页
C语言程序设计第5章循环结构程序设计.ppt_第2页
第2页 / 共54页
C语言程序设计第5章循环结构程序设计.ppt_第3页
第3页 / 共54页
点击查看更多>>
资源描述
5.1while语句5.2do-while语句5.3for语句5.4break、continue和goto语句5.5循环的嵌套5.6复合结构程序举例,第五章循环结构程序设计,教学目的和基本要求:,要求学生了解循环结构程序设计,掌握各种循环语句应用的特点及异同点,掌握循环嵌套及复合结构。,教学重点:,各种循环语句应用的特点及异同点。,scanf(“%f”,.这样重复一百次,然后输出s的值。,这样写显然非常麻烦。我们注意到程序中的scanf(“%f”,两句话是一直重复的,如果能用一种语句,使这两句话能自动的重复执行一百次,就可以简化了书写的麻烦,这就是循环语句。,编程解决这样的一个问题:从键盘输入一百个学生的成绩,求总成绩。,从前面所学,有两种解决方法。1.设一百个变量,分别输入学生的成绩,然后求和。这种方法浪费内存空间,显然不实际。2.设一个变量,每次输入一个学生成绩,累加后再输入下一个学生成绩,如下:,C语言有while、do-while、和for语句三种循环结构语句。前两个称为条件循环,即根据条件来决定是否继续循环;后一个称为计数循环,即根据设定的执行次数来执行循环。,5.1while语句,一般形式:while(表达式)语句,1.计算表达式,2.如果表达式的值为非零,执行语句,3.返回第一步,重新计算表达式,4.如果表达式的值为零,则结束循环,如果表达式的值一开始就为0,则语句一次也不会被执行。,执行流程:,while语句举例,问题:求学生的平均成绩,以输入负数成绩为结束,算法分析:1.定义变量score存储学生成绩,定义s=0存储累加的成绩,定义n=0统计录入的成绩数目。2.输入第一个学生的score3.若score=0,执行第4步,否则执行第7步4.n+5.s=s+score6.录入下一个score,并返回第3步7.如果n0,输出s/n否则输出没有学生成绩,main()intn=0;floats=0,score;scanf(“%f”,程序:,5.2dowhile语句,一般形式:do语句while(表达式);,1.执行语句,3.表达式的值为非零,返回第1步,4.表达式的值为零,结束循环,语句至少被执行一次。,2.计算表达式,执行流程:,注意:分号不能丢,表达式,main()intn=0;floats=0,score;doscanf(“%f”,用do-while语句编写统计学生平均成绩的程序:,由于do-while语句至少要被执行一次,特别要注意n和s的取值问题!,想想这样的一段循环语句的执行结果:i=1;while(i=100)putchar(*);i+;,这个循环永远不会结束,因为循环控制变量i没有在循环体内被改变,i+;不属于循环体。,应该改为:,i=1;while(i=100)putchar(*);i+;,循环语句中一定要注意表达式的值是否能在循环执行过程中被改变,以免造成死循环。,5.3for循环语句,for(表达式1;表达式2;表达式3)循环体语句,一般形式:,1.计算表达式1,通常用于循环开始前设置变量初值。2.计算表达式2,值为0则结束循环,否则执行第3步。3.执行循环体语句。4.计算表达式3,返回第2步。,执行流程,例:求1+2+99,#includemain()inti,s=0;for(i=1;i=99;i+)s=s+i;printf(“s=%d”,s);,分析:用变量i从1到99循环,把i的值累加到变量s中,最后输出s的值。,程序如下:,从上面的程序我们看到,for语句中:表达式1:通常是给循环变量赋初值表达式2:循环是否继续执行的判别表达式,这个表达式通常与某一个(或多个)变量的值有关,随着这个(些)变量的值的改变,表达式的结果发生变化,这个(些)变量被称为循环因变量。表达式3:通常用于改变循环因变量的值。,在某些情况下,for语句中的表达式1、2、3都可以省略,而改用其他的方式来实现这些功能。我们还用上面的例子说明for语句省略表达式的情形。,1.省略表达式1:,#includemain()inti=1,s=0;for(;i=99;i+)s=s+i;printf(“s=%d”,s);,2.省略表达式3:,#includemain()inti,s=0;for(i=1;i=99;)s=s+i;i+;printf(“s=%d”,s);,3.同时省略表达式1、3,#includemain()inti=1,s=0;for(;i=99;)s=s+i;i+;printf(“s=%d”,s);,表达式2也可以省略但在循环体中要借助break;语句来实现循环的结束,我们将在后面介绍。,注意:表达式省略,分号不省略。,for语句中的表达式可以是一切形式的表达式,逗号运算符参与的表达式也可以运用在for语句中,通常运用于表达式1和表达式3。如上面的例子可以改写为:,#includemain()inti,s;for(s=0,i=1;ij时结束循环(即i=j时继续循环)。最后输出s。,程序如下:,#includemain()inti,j;floats=0;for(i=1,j=100;i=j;i+,j-)s=s+(float)i/j;printf(“ns=%f”,s);,for、while、do-while的比较,所有需要用到循环结构的程序,都可以用for、while、do-while中的任何一个来实现,区别只在于某些问题用哪种语句更方便。,比如求1+2+99的问题我们也可以分别用while与do-while语句编写如下:,用while:,#includemain()inti=1,s=0;while(i99时,利用break语句强行终止for循环,继续执行for语句后的下一条语句。,5.4.2continue语句,该语句被称为继续语句。在循环结构中执行continue语句,使本次循环提前结束,即跳过循环体中continrue语句下面的尚未执行的循环体语句,但不结束整个循环,继续进行下一次循环的条件判别,条件为真,继续进行执行循环语句。,一般形式:continue;,例:下面这个程序,想想它实现的是什么功能?,#includemain()inti,s=0;for(i=1;i=100;i+)if(i%5=0)continue;s=s+i;printf(“n%d”,s);,在左边的程序中,i从1到100循环,当i是5的倍数时,直接进入下一个i,当i不是5的倍数时,把i累加到s,最后输出s。所以,这个程序实现的是求1100中间所有非5的倍数的数之和。,5.5循环的嵌套,当循环体语句又是一条循环语句,或作为循环体的复合语句中又包含循环语句时称为循环的嵌套。嵌套可以是两层或多层。While、do-while、for三种循环都可以互相嵌套。,循环体语句可以是任何形式的语句,简单语句、空语句、复合语句、流程控制语句都可作为循环体语句。,例:输出nm中(0n0,执行第6步,否则执行第9步,#includemain()longa,x,i,t,n,m;scanf(“%ld%ld”,程序:,问:能把a%3=0也放到for循环语句的表达式2中,写成a=mfor(a=3;a=150;a+)for(i=2;ic0,a、b、c为整数,且a+b+cbc、a+b+cbprintf(“n%d”,n);,for(c=1;c=97;c+)for(b=c+1;b=98;b+)for(a=b+1;ac,而不需要再在if中判断。改进如左所示:,for(a=1;ab,#includemain()longintI,s=0;for(I=10;I=130;I+)s=s+I*I;printf(“n%d”,s);注意:i一定要是longint型。,编程练习,1.10,130之间,所有整数的平方和。,分析:用变量i从10到130循环,用变量s求和,s初值为0,每次循环,s=s+i*i;,#includemain()longintI,s=0;for(I=10;I=150;I+)if(I%2!=0)s=s+I*I;printf(“n%ld”,s);,2.10,150奇数的平方和。,分析:用变量s求和,s初值为0。用变量I从10到150循环,如果I是奇数(I%2!=0),则s=s+I*I,#includemain()longintI,s=0;for(I=10;I=150;I+)if(I%3=0|I%7=0)s=s+I*I;printf(“n%ld”,s);,3.10,150之间,能被3或7整除的数的平方和。,分析:用变量s求和,s初值为0。用变量I从10到150循环,如果I能被3或7整除(I%3=0|i%7=0),则s=s+I*I,#includemain()intI,n=0;for(I=1;I=800;I+)if(I%3=0,4.1,800中能被3和8整除的数的个数。,分析:用变量n求个数,n初值为0。用变量I从1到800循环,如果I能被3和8整除(I%3=0floats=0;for(I=1;I5500,循环结束。,#includemain()intI;floata=1;for(I=2;I=25;I+)a=1/(1+a);printf(“n%.10f”,a);,7.a1=1a2=1/(1+a1)an=1/(1+an-1),求a25(结果保留10位小数),分析:用变量a求项,a初值为1。用变量I从2到25循环,a=1/(1+a),#includemain()intI;longinta=1;floats=0;for(I=1;I=10;I+)a=a*I;s=s+1.0/a;printf(“n%.10f”,s);,8.1/1!+1/2!+.+1/10!(结果保留10位小数),分析:用变量s求和,s初值为0。用变量a求阶乘,a初值为1。用变量I从1到10循环,a=a*I,s=s+1/a。,main()floats=1;intn;longinta=1,b=1;for(n=1;n=40;n+)a=a*n;b=b*(2*n+1);s=s+(float)a/b;printf(“ns=%.10f”,s);,9.求s=1+1/3+(1*2)/(3*5)+(1*2*n)/(3*5*(2*n+1)当n=40时的值。(结果保留10位小数),分析:用变量s求和,s初值为1。用变量a用来求项的分子,变量b求项的分母,a、b初值均为1。用变量n从1到40循环,a=a*n,b=b*(2*n+1),s=s+a/b。,#includemain()longintf1=1,f2=1,f,n;for(n=3;n=40;n+)f=f1+f2;f1=f2;f2=f;printf(“nf=%ld”,f);思考:求14万之内的最大的f(n).,10.数列1,1,2,3,5,8.有f(n)=f(n-1)+f(n-2),f(1)=1,f(2)=1,求f(40),分析:用变量f1、f2、f作为数列相邻的三项,初值f1=1,f2=1。用变量n从3到40循环,f=f1+f2,f1=f2,f2=f.,#includemain()intn;floats=0;for(n=1;n=1;a-)for(j=2;j20)break;printf(“n%d”,s);,12.求1000以内最大的20个素数之和。,分析:用变量s求和,s初值为0。用变量I统计以求得素数的个数,I初值为1。用变量a从1000到1循环,如果a是素数,并且I值小于等于20,则s=s+a,I+。当i值大于20时,跳出循环。素数求法同上题,用变量j从2到a-1循环。,main()inta,b,n=0,I;for(a=200;a=998;a+)for(I=2;Ia;I+)if(a%I=0)break;if(a=i)b=a+2;for(I=2;Ib;I+)if(b%I=0)break;if(b=i)n+;printf(“n%d”,n);,13.200,1000的双胞胎数的对数。双胞胎数:两素数差为2称为双胞胎数。,分析:用变量n统计以求得双胞胎数的对数,n初值为0。用变量a从200到998循环,如果a是素数,则令变量b=a+2,如果b也是素数,则n值增1。素数求法同前,用变量i循环,main()inta,c,n=0,I;for(a=10;a=200;a+)c=0;for(I=1;I=1;a-)s=0;for(I=1;Ia;I+)If(a%I=0)s=s+I;if(a=s)break;printf(“n%d”,a);思考:求1000以内所有完数的和。,15.求1000以内最大的完数。完数就是其真因子的和等于其本身的数。,分析:用变量a从1000到1循环,如果a等于其真因子的和,则循环结束。判断a是否等于其真因子的和:用变量s求a的真因子的和,s初值为0,用变量I从1到a-1循环,如果a%I=0,则s=s+i。得出s值后,若a=s,则a为所求。,#include#include“math.h”main()doubles,a=0,n;for(n=1;n=50;n+)a=a+log(n);s=sqrt(a);printf(“ns=%.6lf”,s);,16.S=sqrt(ln(1)+ln(2)+ln(n)n=50(结果保留6位小数),分析:开平方数及自然对数都是math.h函数库中已定义的函数。可用n从1到50循环直接求得。注意函数定义的数据类型。,main()inta,b,s=6000,t;for(a=1;a(a+b)s=a+b;t=b;printf(“n%d”,b);,17.0aa+b,则s=a+b,并保存b的值在变量t.,本章结束,再见!,同学们:,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!