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

上传人:tia****nde 文档编号:11495468 上传时间:2020-04-25 格式:PPT 页数:49 大小:451KB
返回 下载 相关 举报
c语言第5章-循环结构程序设计.ppt_第1页
第1页 / 共49页
c语言第5章-循环结构程序设计.ppt_第2页
第2页 / 共49页
c语言第5章-循环结构程序设计.ppt_第3页
第3页 / 共49页
点击查看更多>>
资源描述
#include”stdio.h”Intmain()floatx,y;scanf(“%f”,#include“stdio.h”Intmain()inta,b,c,min,max;scanf(“%d%d%d”,#include”stdio.h”intmain()inta,b,c;scanf(“%d%d%d”,#includevoidmain()inti,sum;sum=0;for(i=1;i=100;i+)sum=sum+i;printf(sum=%5dn,sum);,举例,求1100的累加和。,#includevoidmain()inti,sum;for(sum=0,i=1;i=100;i+)sum=sum+i;printf(sum=%5dn,sum);,#includevoidmain()inti,sum;for(sum=0,i=1;i=100;sum=sum+i,i+);printf(sum=%5dn,sum);,第5章,循环结构程序设计,求1+2!+3!.+20!,#includestdio.hmain()floatn,s=0,t=1;for(n=1;n=20;n+)t=t*n;s=s+t;printf(1+2!+3!.+20!=%en,s);练习:1(12)(123)。(123。10)+2/3+3/5+.,#includestdio.hvoidmain()inta,n,i,sum,jiashu;scanf(%d,%d,求a+aa+aaa+aaaa+aaa.aa(有n个a),主要内容,5.1while语句5.2do-while语句5.3for语句5.4流程转向语句break和continue5.5循环嵌套5.6循环结构程序设计举例,思考,求1100的累加和。,分析,换一种思路:,首先设置一个累计器sum,其初值为0,利用sum+=n来计算(n依次取1、2、100),只要解决以下3个问题即可:(1)将n的初值置为1;(2)每执行1次“sum+=n;”后,n增1;(3)当n增到101时,停止计算。此时,sum的值就是1100的累计和。,sum=1+2+100;.,sum=sum+n;,循环的引入,格式,while(循环条件表达式)循环体语句,P79,说明,1、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先判断表达式,后执行语句。,功能,当表达式成立(表达式的值为非0值)时,执行while语句中的循环体语句。,执行过程,5.1while语句,?,sum=凵5050,举例,例5.1求1100的累加和。P71,#includevoidmain()inti,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(sum=%5dn,sum);,思考,1、如果去掉循环体中的大括号,执行过程将会怎样变化?2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?,?,1求150的累加和.2求1100的奇数和.3求1100的偶数和.,举例,例5.2设s=123n,求s不大于400000时最大的n。P72,#includeintmain()intn=1;longints=1;while(s=400000)n=n+1;s=s*n;printf(不大于400000时的最大n为:%dns值为:%ldn,n-1,s);return0;,不大于400000时的最大n为:9s值为:3628800,前n项的乘积,运行结果:,举例,例5.3现有某班20名学生的C语言成绩,求该班学生的C语言的平均成绩。P72,请输入学生成绩:23凵89凵67凵78凵94凵56凵34凵83凵90凵67凵48凵72凵81凵65凵74凵87凵73凵67凵90凵9820名学生的C语言平均成绩为:71.8,#includeintmain()floattotal=0,score,average;inti=1;printf(请输入学生成绩:);while(i=20)scanf(%f,total:前i名学生的成绩的和score:每一名学生的成绩average:平均成绩,运行结果:,举例,例5.4从键盘输入一个非负整数m,判断m是否是素数。P73,素数(质数):只能被1和它本身整除的数。,判别方法:57:若256之间的每一个数都不能整除56,则57为素数,否则57不是素数。m,k=m-1,i=2k:若每一个i的值都不能整除m,则m为素数,否则m不是素数。,flag=0;k=m-1;i=2;while(i=k,k=m-1;i=2;while(i=k+1)printf(“yes!”);elseprintf(“no!”);,#includemath.h#includestdio.hintmain()intm,flag=0,i=2;printf(请输入一个非负整数:n);scanf(%d,求两个非负整数m和n的最大公约数和最小公倍数。,#includeintmain()intm,n,t;printf(请输入两个非负整数:);scanf(%d%d,找m、n中较小数,找m、n中较大数,例5.5(P74),格式,do循环体语句while(循环条件表达式);,P85,说明,1、循环体如果包含一个以上的语句,必须使用复合语句形式。2、在循环体中,必须有使循环条件趋向于不满足(假)的语句。3、先执行循环体语句,后判断表达式的值。,含义,执行do-while语句中的循环体语句,直到表达式的值为假(0)才跳出循环。,执行过程,至少执行一次,5.2do-while语句,举例,例5.6求1100之间的奇数和。P76,#includevoidmain()inti,sum;i=1;sum=0;dosum=sum+i;i+;i+;while(i=100);printf(sum=%5dn,sum);,思考,1、如果去掉循环体中的大括号会怎样?2、在循环体中,使循环条件趋向于不满足(假)的语句是哪条?,凵2500,运行结果:,举例,while和do-while循环的比较。,#includevoidmain()inti,sum=0;scanf(%d,#includevoidmain()inti,sum=0;scanf(%d,输入:1,输入:11,sum=55,sum=11,此程序的功能?,什么情况下两者结果相同?,格式,for(表达式1;表达式2;表达式3)语句,P87,for(循环变量赋初值;循环条件;循环变量增值)语句,执行过程,(1)先求解表达式1;(2)求解表达式2,若其值为真,则执行循环体语句,然后执行第(3)步;若为假,则结束循环,转到第(5)步;(3)求解表达式3;(4)转向步骤(2);(5)循环结束,执行for语句下面的一个语句。,5.3for语句,sum=5050,举例,求1100的累加和。,#includevoidmain()inti,sum;sum=0;for(i=1;i=100;i+)sum=sum+i;printf(sum=%5dn,sum);,?,1求155的累加和.2求1100的奇数和.3求1100的偶数和.,for(表达式1;表达式2;表达式3)语句,说明,三个表达式都可以省略。,?,结果?,说明,1,i=1;for(;i=10;i+)sum=sum+i;,2,for(i=1;i+)sum=sum+i;,?,3,for(i=1;i=10;)sum=sum+i;i+;,for(i=1;i=10;i+)sum=sum+i;,表达式1可以省略,但其后的分号不可以省略。,没有循环结束条件,构成了死循环,for(i=1;i=10;i+)sum=sum+i;,说明,4,5,for(;)sum=sum+i;,6,表达式1和表达式3可以是与循环变量无关的表达式。,for(;i=10;)sum=sum+i;i+;,7,表达式2一般是关系表达式,也可以是数值或字符表达式。,while(i=10)sum=sum+i;i+;,while(1)sum=sum+i;,表达式1和表达式3可以同时省略,此时等同于while语句。,for(sum=0,i=1;i=100,i+)sum=sum+i;,建议:for语句中只放与循环控制有关的语句。,#include“stdio.h”voidmain()inti,j,k,n;printf(waterflowernumberis:);for(n=100;n1000;n+)i=n/100;/*分解出百位*/j=n/10%10;/*分解出十位*/k=n%10;/*分解出个位*/if(i*100+j*10+k=i*i*i+j*j*j+k*k*k)printf(%5d,n);printf(n);,15313+53+33,称为水仙花数,判断所有三位数中水仙花数的个数。,举例,#includeintmain()floatsum=0.0;intn;for(n=1;n=30;n+)sum=sum+(float)n/(float)(n+1);printf(sum=%5.2fn,sum);return0;,格式,表达式1,表达式2,表达式n,P79,说明,并不是在所有出现逗号的地方都组成逗号表达式如inta,b,c;scanf(%d%d%d,含义,从左到右,依次计算各表达式的值,最后一个表达式的值即为整个逗号表达式的值。,逗号运算符和逗号表达式,举例,例5.10若a=5,求下列表达式及经过运算后a的值:P90,a=(3+2,7+8)a=2*5,a*3(a=3*5,a*4),a+5,a+=10,结果:15,结果:10,结果:25,格式,while(表达式1)if(表达式2)break;,举例,.sum=0;for(i=1;i5)break;sum=sum+i;printf(“sum=%5dn”,sum);.,while(表达式1)if(表达式2)conitue;,结束整个循环,结束本次循环,.sum=0;for(i=1;i=10;i+)if(i=5)continue;sum=sum+i;printf(“sum=%5dn”,sum);.,5.4break和continue语句,举例,例5.11分析下面程序的运行结果。P90,结束整个循环,#includeintmain()inti=0,a=0;while(i20)if(i%10=0)break;elsei+;i+=11;a+=i;printf(%dn,a);return0;,ii%10第1次执行循环00条件表达式i%10=0成立,执行break语句,跳出循环,11,运行结果:,举例,例5.12输出100以内能被7整除的最大数。P91,nn%7第1次执行循环1002第2次执行循环991第3次执行循环980第4次执行循环时条件表达式n%7=0成立,执行break语句,跳出循环,100以内能被7整除的最大数为:98,运行结果:,举例,例5.13分析下面程序的运行结果。P92,结束本次循环,#includestdio.hintmain()inti=0,s=0;doif(i%2)/n为奇数i+;continue;i+;s+=i;while(i7);printf(%dn,s);return0;,ii%2i+scontinue是否执行第1次执行循环0011否第2次执行循环1121是第3次执行循环2034否第4次执行循环3144是第5次执行循环4059否第6次执行循环5169是第7次执行循环60716否此时条件表达式17不成立,结束循环,16,运行结果:,#includevoidmain()inti;for(i=1;i3)break;if(i%2)printf(*);elsecontinue;printf(#);printf($n);,写出以下程序的输出结果:,*#*#$,抢答题,举例,例5.14把100200之间的能被13整除的数输出。P93,#includestdio.hintmain()intn;for(n=100;n=200;n+)if(n%13!=0)continue;elseprintf(%d,n);printf(n);return0;,104117130143156169182195,说明:当n不能被13整除时,执行continue语句,结束本次循环(即跳过printf函数语句),只有n能被13整除时才执行printf函数。,结束本次循环,运行结果:,举例,例5.16打印乘法口诀表。P94,#includestdio.hintmain()inti,j,result;for(i=1;i=9;i+)for(j=1;j=9;j+)result=i*j;/计算i行j列上的元素值printf(%d*%d=%-3dt,i,j,result);printf(n);return0;,resulti=1,j=11*1j=21*2j=31*3j=91*9i=2,j=12*1j=22*2j=92*9i=9,j=19*1j=29*2j=99*9,1*1=11*2=21*9=92*1=22*2=42*9=189*1=99*2=189*9=81,5.5循环嵌套,124369481216,#includevoidmain()inti,j;for(i=1;i=4;i+)for(j=1;j=i;j+)printf(“%4d”,i*j);printf(“n”);,思考1,#includevoidmain()inti,j;for(i=1;i=4;i+)for(j=1;j=5-i;j+)printf(“%4d”,i*j);printf(“n”);,思考2,1234246364,#includevoidmain()inti,j;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf(“%4c”,);for(j=5-i;j=4;j+)printf(“%4d”,i*j);printf(“n”);,思考3,4686912481216,#includevoidmain()inti,j;for(i=1;i=4;i+)for(j=1;j=i-1;j+)printf(“%4d”,);for(j=i;j=4;j+)printf(“%4d”,i*j);printf(“n”);,思考4,123446891216,举例,例5.17求Fibonacci数列的前40个数。按每行4个进行输出。,#includestdio.hintmain()intn;longintf1,f2;f1=1;f2=1;printf(%10d%10d,f1,f2);for(n=1;n=3),P96,1123581321345589144,5.8程序举例,i:第i项n:第i项的分母t:第i项的值sum:和,举例,利用公式:sum=1+1/3+1/5+1/7+1/9求前10项的和。,#include#includevoidmain()ints,i,n;floatt,sum;i=0;n=1,sum=0,t=1.0;while(i10)sum=sum+t;n=n+2;t=1.0/n;i+;printf(sum=%.2fn,sum);,运行结果:,sum=2.13,举例,利用公式:sum=1-3+5-7+9-11求前10项的和。,#include#includevoidmain()ints,i,sum,t,n;i=0;n=1,sum=0,t=1,s=1;while(i1e-6)pi=pi+t;n=n+2;s=-s;t=s/n;pi=pi*4;printf(pi=%10.6fn,pi);,思考:使用那一种循环控制语句?,pi=1-1/3+输出4*pis=1(-1)n=1,3,5,7t=s/n,运行结果:,sum=3.141594,举例,输出101200之间的全部素数。每行输出10个。,#include#includevoidmain()intm,k,i,n=0;for(m=101;m=k+1)printf(%d,m);n=n+1;if(n%10=0)printf(n);printf(n);,正常结束循环,m不是素数,例5.18用双重for循环打印出下列图形。P97*,#includestdio.hintmain()inti,j;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf();for(j=1;j=2*i-1;j+)printf(*);printf(n);,for(i=1;i=3;i+)for(j=1;j=i;j+)printf();for(j=1;j=7-2*i;j+)printf(*);printf(n);return0;,打印上三角(1-4行),打印下三角(1-3行),#includestdio.hintmain()charch;intletter=0,space=0,number=0,other=0;printf(请输入一串字符);scanf(%c,letter:字符个数space:空格个数number:数字个数other:其它字符个数,实验一、1、2、3、4、5实验二、2、4、5、8实验三、1、3、5、11(一次),若两次则全做。实验四、1、2、3、5实验五、1、2、5、6实验六、1、2、3、4实验七、1、2、3、4,举例,#includemath.h#includestdio.hintmain()int;printf(请输入a和n的值:n);scanf(%d%d,pow()函数:求xy,例5.9求Sn=a+aa+aaa+的值。如a=5,n=3时,即求表达式5+55+555的值。a和n由键盘输入。P89,请输入a和n的值:53SUM=615,运行结果:,说明,1、三种循环语句在处理循环问题时,一般可以相互替代。,2、对于循环次数固定的问题,用for语句实现比较简单。,3、对于循环次数不确定的问题,可用while语句或do-while语句实现。,4、while语句:先判断,后执行。do-while语句:先执行,后判断。,6.7几种循环语句的比较,
展开阅读全文
相关资源
相关搜索

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


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

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


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