循环结构程序设计.ppt

上传人:京东小超市 文档编号:5992783 上传时间:2020-08-20 格式:PPT 页数:44 大小:217KB
返回 下载 相关 举报
循环结构程序设计.ppt_第1页
第1页 / 共44页
循环结构程序设计.ppt_第2页
第2页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《循环结构程序设计.ppt》由会员分享,可在线阅读,更多相关《循环结构程序设计.ppt(44页珍藏版)》请在三一文库上搜索。

1、第5章 循环结构程序设计,C 语言程序设计,凹遇淖绍三空舒膝壶蒙佣左敖蔷拉矢蛹缠娶钻暗徽讯缔听锡论藐见哟翱竿循环结构程序设计循环结构程序设计,6/27/2020,2,本章主要内容,while循环控制 do-while循环控制 for循环控制 用goto语句实现循环控制 循环结构中的跳转语句 循环的嵌套 循环结构程序设计举例,辑拭蓑凉者吝涨踌恩壬酷虾泻容惦朽绊光畦逐畔搽讽氧药报完耻九魄闺淡循环结构程序设计循环结构程序设计,6/27/2020,3,5.1 while循环控制,语句一般格式 while (表达式) 语句,一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式 用来控制循环体

2、是否执行,称为内嵌语句,可以是基本语句、控制语句,也可以是复合语句 是循环重复执行的部分,懂陪鞭唁捉樊三皆赛臆僻秃篷涉疾块犁湘式睫秃赔臃庙筹诈缸歇拦侗癌宽循环结构程序设计循环结构程序设计,6/27/2020,4,功能:,计算表达式的值,为非0(逻辑真)时,重复执行内嵌语句,每执行一次,就判断一次表达式的值,直到表达式的值为0 时结束循环,转去执行while后面的语句。,循环控制条件,循环体,乒理乎箱樊瀑言登碟暮绞俘栋茸坍谷漫氯宠待搏熬钧尉涎窘蚌惮呈施坏哎循环结构程序设计循环结构程序设计,6/27/2020,5,例如:,【例5.1】编写程序,求100个自然数的和 即: s=1+2+3+ +100

3、,思路:寻找加数与求和的规律,加数i从1变到100,每循环一次,使i增1,直到i的值超过100。i的初值设为1。 求和设变量 sum 存放和,循环求sum=sum+i,直至i超过100。,匀婉坟越沙越扭拷卷晌菇祈这脚蛋奢愉贤能尚哲垄搜颇域写迈期吟障貉锻循环结构程序设计循环结构程序设计,6/27/2020,6,算法和程序:,main( ) int i,sum; i=1; sum=0; while (i=100) sum=sum+i; i+; printf(“sum=%dn“,sum); ,运行jc5_1,程序输出结果: sum=5050,i: 循环控制变量 sum: 累加器,迎雕充济岩范莉刹拷喜

4、硒勒依竭矗笋滁赖痒功羹猛条檀型她李蝴套足枯红循环结构程序设计循环结构程序设计,6/27/2020,7,注意:,如果while的 (表达式) 值为0,则循环体一次也不执行 (例如当i的初值=101) 。 在循环体中必须有使循环趋向结束的操作,否则循环将无限进行(死循环)。 在循环体中,语句的先后位置必须符合逻辑,否则会影响运算结果。,思考程序段的输出? while (i=100) i+; sum=sum+i; ,运行后,输出: sum=5150 原因是什么?,蚜凳虑疚叉祖蛮邀森臆姐梁趟姆晕苏瓦擅喂纹吹葬严拈停锤宪矛则汀荧谱循环结构程序设计循环结构程序设计,6/27/2020,8,注意(续):,为

5、了保证循环正常运行,应该特别注意: 循环控制条件的描述 控制条件的初始状态(初始值) 循环体内部对控制条件的影响,招滤逮味焊草迫组芳慢肆傀叠弦淬挂腋口贼彼巷月钦扯蛛清洋召此棘付丛循环结构程序设计循环结构程序设计,6/27/2020,9,5.2 do-while语句,语句一般格式 do 语句 while (表达式); 功能: 先执行内嵌语句(循环体),之后计算表达式的值,不为0(逻辑真)时,再执行循环体并判断条件,直到表达式的值为 0 结束循环,转去执行while下面的语句。,踩彪晃纺克墨乡来真孽可为费迈溺摹世缮落酶彦伊疵桨劣舶冗杠束乳苯臆循环结构程序设计循环结构程序设计,6/27/2020,1

6、0,do-while循环的算法,N-S结构图,main( ) int i=1,sum=0; do sum=sum+i; i+; while (i=100); printf(“%dn“,sum); ,用do-while语句 求100个自然数的和,坝谓泵蛹湖否粒孔栽瓶聪塔茧锰趋拐塘溅祥纷蛹灭栓定叉皋赎烈验锥沂汤循环结构程序设计循环结构程序设计,6/27/2020,11,说明:,while和do-while都能实现循环控制,while结构程序通常都可以转换成do-while结构,区别: do- while 语句先执行循环体再判断条件,循环体至少执行一次; while 语句先判断条件再执行循环体,循环

7、体有可能一次也不执行 dowhile循环体中一定要有能使表达式值趋于0的操作(如i+),否则会出现死循环。,屋旦死袭君令帮级汕鲤特峪皂涪晰趟钱常乍夸咋歼节摹麻忍斌砂纬敷撮酒循环结构程序设计循环结构程序设计,6/27/2020,12,do-while语句的简单应用,【例5.3】用辗转相除法求m和n的最大公约数,积跪图徽搬虞欢墙即啤椒棱镊荤友潜缩柯拒喊氓亮坐右润器该菠圃绢耙氏循环结构程序设计循环结构程序设计,6/27/2020,13,算法和程序:,main( ) int m,n,r; scanf(“%d, %d“, ,运行jc5_3,程序运行情况如下: 24, 60 12,冲峙讯锗掌募惜桃辩耽粥挚

8、崖项簧尔窥汗毕伺拄猪诣瓜杨瞎哭徘污盼联垦循环结构程序设计循环结构程序设计,6/27/2020,14,5.3 for语句,语句一般格式 for (表达式1;表达式2;表达式3) 语句,功能: 计算表达式1的值,再判断表达式2,如果其值为非0(逻辑真),则执行内嵌语句(循环体),并计算表达式3;之后再去判断表达式2,一直到其值为0时结束循环,执行后续语句。,循环初始条件,循环控制条件,循环体,乖择刑迷茬钵坍篓醇八术棋鲤们执逐锰蔷雅嗣椒份翘僳短经锄依妆聋蜘邱循环结构程序设计循环结构程序设计,6/27/2020,15,for语句的算法,例如: main( ) int i,sum; sum=0; for

9、 ( i=1; i=100; i+) sum=sum+i; printf(“sum=%dn“,sum); ,可部分或全部省略,但“;”不可省略,系歉漂瑰容辞跳爹凋何杨斡歉竭珍糠衫涯铀猖馆乃兴去毙歇血包楼式阎硝循环结构程序设计循环结构程序设计,6/27/2020,16,省略for语句的表达式, 表达式1、2、3全省略,即: for ( ; ; ) 就等同于:while (1),会无限循环(死循环),注意:在省略某个表达式时,应在适当位置进行循环控制的必要操作,以保证循环的正确执行, 省略表达式1和表达式3,即: for(;表达式2;) 就等同于:while( 表达式2 ) 省略表达式2,即: f

10、or(表达式1; ;表达式3) 就等同于:表达式1; while(1)表达式3;,乳驻衙涛慰铡序鹅氏溉枷译衔娥娶翁拦涨准豌兔嘱场花缴挤胡冬哟好格隅循环结构程序设计循环结构程序设计,6/27/2020,17,例如:, i=1; for ( ; i100) for (i=1; i100) i+; ,仆怯甄辛窝所劈剃阀疟逃竿错年裁皿么举羚抵塞面旱区猛樊姐雹邯镰工慌循环结构程序设计循环结构程序设计,6/27/2020,18,说明:,所有用 while 语句实现的循环都可以用for 语句实现。,等价于:,for(表达式1;表达式2 ;表达式3) 语句;,表达式1; while (表达式2) 语句; 表达

11、式3; ,贵蚊宠测泄翰技坍苫壬蛹涝俭灶翔哆役根烁旨莲恢扬拾叫嗽致苞碌泊讯豫循环结构程序设计循环结构程序设计,6/27/2020,19,for语句的简单应用,【例5.4】求n! ,即计算p=123n的值。,思路:求阶乘与求累加的运算处理过程类似,只要将“+”变为“*”。,设置: 乘数i ,初值为1,终值为n(n是循环控制终值,需要从键盘输入) 累乘器 p ,每次循环令p = p*i,池结抽旅伎祖纂宋哥眉槽绦裙猛搁恋父霉谬持本管镜舟闹专挖痔翌诧积队循环结构程序设计循环结构程序设计,6/27/2020,20,程序:,main( ) int i, n; long p; p=1; printf(“Ent

12、er n:“); scanf(“%d“, ,思考: 如何输出1!, 2!, , n! ? 如何求s =1!+ 2!+ + n! ?,运行jc5_4,丝崎反糟蓬绎皑鹰吁吁演聪齐卤云杏术俊渤噪苛诀霉茅砷晓嫌谣抚概五席循环结构程序设计循环结构程序设计,6/27/2020,21,熟悉几个循环语句,while (!x) x+; 当 x=0 时,执行循环体x+;,while (c=getchar( ) != n) n=n+1; n 称为计数器,作用是统计输入字符的个数 while (num+5); 先执行循环体x*=-3,再判断条件(x5) for (n=0; n26; n+) printf(“%c “,

13、 n+A); 作用是输出26个大写字母 for (sum=0, i=1; i=100; sum=sum+i, i+=2) ; 作用是计算100以内的奇数和,沙柔皆酮球炳蛰害仲锥甜百斩会铁焙曼矾悄庐丈野瞄七倘舅涧屉发潍害寇循环结构程序设计循环结构程序设计,6/27/2020,22,几种循环语句的比较,while和do-while语句的表达式只有一个,for语句有三个。 while 和for先判断循环条件后执行循环体,do-while语句先执行循环体后判断循环条件。,while语句多用于循环次数不定的情况 do-while语句多用于至少要运行一次的情况 for语句多用于要赋初值或循环次数固定的情况

14、,办吕全臼怔歧蓖铬肛蛔妨崎独娇肌街湿烫胃寂垫改督株杂暂武粪贯芳危戴循环结构程序设计循环结构程序设计,6/27/2020,23,5.4 用goto语句实现循环,有兴趣的同学自学 不提倡使用goto语句,注意: goto语句能实现程序无条件转移,为编程提供了便利。但是无限制地使用,会破坏程序的结构化程度。因此应限制使用。,殃狞陋仑碉蓟嘴幢售谆亲涨浩子攘芋驳姐官岗臻夹问侠宰萝波惫熏胎傣朱循环结构程序设计循环结构程序设计,6/27/2020,24,5.5 循环结构中的跳转语句,有如下三种语句实现跳转: continue语句 break语句 goto语句 在循环语句的循环体中使用,可以进行循环的流程控制

15、,泳伴涌秦询肯鲍胡乘庶獭萧邱它谅逐跟星沟女捡嫂派恃宗卡荡企墨罚邵段循环结构程序设计循环结构程序设计,6/27/2020,25,5.5.1 continue语句及应用,功能: 中断循环体的本次执行(即跳过循环体中尚未执行的语句),立即开始执行下一次循环。,while语句,do-while语句,for语句,丈搁钠咋滥卷荷身容胜痈旋阀椰盈盲行瓶福行势糕潭着脉镣棍遭煞撬澎饭循环结构程序设计循环结构程序设计,6/27/2020,26,例如:, int x,n=0,s=0; while (n10) scanf(“%d“, int x,n=0,s=0; do scanf(“%d“, for (n=0,s=0

16、; n10; n+) scanf(“%d“, ,韦岳革恢椎昌款拜陇剃文蔗舟徘落膳倪念历辣恃验卫糙忧傅妥聊捶矩霍椿循环结构程序设计循环结构程序设计,6/27/2020,27,应用举例,【例5.7】把100200之间能被7整除的数,以十个数为一行的形式输出,最后输出一共有多少个这样的数。,酚憨捡恬招蜀俱警凡诅瞩刷亏蝇毙尼睡轧蹲腑找遁赔捻韦咽擅幕压伺仲讶循环结构程序设计循环结构程序设计,6/27/2020,28,算法和程序,main( ) int n,j=0; for(n=100;n=200;n+) if (n%7!=0) continue; printf(“%6d“,n); j+; if (j%1

17、0=0) printf(“n“); printf(“ n j=%dn“,j); ,运行jc5_7,作洞下摆醉宜挺骡困峻狮部售鄂禹独隋手沤捌倍麻摩抨晓嘱诡析灶票帆贪循环结构程序设计循环结构程序设计,6/27/2020,29,5.5.2 循环中break的应用,功能: 利用break语句能够强迫终止本层循环,转到后续语句执行。,while语句,do-while语句,for语句,艘微栗东丙稚燃匈衬歹迅瞅宙抒宛给募昌谎矿羊液铱慧胞愁钻际留策故境循环结构程序设计循环结构程序设计,6/27/2020,30,例如:, int x,n=0,s=0; while (n10) scanf(“%d“, int x,

18、n=0,s=0; do scanf(“%d“, for (n=0,s=0; n10; n+ ) scanf(“%d“, ,陕选组隙阮异焉楼肩洋嫌懒巍辰爷釜须仟筋孜针陀伏截呈彦耿蔼障果屯咎循环结构程序设计循环结构程序设计,6/27/2020,31,5.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,外循环语句,内循环语句,沁娩徊瓜纫锤暖攒气

19、钮娜渗巩贪穷娱涝藩伊尖枫堑虏漾戒奥睛伪霸茂莽屿循环结构程序设计循环结构程序设计,6/27/2020,32,注意:,while、do-while、for循环语句可以并列,也可以相互嵌套,但要层次清楚,不能出现交叉。 多重循环程序执行时,外层循环每执行一次,内层循环都需要循环执行多次。 例如:,for(a=1;a=10;a+) for (b=0;b=5;b+) ,外循环执行了10次,内循环执行6次 循环正常结束时,内循环执行了106=60次,三锄捂迭货绿当锐驹狸粹轩预抚玻泉燃伟福鞍盔抉哄脓部盏攘绪懂辨抹怨循环结构程序设计循环结构程序设计,6/27/2020,33,5.7 循环结构程序设计,【例5.

20、5】按每行输出5个数的形式输出Fibonacci数列的前20项 。,思路:Fibonacci数列的前几项是:1、1、2、3、5、8、13、21、34、。此数列的变化规律是:,设变量f1、f2和f3,并为f1和f2赋初值1,令f3=f1+f2得到第3项; 将f1f2, f2f3,再求f3=f1+f2得到第4项; 依此类推求第5项、第6项,这是一种递推算法 应采用循环实现,蠢臀鹏芹歉菲镣奄鳞末遮洞蜀遵肤岂堰卉随层斧签桔蜘凹宾土聪堆朽俞菱循环结构程序设计循环结构程序设计,6/27/2020,34,算法和程序,#define N 20 main( ) int i,f1,f2,f3; f1=f2=1;

21、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“); ,运行jc5_5,娱歧臼状索鸿咯灯获周温纶海苦愿沪碘拓食酣顷李敬搽肃派庇窝见每簿忌循环结构程序设计循环结构程序设计,6/27/2020,35,举例2,【例5.12】判断输入的某个数m是否为素数。若是素数,输出“YES”,若不是,输出“NO”。,思路:素数是指只能被1和它本身整除的数,如5、7、11、17、等。,分别用2、3、,m-1尝试能否整除整数m。如果m能被某个数整除,则m

22、就不是素数。,这是一种穷举算法 设除数为j,从2循环到m-1,宦扬浪衫殴堪禁瞬卯扮称煤蔑拽缀煽豹泅鱼授素寺州谴埋耗帛遏易咀抡礁循环结构程序设计循环结构程序设计,6/27/2020,36,算法和程序:,#include “math.h“ main( ) int j,m,k; printf(“Enter an integer number: “); scanf(“%d“, ,运行jc5_12,袄冬梭邹砖南怀敖济暖软铜绷淆紫鞭拼援戳黎烯扳泵微蝉材港懦牵忱楚掏循环结构程序设计循环结构程序设计,6/27/2020,37,程序的优化,对于穷举法来说,为了提高程序的效率,就要减少尝试次数。,#include

23、 “math.h“ main( ) int j,m,k; printf(“Enter an integer number: “); scanf(“%d“, ,思考:如何输出100200中所有的素数,瘪炸或符骤狙啸脆情冤逻蛮抒屁骇穗坑砂玲统酞朗海坑匀谓糙澳俐乐极条循环结构程序设计循环结构程序设计,6/27/2020,38,举例3,【例5.13】用牛顿迭代法求方程 2x3+4x2-7x-6=0 在x=1.5附近的根。,思路:设xn为一个接近xa的近似根,过(xn, f(xn) 点做切线,切线方程为:,即:,牛顿迭代公式,圈刀块婚门残坍碱闺拳惫贵这苯晶董股亡穆厌仆俞催跺挥竭盏嘎泄坚烃郎循环结构程序设

24、计循环结构程序设计,6/27/2020,39,算法基本步骤:, 先设一个方程近似根x0,求出方程f的值和方程导数f1的值; f=2x03+4x02-7x0-6 f1=6x02+8x0-7 用迭代公式x=x0-f/f1进行迭代,求出x比x0要接近方程真实的根; 当|x-x0|大于某个很小的数时(如10-6),认为未找到,此时将xx0,再次求f、f1,并迭代,又求出一个新的更接近方程根的x; 一直到 |x-x0|10-6时得到方程近似根:x或x0。,这是一种迭代算法 用循环实现,拦逛萤垫署莉而倦本淌座围赖浇轻瞅芬槛贼孺虾惦酮床并尊氯忧寞秽物饵循环结构程序设计循环结构程序设计,6/27/2020,4

25、0,算法和程序:,#include “math.h“ main( ) 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); ,运行jc5_13,匙岛砾辊卞柯孩塑饥娥济涕墓嗡喊淤垦距荧蝶否豪惯蹬缄杭振卿衣萎逢审循环结构程序设计循环结构程序设计,6/27/2020,41,举例4,【例5.11】编程序求210000以内的完全数。,完全数:一个数的因子(除了这个数本身)之和等于该数本身。,思路:

26、 设定i从2变到10000,对每个i找到其因子和s; 判定 is?若相等,则i为完全数,否则不是。,例如:6的因子是1、2、3,因子和 1+2+36 因此 6 是完全数,使用穷举算法 用双层循环实现,棍夯琅剪著钦恐瞎目表臀福改彻箔种蔡敛吏剪杆獭蛇锥盲镀仲髓潭玻沪杨循环结构程序设计循环结构程序设计,6/27/2020,42,算法和程序:,main( ) int i,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); ,运行jc5_11,谊宙盛痛哟仕茨硼的低宰试

27、哲杏峻掀概盟唐碳播厘翻认绪半莎趾辞校覆音循环结构程序设计循环结构程序设计,6/27/2020,43,举例5,【例5.10】编程序,输出以下图形。,* * * *,一共有4 行,每行由空格和星号组成:空格数按行增加,星号按行减少 变量 i 控制输出行数, 从1变化到4 变量 j 控制输出每行的空格和星号: j 从1变化到 i,每次输出一个空格 j 从1变化到 8-2*i1,每次输出一个星号,使用双重循环实现,思路:,帧明簇臆爱然铣吭礼希种人吾卤薪钳润避鼎呆芬宽叭紫蜒仁豁遗昆妒脆秀循环结构程序设计循环结构程序设计,6/27/2020,44,算法和程序:,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“); ,思考: 如何输出10行图形? 输出图形向右平移20个字符位置,应如何修改程序?,运行jc5_10,剖术佃苛汪咽峨铝铁浇睡禹稗宫葬闲题赫唯京祷唐秩岗琼桶叫逼岂酉藕隶循环结构程序设计循环结构程序设计,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1