软件技术基础 第三版 课后习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二章程序设计语言
计算机工作是执行相应程序,程序规定了执行的动作和动作的执行顺序。
程序的表达手段是程序设计语言。程序设计语言是人-机交换信息的媒体;是表达软件(程序)的工具;是人-人交换信息的工具。
软件的开发和使用,协作开发、使用修改都要读程序,程序设计语言必须规范化和标准化。
程序设计语言是与计算机通信创造的语言,严格、小巧,没有二义性(语句执行只有一个解释)。
2.1 高级程序设计语言概述
最初的语言是机器语言。机器语言在内存中开辟两个区:数据区存放数据;指令区存放指令。CPU 从指令区第一个地址开始逐条取出指令并释义执行,直到所有的指令都被执行完。一般的指令格式
2.2.2高级语言程序的解释执行
编译型语言由于可进行优化(有的编译器可作多次优化),目标码效率很高,是目前软件实现的主要方式。语言编写的源程序,都需要进行编译、连接,才能生成可执行程序。编译时花费时间但程序的执行效率提高。
对高级语言源程序采取解释执行的方式.解释执行需要有一个解释器(Interpreter ) ,它将源代码逐句读入。先作词法分析,建立内部符号表;再作语法和语义分析,即以中间码建立语法树,并作类型检查。完成检查后把每一语句压入执行堆栈,压入后立即解释执行。
操作系统的命令、BASIC 、VB 、Prolog 、LISP 、Java 、Java Script 、Post script
2 .
3 .1 变量、表达式、赋值
使用符号常量,只需一次性改动其赋值就行了。赋值和函数调用是程序语言改变变量的值的基本手段。不同的语言所使用的赋值号并不完全相同,比如Pascal 语言的赋值号是“:=”,而在C 语言、Java 语言、VB 等语言中,赋值号是“=”。
程序中的一条语句对应着计算机的一条命令(用一条或多条指令来实现)。一个赋值语句就是一条赋值命令。
2.3.2 程序的控制结构
程序约定自上向下自左向右地执行,即顺序地执行语句(或表达式)。但不仅限于此,计算机之所以能自动计算,它能通过判断将程序转到应该执行的地方。人们就是通过巧妙地安排控制转移,使计算机实施算法。
最基本的程序控制语句
在汇编语言时代就有了Jump 指令使执行跳转,对应的高级语言语句是无条件转移语句:
goto loop;
其中loop 是跳转到的语句的标号(数字或标识符),加上条件判断子句if(E)就是条件转移语句:
If(E) goto loop;
其中E 是条件(布尔)表达式,求值结果是‘真’、‘假’值。如果为‘真’转移到标号为l 的语句,为‘假’则按顺序执行下一条语句。
有了这两个语句再加上简单语句(赋值、调用、输入/出),就可以实现程序的任何执行控制。
最基本的程序控制有以下三种:
顺序执行
简单语句序列S = S1;S2;…;Sn
选择执行
结构化程序的控制结构
早期的编程语言是语句级的.用简单准语句集合加goto 构成复杂的程序控制。然而显式地使用goto 语句是极其危险的。这是因为:
· goto 语句相互交织使设计出的程序控制结构成为不可分解的一个整体。尽管算法设计精巧,但牵一发而动全身。程序一大,修改很困难。
·显式使用goto 语句使得任何写错转移语句标号的小错误都会导致灭项之灾。·使程序控制逻辑是结构化的,显式使用goto 语句,程序依然难于阅读。
出了错易于找出错误并修改
易阅读导致易扩充、修改,大程序易于分析。
程序控制结构清晰,是它用关键字控制程序块(语句组)。任何控制转移不能进入这些控制块,除非入口。块中转出也不能直接转到程序其他处,只能转到出口。在出/入口增加检查语句就使得程序错误真正局部化。
程序块级(语句组)控制采用语句括号使程序逻辑与表示法结构完全一致。可直接编程。程序语言结构化以后,编程对流程图的依赖就很少了。
Nassi-Schneldermann提出了结构化流程图(主要取消流线及箭头),因没有直接用类似结构化编程语言的伪代码方便而没有流行起来。
结构化编程语言的其他控制结构
结构化程序只需三种基本结构重复和嵌套。但为了方便编程,第三代语言派生出许多结构。以下简略说明。
条件分支
无假块条件分支和嵌套if语句
if(E) then ST endif
if(E1) then S1 elseifE2 then S2…else Sm endif
无假块条件语句是正规条件语句的简化,很常用。嵌套语句在否定部分用关键字elseif,有的语言用elsif。只有当所有条件均有‘假’时才执行else块。逐个检查m个条件效率很低,有时似无必要。
case语句
也叫分情形语句。根据条件变量Z的值单独执行S1,S2…,Sn,执行完Si自动跳到endcase(C语言例外,它要加上break才跳。否则执行Si+1到Sn)。
循环结构
除了do S while E 之外,还有do-until和for结构。
do-until语句形式是do S until E,基流程图。先执行再判断,若E为‘真’不再循环。正好和先判断再执行的do-while语句是相反的。将它改成do-while结构十分容易。条件取反,先执行一次S块。
for-do 语句
以控制变量增减值或枚举集合值计数的循环。for-do是do-while的另一种变体结构,其书写格式有多种变体。
do-while-do语句
其形式是do S1 while E do S2 enddo流程图。
把与条件无关的部分或影响E值计算的部分作无限循环。
E为‘真’才作S2,否则执行enddo后面的语句。
2.3.3 数据类型
计算机中计算对象(不管是常量、变量)都是有类型的,不能把一个实数和逻辑‘真’值(true)相加。指出数据类型的一个目的就是要避免这类错误的发生。各语言转换函数(inttoreal或realtiont)不尽相同,有的是把类型名作为转换函数名,不兼容的类型,如整数和布尔一般不能转换,但C语言例外。
数组类型
变量代表单个数据值叫纯量变量。如果代表多个(数组)或多种(记录)值就叫它结构型数据的变量。先来说数组:
以下声明可将其连接
BigArray(0)=Names() //第1元素放整个数组
bigArray(1)=ages() //第2元素也放整个数组
使用时用二维索引
BigArray(0,7)=Names(7) //=不是VB语言符号
BigArray(1,7)=Ages(7)
记录类型
引入记录数据类型:相同或不同类型数据组成的结构叫记录.记录型记录了对象的属性信息,记录的各个组成部分,称为记录域,各个域的数据类型可以不相同。