C语言程序设计教程--第5章.pptx

上传人:莉*** 文档编号:73648941 上传时间:2023-02-21 格式:PPTX 页数:43 大小:290.98KB
返回 下载 相关 举报
C语言程序设计教程--第5章.pptx_第1页
第1页 / 共43页
C语言程序设计教程--第5章.pptx_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《C语言程序设计教程--第5章.pptx》由会员分享,可在线阅读,更多相关《C语言程序设计教程--第5章.pptx(43页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、2023/2/2115.1 while循环控制 语句一般格式 while(表达式表达式)语句语句 l l一般为一般为关系关系表达式表达式或或逻辑逻辑表达式,也表达式,也可以是可以是C C语言其他类语言其他类型的合法表达式型的合法表达式 l l用来控制循环体是用来控制循环体是否执行否执行l l称为称为内嵌语句内嵌语句,可以是基本语句、可以是基本语句、控制语句,也可控制语句,也可以是复合语句以是复合语句l l是循环重复执行是循环重复执行的部分的部分 第1页/共43页2023/2/212功能:计算表达式的值,为非,为非0 0(逻辑真)时,重复(逻辑真)时,重复执行执行内嵌语句,每执行一次,就判断一次

2、表达,每执行一次,就判断一次表达式的值,直到表达式的值为式的值,直到表达式的值为0 0 时结束循环,转时结束循环,转去执行去执行whilewhile后面的语句。后面的语句。当表达式为真 语句N-SN-S结构图结构图N NY Y流程图流程图表达式非0?语句循环控制条件循环控制条件循环体循环体第2页/共43页2023/2/213例如:【例5.1】编写程序,求100个自然数的和即:s=1+2+3+s=1+2+3+100+100 思路:寻找加数与求和的规律 加数i i从1变到100,每循环一次,使i增1,直到i的值超过100。i i的初值初值设为1。求和设变量 sum sum 存放和,循环求sum=s

3、um+isum=sum+i,直至i超过100。第3页/共43页2023/2/214算法和程序:main()int i,sum;i=1;sum=0;while(i=100)sum=sum+i;i+;printf(sum=%dn,sum);运行jc5_1程序输出结果:sum=5050i i:循环控制变量循环控制变量sumsum:累加器累加器 i=1,sum=0 当i=100 sum=sum+i i+输出sum第4页/共43页2023/2/215注意:如果如果whilewhile的的(表达式表达式)值为值为0 0,则循环体一次也不执行,则循环体一次也不执行(例如当i的初值=101)。在循环体中必须有

4、使循环趋向结束的操作,否则循环将无限进行(在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。)。在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。思考程序段的输出?while(i=100)i+;sum=sum+i;运行后,输出:运行后,输出:sum=5150sum=5150原因是什么?原因是什么?第5页/共43页2023/2/216注意(续):为了保证循环正常运行,应该特别注意:循环控制条件的描述 控制条件的初始状态(初始值)控制条件的初始状态(初始值)循环体内部对控制条件的影响循环体内部对控制条件的影响第

5、6页/共43页2023/2/2175.2 do-while语句语句一般格式 do 语句语句 while(表达式表达式);功能:先执行内嵌语句先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。第7页/共43页2023/2/218 do-while循环的算法 循环体当表达式为真N-S结构图NY循环体表达式非0?流程图main()int i=1,sum=0;do sum=sum+i;i+;while(i=100);printf(%dn,sum);用用do-whiledo-while语句语句求求100

6、100个自然数的和个自然数的和 第8页/共43页2023/2/219说明:while和和do-while都能实现循环控制,都能实现循环控制,whilewhile结构程序通常都可以转换成结构程序通常都可以转换成do-do-whilewhile结构结构l l区别:区别:do-while 语句先执行循环体再判断条件,循环体至少执行一次;while 语句先判断条件再执行循环体,循环体有可能一次也不执行l ldowhile循环体中一定要有能使表达式值趋于0的操作(如i+),否则会出现死循环。第9页/共43页2023/2/2110do-while语句的简单应用【例5.3】用辗转相除法求m和n的最大公约数定

7、义m、n、rmnT F m和n交换r=m%nm=nn=r 当r!=0时输出最大公约数m第10页/共43页2023/2/2111算法和程序:main()int m,n,r;scanf(%d,%d,&m,&n);if(mn)r=m;m=n;n=r;do r=m%n;m=n;n=r;while(r!=0);printf(%dn,m);运行jc5_3程序运行情况如下:程序运行情况如下:24,6024,60 1212第11页/共43页2023/2/21125.3 for语句 语句一般格式 for(表达式1;表达式2;表达式3)语句 l l功能:功能:计算表达式计算表达式1 1的值,再的值,再判断表达式判

8、断表达式2 2,如果其,如果其值为非值为非0 0(逻辑真),则执行内嵌语句(逻辑真),则执行内嵌语句(循环循环体体),并,并计算表达式计算表达式3 3;之后再去判断表达式;之后再去判断表达式2 2,一直到其值为,一直到其值为0 0时结束循环,执行后续语句。时结束循环,执行后续语句。循环初始条件循环初始条件循环控制条件循环控制条件循环体循环体第12页/共43页2023/2/2113for语句的算法N-S结构图for(表达式1;表达式2;表达式3)语句NY流程图计算表达式1 语句计算表达式3表达式2为真?例如:main()int i,sum;sum=0;for(i=1;i=100;i+)sum=s

9、um+i;printf(sum=%dn,sum);可部分或全部省略,可部分或全部省略,但但“;”不可省略不可省略第13页/共43页2023/2/2114省略for语句的表达式 表达式1、2、3全省略,即:for(;)就等同于:就等同于:while(while(1)1),会无限循环(死循死循环环)注意:在省略某个表达式时,应在适当位置进行循注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行环控制的必要操作,以保证循环的正确执行 省略表达式省略表达式省略表达式省略表达式1 1和表达式和表达式和表达式和表达式3 3,即:即:即:即:for for(;(;表达式表达式2

10、 2;);)就等同于:就等同于:whilewhile(表达式表达式2 2)省略表达式省略表达式省略表达式省略表达式2 2,即:即:即:即:forfor(表达式表达式1 1;表达式;表达式3 3)就等同于:就等同于:表达式表达式1;1;while(1while(1)表达式表达式3;3;第14页/共43页2023/2/2115例如:i=1;for(;i100)if(i100)for(i=1;i100)if(i100)i+;i+;第15页/共43页2023/2/2116说明:所有用 while 语句实现的循环都可以用for 语句实现。等价于:等价于:for(表达式表达式1;表达式表达式2;表达式表达

11、式3)语句;语句;表达式1;while(表达式2)语句;表达式3;第16页/共43页2023/2/2117for语句的简单应用【例5.4】求n!,即计算p=123n的值。思路:求阶乘与求累加的运算处理过程类似,只要将“+”变为“*”。设置:乘数乘数i i,初值为1,终值为n(n是循环控制终值,需要从键盘输入)累乘器累乘器 p p,每次循环令p=p*i第17页/共43页2023/2/2118程序:main()int i,n;long p;p=1;printf(Enter n:);scanf(%d,&n);for(i=1;i=n;i+)p=p*i;printf(p=%ld n,p);思考:思考:如

12、何输出如何输出1!,2!,1!,2!,n!n!?如何求如何求s=1!+2!+n!s=1!+2!+n!?运行jc5_4第18页/共43页2023/2/2119熟悉几个循环语句while(!x)x+;当 x=0 x=0 时,执行循环体x+;l lwhile(c=getchar()!=n)n=n+1;while(c=getchar()!=n)n=n+1;n n 称为称为计数器计数器,作用是统计输入字符的个数,作用是统计输入字符的个数l lwhile(num+=2);printf(%dn,num);while(num+5);do x*=-3;while(x5);先执行循环体先执行循环体x*=-3x*=

13、-3,再判断条件再判断条件(x5)(x5)l lfor(n=0;n26;n+)printf(%c ,n+A);for(n=0;n26;n+)printf(%c ,n+A);作用是作用是输出输出2626个大写字母个大写字母l lfor(sum=0,i=1;i=100;sum=sum+i,i+=2);for(sum=0,i=1;i=100;sum=sum+i,i+=2);作用是作用是计算计算100100以内的奇数和以内的奇数和 第19页/共43页2023/2/2120几种循环语句的比较while和和do-while语句的语句的表达式只有只有一个,for语句有语句有三个。while 和和for先判断

14、循环条件循环条件后执行循环体,循环体,do-while语句语句先执行循环体循环体后判断循环条件。循环条件。whilewhile语句多用于语句多用于循环次数不定循环次数不定的情况的情况do-whiledo-while语句多用于语句多用于至少要运行一次至少要运行一次的情况的情况forfor语句语句多用于要多用于要赋初值赋初值或或循环次数固定循环次数固定的情况的情况第20页/共43页2023/2/21215.4 用goto语句实现循环 有兴趣的同学自学有兴趣的同学自学不提倡使用goto语句注意注意:goto语句能实现程序无条件转移,为编语句能实现程序无条件转移,为编程提供了便利。但是无限制地使用,会

15、破程提供了便利。但是无限制地使用,会破坏程序的结构化程度。坏程序的结构化程度。因此应限制使用。因此应限制使用。第21页/共43页2023/2/21225.5 循环结构中的跳转语句有如下三种语句实现跳转:continuecontinue语句 breakbreak语句 gotogoto语句在循环语句的循环体中使用,可以进行循环的流程控制第22页/共43页2023/2/2123后续语句continue;continue;Y YN N表达式表达式?后续语句continue;continue;表达式表达式?Y YN N5.5.1 continue语句及应用 功能:中断循环体的本次执行(即跳过循环体中尚未

16、执行的语句),立即开始执行下一次循环。whilewhile语句语句do-whiledo-while语句语句后续语句计算表达式计算表达式3 3计算表达式计算表达式1 1continue;continue;表达式表达式2?2?Y YN Nforfor语句语句第23页/共43页2023/2/2124例如:int x,n=0,s=0;int x,n=0,s=0;while(n10)scanf(%d,&x);if if(x0)(x0)continue;continue;s+=x;n+;int x,n=0,s=0;int x,n=0,s=0;dodo scanf(%d,&x);scanf(%d,&x);i

17、f(x0)continue;if(x0)continue;s+=x;n+;s+=x;n+;while(n10);while(n10);for(n=0,s=0;n10;n+)for(n=0,s=0;n10;n+)scanf(%d,&x);scanf(%d,&x);if(x0)continue;if(x0)continue;s+=x;s+=x;第24页/共43页2023/2/2125应用举例【例5.7】把100200之间能被7整除的数,以十个数为一行的形式输出,最后输出一共有多少个这样的数。for(n=100;n=200;n+)n能被7整除 T F 终止本次循环 输出n 输出10个数 T F 换行

18、第25页/共43页2023/2/2126算法和程序main()int n,j=0;for(n=100;n=200;n+)if(n%7!=0)continue;printf(%6d,n);j+;if(j%10=0)printf(n);printf(n j=%dn,j);运行jc5_7第26页/共43页2023/2/2127后续语句break;break;Y YN N表达式表达式?后续语句break;break;表达式表达式?Y YN N5.5.2 循环中break的应用功能:利用break语句能够强迫终止本层循环,转到后续语句执行。whilewhile语句语句do-whiledo-while语句

19、语句后续语句计算表达式计算表达式3 3计算表达式计算表达式1 1break;break;表达式表达式2?2?Y YN Nforfor语句语句第27页/共43页2023/2/2128例如:int x,n=0,s=0;int x,n=0,s=0;while(n10)scanf(%d,&x);if(x0)break;if(x0)break;s+=x;n+;int x,n=0,s=0;int x,n=0,s=0;dodo scanf(%d,&x);scanf(%d,&x);if(x0)break;if(x0)break;s+=x;n+;s+=x;n+;while(n10);while(n10);for

20、(n=0,s=0;n10;n+)for(n=0,s=0;n10;n+)scanf(%d,&x);scanf(%d,&x);if(x0)break;if(x0)break;s+=x;s+=x;第28页/共43页2023/2/21295.6 循环的嵌套 如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套如果循环语句的循环体内又包含了另一条循环语句,则称为循环的嵌套例如:#include main()int i,j;for(i=1;i10;i+)for(j=1;j=i;j+)printf(j=i)?%4dn:%4d,i*j);运行jc5_a外循环语句内循环语句第29页/共43页2023/

21、2/2130注意:while、do-while、for循环语句可以并列,也可以相互嵌套,但循环语句可以并列,也可以相互嵌套,但要层次清楚,要层次清楚,不能出现交叉。不能出现交叉。多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。例如:例如:for(a=1;a=10;a+)for(b=0;b2n2)f fn n=l l设设 变变 量量 f1f1、f2f2和和 f3f3,并并 为为 f1f1和和 f2f2赋赋 初初 值值 1 1,令令f3=f1+f2f3=f1+f2得到第得到第3 3项;项;l l将将f1f2f1

22、f2,f2f3 f2f3,再求再求f3=f1+f2f3=f1+f2得到第得到第4 4项;项;l l依此类推求第依此类推求第5 5项、第项、第6 6项项这是一种这是一种递推算法递推算法应采用循环实现应采用循环实现第31页/共43页2023/2/2132算法和程序#define N 20main()int i,f1,f2,f3;f1=f2=1;printf(n%8d%8d,f1,f2);for(i=3;i=N;i+)f3=f1+f2;f1=f2;f2=f3;printf(%8d,f3);if(i%5=0)printf(n);f1=1,f2=1并输出for(i=3;i=20;i+)f3=f2+f1

23、f1=f2,f2=f3 输出f3 输出输出5 5个数个数 T F 换行运行jc5_5第32页/共43页2023/2/2133举例2【例5.12】判断输入的某个数m是否为素数。若是素数,输出“YES”,若不是,输出“NONO”。思路:素数是指只能被思路:素数是指只能被1 1和它本身整除的数,如和它本身整除的数,如5 5、7 7、1111、1717、等。等。l分别用2 2、3 3、,m-1m-1尝试能否整除整数m m m m。如果如果mm能被某个能被某个数数整除,则整除,则mm就不是素数就不是素数。l l这是一种这是一种穷举算法穷举算法l l设除数为设除数为j j,从从2 2循环到循环到m-1m-

24、1第33页/共43页2023/2/2134算法和程序:#include math.hmain()int j,m,k;printf(Enter an integer number:);scanf(%d,&m);for(j=2;j=m)printf(YESn);else printf(NOn);输入一个数mfor(j=2;j=m T F输出YES“输出NO运行jc5_12第34页/共43页2023/2/2135程序的优化 对于对于穷举法来说,为了提高程序的效率,就要减少来说,为了提高程序的效率,就要减少尝试次数。#include math.hmain()int j,m,k;printf(Enter

25、 an integer number:);scanf(%d,&m);k=sqrt(m);k=sqrt(m);for(j=2;j=kj=k+1j=k+1)printf(YESn);else printf(NOn);思考:如何输出思考:如何输出100100200200中所有的素数中所有的素数 第35页/共43页2023/2/2136举例3【例5.13】用牛顿迭代法求方程 2x3+4x2-7x-6=0 在在x=1.5x=1.5附近的根。附近的根。思路:思路:设xn为一个接近xa的近似根,过(xn,f(xn)点做切线,切线方程为:即:xnxn+1xy0f(x)(xn,f(xn)(xn+1,f(xn+1

26、)xa 方程的根方程的根牛顿迭代公式牛顿迭代公式 第36页/共43页2023/2/2137算法基本步骤:先先设设一一个个方方程程近近似似根根x0,求求出出方程f的值和和方程导数f1的值;f=f=2x0 x03+4x0 x02-7x0 x0-6f1=f1=6x0 x02+8x0 x0-7 用用迭迭代代公公式式x=x0-f/f1进进行行迭迭代代,求求出出x比比x0要接近方程真实的根;要接近方程真实的根;当当|x-x0|大大于于某某个个很很小小的的数数时时(如如1010-6)-6),认认为为未未找找到到,此此时时将将xx0,再次求f、f1,并迭代,又求出一个新的更接近方程根的,又求出一个新的更接近方

27、程根的x;一一直直到到|x-x0|1010-6-6时时得得到到方方程程近近似似根根:x或或x0。l l这是一种这是一种迭代算法迭代算法l l用循环实现用循环实现第37页/共43页2023/2/2138算法和程序:#include math.hmain()float x,x0,f,f1;x=1.5;do x0=x;f=2*x0*x0*x0+4*x0*x0-7*x0-6;f1=6*x0*x0+8*x0-7;x=x0-f/f1;while(fabs(x-x0)1e-6);printf(%fn,x);x赋初值x0=x计算f计算f1 计算x=x0-f/f1当|x-x0|10-6时输出x运行jc5_13第

28、38页/共43页2023/2/2139举例4【例5.11】编程序求210000以内的完全数。完全数:完全数:一个数的因子(除了这个数本身)之和等于该数本身。思路:思路:设定设定i i从从2 2变到变到1000010000,对每个,对每个i i找到其因子和找到其因子和s s;判定判定 i is s?若相等,则若相等,则i i为完全数,否则不是。为完全数,否则不是。例如:例如:6 6的因子是1、2、3,因子和 1+2+36 6因此因此 6 6 是完全数是完全数l l使用使用穷举算法穷举算法l l用用双层循环双层循环实现实现第39页/共43页2023/2/2140算法和程序:main()int i,

29、j,s;for(i=2;i=10000;i+)s=0;for(j=1;ji;j+)if(i%j=0)s+=j;if(i=s)printf(%6dn,s);for(i=2;i=10000;i+)s=0 for(j=1;ji;j+)i%j=0 T F s=s+j i=s T F i是完全数运行jc5_11第40页/共43页2023/2/2141举例5【例5.10】编程序,输出以下图形。*一共有一共有4 4 行,每行由空格和星号组成:空格数行,每行由空格和星号组成:空格数按行增加,星号按行减少按行增加,星号按行减少变量变量 i i 控制输出行数,控制输出行数,从从1 1变化到变化到4 4变量变量 j

30、 j 控制输出每行的空格和星号:控制输出每行的空格和星号:j j 从从1 1变化到变化到 i i,每次输出一个空格每次输出一个空格 j j 从从1 1变化到变化到 8-28-2*i i1 1,每次输出一个星号每次输出一个星号使用使用双重循环双重循环实现实现思路:思路:第41页/共43页2023/2/2142算法和程序:main()int i,j;for(i=1;i=4;i+)for(j=1;j=i;j+)printf();for(j=1;j=8-(2*i-1);j+)printf(*);printf(n);for(i=1;i=4;i+)for(j=1;j=i;j+)输出一个空格 for(j=1;j=8-(2*i-1);j+)输出一个星号 换行思考:思考:l l如何输出如何输出1010行行图形?图形?l l输出图形向右输出图形向右平移平移2020个字符个字符位置,应如何修改程序?位置,应如何修改程序?运行jc5_10第42页/共43页2023/2/2143感谢您的欣赏!第43页/共43页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > PPT文档

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

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com