汇编语言第2章 程序设计基础
新版汇编语言程序设计习题答案(钱晓捷主编)电子教案

新版汇编语言程序设计习题答案(钱晓捷主编)新版汇编语言程序设计习题答案(钱晓捷主编)第一章汇编语言基础知识1.1、简述计算机系统的硬件组成及各部分作用1.2、明确下列概念或符号:主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB1.3、什么是汇编语言源程序、汇编程序、目标程序?1.4、汇编语言与高级语言相比有什么优缺点?1.5、将下列十六进制数转换为二进制和十进制表示(1)FFH (2)0H (3)5EH (4)EFH(5)2EH (6)10H (7)1FH (8)ABH1.6、将下列十进制数转换为BCD码表示(1)12 (2)24 (3)68 (4)127(5)128 (6)255 (7)1234 (8)24581.7、将下列BCD码转换为十进制数(1)10010001 (2)10001001 (3)00110110 (4)10010000(5)00001000 (6)10010111 (7)10000001 (8)000000101.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示(1)0 (2)-127 (3)127 (4)-57(5)126 (6)-126 (7)-128 (8)681.9、完成下列二进制数的运算(1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001(5)1011 ∧~1011 (8)1011 ⊕ 1001 1001(6)1011 ∨1001(7)1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符?1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符?1.12、简述Intel 80x86系列微处理器在指令集方面的发展。
钱晓捷新版汇编语言程序设计习题答案(1-4)

钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.17、举例说明CF和OF标志的差异。
溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确•例1:3AH + 7CH=B6H无符号数运算:58+124=182,范围内,无进位有符号数运算: 58+124=182 ,范围外,有溢出•例2:AAH + 7CH=(1)26H无符号数运算:170+124=294,范围外,有进位有符号数运算:-86+124=28 ,范围内,无溢出1.20、8086有哪4种逻辑段,各种逻辑段分别是什么用途?(解答)代码段(Code Segment)用来存放程序的指令序列。
处理器利用CS : IP取得下一条要执行的指令•堆栈段(Stack Segment)确定堆栈所在的主存区域。
处理器利用SS : SP操作堆栈中的数据•数据段(Data Segment)存放当前运行程序所用的数据。
处理器利用DS : EA存取数据段中的数据•附加段(Extra Segment)是附加的数据段,也用于数据的保存。
处理器利用ES : EA存取数据段中的数据第二章8086指令系统2.1已知DS = 2000H、BX = 0100H、SI = 0002H,存储单元[20100H] ~ [20103H]依次存放12 34 56 78H,[21200H] ~ [21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。
(1) mov ax,1200h ;AX=1200h(2) mov ax,bx ; AX=0100h(3) mov ax,[1200h] ; AX=4C2Ah(4) mov ax,[bx] ; AX=3412h(5) mov ax,[bx+1100h] ; AX=4C2Ah(6) mov ax,[bx+si] ; AX=7856h(7) mov ax,[bx][si+1100h] ; AX=65B7h2.2指出下列指令的错误(1) mov cx,dl 两操作数类型不匹配(2) mov ip,ax IP 指令指针禁止用户访问(3) mov es,1234h 立即数不允许传给段寄存器(4) mov es,ds 段寄存器之间不允许传送(5) mov al,300 两操作数类型不匹配(6) mov [sp],ax 目的操作数应为[ BP ](7) mov ax,bx+di 源操作数应为 [BX+DI](8) mov 20h,ah 立即数不能作目的操作数2.3已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
C语言一、二级章节总结

第一章程序设计的基本概念·01-01.程序设计的基本概念计算机语言高级语言远离硬件 C语言--- C++ ---- JAVA低级语言贴近硬件机器语言汇编语言基本概念:1、机器语言:计算机能接受和处理的由0和1代码构成的二进制指令或数据,是面向机器的。
2、源程序:由高级语言编写的程序称为“源程序”。
3、目标程序:二进制代码表示的程序称为“目标程序”。
4、编译程序:5、C源程序:6、C语言源程序文件名的后缀是.c,经过编译后生成目标文件的后缀名是.obj,经过连接后生成的可执行文件后缀名是.exe。
例题:在Visual C++环境下运行一个C程序时,所运行的程序的后缀名是?7、程序设计一般包含以下步骤:1)确定数据结构;2)确定算法;3)编译;4)运行调试程序;5)整理并写出文档资料。
8、算法:特点:1)有穷性;2)确定性;3)可行性;4)有零个或多个输入;5)有一个或多个输出。
算法的描述方法:1)伪代码;2)一般流程图(传统的结构化流程图);3)N-S流程图;4)PDA图等。
传统的结构化流程图:开始框处理框输入/输出框判断框流程线连接点N-S流程图:9、结构化的语言的三种结构:1)顺序结构;2)选择结构;3)循环结构。
顺序结构:语句1 语句1语句2语句2一般流程图 N-S图选择结构:判断表达式 满足语句1 语句2循环结构:判断表达式当判断表达式满足a )当型循环 先判断,后执行 最少循环0次b )直到型循环 先执行,后判断 最少循环1次不满足语句1语句2满足不满足判断表达式不满足满足循环体循环体第二章 C语言基础知识·02-01.简单C语言的构成和格式例:#include “stdio.h”main(){float a,b,area;a=1.2;b=3.6;area=a*b;printf(“a=%f,b=%f,area=%f\n”,a,b,area);}1、命令行:1)命令行必须以“#”开头,最后不能加“;”号。
第二部分 汇编语言程序设计——伪指令

例3.2:数据定义综合应用-2/2
.code .startup mov bl,bvar mov ax,word ptr dvar[0] mov dx,word ptr dvar[2] ;取双字到DX.AX mov dx,offset msg mov ah,09h CALLDOS .exit 0 end
运算符
算术运算符 + - * / MOD 逻辑运算符 AND OR XOR NOT 移位运算符 SHL SHR 关系运算符 EQ NE GT LT GE LE 高低分离符 HIGH LOW HIGHWORD LOWWORD
地址型参数
汇编语言程序中,指令参数还有地址型,
它的主要形式是标号和名字(变量名、段 名、过程名等) 硬指令的操作数有存储单元;存储单元就 应该用地址型参数(存储器操作数)表达
定义字节单元伪指令DB
DB伪指令用于分配一个或多个字节单元, 并可以将它们初始化为指定值 初值表中每个数据一定是字节量 (Byte),存放一个8位数据: 可以是0~255的无符号数 或是-128~+127带符号数 也可以是字符串常数
data X Y data
segment ;数据段 db 'a',-5 db 2 dup(100),? db 'ABC' ends
例3.4:属性及其应用-2/5
.code .startup mov al,byte ptr v_word ;用PTR改变v_word的类型,否则类型不匹配 dec al mov v_byte,al ;对v_word的头一个字节操作,原为32H、现为31H n_label: cmp flag,1 jz s_label ;flag单元为1转移 inc flag jmp n_label ;进行短转移
汇编语言程序设计(第四版)第2章【课后答案】讲解

汇编语言程序设计第四版【课后习题答案】--囮裑為檤第2章8086的指令系统〔习题2.1〕已知DS=2000H、BX=0100H、SI=0002H,存储单元[20100H]~[20103H]依次存放12 34 56 78H,[21200H]~[21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。
(1)mov ax,1200h(2)mov ax,bx(3)mov ax,[1200h](4)mov ax,[bx](5)mov ax,[bx+1100h](6)mov ax,[bx+si](7)mov ax,[bx][si+1100h]〔解答〕(1)AX=1200H(2)AX=0100H(3)AX=4C2AH ;偏移地址=bx=0100h(4)AX=3412H ;偏移地址=bx=0100h(5)AX=4C2AH ;偏移地址=bx+1100h=1200h(6)AX=7856H ;偏移地址=bx+si=0100h+0002h=0102h(7)AX=65B7H ;偏移地址=bx+si+1100h=0100h+0002h+1100h=1202h〔习题2.2〕指出下列指令的错误(1)mov cx,dl(2)mov ip,ax(3)mov es,1234h(4)mov es,ds(5)mov al,300(6)mov [sp],ax(7)mov ax,bx+di(8)mov 20h,ah〔解答〕(1)两操作数类型不匹配(2)IP指令指针禁止用户访问(3)立即数不允许传给段寄存器(4)段寄存器之间不允许传送(5)两操作数类型不匹配(6)目的操作数应为[ SI ](7)源操作数应为[BX+DI](8)立即数不能作目的操作数〔习题2.3〕已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
《程序设计基础》-自测2答案

《程序设计基础》第二章自测一、选择题(每题6分,共48分)题目1正确获得6.00分中的6.00分标记题目题干JAVA语言的类别是______。
选择一项:A. 面向问题的程序设计语言B. 面向对象的程序设计语言C. 面向硬件的程序设计语言D. 面向过程的程序设计语言反馈正确答案是:面向对象的程序设计语言题目2正确获得6.00分中的6.00分标记题目题干汇编程序的任务是______。
选择一项:A. 将高级语言编写的程序转换为可执行程序B. 将汇编语言编写的程序转换为可执行程序C. 将高级语言编写的程序转换为汇编语言程序D. 将汇编语言编写的程序转换为目标程序反馈正确答案是:将汇编语言编写的程序转换为目标程序题目3正确获得6.00分中的6.00分标记题目题干C语言是______。
选择一项:A. 目标语言B. 高级语言C. 汇编语言D. 机器语言反馈正确答案是:高级语言题目4正确获得6.00分中的6.00分标记题目题干要保证程序在多次反复使用过程中不发生错误,关键应该提高程序的______。
选择一项:A. 可维护性B. 可靠性C. 正确性D. 有效性反馈正确答案是:可靠性题目5正确获得6.00分中的6.00分标记题目题干汇编语言属于______。
选择一项:A. 非过程式语言B. 过程式语言C. 逻辑语言D. 函数式语言反馈正确答案是:过程式语言题目6正确获得6.00分中的6.00分标记题目题干要编写高质量的程序,判断程序质量的首要标准是程序的_____①______,要保证程序在多次反复使用过程不发生错误,应该保证程序的_____②______。
选择一项:A. ①可靠性②有效性B. ①有效性②正确性C. ①正确性②可靠性反馈正确答案是:①正确性②可靠性题目7正确获得6.00分中的6.00分标记题目题干编译程序的实现算法较为复杂,但它可以产生高效运行的____①______程序,因此更适合翻译那些规模较大、结构较复杂、需要较长运行时间的_____②______ 程序。
汇编语言程序设计复习

知识点第一章基础知识(1)正负数的补码表示, 掌握计算机中数和字符的表示;eg.假设机器字长为8位,[+3]补=00000011B,[-3]补= 11111101 H 。
十六进制数0FFF8H表示的十进制正数为65528D,表示的十进制负数为-8D。
8位二进制数被看成是带符号补码整数时,其最小值是-128,最大值是 127 。
第二章80x86计算机组织(1)中央处理机CPU的组成和80x86寄存器组,重点:专用寄存器,段寄存器eg: IP寄存器中保存的是?代码段中的偏移地址FLAGS标志寄存器中共有几位条件状态位6位,有几位控制状态位2位,标志寄存器分为哪2类?陷阱标志,中断标志。
(2)存储单元的地址和内容每一个字节单元给以一个唯一的存储器地址,称为物理地址;一个存储单元中存放的信息称为该存储单元的内容。
存储器地址的分段,(低位字节存放)低地址,(高位字节存放)高地址;实模式下逻辑地址、选择器和偏移地址;物理地址的表示段基地址加上偏移地址。
eg.如果SS=6000H,说明堆栈段起始物理地址是_____60000H___。
已知字节(00018H)=14H,字节(00017H)=20H,则字(00017H)为__1420H______。
如果(SI)=0088H,(DS)=5570H,对于物理地址为55788H的内存字单元,其内容为0235H,对于物理地址为5578AH的内存字单元,其内容为0E60H,那么执行指令LDS SI,[SI]以后,(SI)= 0235H ,(DS)= 0E60H .第三章80x86的指令系统和寻址方式与数据有关的寻址方式(立即寻址方式,寄存器寻址方式,直接寻址方式,寄存器间接寻址方式,寄存器相对寻址方式,基址变址寻址方式,相对基址变址寻址方式)和与转移地址有关的寻址方式(段内直接寻址,段内间接寻址,段间直接寻址,段间间接寻址)。
数据传送指令(通用数据传送指令、累加器专用传送指令、输入输出指令)、算术指令(加法指令、减法指令(*加减指令对4个标志位的影响[of,cf,sf,zf])、乘法指令(*乘法指令的要求:目的操作数必须是累加器)、除法指令(*被除数在累加器中,除法指令执行完以后,商和余数在?))、逻辑指令(逻辑运算指令(*XOR,AND,OR,TEST指令及指令执行后对标志位的影响)、移位指令)、串处理指令(与REP相配合工作的MOVS、STOS、LODS 指令,与REPE/REPZ和REPNE/REPNZ联合工作的CMPS、SCAS指令)、控制转移指令(无条件转移指令、条件转移指令、循环指令、子程序调用指令、中断)。
计算机组成原理与汇编语言程序设计课后习题及解答(详解)

计算机组成原理与汇编语言程序设计课后习题及解答徐洁,俸远祯电子工业出版社第1章习题一1.什么是程序存储工作方式?答:计算机的工作方式——存储程序工作方式。
即事先编写程序,再由计算机把这些信息存储起来,然后连续地、快速地执行程序,从而完成各种运算过程。
2.采用数字化方法表示信息有哪些优点?用数字化方法表示信息的优点:(1)抗干扰能力强, 可靠性高。
(2)依靠多位数字的组合,在表示数值时可获得很宽的表示范围以及很高的精度。
(3)数字化的信息可以存储、信息传送也比较容易实现。
(4)可表示的信息类型与范围及其广泛,几乎没有限制。
(5)能用逻辑代数等数字逻辑技术进行信息处理,这就形成了计算机硬件设计的基础。
3.如果有7×9点阵显示出字符A的图像,请用9个七位二进制代码表示A的点阵信息。
4.数字计算机的主要特点是什么?1. (1)能在程序控制下自动连续地工作;(2|)运算速度快;(3)运算精度高;(4)具有很强的信息存储能力;(5)通用性强,应用领域及其广泛。
5.衡量计算机性能的基本指标有哪些?答:衡量计算机性能的基本指标:(1)基本字长——参加一次运算的数的位数;(2)数据通路宽度——数据总线一次能并行传送的位数;(3)运算速度——可用①CPU的时钟频率与主频,②每秒平均执行指令数,③典型四则运算的时间来表示。
(4)主存储器容量——可用字节数或单元数(字数)×位数来表示。
(6)配备的外围设备及其性能。
(7)系统软件配置。
7.系统软件一般包括哪些部分?列举你所熟悉的三种系统软件。
系统软件一般包括操作系统,编译程序、解释程序、各种软件平台等。
例如WINDOWS98操作系统,C 语言编译程序等,数据库管理系统。
8.对源程序的处理有哪两种基本方式?对源程序的处理通常有两种处理方式:解释方式和编译方式。
第2章习题二1.将二进制数(101010.01)2 转换为十进制数及BCD码。
解:(101010.01)2 = (42.25)10 = (01000010.00100101)BCD2.将八进制数(37.2)8转换为十进制数及BCD码.解:(37.2)8 = (31.25)10 =(00110001.00100101)BCD3.将十六进制数(AC.E)转换为十进制数及BCD码.解: (AC.E)16 =(172.875)10 = (000101110010.100001110101)BCD4.将十进制数(75.34)10转换为8位二进制数及八进制数、十六进制数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.2.1 结构化程序设计思想
结构化程序设计方法是程序设计的先进方法和工 具。采用结构化程序设计方法编写程序,可使程 序结构清晰、易读、易理解、易维护。结构化程 序设计具有三种基本结构:顺序结构、选择结构 和循环结构。1966年,Boehm和Jacopini证明了 任何单入口单出口没有“死循环”的程序都能由 顺序、选择和循环三种最基本的控制结构构造出 来。
2.1.2 汇编语言
为了克服机器语言的缺点,人们采用与代码指令 实际含义相近的英文缩写词、字母和数字等符号 来取代指令代码,产生了汇编语言(也称为符号 语言)。汇编语言是由一条条助记符所组成的指 令系统。使用汇编语言编写的程序(汇编语言源 程序),计算机不能直接识别,需要由一种起翻 译作用的程序(汇编程序),将其翻译成机器语 言程序(目标程序),计算机方可执行,这一翻 译过程称之为“汇编”。
第2章 程序设计基础
语言是人们交流思想、传达信息的工具。 人类在长期的历史发展过程中,为了交流 思想、表达感情和交换信息,逐步形成了 语言。这类语言,如汉语和英语,通常称 为自然语言。另一方面,人们为了某种专 门用途,创造出种种不同的语言,例如旗 语和哑语,这类语言通常称为人工语言。 专门用于人与计算机之间交流信息的各种 人工语言称为计算机语言或程序设计语言。
2.1 程序设计语言
根据程序设计语言发展的历程,可将其大 致分为机器语言、汇编语言、高级语言以 及4GL语言四类。
2.1.1 机器语言
机器语言是用二进制代码表示的计算机能直接识 别和执行的机器指令的集合,即处理器的指令系 统。不同类型处理器的计算机,其机器语言是不 同的,按照一种计算机的机器指令编制的程序, 不能在指令系统不同的计算机上执行。机器语言 的优点是能够被计算机直接识别、执行速度快、 占用内存空间少。其缺点是难记忆、难书写、难 编程、易出错、可读性差、可移植性差。
传统的高级程序设计语言
1954年,约翰· 巴克斯发明了FORTRAN语言。FORTRAN是最早出现 的高级程序设计语言,主要应用在科学、工程计算领域。 1958年,在FORTRAN基础上改进的ALGOL语言诞生了,与 FORTRAN相比,ALGOL的优点引入了局部变量和递归过程概念,提 供了较为丰富的控制结构和数据类型,对后来的高级语言产生了深刻 的影响。 1960年出现的COBOL是商用数据处理应用中广泛使用的标准语言。 COBOL通用性强,容易移植,并提供了与事务处理有关的大范围的 过程化技术。COBOL是世界上最早实现标准化的语言,它的出现、 应用与发展,改变了人们“计算机只能用于数值计算”的观点。 1964年,汤姆· 库斯和约翰· 凯孟尼创建了一种新的计算机高级语言, 这种语言语句简洁、语法简单,风格轻松活泼,又简便易学,被称为 “初学者通用符号指令代码”,这就是著名的Basic语言。该语言在 微型计算机上得到广泛应用。目前Basic语言有多种版本,如Borland 公司的Turbo Basic、Microsoft公司的Visual Basic等。Microsoft Visual Basic是目前使用最广泛的Basic语言开发工具,它提供了一个 可视的开发环境,具有图形设计工具、面向对象的结构化的事件驱动 编程模式、开放的环境,使用户可以既快又简便的编制出Windows的 各种应用程序。
通用的结构化程序设计语言
结构化程序设计语言的特点是具有很强的过程功能和数据结构功能, 并提供结构化的逻辑构造。这一类语言的代表有Pascal、C和Ada等, 它们都是从ALGOL语言派生出来的。 20世纪60年代末研制的Pascal语言体现了结构化程序设计的思想,以 系统、精确、合理的方式表达了程序设计的基本概念,特别适合用来 进行程序设计原理和高级语言的教学。Borland公司的Turbo Pascal 是使用比较广泛的版本。 1972年,美国贝尔实验室的Dennis Ritchie发明了C语言,它既有高 级语言的特点,又可以实现汇编语言的许多功能,因此它适用于编写 系统软件和应用软件。C语言主要特点是具有丰富的数据结构;基本 程序结构是函数调用,支持用户自定义函数以扩充语言的功能;与汇 编语言接口好;具有丰富的函数库;具有比较强的图形处理能力。 Borland公司的Turbo C是早期使用广泛的C语言开发工具。 Ada语言是由美国国防部出资开发的,作为一种用于嵌入式实时计算 机设计的标准语言。Ada语言在结构和符号方面类似于Pascal语言。
2.1.5 程序设计语言的比较
应用领域。 算法和计算复杂性。 软件运行环境。 用户需求中关于性能方面的需要。 数据结构的复杂性。 软件开发人员的知识水平和心理因素等。
汇编语言适用于
程序执行占用较短的时间,或者占用较小 存储容量的场合。 程序与计算机硬件密切相关,程序直接控 制硬件的场合。 需提高大型软件性能的场合。 没有合适的高级语言的场合。
顺序结构
顺序结构是最基本、最常用的结构,如图2-1所
示。顺序结构就是按照程序语句行的自然顺序 依次执行程序。
图2-1 顺序结构
选择结构
选择结构又称为分支结构,这种结构可以根据
设定的条件,判断应该选择哪一条分支来执行 相应的语句序列。如图2-2所示。
图2-2 选择结构
循环结构
循环结构是根据给定的条件,判断是否需要重复执行
2.1.4 4GL语言
4GL语言的出现,将语言的抽象层次又提高到一个新的高 度。同其他人工语言一样,也采用不同的文法表示程序结 构和数据结构,但它是在更高一级抽象的层次上表示这些 结构,它不再需要规定算法的细节。关系数据库的标准语 言SQL即属于该类语言。 4GL语言兼有过程性和非过程性的两重特性。程序员规定 条件和相应的动作,这是过程性的部分,并且指出想要的 结果,这是非过程部分。然后由4GL语言系统运用它的专 门领域的知识来填充过程细节。
1980年,贝尔实验室的Bjarne Stroustrup发明了的“带类的C”,增加 了面向对象程序设计所需要的抽象数据类型“类”,1983年带类的C 语言被命名为C++,成为面向对象的程序设计语言。C++有丰富的类 库、函数库,可嵌入汇编语言中,使程序优化,但这种语言难于学习 掌握,需要有C语言编程的基础经验和较为广泛的知识。目前,C++ 成为当今最受欢迎的面向对象的程序设计语言,因为它既融合了面向 对象的能力,又与C语言兼容,保留了C语言的许多重要特性。C++ 常见的开发工具有Borland C++、Microsoft Visual C++ 等。 Java是一种简单的、面向对象的、分布式的、强大的、安全的、解释 的、高效的、结构无关的、易移植的、多线程的、动态的语言。Java 设计接近C++语言,但做了许多重大修改。它不再支持运算符重载、 多继承及许多自动强制等易混淆和较少使用的特性,增加了内存空间 自动垃圾收集的功能。Java是面向对象语言,基本功能类似于C++, 但增加了Objective C的扩充,可提供更多的动态解决方法。Java中提 供了附加的例程库,通过它们的支持,Java应用程序能够自由地打开 和访问网络上的对象,就像在本地文件系统中一样。Java有建立在公 共密钥技术上的确认技术,指示器语义的改变将使应用程序不能再去 访问以前的数据结构或私有数据,这样大多数病毒也就无法破坏数据。 因而,使用Java可以构造出无病毒、安全的系统。它适用于Internet 环境并具有较强的交互性和实时性,提供了网络应用的支持和多媒体 的存取,推动了Internet和企业网络的Web的进步。SUN公司的J2EE 平台的发布,加速推动了Java在各个领域的应用。
2.2.2 结构化程序设计方法
结构化程序设计方法的基本原则可以概括 为自顶向下、逐步求精、模块化、限制使 用goto语句。
自顶向下
程序设计时,应先考虑总体,后考虑细节;先考虑全局目标,后 考虑局部目标。开始时不过多追求众多的细节,先从最上层总体 目标开始设计,逐步使问题具体化,层次分明,结构清晰。 对复杂问题,应设计一些子目标作过渡,逐步细化。针对某个功 能的宏观描述,进行不断分解,逐步确立过程细节,直到该功能 用程序语言的算法实现为止。 将一个复杂问题,分解为若干个简单的问题。每个模块只有一个 入口和一个出口,使程序有良好的结构特征,能降低程序的复杂 度,增强程序的可读性、可维护性。 因为使用goto语句会破坏程序的结构化,降低了程序的可读性, 因而不提倡使用goto语句。
某一程序段。在程序设计语言中,循环结构对应两类 循环语句,对先判断后执行循环体的称为当型循环结 构,如图2-3所示;对先执行循环体后判断的称为直到 型循环结构,如图2-4所示。
图2-3 当型循环结构
图2-4 直到型循环结构
结构化程序设计的基本思想:一是使用三种基本 结构;二是采用自顶向下、逐步求精和模块化方 法。结构化程序设计强调程序设计风格和程序结 构的规范化,其程序结构是按功能划分为若干个 基本模块,这些模块形成一个树状结构,各模块 之间的关系尽可能简单,且功能相对独立,每个 模块内部均是由顺序、选择、循环三种基本结构 组成,其模块化实现的具体方法是使用子程序 (函数或过程)。结构化程序设计由于采用了模 块化与功能分解、自顶向下、分而治之的方法, 因而可将一个较为复杂的问题分解为若干个子问 题,各个子问题分别由不同的人员解决,从而提 高了程序开发速度,并且便于程序的调试,有利 于软件的开发和维护。源自专用语言
专用语言是为特殊的应用而设计的语言。通常具有自己特殊的语法形 式,面对特定的问题,输入结构及词汇与该问题的相应范围密切相关。 有代表性的专用语言有APL、Lisp、Prolog、Smalltalk、C++、Java 等。 APL是一种简单的对数组和向量处理非常有效的语言。它几乎不支持 结构化设计和数据类型划分,但它拥有丰富的操作运算符。主要用来 解决一些数学计算问题。 Lisp是一种人工智能领域专用的语言,它特别适用于组合问题中常见 的符号运算和表处理。 Prolog是另一种广泛用于专家系统构造的程序设计语言。和Lisp一样, Prolog提供了支持知识表示的特性。这种语言用一种称为term的统一 的数据结构来构造所有的数据和程序。每一个程序都由一组代表事实、 规划和推理的子句组成。Lisp和Prolog都特别适合于处理对象及其相 互关系的问题。 Smalltalk是首先真正实现面向对象的程序设计语言之一。它引入了与 传统程序设计语言根本不同的控制结构与数据结构。Smalltalk可以定 义对象,对象由数据结构和指向一组方法(服务操作)的指针组成。 每个对象都是一个类的实例。Smalltalk提供的面向对象的方法可以支 持程序部件的“可复用性”,从而使大型软件系统的开发时间和以源 程序行数计算的程序量大大减少。