




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章循环控制本章要求:掌握循环控制语句for语句、wh订e语句、dowh订e语句以及他们的嵌套应用;掌握break语句、continue语句的应用;熟练掌握计数、累加、累乘等简单算法 熟练掌握穷举法、迭代法第5章循琢控制结构第6章循环控制循环结构的特点:在给定条件成立时,反复执行某程序段, 直到条件不成立为止。注意两个概念:1、给定的条件称为循环条件2、反复执行的程序段称为循环体在C语言中,实现循环结构的语句主要有3种:> fox语句> while> do.While红第0章循琢控制辖构2循环结构引例:输入10个数,打印输出其中最大的数。算法设计如下:(1) 输入1个数,存
2、入变量A中,将记录数据个数的变量N赋 值为1,即N=1(2) 将A存入表示最人值的变量Max中,即Max=A(3) 再输入一个值给A,如果A>Max贝!J Max=A,否则 Max不变(4) 让记录数据个数的变量增加1,即N=N+1(5) 判断N是否小于10,若成立则转到第(3)步执行, 否则转到第(6)步。(6) 打印输出max第旷章循坏控制结构从10个数中选出最大的数的流程图6. 3 wh订e语句while(表达式)语句;表达式是循环条件,语句为循环体IX A 5:第5章循坏控制结构从10个数中选出最大的数执行过程:计算表达式的值,当值为真(非0)时, 执行循环体语句。循环结构说明:
3、计算v表达式的值,若表达式的值为真(非0)时,则执行 循环体语句;不断反复,直到表达式的值为假(0),则不执行 循环体语句,而直接转向循环体外的下一条语句。v语句是循环反复执行的程序,称为“循环体”,当需 要执行多条语句时,应使用“ ”括起来组成一个复合语句。while语句是先判断条件,后执行循环体,为“当型”循 环,因此若条件不成立,有可能一次也不执行循环体。1第5章循坏控制结构>57循环结构例:求:s=1+2+3+100 (累加法)void main() int s=0,n=l;while (n<=100) s=s+n; n+;prmtf(Ms=%dM,s); 1第刑循坏控制结
4、构8第§章循坏控制於构io例:求n! , n由键盘输入(累乘法)void main()int n,i,s;scanf(M%du,&n);s=l; i=l;/*给变量s、i赋初值*/while(i<=n)s=s*i;i+;9printf(M%d!=%dnM,n,s);第5章循坏控制於构循环结构兀,111例66利用公式才心1_3 + 丁_歹+求的值,要求:直 到最后一项的绝对值小于10«为止。#include <math.h>void main()思考与讨论:1)程序中控制循环结束的 变量(是多项式中的通项。2)如果程序中将变量n定义 为整数,程序运行
5、会出现什么 情况? float pi,t,n;int sign=l;pi=O.O; n=1.0; t=1.0;while (fabs(t) >= le-6) t=sign/n;pi=pi+t;n=n+2;sign= -sign; pi=pi*4;printf(Hpi = %fnfpi);语句求表达式的值6.4 do. wh订e语句do语句;while (表达式);执行过程:先执行循环体语句一次,再判别表达 式的值,若为真(非0)则继续循环,否则终止循环。例:求:s=1+2+3+100void main()int s=0,n=l; do s=s+n;n+; while (n<=100
6、);printf(,s=%dM,s);第5章循琢控制结构循环结构使用while和dowhile语句应注意以下几点:1 在if语句,while语句中,表达式后面都不第5章循坏控制结构l > Al "能加分号,而在do-while语句的表达式后面则必 须加分号。2当循环体由多个语句组成时,也必须用 括起来组成一个复合语句。while 和 do3. 如果循环至少要执行一次, while语句可以相互替换。纭第6噹循琢控制结构1> Al 13循环结构丫357例计算sinx = x-丄+二-丄+ .直到最后一项的绝对 71值小于le7时为止。''#include &l
7、t;math.h>void main() doubleint n;printf(11 please input x:M);scanf(M%ir&x);t=x; n=l; s=x;do n=n+2;t=-t*x>:<x/(n-l)/n;/>:< 计算通项 >:7s=s+t;/*負亦求和*/while(fabs(t)>=le.7);户当累加项的值大于le7继续循环“printf(Msin(%D=%irx,s);6. 5 for循环语句一、fo语句使用一般形式为:fo(表达式丄;表达式2;表达3)语句;表达式1 (控制变量的初始化): 用来给循环变量
8、赋初值,也允许在巾语 句外给循环变量赋初值,此时可以省略该表达式。表达式2 (循环的条件)循环条件,一般为关系表达式或逻辑表达式。表达式3 (循环控制变量的更新)用来修改循环变量的值,一般是赋值语句。求解表达式3for语句的执行过程:丄首先计算表达式丄的值。2再计算表达式2的值,若值为真 (非0)则执行循环体一次,否则跳出循环。3然后再计算表达式3的值,转回 第2步重复执行。注意:在整个fo循环过程中,表达 式1只计算一次,表达式2和表达式3 则可能计算多次。循环结构例:用for语句计算s=1+2+3+99+100void main()int s=0,n=l;while (n<=100)
9、 s=s+n;n+;printfC6s=%dn,s);void main() int n,s=0;for(n=l ;n<= 100;n+)s=s+n;printf(Ms=%dnfs);第旷章循琢控制於构77循环结构例:求n! , n由键盘输入(累乘法)s=l; i=l;/*给变量s、i赋初值*/while(i<=n) s*=i;i+;void niainO int 11J9S;scanf(M%df&n);printf(ft%d!=%dnfn,s);for(s=l i=l;i<=n;i+) s=s*i;第循坏控制结构18循环结构有关for语句的几点说明:(1) for语
10、句的一般形式中的“表达式L可以省略,此时应 在for语句之前给循环变量赋初值。注意省略表达式1时,其后 的分号不能省略。例如:i=l;for(; i<=n; i+) t=t*i;执行时,跳过“求解表达式L这一步,其他不变。1第5章循琢控制结构>1 19循环结构有关for语句的几点说明:2)如果表达式2省略,即不判断循环条件,循环无终止地进行下去。也就是认为表达式2始终为真, 环。在形式上构成死循例如:for(i=l;i+) 七=七*i;表达式1是一个赋值表达式,表达式2省略。 i=l;它相当于:while(1)i+;第5章循琢控制结构20循环结构有关for语句的几点说明:3)表达式
11、3也可以省略,但此时程序设计者应另外设法保证循环能正常结束,表达式3的功能放到循环体内。例如:for (i=l; i<=n;)七=七*i;i + +;条件,如:for(;i<=n;)t=t*i;相当于while(i<=n)k七=七*i;i+;i+;4)可以省略表达式1和表达式3,只有表达式2,即只给循环第6章循坏控制结构循环结构><123三种循环语句比较for ()while () do while();循环类型当型循环当型循环直到循环循环控制条件表达式2值非0表达式值非0表达式值非0循环变量初值在for语句行中在while之前在do之前使循环结束表达式3循环体中
12、使用专 门语句循环体中使用专 门语句-第5章循坏控制结构三种循环语句比较1)3种循环中for语句功能最强大,使用最多,任何情况的 循环都可使用for语句实现。For语句与while语句的等价代换形 式如下:for (V表达式1; 表达式2; 表达式3) 语句;表达式4while (表达式2) 语句; 表达式3; 2)当循环体至少执行一次时,用do.while语句与while语句 等价。如果循环体可能一次也不执行,则只能使用whil£语句或 for语句。第5章循琢控制结徇24循环结构6.6循环的嵌套多重循环繇(6) do一个循环内完整地包含另一个循环结构,则称为多重循环 嵌套一层称为二
13、重循环,嵌套二层称为三重循环(1) while() .while() (2) do do. while();while();(3) for() for() (4) while()for() (5) for()while()while();(7) while() do.while();(8) for() X do while();第6章循坏控制结构26循环结构对于循环的嵌套,要注意以下事项:(1)内循环变量与外循环变量不能同名;(2)外循环必须完全包含内循环;第5章循琢控制结构»;A27循环结构补充例题:打印如下形式的九九乘法表.1 X 1 = 11 X2=21 X3=31 X4=41
14、 X5=51X6=61 X7=71 X8=81X9=92X1=22X2=42X3=62X4=82X5=102X6=122X7=142X8=162X9=183X1=33X2=63X3=93X4=123X5=153X6=1B3X7=213 X 8=243 X 9=274X1=44X2=84X3=124X4=164X5=204 X 6=244 X 7=284X8=324 X 9=365X1=55X2=105X3=155 X 4=205 X 5=255 X 6=3D5 X 7=355X8=405X9=455X 1=66X2=126X3=186X4=246X5=306X6=356X7=42& X
15、8=486X9=547X1=77X2=147X3=217X4=287X5=357X6=427X7=497X8=567X9=633X1=88X2=168X3=248X4=328X5=408X6=438X7=568X8=648X9=729X1=99X2=189X3=279X4=369X5=459X6=549X7=639X8=729X9=81void main() int x,y;for(x=l ;x<=9;x+) for(y=l;yv=9;y+) printf('' % d* % d= % 2d n); printf(HnM); 'r |第5章 循琢控制结构28循环结
16、构例:打印由数字组成的如下所示金字塔图案编程分析:打印图案一般可由多重循环实现, 外循环用来控制打印的行数,内循环控制每行的 空格数和字符个数。实现打印上金字塔图案的程 序如下: void main() int i, k, j;for(i=l;i<=9;i+)/ for (k=l;k<=10-i;k+)/printfCfor (j=l;j<=2*i-l;j+)printf48+i);printf ("rT);/ 122233333444444455555555566666666666思考与讨论:I)如果将程序中的数值“10”改为 “20”,程序的输出结果有什么不同?
17、 如果改为“5”,输出结果如何?2)能否将语句 “printf(”c”,48+i);” 改为 “priiidr%c",©+i);”?第5章循坏控制结构29其它控制语句6. 8. 1 break语句作用范switch语句或循环语句功能:跳出switch语句或跳出本层循环, 转去执行后面的程序。break语句的一般形式为:break;注意:break语句用于循环体中,一般与if语句联合使用第5章循坏控制结构1> >130其它控制语句例:打印1 1000中能同时被3和5整除的前10个数。#include <stdio.h> void main() int
18、k,n=0;ror(k=l;k<=1000;k+)if(k % 3 =0 && k %5=0)printf(M%d ”,k); n+ ;if(n=10) break;1第5章循坏控制结构>131循环结构习题6. 1求两个整数的最大公约数.最小公倍数(欧几里德算法)编程分析:求最大公约数的算法如下:1)对于已知两数m, n,使得m>n。2)m除以得余数r。4) m<n, n<r,再重复执行2)。(最小公倍数二两个整数之积/最大公约3)若u0,贝Un为求得的最大公约数, 算法结束;否则执行4) o(具体代码见习题解)求最大公约数的NS流程图第5章循坏控
19、制结构32数)。循环结构求两个整数的最大公约数。(从最大公约数的定义出发)编程分析:1)输入两个整数m,n;第5章循琢控制结构342)比较m、n的大小,令t等于其中的较小值;3)判断t是否同时整除m、n,是则执行步骤5,否则执 行步骤4;4)t的值递减1,重复步骤3;5)输出t,即为m、n的最大公约数。(最小公倍数二两个整数之积/最大公约数)。1第5章循坏控制辖构133其它控制语句6. & 2 continue语句作用范围:只能用在循环体中功能:结束本次循环,转入下一次循环 条件的判断与执行。其一般格式是:continue;注意:本语句只结束本层本次的循环,并不跳出循环。其它控制语句例
20、:计算半径为1到15的的面积,仅打印面积超过50面积。void main() int r;float area;for(r= 1; r<= 15;r+) area=3.141593*r*r;if(area<50.0) continue;printf(ft square=%fn,area); 35第5章循琢控制於构其它控制语句使用 continue不用 continuevoid main() int n;for(n=7;n<=100;n+) if (n%7!=0) continue; printf(M%d n,n); void main() int n;for(n=7;n<
21、;=100;n+) if (n%7=0) printf(n%d ”,n); 1第5章循琢控制於构36brea k 与 conti n ue 的区另 ijbreak:语句只能用在switch语句或循环语句中,其作用是跳 出switch语句或跳出本层循环,转去执行后面的程序。continue:结束本次循环,即不再执行循环体中continue语 句之后的语句,转入下一次循环条件的判断与执行。应注意 的是,本语句只结束本层本次的循环,并不跳出循环。第5章循琢控制结构应用程序举例37例68判断一个给定的整数是否为素数 输入mk=sqrt(m); i=2;YesNo#include Mmath.hn vo
22、id main() int m9i,k; scanf(M %dn,&m); k=sqrt(m); for(i=2;i<=k;i+) if(m%i=O) break; if(i>k) printf(nYesnM);else printf(MNonM);27I貞结束加坏控制结构1> >1 38应用程序举例例6.9求100200间的全部素数#include nmath.hM void main() int m,i,k;for(m=100;m v=200;m+)k=sqrt(m); for(i=2;i<=k;i+) if(m%i=0) break;39if(i&g
23、t;k) printf(M%dnn,m);第循坏控制结构应用程序举例穷举法基本思想:一一列举各种可能的情况,并判断哪一种可能是符合要求 例:将一张面值为1UU元的人民币等值换成100张5元、1元和05元的零 钞,要求每种零钞不少于1张,问有哪几种组合?void main () (int x, y, zfn;printf ( ,r 5yun lyun 0.5yunnH ); n=0 ;for(x=l; x<=100;x+)for(y=l;y<=100;y+)for(z=l;z<=100;z+)if(x+y+z=100 && 5*x+y+0.5*z=100) printf (n %d %d%dnn fxfyfz);n+; printf ('f Total %dn , n);思考与讨论:上面的算法设计效率低,通 过分析注意到,X最大取值应 小于20,因每种面值不少于1 张,因此y最大取值应为ioo-x, 同时在x, y取定值后,z的值 便确定了: z=100-x-y,所以 本问题的算法使用二重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 森林火灾应急救援队伍建设考核试卷
- 火力发电厂运行数据与智能决策技术应用考核试卷
- 汽车碰撞损伤评估与修复考核试卷
- 2025年输血科应急管理与质量控制计划
- 全国中考语文备考趋势与计划
- 2025年部编版一年级语文下册教学计划优化策略
- 环境监测系统开发计划
- 二年级班主任下学期班级文化建设计划
- 大数据分析模型优化路径-全面剖析
- 检验产品包装与品牌设计-全面剖析
- 心理咨询保密协议(2024版)
- 土地整治项目工程复核工作流程
- 劳动合同到期不续签证明
- 水文资料在线整编规范
- DZ∕T 0222-2006 地质灾害防治工程监理规范(正式版)
- 2024届高考语言运用之比较赏析句子的表达效果+
- 施工现场动火作业安全(旁站记录)
- 工程变更通知单ECN模板-20220213
- 2024武汉六校联考高一(下)期中数学试卷及解析
- 课本剧哈姆雷特剧本
- 安宁护理个案
评论
0/150
提交评论