第六章循环结构程序设计汇总

上传人:工**** 文档编号:489096926 上传时间:2023-05-07 格式:DOC 页数:48 大小:779.50KB
返回 下载 相关 举报
第六章循环结构程序设计汇总_第1页
第1页 / 共48页
第六章循环结构程序设计汇总_第2页
第2页 / 共48页
第六章循环结构程序设计汇总_第3页
第3页 / 共48页
第六章循环结构程序设计汇总_第4页
第4页 / 共48页
第六章循环结构程序设计汇总_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《第六章循环结构程序设计汇总》由会员分享,可在线阅读,更多相关《第六章循环结构程序设计汇总(48页珍藏版)》请在金锄头文库上搜索。

1、1个球投进箱子、取 2个球投进箱图6-1刀求和计算流程图第六章循环结构程序设计本章学习目标:掌握while语句及其应用掌握for语句及其应用掌握do-while语句及其应用掌握break、continue语句及其应用6. 1从刀求和说起在一个数据集中找出满足特定条件的数据、方程求根、数据排序、定积分计算等许多典 型的数据处理功能的实现中大都需要循环结构,没有循环结构,我们几乎不能使用计算机解 决任何复杂的问题,可见循环结构程序的重要性。本节讨论什么是循环结构以及为什么需要 循环结构,其他章节讨论 c语言循环结构的表示方法以及如何应用循环结构解决实际问题。 循环的概念很简单:一个操作被重复执行若

2、干次就是循环。引入循环的原因同样简单,就是 因为解决实际问题的需要。仔细观察一下我们的日常工作,大多与循环有一定的联系,学生 每天重复的事情是上课;会计每天重复的事情是记账;医生每天重复的事情是治病;总之我 们日常从事的工作许多都是重复,实际上就是循环,这里的重复不是机械地重复。让我们从 一个简单的问题说起,如果我们需要计算s=1+2+3+100,最简单的方式就是利用公式计算出结果,现在我们对这个问题加一点限制,首先不允许使用计算公式,然后给你一个大箱子和一大堆小球,请你利用这些道具完成上述计算,你会如何算出1+2+3+100的结果呢?我们可以这样进行,首先将箱子倒空,然后依次取 子、取3个球

3、投进箱子,如此进行下去,直到 取100个球投进箱子,这时箱子里球的数量就 是前100个数的累加和。这一过程可以表示成 如下算法:S1: sum 0S2:让i从1变到100,每次加1,重复执行 S3、S4S3: t iS4: sum sum+iS5: 输出sum图6-1就是该算法的流程图表示形式。在上述算法中,“ t i,sum sum+t,i i+1 ” 操作是一个需要被重复执行的操作,当 i=1时 执行一次、当i=2时执行一次、当i=3时执行一 次、当i=4时执行一次、 、当i=100时执行一次,该操作一共被执行了100次,被重复执行的操作成为循环体。根据算法我们可以写出 计算机程序,然后再

4、计算机上运行程序从而获得问题的解。对于上述问题求解方式读者可能会存在这样的一些疑问:(1)为什么不直接使用计算公式n*(n+1)/2直接算出计算结果? ( 2)算法6-1中的操作“ t i”是不是多余的操作,为什么 不使用sum sum+i”直接将i的数值累加到sum中呢?第一个问题的回答是这样的,这里我们是试图使用简单问题来说明一种问题求解思路,而不是说这个问题必须使用这样的方式求解,如果使用更加复杂的问题来说明这种问题求解 方法,并不能对阐述问题求解方法带来任何帮助,相反可能不利于理解。关于第二个问题,算法中的操作“t i,sum sum+i ”在实际使用时完全可以合并成“ sum sum

5、+i ”,那么我们为什么要多此一举呢?这是因为我们希望把这个算法当做一个更加普遍的问题求解算法的基础,看一下这样做的好处吧,如果把:“t i”修改为:“t 2 x i”那么算法将实现计算sum=2+4+198+200,如果把:“t i ”修改为:“t 2x i-1 ”,那么算法将实现计算sum=1+3+197+199,如果把:“t i ”修改为:“t f(i)”,那么算法将实 现计算sum=f(1)+f(2)+f(3)+f(199)+f(200),这里f(i)表示利用i计算出一个函数值,这就 是为什么在算法中使用了一个看起来“多余”的操作的原因。这个刀求和的问题是计算机程序设计的一个及其重要的

6、问题,图6-1表示的问题求解算法可以看做是一个可以看做是一个累加和问题求解的“刀求和原型算法”,怎么样理解这个“原型算法”呢?让我们来看几个世纪应用中经常遇到的一些问题:平均值的计算:nXi标准差计算:n_s2(n 1) i(Xi X)21级数计算:nf (x) f (X0)(X X0)i4)定积分计算:bs f (x)dxai 0n 1f (a i h) h,h (b a)/ni 0上述问题的共同特点是什么?那就是它们都是刀求和,如果使用算法求解这些问题,都 可以将图6-1表示的算法通过简单的变化而获得相应问题的求解算法,从算法角度看,它们 的差别就是t的计算方法不同,因此读者务必要将图6-

7、1所表示的算法给予足够的理解,真正理解了这个算法之后,对于很多问题的求解将是非常有帮助的,这就是为什么把这个算法 称为“原型算法”的原因,这也是我们为什么强调这个刀求和算法原因,对于上述的几个问 题的具体求解算法将在本章的后续部分将予以介绍。有了算法之后,接下来就是使用计算机语言书写程序,因为算法中存在着重复操作,因此需要有表达这种重复操作的C语言语句,C语言提供了三种表达循环结构的循环语句,这三种语句是while循环语句、for循环语句和do-while循环语句,分别用于表达不同的循环结 构。6. 2 C语言循环结构621. while 循环在2.3节中我们引进了当型循环,在C语言中,当型循

8、环也叫while循环,是一种非常常见的循环方式,这种循环的基本结构及其C语言的表示如图6-2所示:OP图6-2当型循环结构图6-2的伪代码形式也已表示成:While expr doOPEnd while图6-2对应的C语言形式是:while(expr)OP;中文含义是:当expr满足时,重复做OP操作这里expr表示条件,条件可以是:关系表达式 逻辑表达式 算术表达式表达式的真假含义与判断结构中条件的含义相同,再次提醒读者注意的一点是当条件为一算术表达式时,如果算术表达式的计算结果不是0则表示为真,如果算术表达式的计算结果为0则表示为假,图6-1中的流程图清楚地表达了循环的含义,只要条件C满足

9、(计算结构为真),则执行OP操作,执行完OP操作后再次判断条件是否满足,只要条件满足就继续执行OP操作,因此OP操作可能被重复执行若干次,循环语句结束的条件是条件C计算结果为假,循环体OP可以是:C语言语句或函数复合语句另一循环语句(见复杂循环结构) 空语句初学者常常会把 “while( expr ) OP; ”和“ while( expr ) ; OP; ”混淆,前者的循环体为 OP, 后者的循环体为空语句,OP不是while语句的循环体。/*一个简单的 while循环程序*/#i nclude stdio.hmain ()int i;i=1;while(i=10)printf(%dn,i)

10、; i+;黑体字表示的是循环语句,本章的程序中的黑体字均表示循环语句,程序的输出结果是:12345678910 对于上述程序,请读者回答如下问题:1) 循环语句结束后,变量 i 的数值是多少?2) while 语句的循环体是什么?3) 如果“ i+ ”改为“ i=i+2 ”,程序的输出结果是什么?4) 如果“ printf(%dn,i); i+; ”改为“ i+;printf(%dn,i); ”,程序的输出结果是什 么?再看下面的类似的程序:#include stdio.hmain()int i;i=1;while(i+=10) printf(%dn,i);程序的输出结果是:234567891

11、011为什么第一个输出结果是2而最后一个输出结果是11呢?原因是当i=1时,i+=10计算结果为真,但完成次计算后变量i的值已经变为2 了,因此输出第一个数据为2,同样的道理当i的值为10时,i+=10计算结果为真,完成计算后i的值变为11 了,所以输出结果为11.,当i的值为11时,i+=10计算结果为假,循环语句结束,但完成计算后i的值变为12了,所以整个循环语句结束后,变量i的值是12。循环在存在循环结构的问题求解算法中,普遍存在图6-3所示的结构。为此人们设计了专门图6-3常见的循环形式用于描述这种循环结构的C语言语句,这就是for循环语句。图6-8对应的C语言循环语句的格式是:for

12、(expr1;expr2;expr3)OP;其中expr1、expr2和expr3为三个 C语言表达式,OP 为C语言语句。图6-3清楚地描述了这个循环语句的执行过 程,用自然语言描述的for语句的执行过程是:S1:计算 expr1S2:计算expr2,如果结果非0 (为真),则转向S3,否 则结束循环语句S3:执行0PS4:计算 expr3S5:转向S2显然这个过程也可以使用while语句表示,图6-3的while语句表达形式如下:expr1;while(expr2) OP;expr3;for语句具有很强的表达能力,使用for需要注意:(1)expr1和expr2通常是赋值表达式,使用其他的

13、计算表达式一般没有意义,expr2通常是循环控制表达式,表示循环进行的条件,条件不满足(为假)则for语句执行结束。(2)expr1、expr2和expr3三个表达式均可以省略,需要注意的是如果 expr2省略,则表示expr2永远为真,如果循环体OP中没有结束循环的控制,将形成死循环。(3)语句0P可以是基本的 C语言语句,也可以使复合语句,甚至是另一循环 语句。一种典型的for语句的用法是:for(i=1;i n ;i+)S;其执行过程是当i=1时,执行一次S; i=2时,执行一次S; i=3时,执行一次S; i=n时,执行一次S; i=n+1时,for循环语句结束,整个循环语句中 S共执

14、行了 n次。这个 循环语句也可以这样理解:让 i从1变到n每次加1,重复执行So循环do-while 循环结构也是常用的一种循环表达形式,其流程图形式如图6-41所示。对应的C语言表达形式如下:doOP;while(expr);Do-while循环的伪代码形式可表示为与C语言类似的形式:DoOPWhile expr这里expr表示循环控制条件, 它可以是任何 C语言表达式,当expr为一算术表达式时, 计算结果非0表示真,为0表示假,0P表示循环体,循环体可以是 C语言的语句或者符合语 句,也可以是另一循环语句, do-while 语句的执行过程是:(1) 执行循环体 0P(2) 计算表达式 expr(3) 如果表达式expr为真,则转向(1),否则结束循环语句由于是限制性循环体后进行判断,因此,在do-while循环中,循环体 0P至少被执行一次,而while循环是先判断后执行循环体,所以 while循环的循环体 OP最少被执行0次, 假设s和i都是整数,对比下面两个程序段:s=0;s=0;i=15;i=15;while(i=10)doi+; i+; s=s+i;s=s+i;while(i=10);左边的程序段循环语句(while语句)循环结束后,变量s的值是0,而右边的程序段循环语句结束后,变量 s的值是16o624三种循环结构之间的关系c语言可以使用

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

当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号