程序设计方法学 第三章 结构化设计方法(2)
3.3结构化设计方法

结构化设计方法1.结构化设计方法的特点结构化设计方法简称SD方法,是系统设计时应用最为广泛和最为成熟的方法之一。
一般来说,SD方法是继SA方法之后,将结构化分析阶段形成的系统逻辑冒险转化成一个具体的物理方案,该阶段主要是解决“如何做”的问题。
在这一阶段中,系统设计人员的主要任务是在保证逻辑模型的前提下,尽可能提高系统的可靠性、工作质量、效率和可变更性。
SD方法分为总体设计和详细设计两步。
总体设计的任务是决定系统的模块结构,这一步主要考虑以下四个问题:如何将系统划分为一个个模块;模块之间传递什么数据;模块之间如何进行调用;如何评价模块结构的质量。
详细设计的任务是具体考虑每一个模块内部采用什么算法,模块的输入、输出以及该模块的功能。
2. 结构图SD方法的主要生成文档是结构图以及相应的模块能够说明。
结构图简称SC图。
结构图的基本元素是模块,一般用矩形框表示。
结构图将一个系统分解为若干个模块,每个模块可以看成一个“黑盒”,在图中表示它的层次、构成和相互之间的关系。
结构图通常用层次结构表示,这样的结构可以描述系统逐层分解的过程,即系统总的功能是如何分解为一个个具体任务的。
由于结构图是一个分层结构,因此,图中的上层模块与下层模块的关系旧丛逻辑上讲是模块的能够包括了下层模块的功能,从物理上讲是一个调用关系。
一般来说,结构图以下四种成分。
(1)模块模块用矩形框表示,矩形框中表明模块的名称,它反映模块的功能。
在结构图中,模块被看成是一个黑盒,只考虑该模块的外部表现(如输入/输出参数和功能),而不考虑该模块的内部机构(如内部代码,内部数据等)。
(2)调用在结构图中,用一些带有圆圈的小箭头来表示模块之间的通信,即模块调用时数据或控制信息的传递,箭头的方向表示传递的方向。
其中带有空心圆圈的小箭头表示数据的传递,而带有实心圆圈的小箭头表示控制信息的传递。
(3)模块间信息传递在结构图中,有时还要用到一些辅助符号。
用带箭头的连线表示模块之间的通信,箭头的方向表示传递的方向。
第3章 结构化程序设计

循环体
是 P2 否
图3.7直到型循环结构示意图 直到型循环结构示意图
3.3 表述算法
• 通常用自然语言、计算机语言(代码)、伪代码[1]、传统流程图、 通常用自然语言、计算机语言(代码)、伪代码 、传统流程图、 )、伪代码 N-S流程图、PAD图等不同的方法来描述算法。 流程图、 图等不同的方法来描述算法。 流程图 图等不同的方法来描述算法 • 在例 中,采用了自然语言来表示算法。自然语言就是人们日常使 在例3.1中 采用了自然语言来表示算法。 用的语言,可以是汉语、英语,或其他语言。 用的语言,可以是汉语、英语,或其他语言。用自然语言表示算法通 俗易懂,但文字冗长,容易出现歧义性。自然语言表示的含义往往不 俗易懂,但文字冗长,容易出现歧义性。 太严格,要根据上下文才能判断其正确含义。此外, 太严格,要根据上下文才能判断其正确含义。此外,用自然语言来描 述包含分支和循环的算法,很不方便。因此, 述包含分支和循环的算法,很不方便。因此,除了那些很简单的问题 以外,一般不用自然语言描述算法。 以外,一般不用自然语言描述算法。 • [1] 伪代码是介于自然语言与计算机语言之间的文字符号。一般借助 伪代码是介于自然语言与计算机语言之间的文字符号。 一种高级语言的控制结构,而中间的操作用自然语言描述。 一种高级语言的控制结构,而中间的操作用自然语言描述。
P1 是 循环体
否
• 图3.6当型循环结构示意图 当型循环结构示意图
(2)直到型循环的执行过程为: )直到型循环的执行过程为: • 先执行循环体一次,然后判断控制循环的条件。 先执行循环体一次,然后判断控制循环的条件。 • 条件 成立,则继续上述循环体,直到条件不成立时,结束循环。 条件P2成立,则继续上述循环体,直到条件不成立时,结束循环。 成立
结构化程序设计

结构化程序设计2篇结构化程序设计(一)结构化程序设计是一种程序设计方法论,它以模块化和层次化为基础,旨在提高程序的可读性、可维护性和可测试性。
它强调程序应该按照一定的规则和约定进行组织,以便更加清晰和结构化地表达程序逻辑。
在结构化程序设计中,程序被划分为多个模块或函数,每个模块或函数负责执行特定的任务。
这些模块之间通过调用和传递数据来协同工作,从而完成整个程序的功能。
通过将程序划分为多个模块,结构化程序设计降低了代码的复杂度,使得代码更加易于理解和维护。
在结构化程序设计中,每个模块或函数都应该遵循以下几个原则:1. 单一入口原则:每个模块或函数都应该有且仅有一个入口点,这样可以提高代码的可读性和可测试性。
2. 自顶向下设计:程序应该从高层次的模块开始设计,逐渐细化为更详细的模块,直到设计完整的功能。
3. 逐步细化:模块或函数应该通过不断地逐步细化,将复杂的问题分解为更小、更简单的子问题,并逐个解决。
4. 信息隐藏原则:模块或函数应该隐藏内部实现细节,只对外部提供必要的接口,以保证模块之间的独立性和可重用性。
5. 顺序、选择和循环结构:程序的逻辑应该通过顺序、选择和循环结构进行控制,以保证程序的正确性和可读性。
结构化程序设计具有许多优点。
首先,它提供了一种清晰、结构化的方式来组织和表达程序逻辑。
其次,它降低了程序的复杂度,使得程序更加易于理解、调试和维护。
此外,结构化程序设计还可以提高程序的可重用性和可测试性,从而降低了开发和维护的成本。
然而,结构化程序设计也有一些限制。
它适用于解决相对简单和结构化的问题,但对于复杂的、非结构化的问题可能不太适用。
此外,结构化程序设计较为静态,不太适应快速变化和不断迭代的需求,因此在某些场景下可能需要其他的程序设计方法。
总的来说,结构化程序设计是一种经典的程序设计方法论,它可以提高程序的可读性、可维护性和可测试性。
通过合理地划分程序结构,结构化程序设计可以使程序更加清晰和结构化,从而提高开发和维护的效率。
结构化程序设计方法

模块设计的方法: •模块化设计的思想实际上是一种“分而治之” 的思想,把一个大任务分为若干个子任务, 每一个子任务就相对简单了。 •在拿到一个程序模块以后,根据程序模块的 功能将它划分为若干个子模块,如果这些子 模块的规模还嫌大,还再可以划分为更小的 模块。这个过程采用自顶向下方法来实现。 •子模块一般不超过50行。 •划分子模块时应ห้องสมุดไป่ตู้意模块的独立性,即:使 一个模块完成一项功能,耦合性愈少愈好。
采取以下方法来保证得到结构化的程序: • 自顶向下; • 逐步细化; • 模块化设计; • 结构化编码。
两种不同的方法: • 自顶向下,逐步细化; • 自下而上,逐步积累。
用这种方法逐步分解,直到作者认为可以直接将各 小段表达为文字语句为止。这种方法就叫 做“自顶向 下,逐步细化”。
自顶向下,逐步细化方法的优点: 考虑周全,结构清晰,层次分明,作者
(5)检测程序,我们做的东西是否正确,不正确检测 错误。这一步是需要耐心的,不要怕错误,每一次检 测都会让你提高。做事时,不要因一些错误而畏缩不 前。
自上而下的编程方法基本步骤
(1)首先对你所面临的问题进行精确描述,即你遇到
的到底是什么问题;
(2)定义输入输出量,即分析我们的目的是什么和现 有的条件;
(3)设计算法,逐层分解,逐步求精,这是做事情的 一个过程,大部分人做事出错就出在这个地方,懒得 到逐层分解,逐步求精,总是妄想一步登天;
(4)把算法转化为程序语言,这一步是踏踏实实做的 过程,没有这一步你什么也做不成。
第3章 程序的控制结构及结构化程序设计方法

max=yours
输出max 程序见eg3_4_3
3.3 选择结构程序设计
例3.5 体型判断。判断某人是否属于肥胖,可根据身高 与体重等因素来判断,按照“体指数”对肥胖程度进 行划分: 2 体指数t = 体重w /(身高h ) (其中,w单位为kg,h单位为m) 当 t<18 时,为低体重; 当 t介于18和25 之间时,为正常体重; 当 t介于25和27 之间时,为超重体重; 当 t>27 时,为肥胖。
S6:n=n+1
S7:若n 100,返回到S4,
否则结束。
3.1.3 算法的表示方法
一、自然语言表示 二、流程图表示
处理框
输入输出框
起止框
判断框
连接符
流程线
3.1.3 算法的表示方法
例1中求5!的算法用流程图表示:
算法: 开始 P=1 i=2 p
N
S1:p=1
S2:i=2 S3:p i
i5
真
表达式2
真
假
表达式3
真
假
else if(表达式m) 语句m else 语句m+1
适合于解决多分支选择问题
语句1
语句2
语句3
语句4
3.3 选择结构程序设计
例3.4 从键盘输入你和你朋友的年龄,编程判断谁的年龄 最大,并打印他的年龄。
算法1: 用不带else子句的if语句编程。 N-S流程图: Y 输出yours his>yours 读入 yours,his yours>=his N
-x
x>0 x=0 x>0
3.3 选择结构程序设计
选择结构的流程图表示
入口 真 假 真
结构化程序设计方法

结构化程序设计⽅法简介结构化程序设计由迪克斯特拉(E.W.dijkstra)在1969年提出,是以模块化设计为中⼼,将待开发的软件系统划分为若⼲个相互独⽴的模块,这样使完成每⼀个模块的⼯作变单纯⽽明确,为设计⼀些较⼤的软件打下了良好的基础。
基本要点1. 采⽤⾃顶向下,的程序设计⽅法2. 使⽤三种基本控制结构构造程序:(任何程序都可由顺序、选择、重复三种基本控制结构构造。
)(1)⽤顺序⽅式对过程分解,确定各部分的执⾏顺序。
(2)⽤选择⽅式对过程分解,确定某个部分的执⾏条件。
(3)⽤循环⽅式对过程分解,确定某个部分进⾏重复的开始和结束的条件。
(4)对处理过程仍然模糊的部分反复使⽤以上分解⽅法,最终可将所有细节确定下来。
基本结构顺序结构 顺序结构表⽰程序中的各操作是按照它们出现的先后顺序执⾏的。
选择结构 选择结构表⽰程序的处理步骤出现了分⽀,它需要根据某⼀特定的条件选择其中的⼀个分⽀执⾏。
选择结构有单选择、双选择和多选择三种形式。
循环结构 循环结构表⽰程序反复执⾏某个或某些操作,直到某条件为假(或为真)时才可终⽌循环。
在循环结构中最主要的是:什么情况下执⾏循环?哪些操作需要循环执⾏?循环结构的基本形式有两种:当型循环和直到型循环。
当型循环:表⽰先判断条件,当满⾜给定的条件时执⾏循环体,并且在循环终端处流程⾃动返回到循环⼊⼝;如果条件不满⾜,则退出循环体直接到达流程出⼝处。
因为是"当条件满⾜时执⾏循环",即先判断后执⾏,所以称为当型循环。
直到型循环:表⽰从结构⼊⼝处直接执⾏循环体,在循环终端处判断条件,如果条件不满⾜,返回⼊⼝处继续执⾏循环体,直到条件为真时再退出循环到达流程出⼝处,是先执⾏后判断。
因为是"直到条件为真时为⽌",所以称为直到型循环。
特点优点结构化程序设计的基本思想是采⽤"⾃顶向下,逐步求精"的程序设计⽅法和"单⼊⼝单出⼝"的控制结构。
cc程序设计第3章 结构化程序设计
3.2 选择结构程序设计
1. 选择结构概念 选择结构是指在程序执行到某处时,需要按照
某个条件的真假或某表达式的值决定执行哪些操作。 如,三角形面积计算以及一元二次方程求根中遇到 的思考问题。
选择结构体现了程序的判断能力。
真(非0)
条件表达式
语句段1
假(0)
语句段2
3.2.1 条件表达式
1. 关系运算符
double a , b , c , s , area ; scanf( "%lf%lf%lf", &a, &b, &c); s=(a+b+c)/2 ; area=sqrt(s*(s-a)*(s-b)*(s-c)); printf("%lf ", area); }
3.1 顺序结构程序设计
【例3-加2】 假设△>=0,求一元二次方程的实数根
。设a , b , c 为正整
数,要求dit值保留2位小数。
分析:
1)需要调用库函数中 的开平方根函数,故 需增加
“#include math.h” 头包含命令。
2)因开平方根函数 sqrt ( )的值为double类 型,故变量dit应定义 为double类型。
程序: #include <stdio.h> #include <math.h> int main ( ) { int a , b , c ;
3.1 顺序结构程序设计
1.顺序结构
顺序结构表示程序中的各操作是按照它们出现的 先后顺序执行,程序从入口处开始,按顺序执行所有 操作(下图中块A和块B可能是一段代码,也可能是一 个语句),直到出口处,所以称为顺序结构。
结构化设计方法2篇
结构化设计方法2篇第一篇:结构化设计方法1. 简介结构化设计是一种基于模块化和层次化的系统设计方法,可以将复杂的系统划分成若干个模块,并按照一定规律组合起来,确保系统的可靠性、可维护性和可扩展性等方面的优良特性。
本文将详细介绍结构化设计的方法和步骤。
2. 结构化设计的方法2.1 模块化设计首先,系统设计要划分成若干个模块,每个模块要尽可能独立,只与周围的模块相互通信,而不与其他的模块产生相互的影响。
通常情况下,项目组根据业务需求和技术要求,选择最合适的模块划分方案。
一般来说,划分一个系统成若干个独立的模块是比较容易的,需要在设计开始之前,对系统有一个清晰的概念。
2.2 层次化设计接下来,系统设计应该按层次进行划分,每一层应该有一个特定的作用,只负责该层对上层或者下层的交互。
通常情况下,项目组会根据系统的性质和组织结构,选择最佳的层次划分方式,以此保证系统架构的稳定性和可扩展性。
2.3 组合设计在模块化和层次化设计的基础上,项目组需要通过组合设计,将若干个独立的模块组合成一个完整的系统。
在组合设计中,项目组需要注意一些关键问题,例如,如何识别和管理组件之间的依赖关系,如何处理组件之间的冲突等。
2.4 接口设计在结构化设计过程中,项目组需要关注各个模块之间的接口设计。
良好的接口设计可以有效地防止信息泄露或者组件之间的不协调,确保系统的稳定性和可靠性。
在接口设计中,项目组需要关注数据格式、消息交换方式、处理错误的机制等方面的设计。
3. 结构化设计的步骤3.1 确定设计目标在开始结构化设计之前,首先要确定设计目标。
具体而言,需要定义系统的范围、预期目标、适用的技术和平台等方面的问题。
3.2 分析需求和约束条件分析需求和约束条件是结构化设计的前提。
在这一步骤中,项目组需要使用业务分析工具和技术分析工具,定义系统需要解决的问题,识别约束和限制条件,以此为设计提供方向。
3.3 设计系统框架基于需求分析和约束条件,项目组应该设计系统的框架。
软件工程课件3.2_结构化设计方法
34/50
2013年9月13日
事务中心
作业信息 作业 信息
结果
结果
输入作业信息
分派模块
输出结果
事务1 操作1 细节1 操作2
事务2
事务3
操作4 细节4
事务4 操作5 操作6 细节6
35/50
操作3
细节3
细节2
细节5
2013年9月13日
软件工程
1. 确定事务中心和各活动流的流特性
2. 确定逻辑输入、逻辑输出 和变换中心部分
逻辑输入 A
A B
变换中心
BC
B
C
D
CDE
D F
F 逻辑输出
E 物理输入
EG
G
G H
H
物理输出
变换中心是程序的核心功能,它的输入是逻 辑输入,它的输出为逻辑输出。
软件工程
20/50
2013年9月13日
3. 第一级分解: 设计模块结构的顶层和第一层
软件工程
例2:把下面的数据流图用变换分析技术 转换为模块结构图
2号 加工
C
中心 加工
D
3号 加工 E 输 出 流
B
输
1号 加工 A
入
流 转换流
4号 加工
F 26/50
2013年9月13日
软件工程
例2答案
M C 2号 C
加工 中心 加工 D 3号 加工
C
D CT
D CO
CI E 4号 流 A 取A B 取B F A B C C
软件工程
13/50
2013年9月13日
协调模块 ─ 对所有下属模块进行协调和管理 的模块。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实例… 实例
原程序编码
规则1 给程序的函数结点、谓词结点编号, 规则1:给程序的函数结点、谓词结点编号,汇点略过 规则2 规则2:出口线用它后面的结点的号码进行编号 规则3 出口线后无结点,编号=0 规则3:出口线后无结点,编号=0
36
编码后,对每一个编号构造一个新的序列程序gi 编码后,对每一个编号构造一个新的序列程序gi 方法1 方法1:函数程序 方法2 方法2:谓词程序
第三章
结构化程序设计方法 (续)
第三章、 第三章、结构化程序设计方法 (续)
结构化定理
程序函数 结构化定理 递归结构程序
一些新的控制结构
结构化
一、正规程序概述
若一个流程图满足以下两个条件, 若一个流程图满足以下两个条件,称之为正规程 序: (1)具有一个入口线和一个出口线 对每一个结点, (2)对每一个结点,都有一条从入口线到出口线的 通路(流线) 通路(流线)
30
基本程序所对应的程序函数… 基本程序所对应的程序函数
函数: 函数: [f]={(x,y)|y=f(x)} 序列: [f; g]={(x,y)|y=g。f(x)} 序列: g]={(x,y)|y=g。 IF[ifIF-THEN: [if-then]={(x,y)|p(x) →y=f(x)|¬p(x) →y=x} WHILE-DO: [while-do]={(x,y)| ∃k ≥0((j,1≤j<k)(p. [while0((j,1≤ j∀ ,1 WHILE¬p. k (x)→y= f (x)) ∧ fj
f (x)}
k
31
…基本程序所对应的程序函数 基本程序所对应的程序函数
DO-UNTIL: DO-UNTIL:
f [do-until]={(x,y)| ∃k > 0(( ∀j,1≤j<k)( ¬p 。 (x)) ∧p。 f k(x)→y= f (x)) [doj,1≤
} IF-THENIF-THEN-ELSE : [if-then-else]={(x,y)|p(x) →y=f(x)|¬p(x) →y=g(x)} [if-thenDO-WHILEDO-WHILE-DO: [do-while0(( ∀ j<k)(p。 1≤ [do-while-do]={(x,y)| ∃ k ≥0(( j, 1≤j<k)(p。f ¬p 。f
P G
基集合
G
DO-WHILE-DO
F P
结构化程序
如果一个基本程序的函数结点用另一个基本程序替换, 如果一个基本程序的函数结点用另一个基本程序替换, 就产生了一个新的正规程序,这样的程序称为复合程 就产生了一个新的正规程序, 序。 复合程序的规模及复杂程度取决于所使用的基集合, 复合程序的规模及复杂程度取决于所使用的基集合, 例如: 序列,IF-THEN}产生一个无循环的程 例如:{序列,IF-THEN-ELSE }产生一个无循环的程 序类。 序类。 抽象地说, 抽象地说,由基本程序的一个固定的基集合构造出的 复合程序称为结构化程序。 复合程序称为结构化程序。
序列,if-then-else,do{序列,if-then-else,while-do} 或 {序列,if-then-else,do-until} 序列,if-then-else,while-
基集合
函数 序列
F F
G
F
If-then
P
基集合
F
WHILE-DO
P
DO-UNTIL
F
P
F
IF-THEN-ELSE
程序函数表示形式:有序对、 程序函数表示形式:有序对、数据赋值以及条件规则等形式
例如: 例如:[if x<y then z:=x else z:=y fi] /有序对的形式 ={((x,y,z),(x,y,min(x,y)))} / /有序对的形式 {(x,y,z)|x ≤y—>z:=x∧x>y —>z:=y} //条件规则的形式 //条件规则的形式 (z:=min(x,y))//数据赋值的形式 (z:=min(x,y))//数据赋值的形式
结构化定理… 结构化定理
结构化定理证明任何一个正规程序都可以用一个等价 的结构化 程序表示出来
结构化定理: 结构化定理:任一正规程序都可以函数等价于一个由基集合
IF-THEN-ELSE,WHILE}产生的结构化程 {序 列,IF-THEN-ELSE,WHILE-DO }产生的结构化程 证明过程提供了一种将正规程序转化为结构化程序的方法
F T
S3 S2 Q
F
S4
转位法及结合法例3 转位法及结合法例3:
S1
T
Q
F
T
S2
T
P
F
S3
R
F
S1
T
Q
F
T
S2 S2
T
P
F
S3
R
F
S1
T
Q
F
T
S2 S2
T
P
F
S3 S1 Q
F T
R S2
F
T
P
F
S2
T
S3
R
F
S1
T F
Q
T
S2
P
F
S1
T F
Q
T
S2
P
F
S1
T F
Q
T
S2
P
F
S1
T F
Q
T
S2
37
由gi组合成新结构程序 gi组合成新结构程序 问题:比较庞大,而且效率不高。 问题:比较庞大,而且效率不高。 解决办法:需要简化,特别是消除一些多余的对L 解决办法:需要简化,特别是消除一些多余的对L 的测试与赋值。 的测试与赋值。
38
3、递归结构程序
基本思想:对于某些j>0,如果在gj中不包含有赋值L:=j, 基本思想:对于某些j>0,如果在gj中不包含有赋值L:=j, j>0 gj中不包含有赋值L:=j 那么可以用程序gj代替所有的赋值L:=j 这样代替以后, gj代替所有的赋值L:=j。 那么可以用程序gj代替所有的赋值L:=j。这样代替以后, 由于j不再赋值给L 因而测试L=j可以从if then-else结构中 L=j可以从if由于j不再赋值给L,因而测试L=j可以从if- then-else结构中 去掉。 去掉。这个替换过程可以一直继续到下面两种情况出现为 止:
33
结构化定理证明过程
首先, 首先,从程序的入口处开始给程序的函数结点和谓词结点编 号, 编号为1 编号为1,2,……,n(如果是汇点,那么沿汇点的出口 线继续考 ……,n(如果是汇点, 如果是汇点 察,直到找到第一个函数结点或谓词结点)。同时, 将每一个函 直到找到第一个函数结点或谓词结点) 同时, 行编号。 数及谓词结点的出口线用它后面的节点的号码进 行编号。如果他 后面没有函数或谓词结点, 后面没有函数或谓词结点,即该结点的出口 线直接或通过汇点和 程序的出口相连时,出口线编号为0 程序的出口相连时,出口线编号为0 其次,对原程序中的每一个编号为i, 出口线编号为j 其次,对原程序中的每一个编号为i, 出口线编号为j的函数结 点h ,构造一个新的序列程序gi 。 构造一个新的序列程序gi 其中, 作为计数器。类似地,对每一点编号为i, 其中,L作为计数器。类似地,对每一点编号为i, 出口线编号 为 j,k的谓词结点,构造一个新的if-then-else程序gi. j,k的谓词结点,构造一个新的if-then-else程序gi. 的谓词结点 if 程序
P
F
S1
T F
Q
T
S2
P
F
S1
T F
Q
T
S2 R
F T
P
F
S3
S2
S3
F
R
T
S2
程序函数
程序函数:已知一正规程序P 对于每一个初始的数据状态X 1) 程序函数:已知一正规程序P,对于每一个初始的数据状态X ,若程序是终止的,那么有确定的最终数据状态Y。如果对于 若程序是终止的,那么有确定的最终数据状态Y 每一个给定的X 是唯一的,那么所有的有序对的集合{ 每一个给定的X,值Y是唯一的,那么所有的有序对的集合{( X,Y) 定了一个函数。我们称这个函数为程序P的程序函数, X,Y)}定了一个函数。我们称这个函数为程序P的程序函数, 记为[P] [P]。 记为[P]。 例如:程序P: 例如:程序P: t:=x; x:=y; y:=t; 程序函数为: (x,y,t),(y,x,x)) 程序函数为:{((x,y,t),(y,x,x))} 对于任意给定的X: ,程序执行结果为 程序执行结果为Y: 对于任意给定的X: (x,y,t) ,程序执行结果为Y: (y,x,x)
(g. f )k
j
k
( g. f (x)) ∧ )j
( (x)→y= f 。g. f )k (x))
程序函数是对程序功能的一个精确的描述。 程序函数是对程序功能的一个精确的描述。 定义:如果程序P1 P2有相同的程序函数 称它们是函数等价的, P1和 有相同的程序函数, 定义:如果程序P1和P2有相同的程序函数,称它们是函数等价的, 32 或者简称是等价的。 或者简称是等价的。
34
最后,利用已经得到的一些gi(i=1,2,……,n) 最后,利用已经得到的一些gi(i=1,2,……,n)按下图的形式构造一个 gi while-do循环 这个循环的循环体是一个对L 循环, 进行测试的嵌套的if ifwhile-do循环,这个循环的循环体是一个对L从1到n进行测试的嵌套的ifthen-else程序 最内层的I表示恒等函数)。 程序( then-else程序(最内层的I表示恒等函数)。 如果Ix ={<x,x>|xX},则称函数 :X–›X为恒等函数 为恒等函数。 如果Ix ={<x,x>|xX},则称函数Ix :X–›X为恒等函数。 ∈ 则称函数Ix