当前位置:文档之家› 程序设计语言基础知识

程序设计语言基础知识

程序设计语言基础知识
程序设计语言基础知识

第3章程序设计语言基础知识

程序设计语言是为了书写计算机程序而设计的符号语言,用于对计算过程进行描述、组织和推导。程序设计语言的广泛使用始于1957年出现的FORTRAN,其发展和演化已经超越了运行程序的机器。

3.1 程序设计语言概述

本节主要介绍程序设计语言的基本概念、基本成分和一些典型语言的特点及其适用范围。

3.1.1 程序设计语言的基本概念

1.低级语言和高级语言

计算机硬件只能识别由0、1字符序列组成的机器指令,因此机器指令是最基本的计算机语言。用机器语言编制程序效率低、可读性差,也难以理解、修改和维护。因此,人们设计了汇编语言,用容易记忆的符号代替0、1序列,来表示机器指令中的操作码和操作数。例如,用ADD表示加法、SUB表示减法等。虽然使用汇编语言编写程序的效率和程序的可读性有所提高,但汇编语言是面向机器的语言,其书写格式在很大程度上取决于特定计算机的机器指令。机器语言和汇编语言被称为低级语言。

人们开发了功能更强、抽象级别更高的语言以支持程序设计,因此就产生了面向各类应用的程序设计语言,即高级语言,常见的有Java、C、C++、C#、Python、PHP等。这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。

2.编译程序和解释程序

目前,尽管人们可以借助高级语言与计算机进行交互,但是计算机仍然只能理解和执行由0、1序列构成的机器语言,因此高级程序设计语言需要翻译,担负这一任务的程序称为“语言处理程序”。由于应用的不同,程序语言的翻译也是多种多样的。它们大致可分为汇编程序、解释程序和编译程序。

用某种高级语言或汇编语言编写的程序称为源程序,源程序不能直接在计算机上执行。如果源程序是用汇编语言编写的,则需要一个称为汇编程序的翻译程序将其翻译成目标程序后才

第3章程序设计语言基础知识105

能执行。如果源程序是用某种高级语言编写的,则需要对应的解释程序或编译程序对其进行翻

译,然后在机器上运行。

解释程序也称为解释器,它可以直接解释执行源程序,或者将源程序翻译成某种中间表示

形式后再加以执行;而编译程序(编译器)则首先将源程序翻译成目标语言程序,将目标程序

与库函数链接后形成可执行程序,然后在计算机上运行可执行程序。这两种语言处理程序的根

本区别是:在编译方式下,机器上运行的是与源程序等价的目标程序,源程序和编译程序都不

再参与目标程序的执行过程;而在解释方式下,解释程序和源程序(或其某种等价表示)要参

与到程序的运行过程中,运行程序的控制权在解释程序。解释器翻译源程序时不产生独立的目

标程序,而编译器则需将源程序翻译成独立的目标程序。

3.程序设计语言的定义

一般地,程序设计语言的定义都涉及语法、语义和语用3个方面。

(1)语法。语法是指由程序设计语言基本符号组成程序中的各个语法成分(包括程序)的

一组规则,其中由基本字符构成的符号(单词)书写规则称为词法规则,由符号(单词)构成

语法成分的规则称为语法规则。程序设计语言的语法可通过形式语言进行描述。

(2)语义。语义是程序设计语言中按语法规则构成的各个语法成分的含义,可分为静态语

义和动态语义。静态语义是指编译时可以确定的语法成分的含义,而运行时刻才能确定的含义

是动态语义。一个程序的执行效果说明了该程序的语义,它取决于构成程序的各个组成部分的

语义。

(3)语用。语用表示了构成语言的各个记号和使用者的关系,涉及符号的来源、使用和影响。

语言的实现还涉及语境问题。语境是指理解和实现程序设计语言的环境,这种环境包括编

译环境和运行环境。

3.1.2 程序设计语言的分类和特点

1.程序设计语言发展概述

程序设计语言的发展是一个不断演化的过程,其根本的推动力就是对抽象机制的更高要

求,以及对程序设计活动更好地支持。具体地说,就是把机器能够理解的语言提升到也能够很

好地模仿人类思考问题的形式。

FORTRAN(“FORmula TRANslator”的缩写)是第一个高级程序设计语言,在数值计算领

域积累了大量高效而可靠的程序代码。FORTRAN语言的最大特性是接近数学公式的自然描述,

具有很高的执行效率,目前广泛地应用于并行计算和高性能计算领域。

106

程序员教程(第5版)

ALGOL(ALGOrithmic Language)诞生于晶体管计算机流行的年代,ALGOL60是程序设计语言发展史上的一个里程碑,主导了20世纪60年代程序语言的发展,并为后来软件自动化及软件可靠性的发展奠定了基础。ALGOL60有严格的公式化说明,采用巴科斯范式BNF来描述语言的语法。ALGOL60引进了许多新的概念,如局部性概念、动态、递归等。

PASCAL语言是一种结构化程序设计语言,由瑞士苏黎世联邦工业大学的沃斯(N.Wirth)教授设计,于1971年正式发表。PASCAL是从ALGOL 60衍生的,但功能更强且容易使用,该语言在高校计算机软件教学中曾经处于主导地位。

C语言是20世纪70年代发展起来的一种通用程序设计语言,其主要特色是兼顾了高级语言和汇编语言的特点,简洁、丰富、可移植。UNIX操作系统及其上的许多软件都是用C编写的。C提供了高效的执行语句并且允许程序员直接访问操作系统和底层硬件,适用于系统级编程和实时处理应用。

C++是在C语言的基础上于20世纪80年代发展起来的,与C兼容。在C++中,最主要的是增加了类机制,使其成为一种面向对象的程序设计语言。C++具有更强的表达能力,提供了表达用户自定义数据结构的现代高级语言特性,其开发平台还提供了实现基本数据结构和算法的标准库,使得程序员能够改进程序的质量,并易于代码的复用,从而可以进行大规模的程序开发和系统组织。

Java产生于20世纪90年代,其初始用途是开发网络浏览器的小应用程序,但是作为一种通用的程序设计语言,Java得到非常广泛的应用。Java保留了C++的基本语法、类和继承等概念,删掉了C++中一些不好的特征,因此与C++相比,Java更简单,其语法和语义更合理。

各种程序设计语言都在不断地发展之中。目前,程序设计语言及编程环境向着面向对象及可视化编程环境方向发展,出现了许多新的语言及开发工具。

C#(C Sharp)是由Microsoft公司开发的一种面向对象的、运行于.NET Framework的高级程序设计语言,相对于C++,这个语言在许多方面进行了限制和增强。

Objective-C继承了C语言的特性,是扩充C的面向对象编程语言,其与流行的编程语言风格差异较大。由于GCC(GNU Compiler Collection,GNU编译器套装)含Objective-C的编译器,因此可以在运行GCC的系统中编译。该语言主要由Apple公司维护,是MAC系统下的主要开发语言。与C#类似,Objective-C仅支持单一父类继承,不支持多重继承。

Ruby是松本行弘(Yukihiro Matsumoto,常称为Matz)大约在1993年设计的一种解释性、面向对象、动态类型的脚本语言。在Ruby语言中,任何东西都是对象,包括其他语言中的基本数据类型,比如整数;每个过程或函数都是方法;变量没有类型;任何东西都有值(不管是数学或者逻辑表达式还是一个语句,都会有值),等等。Ruby体现了表达的一致性和简单性,它不仅是一门编程语言,更是表达想法的一种简练方式。

第3章程序设计语言基础知识107

PHP(Hypertext Preprocessor)是一种在服务器端执行的、嵌入HTML文档的脚本语言,

其语言风格类似于C语言,由网站编程人员广泛运用。PHP可以快速地执行动态网页,其语法

混合了C、Java、Perl以及PHP自创的语法。由于在服务器端执行,PHP能充分利用服务器的

性能。另外,PHP支持几乎所有流行的数据库以及操作系统。

Python是一种面向对象的解释型程序设计语言,可以用于编写独立程序、快速脚本和复杂

应用的原型。Python也是一种脚本语言,它支持对操作系统的底层访问,也可以将Python源程

序翻译成字节码在Python虚拟机上运行。虽然Python的内核很小,但它提供了丰富的基本构

建块,还可以用C、C++和Java等进行扩展,因此可以用它开发任何类型的程序。

JavaScript是一种脚本语言,被广泛用于Web应用开发,常用来为网页添加动态功能,为

用户提供更流畅美观的浏览效果。通常,将JavaScript脚本嵌入在HTML中来实现自身的功能。

Delphi是一种可视化开发工具,在Windows环境下使用,其在Linux上的对应产品是Kylix,

其主要特性为基于窗体和面向对象的方法、高速的编译器、强大的数据库支持、与Windows

编程紧密结合以及成熟的组件技术。它采用面向对象的编程语言Object Pascal和基于构件的开

发结构框架。

Visual https://www.doczj.com/doc/f04726673.html,是基于微软.NET Framework的面向对象的编程语言。用.NET语言(包括

https://www.doczj.com/doc/f04726673.html,)开发的程序源代码不是直接编译成能够直接在操作系统上执行的二进制本地代码,

而是被编译成为中间代码MSIL(Microsoft Intermediate Language),然后通过.NET Framework

的通用语言运行时(CLR)来执行。程序执行时,.Net Framework将中间代码翻译成为二进制

机器码后,使它得以运行。因此,如果计算机上没有安装.Net Framework,这些程序将不能够

被执行。

标记语言(Markup Language)用一系列约定好的标记来对电子文档进行标记,以实现对

电子文档的语义、结构及格式的定义。这些标记必须容易与内容区分,并且易于识别。SGML、XML、HTML、MathML、WML、SVG、CML和XHTML等都是标记语言。

2.程序设计范型

程序设计语言的分类没有统一的标准,从不同的角度可以进行不同的划分。从最初的机器

语言、汇编语言、结构化程序设计语言发展到目前流行的面向对象语言,程序设计语言的抽象

程度越来越高。根据程序设计的方法将程序设计语言大致分为命令式程序设计语言、面向对象

的程序设计语言、函数式程序设计语言和逻辑型程序设计语言等范型。

1)命令式程序设计语言

命令式语言是基于动作的语言,在这种语言中,计算被看成动作的序列。程序就是用语言

提供的操作命令书写的一个操作序列。用这类语言编写程序,就是描述解题过程中每一步的过

108

程序员教程(第5版)

程,程序的运行过程就是问题的求解过程,因此也称为过程式语言。FORTRAN、ALGOL、COBOL、C和Pascal等都是命令式程序设计语言。

结构化程序设计语言本质上也属于命令式程序设计语言,其编程的特点如下。

(1)用自顶向下逐步精化的方法编程。

(2)按模块组装的方法编程。

(3)程序只包含顺序、判定(分支)及循环结构,而且每种结构只允许单入口和单出口。

结构化程序的结构简单清晰、模块化强,描述方式接近人们习惯的推理式思维方式,因此可读性强,在软件重用性、软件维护等方面都有所进步,在大型软件开发中曾发挥过重要的作用。目前仍有许多应用程序的开发采用结构化程序设计技术和方法。C、Pascal等都是典型的结构化程序设计语言。

2)面向对象的程序设计语言

面向对象的程序设计语言始于从模拟领域发展起来的Simula,在该语言中首次提出了对象和类的概念。C++、Java和Smalltalk都是面向对象程序设计语言,封装、继承和多态是面向对象编程的基本特征。

3)函数式程序设计语言

函数式语言是一类以λ-演算为基础的语言,其基本概念来自于LISP,这是一个在1958年为了人工智能应用而设计的语言。函数是一种对应规则(映射),它使定义域中每个元素和值域中唯一的元素相对应。例如:

函数定义1:Square[x]:=x*x

函数定义2:Plustwo[x]:=Plusone[Plusone[x]]

函数定义3:fact[n]:=if n=0 then 1 else n*fact[n-1]

在函数定义2中,使用了函数复合,即将一个函数调用嵌套在另一个函数定义中。在函数定义3中,函数被递归定义。由此可见,函数可以看成一种程序,其输入就是定义中左边括号中的量,它也可将输入组合起来产生一个规则,组合过程中可以使用其他函数或该函数本身。

这种用函数和表达式建立程序的方法就是函数式程序设计。函数型程序设计语言的优点之一就是对表达式中出现的任何函数都可以用其他函数来代替,只要这些函数调用产生相同的值。

函数式语言的代表LISP在许多方面与其他语言不同,其中最为显著的是,该语言中的程序和数据的形式是等价的,这样数据结构就可以作为程序执行,同样程序也可以作为数据修改。

在LISP中,大量地使用递归。

4)逻辑型程序设计语言

逻辑型语言是一类以形式逻辑为基础的语言,其代表是建立在关系理论和一阶谓词理论基础上的PROLOG。PROLOG代表Programming in Logic。PROLOG程序是一系列事实、数据对

第3章程序设计语言基础知识109

象或事实间的具体关系和规则的集合。通过查询操作把事实和规则输入数据库,用户通过输入

查询来执行程序。在PROLOG中,关键操作是模式匹配,通过匹配一组变量与一个预先定义

的模式并将该组变量赋给该模式来完成操作。以值集合S和T上的二元关系R为例,R实现后,

可以询问:

?已知a和b,确定R(a,b)是否成立。

?已知a,求所有使R(a,y)成立的y。

?已知b,求所有使R(x,b)成立的x。

?求所有使R(x,y)成立的x和y。

逻辑型程序设计具有与传统的命令式程序设计完全不同的风格。PROLOG数据库中的事实

和规则是一些Hore子句。Hore子句的形式为“P:-P1,P2,···,P n.”,其中n≥0,P i(1≤i≤n)

为形如R i(···)的断言,R i是关系名。该子句表示规则:若P1,P2,···,P n均为真(成立),

则P为真。当n=0时,Hore子句变成“P.”,这样的子句称为事实。一旦有了事实与规则后,

就可以提出询问。

PROLOG有很强的推理功能,适用于编写自动定理证明、专家系统和自然语言理解等问题

的程序。

3.1.3 程序设计语言的基本成分

程序设计语言的基本成分包括数据、运算、控制和传输等。

1.程序设计语言的数据成分

程序中的数据对象总是对应着应用系统中某些有意义的东西,数据表示则指示了程序中值

的组织形式。数据类型用于描述数据对象,还用于在基础机器中完成对值的布局,同时还可用

于检查表达式中对运算的应用是否正确。

数据是程序操作的对象,具有类型、名称、作用域、存储类别和生存期等属性,在程序运

行过程中要为它分配内存空间。数据名称由用户通过标识符命名,标识符常由字母、数字和称

为下划线的特殊符号“_”组成;类型说明数据占用内存空间的大小和存放形式;作用域则说

明可以使用数据的代码范围;存储类别说明数据在内存中的位置;生存期说明数据占用内存的

时间范围。从不同角度可将数据进行不同的划分。

(1)常量和变量。按照程序运行时数据的值能否改变,将数据分为常量和变量。程序中的

数据对象可以具有左值和(或)右值。左值指存储单元(或地址、容器),右值是值(或内容)。

变量具有左值和右值,在程序运行的过程中其右值可以改变;常量只有右值,在程序运行的过

110

程序员教程(第5版)

程中其右值不能改变。

(2)全局量和局部量。按作用域可将变量分为全局变量和局部变量。一般情况下,系统为全局变量分配的存储空间在程序运行的过程中一般是不改变的,而为局部变量分配的存储单元是动态改变的。

(3)数据类型。按照数据组织形式的不同可将数据分为基本类型、用户定义类型、构造类型及其他类型。以C/C++为例,其数据类型如下。

?基本类型:整型(int)、字符型(char)、实型(float、double)和布尔类型(bool)。

?特殊类型:空类型(void)。

?用户定义类型:枚举类型(enum)。

?构造类型:数组、结构、联合。

?指针类型:type *。

?抽象数据类型:类类型。

其中,布尔类型和类类型是C++在C语言的基础上扩充的。

2.程序设计语言的运算成分

程序设计语言的运算成分指明允许使用的运算符号及运算规则。大多数高级程序设计语言的基本运算可以分成算术运算、关系运算和逻辑运算等类型,有些语言如C(C++)还提供位运算。运算符号的使用与数据类型密切相关。为了明确运算结果,运算符号要规定优先级和结合性,必要时还要使用圆括号。

3.程序设计语言的控制成分

控制成分指明语言允许表述的控制结构,程序员使用控制成分来构造程序中的控制逻辑。

理论上已经证明,可计算问题的程序都可以用顺序、选择和循环这3种控制结构来描述。

(1)顺序结构。顺序结构用来表示一个计算操作序列。计算过程从所描述的第一个操作开始,按顺序依次执行后续的操作,直到序列的最后一个操作,如图3-1所示。顺序结构内也可以包含其他控制结构。

(2)选择结构。选择结构提供了在两种或多种分支中选择其中一种的逻辑。基本的选择结构是指定一个条件P,然后根据条件的成立与否决定控制流走A还是走B,只能从两个分支中选择一个来执行,如图3-2(a)所示。选择结构中的A或B还可以包含顺序、选择和重复结构。

程序设计语言中通常还提供简化了的选择结构,如图3-2(b)所示,以及描述多分支的选择结构。

第3章程序设计语言基础知识111

(a)(b)

图3-1 顺序结构示意图图3-2 选择结构示意图

(3)循环结构。循环结构描述了重复计算的过程,通常由3个部分组成:初始化、需要重

复计算的部分和重复的条件。其中,初始化部分有时在控制的逻辑结构中不进行显式的表示。

重复结构主要有两种形式:while型重复结构和do…while型重复结构。while型结构的逻辑含

义是先判断条件P,若成立,则进行需要重复的计算A,然后再去判断重复条件;否则,控制

就退出重复结构,如图3-3(a)所示。do…while(或repeat…until)型结构的逻辑含义是先执

行循环体A,然后再判断条件P,若成立则继续执行循环体A的过程并判断条件;否则,控制

就退出重复结构,如图3-3(b)所示。

(a)while循环结构(b)do…while循环结构

图3-3 循环结构示意图

C/C++提供的控制语句如下。

(1)复合语句。复合语句用于描述顺序控制结构。复合语句由一系列用“{”和“}”括起

来的声明和语句组成,其主要作用是将多条语句组成一个可执行单元。语法上允许出现语句的

112

程序员教程(第5版)

地方都可以使用复合语句。复合语句是一个整体,要么全部执行,要么一条语句也不执行。

(2)if语句和switch语句。

① if语句实现的是双分支的选择结构,其一般形式为:

if (表达式) 语句1;

else 语句2;

其中,语句1和语句2可以是任何合法的C/C++语句,当语句2为空语句时,可以简化为:

if (表达式) 语句1;

使用if语句时,需要注意if和else的匹配关系。C/C++语言规定,else总是与离它最近的尚没有else的if相匹配。

② switch语句描述了多分支的选择结构,其一般形式为:

switch (表达式){

case 常量表达式1: 语句1;

case 常量表达式2: 语句2;

...

case 常量表达式n: 语句n;

default: 语句n+1;

}

执行switch语句时,首先计算表达式的值,然后用所得的值与列举的常量表达式的值依次比较,若常量表达式1至常量表达式n都不能与表达式的值相匹配,就执行在default部分的“语句序列n+1”,然后结束switch语句。若所得的值与常量表达式i(i=1,2,…,n)的值相同,则执行“语句序列i”,当case i的语句序列i中没有break语句时,则执行随后的语句序列i+1,语句序列i+2……直到语句序列n+1执行完成后,才退出switch语句;或者遇到了break而跳出switch 语句。要使得程序在执行完“语句序列i”后结束整个switch语句,在语句序列i中应包含控制流能够到达的break语句。

表达式可以是任何类型的,常用的是字符型或整型表达式。多个常量表达式可以共用一个语句组。语句组可以包括任何可执行语句,且无须用“{”和“}”括起来。

(3)循环语句。C/C++语言提供了3种形式的循环语句用于描述重复执行的控制结构。

① while语句。while语句描述了先判断条件再执行重复计算的控制结构,while语句的一

般形式是:

while (条件表达式) 循环体语句;

第3章程序设计语言基础知识113

其中,循环体语句是内嵌的语句,当循环体语句多于一条时,应使用“{”和“}”括起来。

执行while语句时,先计算条件表达式的值,当值为非0时,就执行循环体语句,然后重新计

算条件表达式的值后再进行判断,否则就结束while语句的执行过程。

② do…while语句。do…while语句描述了先执行需要重复的计算再判断条件的控制结构,

其一般格式是:

do

循环体语句;

while (条件表达式);

执行do…while语句时,先执行内嵌的循环体语句,然后再计算条件表达式的值,若值为

非0,则再次执行循环体语句和计算条件表达式并判断,直到条件表达式的值为0时,才结束do…while语句的执行过程。

③ for语句。for语句的基本格式是:

for(表达式1; 表达式2; 表达式3) 循环体语句;

用while语句等价地表示为:

表达式1:

while(表达式2){

循环体语句;

表达式3;

}

for语句的使用很灵活,其内部的3个表达式都可以省略,但用于分隔三个表达式的分号

“;”不能遗漏。

此外,C语言中还提供了实现控制流跳转的return、break、continue、goto语句。

程序设计语言的传输成分指明语言允许的数据传输方式,如赋值、数据的输入和输出等。

4.函数

函数是程序模块的主要成分,它是一段具有独立功能的程序。C程序由一个或多个函数组

成,每个函数都有一个名字,其中有且仅有一个名字为main的函数,作为程序运行时的起点。

函数的使用涉及3个概念:函数定义、函数声明和函数调用。

1)函数定义

函数的定义描述了函数做什么和怎么做,包括两部分:函数首部和函数体。函数定义的一

114

程序员教程(第5版)

般格式是:

返回值的类型函数名(形式参数表) //函数首部

函数体;

函数首部说明了函数返回值的数据类型、函数的名字和函数运行时所需的参数及类型。函数所实现的功能在函数体部分描述。如果函数没有返回值,则函数返回值的类型声明为void。

函数名是一个标识符,函数名应具有一定的意义(反映函数的功能)。形式参数表列举了函数要求调用者提供的参数的个数、类型和顺序,是函数实现功能时所必需的。若形式参数表为空,可用void说明。

C程序中所有函数的定义都是独立的。在一个函数的定义中不允许定义另外一个函数,也就是不允许函数的嵌套定义。有些语言(如PASCAL)允许在函数内部定义函数。

2)函数声明

函数应该先声明后引用。如果程序中对一个函数的调用在该函数的定义之前进行,则应该在调用前对被调用函数进行声明。函数原型用于声明函数。函数声明的一般形式为:返回值类型函数名(参数类型表);

使用函数原型的目的是告诉编译器传递给函数的参数个数、类型以及函数返回值的类型,参数表中仅需要依次列出函数定义时参数的类型。函数原型可以使编译器更彻底地检查源程序中对函数的调用是否正确。

3)函数调用

当在一个函数(称为调用函数)中需要使用另一个函数(称为被调用函数)实现的功能时,便以名字进行调用,称为函数调用。在使用一个函数时,只要知道如何调用就可以了,并不需要关心被调用函数的内部实现。因此,程序员需要知道被调函数的名字、返回值和需要向被调函数传递的参数(个数、类型、顺序)等信息。

函数调用的一般形式为:

函数名(实参表);

在C程序的执行过程中,通过函数调用使得被调用的函数执行。函数体中若调用自己,则称为递归调用。

C语言采用传值方式将实参传递给形参。调用函数和被调用函数之间交换信息的方法主要

第3章程序设计语言基础知识115

有两种:一种是由被调用函数把返回值返回给主调函数,另一种是通过参数带回信息。函数调

用时实参与形参间交换信息的方法有传值调用和引用调用两种。

(1)传值调用(Call by Value)。若实现函数调用时实参向形参传递相应类型的值,则称为

是传值调用。这种方式下形参不能向实参传递信息。

函数swap的定义:定义一个交换两个整型变量值的函数swap()。

void swap(int x,int y) {/*要求调用该函数时传递两个整型的值*/

int temp;

temp=x; x=y; y=temp;

}

函数调用:swap(a,b);

因为是传值调用,swap函数运行后只能交换x和y的值,而实参a和b的值并没有交换。

在C语言中,要实现被调用函数对实际参数的修改,必须用指针作形参。即调用时需要先

对实参进行取地址运算,然后将实参的地址传递给指针形参。本质上仍属于传值调用。

函数swap的定义:定义一个交换两个整型变量值的函数swap()。

void swap(int *px, int *py) {/*交换*px和*py*/

int temp;

temp=*px; *px=*py; *py=temp;

函数调用:swap(&a,&b);

由于形参px、py分别得到了实参变量a、b的地址,所以px指向的对象*px即为a,py

指向的对象*py就是b,因此在函数中交换*px和*py的值实际上就是交换实参a和b的值,从

而实现了调用函数中两个整型变量值的交换。这种方式是通过数据的间接访问来完成运算要

求的。

(2)引用调用。引用是C++中增加的数据类型,当形参为引用类型时,函数中对形参的访

问和修改实际上就是针对相应实参所作的访问和改变。例如:

void swap(int &x, int &y) {/*交换x和y*/

int temp;

temp=x; x=y; y=temp;

}

函数调用:swap(a,b);

引用调用方式下调用swap(a,b)时,x、y就是a、b的别名,因此,函数调用完成后,交换

116

程序员教程(第5版)

了a和b的值。

3.2 语言处理程序基础

语言处理程序是一类系统软件的总称,其主要作用是将高级语言或汇编语言编写的程序翻译成某种机器语言程序,使程序可在计算机上运行。语言处理程序主要有汇编程序、编译程序和解释程序3种基本类型。

3.2.1 汇编程序基础

1.汇编语言

汇编语言是为特定计算机设计的面向机器的符号化程序设计语言。用汇编语言编写的程序称为汇编语言源程序。因为计算机不能直接识别和运行符号语言程序,所以要用专门的汇编程序进行翻译。用汇编语言编写程序要遵循所用语言的规范和约定。

汇编语言源程序由若干条语句组成,一个程序中可以有三类语句:指令语句、伪指令语句和宏指令语句。

(1)指令语句。指令语句又称为机器指令语句,将其汇编后能产生相应的机器代码,这些代码能被CPU直接识别并执行相应的操作。基本的指令如ADD、SUB和AND等,书写指令语句时必须遵循相应的格式要求。

指令语句可分为传送指令、算术运算指令、逻辑运算指令、移位指令、转移指令和处理机控制指令等类型。

(2)伪指令语句。伪指令语句指示汇编程序在汇编源程序时完成某些工作,例如给变量分配存储单元地址,给某个符号赋一个值等。伪指令语句与指令语句的区别是:伪指令语句经汇编后不产生机器代码,而指令语句经汇编后要产生相应的机器代码。另外,伪指令语句所指示的操作是在源程序被汇编时完成,而指令语句的操作必须是在程序运行时完成。

(3)宏指令语句。在汇编语言中,还允许用户将多次重复使用的程序段定义为宏。宏的定义必须按照相应的规定进行,每个宏都有相应的宏名。在程序的任意位置,若需要使用这段程序,只要在相应的位置使用宏名,就相当于使用了这段程序。因此,宏指令语句就是宏的引用。

2.汇编程序

汇编程序的功能是将汇编语言所编写的源程序翻译成机器指令程序。汇编程序的基本工作

第3章程序设计语言基础知识117

包括:将每一条可执行汇编语句转换成对应的机器指令;处理源程序中出现的伪指令和宏指令。

由于汇编指令中形成操作数地址的部分可能在后面才能确定,所以汇编程序一般需要扫描两次

源程序才能完成翻译过程。

第一次扫描的主要工作是定义符号的值并创建一个符号表ST。ST记录了汇编时所遇到的

符号的名和值。另外,有一个固定的机器指令表MOT1,其中记录了每条机器指令的记忆码和

指令的长度。在汇编程序翻译源程序的过程中,为了计算各汇编语句中标号的地址,需要设立

一个位置计数器或单元地址计数器LC(Location Counter),其初值一般为0。在扫描源程序时,

每处理完一条机器指令或与存储分配有关的伪指令(如定义常数语句、定义存储语句),LC的

值就增加相应的长度。这样,在汇编过程中,LC的内容就是下一条被汇编的指令的偏移地址。

若正在汇编的语句是有标号的,则该标号的值就取LC的当前值。

此外,在第一次扫描中,还需要对与定义符号值有关的伪指令进行处理。为了叙述方便,

不妨设立伪指令表POT1。POT1表的每一个元素只有两个域:伪指令助记符和相应的子程序入

口。下面的步骤(1)~(5)描述了汇编程序第一次扫描源程序的过程。

(1)单元计数器LC置初值0。

(2)打开源程序文件。

(3)从源程序中读入第一条语句。

(4)while(当前语句不是结束语句){

if(当前语句有标号)则将标号和单元计数器LC的当前值填入符号表ST;

if(当前语句是可执行的汇编指令语句)则查找MOT1表获得当前指令的长度K,并令LC = LC+K;

if(当前指令是伪指令)则查找POT1表并调用相应的子程序;

if(当前指令的操作码是非法记忆码)则调用出错处理子程序;

从源程序中读入下一条语句;

(5)关闭源程序文件。

第二次扫描的任务是产生目标程序。除了使用前一次扫描所生成的符号表ST外,还要使

用机器指令表MOT2,该表中的元素有机器指令助记符、机器指令的二进制操作码(Binary-code)、格式(Type)和长度(Length)等。此外,还要设立一个伪指令表POT2,供第

二次扫描时使用,POT2的每一个元素仍有两个域:伪指令记忆码和相应的子程序入口。在第

二次扫描中,伪指令有着完全不同的处理。

在第二次扫描中,可执行汇编语句应被翻译成对应的二进制代码机器指令。这一过程涉及

两个方面的工作:一是把机器指令助记符转换成二进制机器指令操作码,这可通过在MOT2中

进行查找操作来实现;二是求出操作数区各操作数的值(用二进制表示)。在此基础上,可以

118

程序员教程(第5版)

装配出用二进制代码表示的机器指令。

3.2.2 编译程序基础

1.编译过程概述

编译程序的功能是把某高级语言书写的源程序翻译成与之等价的目标程序(汇编语言程序或机器语言程序)。编译程序的工作过程可以分为6个阶段,如图3-4所示。实际的编译器中可能会将其中的某些阶段结合在一起进行处理。下面简要介绍各阶段实现的主要功能。

图3-4 编译器的工作阶段示意图

1)词法分析

词法分析阶段是编译过程的第一阶段,这个阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个“单词”符号。源程序可以被看成是一个多行的字符串。

“单词”符号是程序设计语言的基本语法单位,如关键字(或称保留字)、标识符、常数、运算符和分隔符(标点符号、左右括号)等。词法分析程序输出的“单词”常以二元组的方式输出,即单词种类和单词自身的值。

词法分析过程依据的是语言的词法规则,即描述“单词”结构的规则。例如,对于某PASCAL 源程序中的一条声明语句和赋值语句:

第3章程序设计语言基础知识119

V AR X,Y,Z:real;

X:=Y+Z*60;

词法分析阶段将构成这条语句的字符串分割成如下的单词序列。

(1)保留字V AR (2)标识符X (3)逗号,

(4)标识符Y (5)逗号, (6)标识符Z

(7)冒号: (8)标准标识符real (9)分号;

(10)标识符X (11)赋值号:= (12)标识符Y

(13)加号+ (14)标识符Z (15)乘号*

(16)常数60 (17)分号;

对于标识符X、Y、Z,其单词种类都是id(标识符),字符串"X""Y""Z"都是单词的值;

而对于单词60,常数是该单词的种类,60是该单词的值。这里,用id1、id2和id3分别代表X、

Y和Z,强调标识符的内部标识由于组成该标识符的字符串不同而有所区别。经过词法分析后,

声明语句V AR X,Y,Z:real;表示为V AR id1,id2,id3:real;,赋值语句X:=Y+Z*60;表示为

id1:=id2+id3*60;。

2)语法分析

语法分析的任务是在词法分析的基础上,根据语言的语法规则将单词符号序列分解成各类

语法单位,如“表达式”“语句”“程序”等。语法规则就是各类语法单位的构成规则。通过语

法分析确定整个输入串是否构成一个语法上正确的程序。如果源程序中没有语法错误,语法分

析后就能正确地构造出其语法树;否则就指出语法错误,并给出相应的诊断信息。

词法分析和语法分析本质上都是对源程序的结构进行分析。

对语句id1:=id2+id3*60进行语法分析后形成的语法树如图3-5所示。

图3-5 语法树示意图

3)语义分析

语义分析阶段主要分析程序中各种语法结构的语义信息,包括检查源程序是否包含静态语

义错误,并收集类型信息供后面的代码生成阶段使用。只有语法和语义都正确的源程序才能被

120

程序员教程(第5版)

翻译成正确的目标代码。

语义分析的一个主要工作是进行类型分析和检查。程序设计语言中的一个数据类型一般包含两个方面的内容:类型的载体及其上的运算。例如,整除取余运算符只能对整型数据进行运算,若其运算对象中有浮点数就认为是类型不匹配的错误。

在确认源程序的语法和语义之后,就可对其进行翻译,同时改变源程序的内部表示。对于声明语句,需要记录所遇到的符号的信息,因此应进行符号表的填查工作。在图3-6(a)所示的符号表中,每行存放一个符号的信息。第一行存放标识符X的信息,其类型为real,为它分配的逻辑地址是0;第二行存放Y的信息,其类型为real,为它分配的逻辑地址是4。对于可执行语句,则检查结构合理的语句是否有意义。对语句id1:=id2+id3*60进行语义分析后的语法树如图3-6(b)所示,其中增加了一个语义处理结点inttoreal,用于将一个整型数转换为浮点数。

(a)符号表(b)语法树

图3-6 语义分析后的符号表和语法树示意图

4)中间代码生成

中间代码生成阶段的工作是根据语义分析的输出生成中间代码。“中间代码”是一种简单且含义明确的记号系统,可以有若干种形式,它们的共同特征是与具体的机器无关。中间代码的设计原则主要有两点:一是容易生成,二是容易被翻译成目标代码。最常用的一种中间代码是与汇编语言的指令非常相似的三地址码,其实现方式常采用四元式。四元式的形式为:运算符, 运算对象1, 运算对象2, 运算结果

例如,对语句X:=Y+Z*60,可生成以下四元式序列:

① (inttoreal, 60, ?, t1)

② (*, id3, t1, t2)

③ (+, id2, t2, t3)

④ (:=, t3, -,id1)

第3章程序设计语言基础知识121

其中,t1、t2、t3是编译过程中形成的临时变量,用于存放中间运算结果。

语义分析和中间代码生成所依据的是语言的语义规则。

5)代码优化

由于编译器将源程序翻译成中间代码的工作是机械的、按固定模式进行的,因此,生成的

中间代码往往在计算时间上和存储空间上有很大的浪费。当需要生成高效的目标代码时,就必

须进行优化。优化过程可以在中间代码生成阶段进行,也可以在目标代码生成阶段进行。由于

中间代码是不依赖于具体机器的,此时所作的优化一般建立在对程序的控制流和数据流分析的

基础之上,与具体的机器无关。优化所依据的原则是程序的等价变换规则。例如,在生成语句

X:=Y+Z*60的四元式后,60是编译时已知的常数,把它转换为60.0的工作可以在编译时完成,

没有必要生成一个四元式,同时t3仅仅用来将其值传递给id1,也可以化简掉,因此上述的中

间代码可优化成下面的等价代码:

① (*, id3, 60.0, t1)

② (+, id2, t1, id1)

这只是优化工作中的一个简单示例,真正的优化工作还要涉及公共子表达式的提取、循环

优化等更多的内容和技术。

6)目标代码生成

目标代码生成是编译器工作的最后一个阶段。这一阶段的任务是把中间代码变换成特定机

器上的绝对指令代码、可重定位的指令代码或汇编指令代码,这个阶段的工作与具体的机器密

切相关。例如,使用两个寄存器R1和R2,可对上述的四元式生成下面的目标代码:

①MOVF id3, R2

② MULF #60.0, R2

③ MOVF id2, R1

④ ADDF R2, R1

⑤ MOV R1, id1

这里用#表明60.0为常数。

7)符号表管理

符号表的作用是记录源程序中各个符号的必要信息,以辅助语义的正确性检查和代码生

成,在编译过程中需要对符号表进行快速有效地查找、插入、修改和删除等操作。符号表的建

立可以始于词法分析阶段,也可以放到语法分析和语义分析阶段,但符号表的使用有时会延续

到目标代码的运行阶段。

8)出错处理

用户编写的源程序不可避免地会有一些错误,这些错误大致可分为静态错误和动态错误。

程序员教程(第5版)

122 动态错误也称动态语义错误,它们发生在程序运行时,例如变量取零时作除数、引用数组元素下标越界等错误。静态错误是指编译时所发现的程序错误,可分为语法错误和静态语义错误,如单词拼写错误、标点符号错误、表达式中缺少操作数、括号不匹配等有关语言结构上的错误称为语法错误;而语义分析时发现的运算符与运算对象类型不合法等错误属于静态语义错误。

在编译时发现程序中的错误后,编译程序应采用适当的策略修复它们,使得分析过程继续下去,以便在一次编译过程中尽可能多地找出程序中的错误。

对于编译过程的各个阶段,在逻辑上可以把它们划分为前端和后端两部分。前端包括从词法分析到中间代码生成各阶段的工作,后端包括中间代码优化和目标代码的生成及优化等阶段。以中间代码为分水岭,把编译器分成了与机器有关的部分和与机器无关的部分。如此一来,对于同一种程序设计语言的编译器,开发出一个前端之后,就可以针对不同的机器开发相应的后端,前后端有机结合后就形成了该语言的一个编译器。当语言有改动时,只会涉及前端部分的维护。对于不同的程序设计语言,分别设计出相应的前端,然后将各个语言的前端与同一个后端相结合,就可得到各个语言在某种机器上的编译器。

2.词法分析

词法分析过程的本质是对构成源程序的字符串进行分析,是一种对象为字符串的运算。语言中具有独立含义的最小语法单位是符号(单词),如标识符、无符号常数与界限符等。词法分析的任务是把构成源程序的字符串转换成单词符号序列。

1)字母表、字符串、字符串集合及运算

?

字母表∑:元素的非空有穷集合。例如,∑={a , b }。 ?

字符:字母表∑中的一个元素。例如,∑上的a 或b 。 ?

字符串:字母表∑中字符组成的有穷序列。例如,a 、ab 、aaa 都是∑上的字符串。 ?

字符串的长度:字符串中的字符个数。例如,|aba |=3。 ?

空串ε:由0个字符组成的序列。例如,|ε |=0。 ?

连接:字符串S 和T 的连接是指将串T 接续在串S 之后,表示为S ·T ,连接符号 “· ”可省略。显然,对于字母表∑上的任意字符串S ,S ·ε =ε·S =S 。 ?

空集:用符号Φ表示。 ?

*∑:指包括空串ε在内的∑上所有字符串的集合。例如,设∑={a ,b },*∑={ε, a , b , aa , bb , ab , ba , aaa ,…}。 ? 字符串的方幂:把字符串α自身连接n 次得到的串,称为字符串α的n 次方幂,记为

n α。011,n n n αεααααα??===(n >0)。

?

字符串集合的运算:设A ,B 代表字母表∑上的两个字符串集合。

第3章 程序设计语言基础知识 123

? 或(合并)

:{}|A B A B ααα=∈∈∪或。 ? 积(连接)

:{}|AB A B αβαβ=∈∈且。 ? 幂:(){}1100n n n A A A A A n A ε??=?=?>=,并规定。

? 正则闭包+: ∪∪∪321A A A A =+

? 闭包*:*0A A A +=∪。显然, ∪∪∪210*ΣΣΣ=Σ

2)正规表达式和正规集

词法规则可用3型文法(正规文法)或正规表达式描述,它产生的集合是语言基本字符集∑(字母表)上的字符串的一个子集,称为正规集。

对于字母表∑,其上的正规式及其表示的正规集可以递归定义如下。

(1)ε 是一个正规式,它表示集合L (ε )={ε}。

(2)若a 是∑上的字符,则a 是一个正规式,它所表示的正规集为L (a )={a }。

(3)若正规式r 和s 分别表示正规集L (r )和L (s),则:

① r |s 是正规式,表示集合L (r )∪L (s )。

② r ·s 是正规式,表示集合L (r )L (s )。

③ r *是正规式,表示集合(L (r ))*。

④ (r )是正规式,表示集合L (r )。

仅由有限次地使用上述3个步骤定义的表达式才是∑上的正规式。

运算符“|”“· ”“*”分别称为“或”“连接”和“闭包”。在正规式的书写中,连接运算符“· ”可省略。运算符的优先级从高到低顺序排列为“*”“· ”“|”。

设∑={a , b },在下表中列出了∑上的一些正规式和相应的正规集。 正 规 式

正 规 集 ab

字符串ab 构成的集合 a |b

字符串a 、字符串b 构成的集合 a *

由0个或多个a 构成的字符串集合 (a |b )*

所有由所有字符a 和b 构成的串的集合 a (a |b )*

以a 为首字符的a 、b 字符串的集合 (a |b )* abb 以abb 结尾的a 、b 字符串的集合

若两个正规式表示的正规集相同,则认为二者等价。两个等价的正规式U 和V 记为U =V 。例如,b (ab )* =(ba )*b ,(a |b )*=(a *b *)*。

3)有限自动机

有限自动机是一种识别装置的抽象概念,它能准确地识别正规集。有限自动机分为两类:确定的有限自动机和不确定的有限自动机。

程序设计语言 习题与答案

第六章习题 P159-161 一、复习题 1、简述自然语言与形式语言的概念以及区别、汇编语言与机器语言的概念及区别。 自然语言是某一社会发展中形成的一种民族语言,而形式语言是进行形式化工作的元语言,它是以数学和数理逻辑为基础的科学语言。用机器指令形式编写的程序称为机器语言,用带符号或助记符的指令和地址代替二进制代码成为语言进化的目标。这些使用助记符语言的语言后来就被称之为汇编语言。(P144- P146) 2、试述计算机语言的类型,它们各有什么特点? 1.机器语言,是最低级的语言,由二进制码组成,最早期的程序员通过在纸带上打点来写程序 2.汇编语言,用助记符和地址符代替了二进制码,更易于编写。 3.高级语言,相对于汇编语言又上升了一步,更接近于自然语言,如C语言、Pascal、Java、C#等都是高级语言。(P145-147) 3、列举程序设计语言的几种范型。 程序语言大致分为命令式程序设计语言、面向对象的程序设计语言、函数式程序设计语言和逻辑型程序设计语言等范型。(P147-149) 4、简述语言虚拟机。 提示:语言虚拟机是某种语言的解释器。语言虚拟机是建立在硬件和操作系统之上,针对不同的硬件和操作系统有不同的虚拟机,通过语言虚拟机屏蔽掉硬件的差异。这样使得硬件系统能够支持这种语言编写的程序的有效执行。目前最流行的语言虚拟机是Java虚拟机。(P156) 5、计算机执行用高级语言编写的程序有哪些途径?它们之间的主要区别是什么? 提示:主要有编译、解释等方式,也有两种方式的混合使用的形式。 编译是使用编译器将高级语言编写的源程序转换成计算机可以执行的机器语言可执行程序,也可以理解为用编译器产生可执行程序的动作。编译方式是一次编译,然后执行程序可以反复多次执行。 解释是另一种将高级语言转换为可执行程序的方式。与编译不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。 近来随着网络的发展,为了实现跨平台但同时又保证一定的效率,出现了编译、解释混合的方式,先用伪编译形成效率较高中间代码,再用语言虚拟机进行解释执行,以屏蔽掉硬件的差异。 (P154-157) 6、请画出编译程序的总框图。如果你是一个编译程序的总设计师,设计编译程序时应当考虑哪些问题? 作为一个编译程序的总设计师,首先要深刻理解被编译的源语言其语法及语义;其次,

Java语言程序设计基础篇前三章课后习题要点

第1章计算机、程序和Java概述 1.1(显示三条消息)编写程序,显示Welcome to Java、Welcome to Computer Science和Programming is fun。 程序: 显示: 1.2(显示五条消息)编写程序,显示Welcome to Java五次 程序: 显示: 1.3(显示图案)编写一个程序,显示下面的图案:

程序: 显示: 1.4(打印表格)编写程序,显示以下表格: 程序: 显示:

1.5(计算表达式)编写程序,显示(9.5x4.5- 2.5x3)/(45.5- 3.5)的结果 程序: 显示: 1.6(数列求和)编写程序,显示1+2+3+4+5+6+7+8+9的结果 程序: 显示: 1.7(近似求π)可以使用以下公式计算π: Π=4x(1-1/3+1/5-1/7+1/9-1/11+1/13+...) 编写程序,显示4x(1-1/3+1/5-1/7+1/9-1/11+1/13...)的结果。在程序中用1.0代替1 程序: 显示:

第2章基本程序设计 2.1(将摄氏温度转换为华氏温度)编写程序,从控制台读入double型的摄氏温度,然后将其转换华氏温度,并显示结果。转换公式如下所示: Fahrenheit-=(9/5)*celsius+32 (华氏度=(9/5)*摄氏度+32) 程序: 显示: 2.2(计算圆柱体的体积)编写程序,读入圆柱体的半径和高,并使用下列公式计算圆柱体的体积 面积=半径x半径xπ 体积=面积x高 程序: 显示:

2.3(将英尺转换为米)编写程序,读入英尺数,将其转换为米数并显示结果。一英尺等于0.305米。 程序: 显示: 2.4(将磅转换为千克)编写程序,将磅数转换为千克数。程序提示用户输入磅数,然后转换成千克并显示结果。1磅等于0.454千克。 程序: 显示: 2.5(财务应用程序:计算小费)编写一个程序,读入一笔费用与酬金率,就算酬金和总钱数。例如,如果用户读入10作为费用,15%作为酬金率,计算结果显示酬金为$1.5,总费用为$11.5. 程序:

汇编语言程序设计实验教程

汇编语言程序设计实验教程

目录 第一章上机过程 (4) 1.1编辑源程序 (4) 1.2 汇编源程序 (5) 1.3连接目标程序 (6) 1.4运行程序 (7) 第二章DEBUG命令祥解 (8) 2.1 DEBUG程序使用 (8) 2.2 DEBUG的常用命令 (8) 第三章汇编语言程序设计实验 (13) 3.1实验一顺序与分支程序设计 (13) 3.2 实验二循环与子程序程序设计 (15) 3.3 实验三算术运算与代码转换程序设计 (16) 3.4 实验四字符串的匹配与替换程序设计 (18) 3.5 实验五输入输出程序设计 (19) 第四章部分实验参考答案 (21)

第一章上机过程 1.1编辑源程序 汇编语言源程序:用汇编语句编写的解决应用问题的程序。 汇编程序:将汇编语言源程序翻译成机器语言程序的系统。 汇编:将汇编语言程序翻译成机器语言程序的过程。 在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立ASCII码文本文件的软件即可。 (1)编辑软件 编辑软件:EDIT、QE、WORD、NOTEPAD等。 当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。 (2)汇编程序 有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。 (3)连接程序 用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的目标代码程序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。 (4)辅助工具程序(.EXE) 进行汇编语言程序调试和文件格式转换的程序有: https://www.doczj.com/doc/f04726673.html, 动态调试程序 EXE2BIN.EXE文件格式转换程序

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

程序设计基础(知识点)

第三部分程序设计基础 3.1 程序、程序设计、程序设计语言的定义 ⑴程序:计算机程序,是指为了得到某种结果而可以由计算机等具有信息处理能力的装置执行的代码化指令序列,或者可以被自动转换成代码化指令序列的符号化指令序列或者符号化语句序列。 ⑵程序设计:程序设计是给出解决特定问题程序的过程,是软件构造活动中的重要组成部分。程序设计往往以某种程序设计语言为工具,给出这种语言下的程序。程序设计过程应当包括分析、设计、编码、测试、排错等不同阶段。 ⑶程序设计语言:程序设计语言用于书写计算机程序的语言。语言的基础是一组记号和一组规则。根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言有3个方面的因素,即语法、语义和语用。 3.2 高级语言和低级语言的概念及区别 ⑴高级语言:高级语言(High-level programming language)是高度封装了的编程语言,与低级语言相对。

它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。 ⑵低级语言:低级语言分机器语言(二进制语言)和汇编语言(符号语言),这两种语言都是面向机器的语言,和具体机器的指令系统密切相关。机器语言用指令代码编写程序,而符号语言用指令助记符来编写程序。 ⑶区别: 高级语言:实现效率高,执行效率低,对硬件的可控性弱,目标代码大,可维护性好,可移植性好低级语言:实现效率低,执行效率高,对硬件的可控性强,目标代码小,可维护性差,可移植性差 了解知识:CPU运行的是二进制指令,所有的语言编写的程序最终都要翻译成二进制代码。越低级的语言,形式上越接近机器指令,汇编语言就是与机器指令一一对应的。而越高级的语言,一条语句对应的指令数越多,其中原因就是高级语言对底层操作进行了抽象和封装,

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著) 《计算机操作系统原理》 《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。 《数据结构和算法》——这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时) 《软件工程》——这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华) 《Windows 程序设计》——《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本 建议:你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书 关于编程的网站 计算机编程 郭新明-FTP服务器体验式学习课程(张孝祥监制) https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=3997 https://www.doczj.com/doc/f04726673.html,快速开发新闻系统在线播放 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=4708 数字电路基础[宁波电大] https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=774 计算机组成与汇编语言程序设计(赵丽梅)宁波电大 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=1242 操作系统(陈访荣)宁波电大(在线播放) https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=4708 计算机网络(马敏飞)宁波电大 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=1243 https://www.doczj.com/doc/f04726673.html, 2.0快速入门(12)-https://www.doczj.com/doc/f04726673.html, 2.0网站快速导航 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=2501 Internet和Intranet应用(薛昭旺)宁波电大 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=1245 2004年电脑硬件安装调试维修视频教学讲授 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=4825 https://www.doczj.com/doc/f04726673.html, 高级排错技巧 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=768 SQL Server 2000管理专家系列课程 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=4832 开心三人行系列(2):使用Atlas 构建AJAX应用 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=2564 Visual Basic 2005开发技巧系列课程(4): 在Visual Basic 2005中使用.NET Framework 2.0新增功能 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=2526 SQL Server 2005 系列课程-使用ADO https://www.doczj.com/doc/f04726673.html,开发SQL Server 2005 OLAP应用 https://www.doczj.com/doc/f04726673.html,/so/so138.aspx?id=2535

(完整版)《C语言程序设计》基本知识点

《C语言程序设计》教学基本知识点 第一章C语言基本知识 1.C源程序的框架 尽管各个C源程序的功能千变万化,但框架是不变的,主要有:编译预处理、主函数()、函数n()等,主函数的位置不一定在最前面,可以在程序的中部或后面,主函数的名字固定为main。 2.C语言源程序的书写规则: (1)C源程序是由一个主函数和若干个其它函数组成的。 (2)函数名后必须有小括号,函数体放在大括号内。 (3)C程序必须用小写字母书写。 (4)每句的末尾加分号。 (5)可以一行多句。 (6)可以一句多行。 (7)可以在程序的任何位置加注释。 3.语句种类 语句是程序的基本成分,程序的执行就是通过一条条语句的执行而得以实现的,根据表现形式及功能的不同,C语言的基本语句可以分为五大类。 (1)流程控制语句 流程控制语句的功能是控制程序的走向,程序的流程有三种基本结构:顺序结构、分支结构和循环结构,任何复杂的程序都可以由这三种基本结构复合而成。其中后两种结构要用特定的流程控制语句实现。 (2)表达式语句 表达式语句的形式是:表达式;,即表达式后跟一分号“;”,分号是语句结束符,是一个语句必不可少的成分。表达式和表达式语句的区别在于表达式代表的是一个数值,而表达式语句则代表一种动作。最常见的表达式语句是赋值语句。 (3)函数调用语句 函数调用语句实际上也是一种表达式语句,形式为:在一次函数调用的小括号后面加上一个分号。 (4)空语句 空语句的形式就是一个分号,它不代表任何动作,常常作为一个意义转折点使用。 (5)复合语句 复合语句从形式上看是多个语句的组合,但在语法意义上它只相当于一个语句,在任何单一语句存在的地方都可以是复合语句。注意复合语句中最后一个语句末尾的分号不能少。复合语句右大括号后面没有分号。 4.运算符 用来表示数据各种操作的符号称为运算符。运算符实际上代表了一种类型数据的运算规则。不同的运算符具有不同的运算规则,其操作的数据类型必须符合该运算符的要求,运算结果的数据类型也是固定的。 根据参加操作的数据个数多少,可以将C语言的运算符分为单目运算符,双目运算符和三目运算符(三目运算符只有条件运算符一个)。 根据运算对象和运算结果的数据类型可分为算术运算符、关系运算符、逻辑运算符等。 5.表达式 表达式是由常量、变量、函数,通过运算符连接起来而形成的一个算式。一个常量,一个变量或一个函数都可以看成是一个表达式。 表达式的种类有: 算术表达式、关系表达式、逻辑表达式、赋值表达式、字位表达式、强制类型转换表达式、逗号

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

C语言程序设计的试题及答案

C语言程序设计的试题及答案 C语言程序设计的试题及答案C语言程序设计的试题及答案第一章基础知识 一、填空 1.每个C程序都必须有且仅有一个________函数。 2.C语言程序开发到执行通常要经过6个阶段即编辑、预处理、________、链接、加载和执行。 3.软件是程序,以及______、使用和维护所需要的所有文档。 4.国标中规定:“计算机程序是按照具体要求产生的适合于计算机处理的_________”。 5.程序设计语言按照书写形式,以及思维方式的不同一般分为低级语言和________两大类。 6.C语言是由________组成的。 7.C语言的函数可分为主函数ain、标准库函数和_________。 8.一个函数是由两部分组成的,即:________和函数体。 9.编译是将C语言所编写的源程序________成机器代码,也称为建立目标代码程序的过程。 10.程序是由某种程序设计语言编制出来,体现了编程者的控制思想和对计算机执行操作的要求。不同的任务功能,就会需求不同的软件程序,如:控制计算机本身软硬件协调工作,并使其设备充分发挥效力,方便用户使用的系统软件程序,称为操作系统;而为办公自

动化、管理信息系统、人工智能、电子商务、网络互联等等应用而开发的软件程序,统称为_________。 11.机器语言是以__________形式表示的机器基本指令的集合,是计算机系统唯一不需要翻译可以直接识别和执行的程序设计语言。 12.与机器语言相比,使用汇编语言来编写程序可以用_______来表示指令的操作码和操作对象,也可以用标号和符号来代替地址、常量和变量。 13.在编译程序之前,凡以____开头的代码行都先由预处理程序预处理。 14.C程序的执行均是由执行_________开始。15.函数体即为包含在{}内的部分。它分为________和为完成功能任务由若干个C语句组成的执行部分。 16.C语言程序中一条简单语句是以________字符作为结束符的。 17.C语言是结构化、________的程序设计语言。 18.由于计算机硬件不能直接识别高级语言中的语句,因此,必须经过“_______程序”,将用高级语言编写的程序翻译成计算机硬件所能识别的机器语言程序方可执行。 19.用高级语言编写的程序需翻译成计算机硬件所能识别的机器语言程序方可执行。所以说,用高级语言进行程序设计,其编程效率高,方便易用,但_______没有低级语言高。 20.第一个系统体现结构化程序设计思想的教学工具语言是_______语言。

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

程序设计基础试题(附答案)

程序设计基础复习题 一、单选 1、一个完整的计算机系统应该包括() A、系统软件和应用软件 B、计算机及其外部设备 C、硬件系统和软件系统 D、系统硬件和系统软件 2、“裸机”的概念是指() A、正在进行设计还没有组装好的计算机 B、已经组装好但还没有安装任何软件的计算机 C、仅安装了操作系统的计算机系统 D、安装了文字处理软件但没有安装专用数据处理系统的计算机 3、世界上第一台电子数字计算机研制成功的时间是() A、1936年 B、1946年 C、1956年 D、1970年 4、CASE的含义是() A、计算机辅助设计 B、计算机辅助制造 C、计算机辅助教学 D、计算机辅助软件工程5、当前广泛使用的微型计算机是() A、第一代 B、第二代 C、第三代 D、第四代 6、当代计算机的体系结构称为是() A、冯·诺依曼机 B、非冯·诺依曼机 C、图灵机 D、比尔盖茨机 7、硬盘是() A、输入设备 B、输出设备 C、存储设备 D、计算设备 8、下面4句话中,最准确的表述是() A、程序=算法+数据结构 B、程序是使用编程语言实现算法 C、程序的开发方法决定算法设计 D、算法是程序设计中最关键的因素

9、计算机能直接执行的语言是() A、机器语言 B、汇编语言 C、高级语言 D、目标语言 10、解释程序的功能是() A、将高级语言程序转换为目标程序 B、将汇编语言程序转换为目标程序 C、解释执行高级语言程序 D、解释执行汇编语言程序 11、下面4种程序设计语言中,不是面向对象式语言的是() A、JAVA B、Object Pascal C、Delphi D、C 12、不是C语言的基本数据类型是() A、int B、double C、char D、bool 13、在C语言中,为了求两个整数相除之后得到的余数,可以使用运算符() A、/ B、% C、* D、++ 14、数据的逻辑结构分为() A、纯属结构和非线性结构 B、顺序结构和非顺序结构 C、树型结构和图型结构 D、链式结构和顺序结构 15、用链表表示纯属表的优点是() A、便于随机存取 B、便于插入和删除操作 C、花费的存储空间较顺序存储少 D、元素的物理顺序与逻辑顺序相同 16、栈的最主要特点是() A、先进先出 B、先进后出 C、两端进出 D、一端进一端出 17、下面4句结论只有一句是错误的,它是()

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

程序设计语言基础知识题库1-1-8

程序设计语言基础知识题库1-1-8

问题: [单选]将来源不同的目标程序装配成一个可执行程序是()的任务。 A.连接程序 B.编译程序 C.解释程序 D.汇编程序 连接程序:它将分别在不同的目标文件中编译或汇编的代码收集到一个可直接执行的文件中。编译程序:把用高级程序设计语言书写的源程序翻译成等价的计算机汇编语言或机器语言书写的目标程序的翻译程序。解释程序:是高级语言翻译程序的一种,它将源语言(如BASIC)书写的源程序作为输入,解释一句后就提交计算机执行一句,并不形成目标程序。汇编程序:把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。

问题: [单选]某C语言程序中,m是一个整型变量,则()时遇到表达式m+"test"会报错。 A.词法分析 B.语法分析 C.语义分析 D.程序运行 词法分析阶段是编译过程的第一个阶段,这个阶段的任务是对源程序从前到后(从左到右)逐个字符地扫描,从中识别出一个个"单词"符号。"单词"符号是程序设计语言的基本语法单位,如关键字(或称保留字)、标识符、常数、运算符和分隔符等。但双引号("")不属于这些分类。

问题: [单选]面向对象程序设计语言主要用于()。 A.面向对象分析、设计与实现 B.面向对象分析 C.面向对象设计 D.面向对象实现 面向对象的程序设计,即是利用面向对象的程序设计语言将面向对象的产品定义模型转换成可以在计算机上处理的表达形式,以便最终在计算机上实现系统的设计。 (辽宁11选5 https://www.doczj.com/doc/f04726673.html,)

问题: [单选]表达式"a*(b-c)+d"的后缀式为()。 A.abcd*-+ B.ab*c-d+ C.ab-cd+* D.abc-*d+ 在后缀表示方式下,运算对象自左至右依次书写,运算符紧跟在需要参与运算的对象后面。对于"a*(b-c)+d",运算次序为b-c,之后与a相乘,最后再与d相加,因此其后缀表示为"abc-*d+"。

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

C语言程序设计基础测试题-答案

C语言程序设计基础测试题 一、单选 [1] 下面叙述中错误的是____。 A. 复合语句中定义的函数只在该复合语句中有效 B. return( )语句中的括号中,可以是变量,常量或有确定值的表达式 C. 形式参数也是局部变量 D. 主函数中定义的变量在整个程序中都是有效的 [2] 下列说法中正确的是____。 A.带参数的宏定义中的参数是没有类型的 B.宏展开将占用程序的运行时间 C.宏定义命令是C语言中的一种特殊语句 D.使用#include命令包含的头文件必须以“.h"为后缀 [3] 若函数的形参为一维数组,则下列说法中正确的是____。 A.调用函数时的对应实参必为数组名 B.形参数组可以不指定大小 C.形参数组的元素个数必须等于实参数组的元素个数 D.形参数组的元素个数必须多于实参数组的元素个数 [4] 系统的标准输出设备是____。 A.键盘 B.硬盘 C.内存 D.显示器 [5] 下面叙述中正确的是____。 A.全局变量在定义它的文件中的任何地方都是有效的 B.全局变量在程序的全部执行过程中一直占用内存单元 C. C语言的switch语句中case后可为常量或表达式或有确定值的变量及表达式 D. 说明函数时必须明确其参数类型和返回类型 [6] C程序的基本结构单位是____。 A.文件 B.语句 C.函数 D.表达式 [7] 对于定义,char *aa[2]={"abcd","ABCD"},选项中说法正确的是____。 A.aa数组元素的值分别是"abcd"和"ABCD" B.aa是指针变量,它指向含有两个数组元素的字符型一维数组 C.aa数组的两个元素分别存放的是含有4个字符的一维字符数组的首地址 D.aa数组的两个元素中各自存放了字符'a'和'A'的地址 [8] 任何一个C语言的可执行程序都是从____开始执行的。 A.程序中的第一个函数 B.main( )函数的入口处

汇编语言程序设计教程(第3版 卜艳萍)参考答案

汇编语言程序设计教程(第3版) 习题参考答案 第1章汇编语言基础知识 思考与练习 1.计算机系统分哪几个层次?简述计算机系统的硬件结构。 1)数字逻辑层 2) 微体系结构层 3) 指令系统层 4) 操作系统层 5) 汇编语言层 6) 高级语言层 7) 应用层 硬件系统是指构成计算机系统的物理实体或物理装置。它由控制器、运算器、存储器、输入设备和输出设备等部件构成。 2.简述用汇编语言进行程序设计的必要性。 1)程序要具有较快的执行时间,或者只能占用较小的存储容量。例如,操作系统的核 心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。 2)程序与计算机硬件密切相关,程序要直接、有效地控制硬件。例如,I/O接口电路 的初始化程序段,外部设备的低层驱动程序等。 3)大型软件需要提高性能、优化处理的部分。例如计算机系统频繁调用的子程序、动 态连接库等。 4)没有合适的高级语言或只能采用汇编语言的时候。例如,开发最新的处理器程序时, 暂时没有支持新指令的编译程序。 5)汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解 密软件、分析和防治计算机病毒等。 3.汉字编码主要分哪几类?每类的功能如何? 汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。 1)为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用 西文标准键盘上的字母数字串表示汉字的编码。目前,汉字输入编码方法主要有三 种:数字编码、拼音编码和字形编码。 2)汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标 码。无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标 识每个汉字。 3)汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息 处理系统内部存储、处理、传输汉字用的编码。 4)字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。4.计算机的字长是怎么定义的,试举例说明。 计算机能同时处理二进制信息的位宽定义为计算机的字长。如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。 5.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值? 用相应进制的数值加上进制标记即可。

程序设计语言基础

先来认识一下程序,要使计算机能完成人们预定的工作,就必须把要完成工作的具体步骤编写成计算机能执行的一条条指令,计算机执行这些指令序列后,就能完成指定的功能,这样的指令序列就是程序。简单地说,程序是能完成一定功能的指令序列。要想学会编写程序,首先要学习能提供指令的程序设计语言;其次要学习更多和程序设计有关的知识和技巧,就好像认识许多字不一定能写出好文章一样,仅仅学习了程序设计语言还不能编写出好的程序。 程序的功能一般是指其处理数据的能力,所以一个程序包括以下两个方面的内容。 (1)对数据的描述。在程序中要指定处理数据的类型和组织形式,即数据结构(data structure)。 (2)对操作的描述。即操作步骤,也就是算法(algorithm)。数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。 作为程序设计人员,必须认真考虑和设计数据结构与操作步骤(即算法)。因此,著名计算机科学家沃思(Nikiklaus Wirth)提出一个公式: 程序=数据结构+算法 当然这些要素都离不开一个与计算机交互的平台——语言工具和环境。因此,可以这样表示程序: 程序=算法+数据结构+语言工具和环境 算法是程序的灵魂,是解决问题所需要采用的合适方法,决定程序“做什么”和“怎么做”;数据结构是加工对象的组织方式;程序设计语言是程序设计的工具和环境。 大家更熟悉的一个词可能是“软件”,软件是具有一定综合功能的程序、数据及相关文档的集合。只有打好程序设计的基本功,并掌握一定的软件开发技术后,才有可能去开发具有实用性的软件。 1.1 引言 1.1.1 程序设计语言及其分类 1.什么是程序设计语言?其功能又如何 “程序设计语言是一种指挥机器的工具?一种程序员之间交流的方式?一种表述高层

C语言程序设计基础知识 习题一及参考答案

第一章:程序设计基础知识 一、单项选择题 1、以下( )是面向过程的程序设计语言。 A)机器语言B)汇编语言C)高级语言D)第四代语言 2、程序设计一般包含以下四个步骤,其中其中首先应该完成的是( )。 A)设计数据结构和算法B)建立数学模型 C)编写程序D)调试和运行程序 3、以下常用算法中适合计算等差级数的算法是( )。 A)枚举法B)递推法C)分治法D)排序法 4、以下不属于算法基本特征的是( )。 A)有穷性B)有效性C)可靠性D)有一个或多各输出 5、以下描述中不正确的是( )。 A)程序就是软件,但软件不紧紧是程序。 B)程序是指令的集合,计算机语言是编写程序的工具。 C)计算机语言都是形式化的语言,它有一个语法规则和定义。 D)计算机语言只能编写程序而不能表示算法。 6、下面描述中,正确的是( ) A)结构化程序设计方法是面向过程程序设计的主流。 B)算法就是计算方法。 C)一个正确的程序就是指程序书写正确。 D)计算机语言就是编写程序的工具而不是表示算法的工具。 7、下面描述中,不正确的是( )。 A)递归法的关键是必须有一个递归终止的条件。

B)递归算法要求语言具有反复自我调用子程序的能力。 C)对于同一个问题,递推算法比递归算法的执行时间要长。 D)递推算法总可以转换为一个递归算法。 8、N-S图与传统流程图比较,主要优点是( )。 A)杜绝了程序的无条件转移。 B)具有顺序、选择和循环三种基本结构。 C)简单、只管。 D)有利于编写程序。 A)B)C)D) 二、填空题 1、在流程图符号中,判断框中应该填写的的是________。(判断条件) 2、结构化程序设计是__________应遵循的方法和原则。(面向过程编程) 3、结构化程序必须用__________程序设计语言来编写。(具有结构化控制语句) 4、可以被连续执行的一条条指令的集合称为计算机的________。(程序) 5、只描述程序应该“做什么”,而不必描述“怎样做”的语言被称为________。(面向对象) 6、任何简单或复杂的算法都是由_____和_____这两个要素组成。(数据结构算法) 7、算法的_______特征是指:一个算法必须在执行有限个操作步骤后终止。(有穷性) 8、在三种基本结构中,先执行后判断的结构被称为_________。(直到型循环结构) 9、在程序设计中,把解决问题确定的方法和有限的步骤称为______。(算法) 10、程序设计风格主要影响程序的________。(可读性) 11、用模块组装起来的程序被成为________结构化程序。(模块化) 12、采用自上而下,逐步求精的设计方法便于____________。(结构化和模块化) 三、应用题

第四章MCS-51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

相关主题
文本预览
相关文档 最新文档