第4章 循环结构程序设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、用DO WHILE语句实现循环
对于循环次数确定的循环问题使用DO循环是比 较方便的。但是,有些循环问题事先是无法确定 循环次数的,只能通过给定的条件来决定是否继 续循环。这时可以使用DO WHILE语句来实现循 环。 1. DO WHILE循环的一般格式 DO WHILE (逻辑表达式) 循环体 END DO
计算e1、e2、e3的值 e1→i 计算循环次数r
2.DO循环 执行过程
DO循环的执行次数 Y r=MAX(INT((e2-e1+e3)/e3) ,0)
r=0? N 执行循环体 i+e3→i r-1→r END DO下面的语句
说明
循环体指的是DO语句与END DO语句之间的语句, 因此循环体并不包括DO语句,执行程序时DO语句也只 执行一次。如果循环参数表达式e1、e2、e3中含有变 量,那么即便在循环体中改变变量的值,循环参数并不 改变。 • 在循环体内给循环变量赋值,是不允许的。 •
思考下列程序的执行结果
DO K=1,10,2 L=K END DO PRINT *,K,L END
例1 一个整数的因子(不包括该数本身)之和等于它本身, 则称该数为完数。例如6的因子有1,2,3,且1+2+3=6, 因此6是完数。输入一个整数,判断它是否完数 例2 Fibonacci数列定义如下: F1=1 F2=1 Fn=Fn-1+Fn-2 (n>2) 求Fibonacci数列的前30项。 例3 所谓“水仙花数”是指一个三位整数,其各位数字 立方和等于该数本身。例如,153就是一个水仙花数。 输出全部“水仙花数”。 在[100,999]范围内,对所有整数逐一验证是否符合的 条件,输出符合条件的数。这种方法称为穷举法。
以梯形法为例:
第一个小梯形的面积为: s = f (a + h) + f (a) ⋅ h 1
2 f ( a + 2 h) + f ( a + h) ⋅h 2
s2 第二个小梯形的面积为: =
f a ih f a i h 第i个小梯形的面积为:si = ( + ) + ( + ( − 1) ) ⋅ h 2
a b
之值。
二、常用程序调试技巧
设置断点 输出中间结果 注释语句的运用
实验五 常用算法
源自文库
四、循环的嵌套
如果一个循环结构的循环体又包括一个循环结构, 就称为循环的嵌套,或称为多重循环结构。在 例 求[100,1000]以内的全部素数。 (1)判断一个数是否素数。 (1) (2)利用穷举法将判断一个数是否素数的程序段, 对指定范围内的每一个数都执行一遍,即可求 出某个范围内的全部素数。
五、程序举例
总结:如何编写与调试程序
一、程序设计算法 “如何编写程序”是学习高级语言程序设计的难 点,也是学习的重点。初学者普遍感到头疼的 问题是,碰到一个问题后不知从何下手,难以 建立起明确的编程思路。根据教学基本要求, 将本章程序设计问题分为累加与累乘问题、数 字问题、数值计算等3类,每一类程序设计问 题的思路如下:
50 25 0
例2 用牛顿迭代法求方程 f(x)=2x3-4x2+3x-7=0 在x=2.5附近的实根,直到满足|xn-xn-1|≤10-6 为止。 牛顿迭代公式为:
f ( x n −1 ) x n = x n −1 − f ′( x n −1 )
(n = 1,2, L)
注意: 关于迭代初值x0的选取问题,理论上可以证明,只要选取 满足条件f(x0)f’’(x0)>0的初始值x0,就可保证牛顿迭代 法收敛。当然迭代初值不同,迭代的次数也就不同。
…… 第n个小梯形的面积为: s = f (b) + f (a + (n − 1)h) ⋅ h
n
2
本质上讲这是一个累加问题。
例4 某些分子和分母都是两位数的真分数,分子的个位数 与分母的十位数相同,而且奇怪的是:如果把该分数 的分子的个位数和分母的十位数同时去掉,所得结果 正好等于原分数约分后的结果。例如,试求所有满足 上述条件的真分数。 分析: 我们先把条件归纳为下面四点: (1) 分子和分母原为两位数; (2) 真分数; (3) 分子的个位数与分母的十位数相同; (4) 把分子的个位数和分母的十位数同时划去,分数 值不变。 考虑到分子和分母原为两位数,可以把分子和分母看成 从10到99这90个数中每次取两个数的组合,对每一种 组合验证条件(2)、(3)、(4)。
一般而言,这一类问题的算法流程图基本框架如图所示。
赋初值 当循环条件满足时 求累加项 X S=S+X 输出 图 1 累加问题算法流程图基本框架
例1 已知,分别求: (1)当N取1000时,S的值。 (2)S<0.78时的最大N值和与此时N值对应的S值。 (3)求S的值,直到累加项小于10-4为止。 第一种情况下,属于循环次数已知的循环结构,第二, 三两种情况下,属于循环次数未知的循环结构,
近似求每个小曲边梯形的面积的常用方法
(1)用小矩形代替小曲边梯形,求出各个小矩形面积, 然后累加。此种方法称为矩形法。
(2)用小梯形代替小曲边梯形,此种方法称为梯形法。 (3)用抛物线代替该区间的f(x),然后求出抛物线与 x=a+(i-1)h,x=a+ih,y=0围成的小曲边梯形面积,此 种方法称为辛普生法。
数字问题的提法往往是,求某一范围内符合某种条件的 数。这一类问题的算法设计思路是: (1)考虑判断一个数是否满足条件的算法。有时侯可以 直接用一个关系表达式或逻辑表达式来判断,如判断 奇数、偶数。但更多的情况是无法直接用一个条件表 达式来判断,这时可根据定义往往利用一个循环结构 来进行判断。 (2)在指定范围内重复执行“判断一个数是否满足条件” 的程序段,从而求得指定范围内全部符合条件的数。 这里用的方法是穷举。 一般而言,这一类问题的算法流程图基本框架如图2所示。
例1 已知某球从100m高度自由落下,落地后反复弹起。 每次弹起的高度都是上次高度的一半。求此球第10次 落地后反弹起的高度和球所经过的路程 分析:用变量H来表示下落的高度,变量R来表示反弹的 高度,变量S来表示小球经过的路程,则H的初值为 100,反弹高度R=H/2。弹起一次小球要经过下降和上 升两个阶段,小球经过的路程为H+R,这个过程如图 所示。 100
例3 求f(x)在[a,b]上的定积分。 分析:求一个函数f(x)在[a,b]上的定积分,其几何意义就 是求曲线y=f(x)与直线x=a,x=b,y=0所围成的图形 的面积。为了求得图形面积,先将区间[a,b]分成n等分, 每个区间的宽度为h=(b-a)/n,对应地将图形分成n等 分,每个小部分近似一个小曲边梯形。近似求出每个 小曲边梯形面积,然后将n个小曲边梯形的面积加起来, 就得到总面积,即定积分的近似值。n越大,近似程度 越高。这就是函数的数值积分方法。
1.累加与累乘问题
累加与累乘问题是很典型、最基本的一类算法,实际应 用中很多问题都可以归结为累加与累乘问题。算法设计 思路是: (1) 写出循环体中需要重复执行的部分。这一部分要确 定两个内容:一是求每次要累加或累乘的数;二是迭代 关系S=S+X或P=P*X。 (2) 确定终止循环的方式。一般有事先知道循环次数的 计数循环和事先不知道循环次数的条件循环两种方式, 依具体情况而定。计数循环可用一个变量来计数,当达 到一定循环次数后即退出循环。条件循环可根据具体情 况确定一个循环的条件,当循环条件不满足时即退出循 环。 (3) 确定循环初始值,即第一次循环时迭代变量的值。 (4) 重新检查,以保证算法正确无误。
第四章 循环结构程序设计
用DO语句实现循环 用DO WHILE语句实现循环 几种循环组织方式的比较 循环的嵌套 循环结构的程序设计方法
一、用DO语句实现循环
1.DO循环一般格式 DO i=e1,e2[,e3] …(循环体) END DO 其中i代表循环变量,它可以是整型或实型变量。 e1、e2、e3称为循环参数表达式,分别表示循 环变量的初值、终值和步长。循环体是在循环 过程中被重复执行的语句组。 例 求5!
2.数字问题 数字问题主要研究整数的一些自身性质与相互关系。处
理过程中常常要用到求余数、分离数字及判断整除等 技巧,务必熟练掌握。 (1)判断一个整数M能否被另一个整数N整除。 方法1:若MOD(M,N)的值为0,则M能被N整除,否则 不能。 方法2:若M-INT(M/N)*N的值为0,则M能被N整除, 否则不能。 事实上,MOD(M,N)的函数值是M除以N的余数,正是 按 照 表 达 式 M - INT(M/N)*N 得 到 的 计 算 结 果 。 M- INT(M/N)*N也可以写成M- M/N*N。 (2)分离自然数M各位的数字。
M 从 a 变化到 b M 符合 Y 处理 M 条件? N
图 2 数字问题算法流程图基本框架
例2 若两个素数之差是2,则称这两个素数是一 对孪生数。例如,3和5是一对孪生数。求[2, 500]区间内 (1)孪生数的对数。 (1) (2)最大的一对孪生数。
3.数值计算问题
数值计算是“计算方法”课程研究的对象,主要研究如 何用计算机来求一些数学问题的数值解。目前数值计 算方法已趋于完臻和成熟,许多问题都有了现成的算 法或软件包。详细内容可参阅数值分析或计算方法方 面的专著,或直接使用有关软件。 (1)用牛顿迭代法求方程f(x)=0在x=x0 附近的实根。直到 ∣xn-xn-1∣≤ε为止。 (2)求 S = ∫ f ( x)dx
实验四 循环结构程序设计
三、几种循环组织方式的比较
实现循环结构的三种语句,它们各具特点。一 般而言,事先能确定循环次数的循环问题用 DO循环,而事先不能确定循环次数的循环问 题用DO WHILE循环。但这并不是绝对的,很 多情况下它们是可以相互代替的。 例 输入一个整数m,判断是否素数。 • 用DO循环实现。 • 用DO WHILE循环实现 • 用DO循环和逻辑IF语句的嵌套实现。
例 输出所输入的全部正数,直到输入负数或零,程序结 束。
2.DO WHILE循环的执行过程
满足循 环条件?
执行循环体
END DO下面的语句 例 输入一个整数,输出其位数。
3.与循环有关的控制语句
• • EXIT语句 CYCLE语句
CYCLE语句和EXIT语句的区别在于:CYCLE语句只结束 本次循环,而不是终止整个循环的执行。EXIT语句则是 结束所在循环,跳出所在循环体。