文档库 最新最全的文档下载
当前位置:文档库 › PASCAL程序设计

PASCAL程序设计

PASCAL程序设计
PASCAL程序设计

第一章PASCAL程序设计基础

我们日常工作、学习和生活中,要做某件事,如果事先没有计划,只是想一步做一步,是达不到理想效果的。要很好地、高效率地完成某件事,必须事先有一个计划,第一步做什么,下一步做什么,最后一步做什么。即先考虑好做这件事的所有步骤,然后按部就班地完成它。在计算机系统中,能完成某项任务的一系列指令或语句就是程序。程序设计是设计、书写和调试程序的过程。

第一节程序设计语言及算法

一、程序设计语言

人们使用计算机,可以通过某种计算机语言与其交谈,用计算机语言描述所要完成的工作。为了完成某项特定任务用计算机语言编写的一组指令序列就称之为程序。编写程序和执行程序是利用计算机解决问题的主要方法和手段。程序设计语言是用来书写计算机程序的语言。程序设计语言经历了机器语言、汇编语言、高级语言到面向对象的程序设计语言等多个阶段。

1.机器语言

机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。

用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且编出的程序全是些0和1的指令代码,直观性差,还容易出错。现在,除了计算机生产厂家的专业人员外,绝大多数程序员已经不再去学习机器语言了。

2.汇编语言

为了克服机器语言难读、难编、难记和易出错的缺点,人们就用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码(如用ADD表示运算符号“+”的机器代码),于是就产生了汇编语言。汇编语言是一种用助记符表示的仍然面向机器的计算机语言。汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。汇编语言是低级语言。

3.高级语言

20世纪50年代后期,在对低级语言的改进过程中,又研制出一种既接近于自然语言,又接近数学语言的程序设计语言。使用这种语言编写程序快捷方便,便于修改和高度,大大提高了编程的效率,同时这种语言编写的程序不依赖具体的机器,能用性好,我们称之为高级语言。用高级语言,不必考虑机器的结构和特点,可以集中精力考虑解决问题的算法,因此,高级语言也称为算法语言。

4.面向对象的程序设计语言

面向对象程序设计方法成为今后软件发展的主流,面向对象程序设计方法直接映射到人们对问题的认识上,提供了一种有目的地把系统分解为模块的策略,并将设计决策与客观世界的认识相匹配。面向对象的程序设计语言更加直观,更加人性化。

二、算法

例1 写出你在家中烧开水的过程的一个算法。

我们用计算机模拟过程具体步骤可以表示为:

步骤1:往壶内注水;

步骤2:点火加热;

步骤3:观察:如果水开,则停止烧火,否则继续烧火;

步骤4:如果水未开,重复“3”直至水开。

这种对于解决问题的方法和步骤的描述就是算法。算法可以理解为由基本运算及规定的运算顺序构成的完整的解题步骤,或看成按要求设计好的有限的、确切的计算序列,并且这样的步骤或序列能解决一类问题。实际上,做任何事情都需要设计好工作的步骤和方法,例如,做广播体操、国家足球队的每一场比赛、举办奥运会、厨师炒菜,都是按一定的步骤进行的。做广播操的每一节动作的图解就是“广播体操算法”,举办奥运会的流程也是一个“算法”。一个菜谱也是一个“算法”,厨师炒菜就是实现这个算法。

三、算法描述

描述算法的方式是多种多样的,可以用文字(例如烧水);也可以用图示(例如广播体操图解);还可以用别的一些符号系统(例如音乐的乐谱)。

例2已知两个整数a、b,计算这两个数的和的算法就可以用文字描述为:

步骤1:输入整数a、b;

步骤2:计算a+b的和;

步骤3:输出a+b的和;

用算法流程图来描述计算a+b的和的算法会更加直观。如图1.1所示。

我们看到流程图是用一些框图来表示算法中的一些功能块,流程图常用的符号如下表:表1-1 常用流程图符号

画流程图时,先画出代表程序中功能块的一些处理框和条件框,并在其中写上解释性的文字,然后用流程线把这些框连接在一起并标上箭头表示流程的顺序。

四、根据算法写出程序

为了使算法在计算机上实现,需要使用计算机程序设计语言来编程,例如完成计算两个整数的和(两个数的和不大于32767)的过程,可以用PASCAL语言表示成如下形式;

PROGRAM p1_1(INPUT,OUTPUT);

V AR a,b,s:INTEGER;

BEGIN

READ(a,b);

S:=a+b;

WRITE(S);

END.

五、程序设计的步骤

通常程序设计的步骤如下图1.2

图1.2程序设计步骤

步骤1:对问题进行细致的分析;

步骤2:确定解决问题的处理方法;

步骤3:确定解决问题的算法;

步骤4:根据算法编写程序;

步骤5:运行、调试程序,得到结果,问题解决。

实践与交流

在电视台的某个娱乐节目中,要求参与者快速猜出物品的价格。主持人出示某件物品,参与者每次估算出一个价格,主持人只能回答高了、低了或者正确。在某次节目中,主持人出示了一台价值在1000元以内的随身听,并开始了竞猜。下面是主持人和参与者的一段对话:

参与者:800元!

主持人:高了!

参与者:400元!

主持人:低了!

参与者:600元!

主持人:低了!

这个参与者的算法合理吗?如果你是参与者,你将怎么猜?请写出你的算法。

第二节 认识PASCAL 语言

PASCAL 语言是1971瑞士苏黎世联邦工业大学的N .Wirth 教授开发的一种高级语言,历时三十余载,经久不衰,已成为世界上广泛流行的程序设计语言之一。

一、PASCAL 程序的基本组成

在没有系统学习PASCAL 语言之前,暂且绕过那些繁琐的语法规则细节,通过下面的简单例题,可以速成掌握PASCAL 程序的基本组成和基本语句的用法,让初学者直接模仿学习编简单程序。

例3 为了加强公民的节水意识,合理利用水资源,各地采用价格调控手段达到节约用水的目的,某市规定如下用水收费标准:每户每月的用水量不超过6立方米时,水费按每立方米2元收费,超过6立方米时,不超过的部分每立方米仍按2元收费,超过的部分每立方米按2.5元收费,请编写一个程序,输入一户人家的月用水量(整数),计算需交水费。

程序首部 PROGRAM p1_2(INPUT,OUTPUT);

V AR x:INTEGER; { x 为月用水量}

s:REAL; {s 为需要交的水费}

BEGIN

WRITE(“请输入你家的本月用水量:”); READ(x);

IF x<6 THEN s:=x*2

ELSE s:=(x-6)*2.5+6*2;

WRITE (“您本月需交水费”,s, “元”); END.

标准Pascal 程序是由程序头(如例中第一行)和程序体两部分组成。组成Pascal 程序的基本单位是语句,除最后一条语句“END ”以圆点“.”结束外,其它语句均以分号结尾(END 前一个语句可以不用分号)。

1.程序头

程序头中的PROGRAM 是Pascal 源程序的标志,键入空格后输入程序名(自定)。 2.程序体

程序体由说明部分和执行部分组成。 (1)说明部分

说明部分必须写在程序体的开始,程序所用到的常量的值和变量的类型必须在这里说明,否则不能使用。常量是指在程序执行过程中,值始终保持不变的量,经常用到的是数值型常量和字符型常量,常量的定义是以CONST 开头,语法格式为:

说明部分

执行部分

程序体

CONST

<常量标识符> = <常量>;

……

<常量标识符> = <常量>;

在一个程序中可以定义多个常量。每个常量定义用分号“;”结束。上面的程序说明了一个常量pi。

变量是程序在执行过程中其值可以发生变化的量,如在上面程序中radius,area就是变量。变量名必须以字母开始,后面可跟字母、数字或下划线的组合,字母不分大小写,长度可任意,但仅前63个字符有效。变量名由程序设计者定义,要尽量取有意义的名字且与所表示的数据有关,例如:number,name,x1,sum_3等都是合法的变量名,而如2a,x+y 是不合法的变量名。

Pascal中专用词汇,如BEGIN、VAR、INTEGER等,不能作为变量名,我们称它为保留字。保留字也不分大小写,我们在例题中把它写成大写是便于初学者分析和学习。Pascal 的保留字、程序名、变量名、常量名和以后学习的子程序名等,它们都是某种数据或用途的标志,我们统称它们为标识符。

Pascal在执行部分用到的每一个变量,都必须在说明部分加以说明,变量说明以VAR 开头,语法格式为:

VAR

<变量标识符表>:<类型>;

……

<变量标识符表>:<类型>;

<变量标识符表>是一个或多个用逗号隔开的变量标识符,冒号后面的<类型>将在下面讲述。

(2)执行部分

执行部分是程序的主体,实现程序的算法和操作全过程,也是以后几节讲授的内容。

二、Turbo Pascal 的基本数据类型

1.INTEGER 整型

整数型数据的范围在–32768 ─ 32767 之间。

2.REAL 实型

实数型数据的绝对值范围在 2.9×10-39 ─ 1.7×1038之间。实数的表示有两种方法:小数形式和指数形式(或称科学表示法)。小数形式如36.72, 0.0等,指数形式如–6.32E+8(相当于–6.32×108),8.623E-4(相当于8.623×10-4)等。

3.CHAR 字符型

CHAR字符型常量是用一对单引号括起来的单个字符,如:'a' , ' ', '+', 'Y', '3' 等。

说明:

(1)一对单引号不分左引号和右引号,用同一键;

(2)用引号括起来的字符与不用引号括起来的字符意义完全不同,如a可能代表变量而'a' 只是一个字母,+ 是进行加法运算而 ' + ' 也只是一个符号;

(3)连续键入两个单引号代表空字符,当键入一个引号后键入空格再键入另一引号代表的字符是空格,是有意义、有ASCII码值的;

(4)对于英文字母,大小写代表的字符型常量是不同的,ASCII值不同,也不能互换。

4.STRING 字符串型

STRING字符串型常量是用一对单引号括起来的两个或两个以上的字符,与CHAR型不同,在中学程序设计中经常用到。如'JILIN' ,'3456' 等。

说明:例中的'3456' 代表了一串数字字符,没有数学意义,不能参与算术运算。

5.BOOLEAN 布尔型

布尔型数据属于逻辑代数,它只有两个值:FALSE(假)和TRUE(真)。

Turbo Pascal的基本数据类型都是有序类型,而INTEGER、CHAR和BOOLEAN同时又是顺序类型,即每个数据都有确定的序号,并都有其后继值和前导值。关于其后继值和前导值,我们将以后讲述。

三、Pascal的运算

1.算术运算:

算术运算是在整型和实型两种类型中进行的。

表1—2算术运算符

参与运算的两个数如果都是整数,+、-、* 的结果也是整数,整型数除法(DIV)运算结果是商的整数部分(属整型数)。例如:

7 DIV 5 = 1 (-17)DIV 3 = -5 3 DIV 7 = 0

取模运算(MOD)是取两个整数相除的余数。例如:

19 MOD 7 = 5 (-17)MOD 3 = -2 3 MOD 7 = 3

参与运算的两个数如果都是实数,+、-、*、/ 的结果也是实数,没有DIV和MOD运算,实型数可以与整型数混合参与运算,其结果是实型数。即使是两个整型数做“/”除法所得商是整数时,其结果也是实型。例如:12/3 = 4.0000000000E+00

2.比较运算:

表1—3比较运算符

比较运算的结果只有两种可能:TRUE(真)或FALSE(假),它属于布尔型的常量。例如:当输出3 > 5的结果时,屏幕上会出现FALSE。

3.布尔运算:

布尔运算又称逻辑运算。

表1—4逻辑运算符

这些运算的对象是布尔型的,结果也是布尔型的。下面是逻辑运算的真值表,其中a、b是布尔型数据,T表示TRUE,F表示FALSE。

表1—5逻辑运算真值表

四、Pascal 标准函数和表达式

1.Turbo Pascal 标准函数 Turbo Pascal 提供了一个系统函数库,其中的函数称为标准函数,用户可以直接使用。在使用时需写出函数名和自变量,与数学不同,自变量一定用圆括号括起来,如数学中的sinx 在Pascal 语言中写成SIN(x),再如求a+b 的算术平方根,要写成SQRT (a+b )。这些事先预定义的函数包括算术标准函数、字符串函数、图形函数和文件操作函数等等。

表2—6 Turbo Pascal 部分标准函数表

说明:函数TRUNC(x)的作用是截去x 的小数部分,然后将x 的整数部分转换成整型值;ROUND(x)有四舍五入功能,其它同TRUNC(x);三角函数的自变量为弧度制;ORD(x)的自变量x 是数字字符时,对应的是ASCII 码值,而一个整型数的序号是其整数值。例如: ORD ('5')= 53,ORD (5)= 5。对于BOOLEAN 类型的两个值,也有确定的序号: ORD (FALSE )= 0,ORD (TRUE )= 1。

2.表达式

表达式可以是常量、变量、函数和它们之间的算术运算、逻辑运算、关系运算等。注意表达式与数学式在写法上多数是不一样的。

数学式 Pascal 表达式

)()(b a b a -+ (a+b )/ (a-b)

a

ac b b 242

-+

- (-b+sqrt (b*b-4*a*c))/(2*a)

注意:

(1)只能使用合法的标识符。

(2)乘号必须用符号“*”,不得省略,如a*b 。

(3)函数的自变量一定要写在圆括号中,如sin (2*x)。

(4)为了指定运算的次序可以利用圆括号,不得使用中括号“[ ]”和大括号“{ }”。 (5)表达式运算的优先规则基本与数学相同,当几个布尔运算同时使用时,按下列规则进行:首先是NOT 运算,然后是AND 运算,最后是OR 运算。当然,可以通过括号改变运算的先后次序。

例4 求下列表达式的值。

(1)ORD (6)/ 3 (5)NOT (2>3)

(2)3*9 MOD SQR (2) (6)(5>7)OR (2>3)AND (5>2) (3)ABS (-25)DIV (3+4) (7)(3>2) AND NOT (5>3) (4)513 MOD 100 DIV 10 (8)(3>2) OR NOT (5>3) 解:(1)值为2.0000000000E+00

说明:ORD (6)的值为整数6,实型除2后得实型数值。

(2)值为3

说明:先计算3*9,积为27,第二步计算2的平方为4,最后求余数为3。 (3)值为3 (25除以7取整为3)。

(4)值为1 (513除以100的余数为13,13除以10取整为1)。 (5)值为TRUE 。

(6)值为FALSE

说明:按优先级,先计算(2>3) AND (5>2)的值为假,再与(5>7)进行OR 运算。 (7)值为FALSE (先计算NOT(5>3),再与 (3>2) 进行AND 运算。 (8)值为TRUE 。

实践与交流

1.单项选择题

(1) 以下能作为标识符的是:

(A ) 2X (B ) a+b (C ) A3 (D ) x<>y (2) 以下能作为变量名的是:

(A ) 4A (B ) DIV (C ) VAR (D ) ABC (3) 以下不是保留字的是:

(A )NOT (B ) CONST (C ) VAR (D ) ABC (4) 当a=5 , b=3 , b>a 的值是

(A ) TRUE (B) FALSE (C) -2 (D) NOT 2.指出下面的常量说明的对错:

CONST pi=3.1415927 b=FALSE 2A=9.22 M= '1995' 3.指出下面的变量说明为什么是错的:

(1)VAR R=REAL (2)VAR i, j, m :INTEGER j, k :REAL (3)VAR ' a ', ' b ', ' c ':CHAR 4.把下面代数式或命题写成Pascal 表达式:

(1)b 2

- 4ac (2 ) 2

2b a

(3)A 小于B 或小于C ; (4)A 和B 都大于C ; (5)A 是非正数; (6)B 不能被A 整除;

(7)A同时能被B和C整除。

5.求下列表达式的值:

(1)513 MOD 10 (2)(513 MOD 100)DIV 10 (3)513 DIV 100

(4) TRUNC(17/3) (5) ROUND (17/3) (6) 3 + SQR (9)

(7) SIN (3.14/6) + 1.5 (8) 1 / ABS ( 5-7 )

(9) (5>3) AND (3>4) (10) ORD (3+5)

(11) (5>3) OR (3>4) (12) SQRT (25) DIV 2

(13) (5>3) AND NOT(3>4) (14) (5>3) OR NOT (3>4)

第二章顺序结构程序设计

无论做任何事情,都要有一定的方式方法与处理步骤。计算机程序设计比日常生活中的事务处理更具有严谨性、规范性、可行性。为了使计算机有效地解决某些问题,须将处理步骤编排好,用计算机语言组成“序列”,让计算机自动识别并执行这个用计算机语言组成的“序列”,完成预定的任务。将处理问题的步骤编排好,用计算机语言组成序列,也就是常说的编写程序。在PASCAL语言中,执行每条语句都是由计算机完成相应的操作。编写PASCAL程序,是利用PASCAL语句的功能来实现和达到预定的处理要求。

顺序结构是结构化程序设计的三种基本结构之一,组成顺序结构的各语句是按照它们在程序中出现的先后顺序逐条执行的。“千里之行,始于足下”,我们从简单程序学起,逐步了解和掌握怎样编写顺序结构程序。

第一节赋值语句

通过第一章的学习我们了解到,变量代表一个存储单元,其值是可变的,那么其中的值是怎么提供的,又是怎么改变的呢?这就需要用到我们这一节介绍的赋值语句。

例5 交换两个变量的值:将变量a值为5和变量b值为8中的值互换,编写程序完成这一交换过程。

交换两个变量的值,可以想象成交换两个杯子中的水,可以按以下步骤处理,如图2.1.1:

B水杯C空杯

图2.3交换两个杯子中的水

我们用计算机模拟这一过程也需找到一个空杯子c,具体步骤可以表示为:

步骤1:拿一个空杯子c作为过渡,先将a杯中的水倒入c杯中;

步骤2:再将b杯中的水倒至a杯中;

步骤3:最后将c杯中的水倒至b杯中。

这样操作,可达到题目要求。

算法描述:

1、初始化变量a,b

2、将a的值赋值给c

3、将b的值赋值给a

4、将c的值赋值给b

流程图如下:

图2.4交换两个变量的值流程图程序如下:

PROGRAM p2_1(INPUT,OUTPUT);

V AR a,b,c:INTEGER;

BEGIN

a:=5;

b:=8;

c:=0;

c:=a;

a:=b;

b:=c;

END.

指点迷津

1、赋值语句的格式

变量名:=表达式;

其中":="称为赋值号。

赋值语句的作用是计算表达式的值,并赋给变量。对于任何一个变量必须首先赋值,然后才能引用,否则,未赋初值的变量将以一个随机值参与运算。另外,赋值号两边的类型必须相同,但表达式值为整数时,它可自动化为实型后赋给该实型变量,即符合赋值相容。

2、执行过程

在上面的任务中,在赋值号右边的只是一个简单的变量,更多的时候,赋值号的右边是一个表达式,这时计算机先计算赋值号右边表达式的值,然后将表达式的值赋给变量名代表的变量。如:a :=2+3;b :=(3+5)*7;甚至可以在表达式中包含变量。如:a :=a+b;一个赋值语句中有多个赋值号,这时按照从右到左的顺序进行计算。如:a :=8+b :=3+2,此时a的值为13,b的值为5。

实践与交流

1.火车站和飞机场经常为旅客的行李提供“打包”服务,如果长、宽、?高分别为a、b、c 米的箱子按如图所示的方式“打包”至少需要多长的“打包”带?(图中粗线为“打包”带其中a=0.5米b=1米c=0.8米)

2.某车棚存有自行车和三轮车共65辆,它们的轮子数合计为150个。求该棚内存有的自行车和三轮车各是多少辆?

第二节输入/输出语句

前面讲到的例子中,所用到的变量的值都是在程序执行之前就赋值给变量了,用这种方法给变量赋值固然可以,但是如果需要赋值的变量较多,或变量的值经常变化,在程序执行之前就通过赋值语句给变量赋值就很不方便,有的程序在执行之前很可能无法确定变量的值,比如给行李打包的例子中,每一个箱子的体积都不同,所以,没有输入语句,程序不具备通用性。没有输出语句,程序得到的结果不能输出出来,用户就得不到计算后的结果,这样程序就没有意义了。所以一个程序通常都会含有输入输出语句

任务

对于任意给定的半径,计算圆的周长和面积。(结果保留两位小数)

任务分析

计算圆的周长和面积,首先要了解计算公式圆周厂的计算公式可以表示为L=2*π*r,面积计算公式为S=π*r*r,其中π为常量,r为半径,是可变的,在程序的执行过程中由键盘输入。最后还要将结果输出出来。

算法

1、初始化给常量π赋值为3.14。

2、从键盘读入数据并赋值给表示半径的变量r。

3、根据公式计算圆的面积和周长

4、输出半径及圆的面积和周长

流程图

程序

PROGRAM p2_2(INPUT,OUTPUT);

CONST p=3.14;

V AR r, s, l:REAL;

BEGIN

s:=0;

l:=0;

READ(r);

s:=p*r*r;

l:=2*p*r;

WRITE(s:8:2,l:8:2);

END.

指点迷津

通过计算机的外设把数据送到计算机内存的过程称为输入。输入语句的语法格式为:READ(<变量名表>);

READLN(<变量名表>);

READLN和READLN是标准过程名,它们是标准识符。<变量名表>是一个或几个由逗号隔开的变量标识符,他们必须在程序说明部分预先说明,他们可以是整型、实型或字符型,

布尔型不可以直接读入。

例如a,b,c为整型变量,READ(a,b,c)之后

键盘输入:20 30 40 (表示回车)

结果:a=20,b=30,c=40

READLN语句和READ语句不同之处在于输入数据到各变量之后,READLN自动换行,从下一行开始再输入数据。一个READ语句执行完后,数据行中多余的未读数据可以被下一个输入语句读入;而一个READLN于执行完后,数据行中多余未读数据就没有用了。READLN语句中可以不包含变量名表。即有以下等价情况:

READLN(a,b);READLN等价于READLN(a,b)

输入语句输入的数据类型必须和变量一一对应。如果输入的是一串整数或实数,数据间用空格或回车分隔;若输入的是一串字符,则不用分隔。

输出语句,也称写语句。用于将计算结果通过屏幕或打印机输出给人看。

输出语句的语法格式为:

WRITE(输出量表);

WRITELN(输出量表);

WRITE和WRITELN是标准过程名,它们是标准识符。输出量表是一串用逗号分隔的常数、常量、变量、函数、表达式或用单引号括起来的字符串。

输出表是一些有逗号分开的输出项。输出项可以是变量或表达式,或用引号括起来的字符串(当然,变量或字符串本身也是表达式)。若为变量,则输出变量的值;若为表达式,则先计算表达式的值,然后将该值输出;若为字符串,则输出字符串本身(不包括引号)。

WRITE与WRITELN语句的功能基本相同,但有下述两点区别;

(1)WRITE语句是一个输出量接着一个输出量地输出,但不换行;WRITELN语句也是一个接着一个地输出,但输出完最后一个输出量后自动换行。

(2)WRITE语句至少有一个输出量,而WRITELN语句允许不输出任何内容,只是起换行作用。

标准输出格式是系统规定好的格式,它规定好了各种不同类型数据的输出宽度(也称域宽或场宽)。

整型量按其数值实际宽度输出;

实型量按17位宽度的科学计数法格式输出,而小数部分的小数点前只保留1位有效数字

字符型按1位宽度输出;

布尔型量按4位或5位宽度(大写形式)输出;

字符串按串长度原样输出。

自定义格式输出

自定义格式就是在输出语句中自带宽度,用户可以根据需要定义各输出量的输出宽度。

对一个输出量可带一个宽度参数(域宽),也可以带两个宽度参数,带一个域宽的可以是任意的标准数据类型,而带两个域宽的只能是实数类型。

带一个域宽的输出语句格式:WRITE(e:m); 或WRITELN(e:m);

注意:

在指定域宽后,所有数据不再按标准格式宽度输出,而按指定域宽输出;

所有数据向右靠齐,左边补格;

输出整型数据时,若定义域宽小于数据宽度,则自动改为所需宽度输出;

输出实型数据时,若定义域宽小于数据宽度,则从小数点后截尾,但小数点前的一位有效数总是四舍五入地保留着的。

带两个域宽的输出语句格式:WRITE(e:m:n); 或WRITELN(e:m:n);

双域宽是用来控制实型量数据的输出格式的。其中e为输出量,m表示要输出的总宽度(包括符号位、整数部分、小数点和小数部分);n则表示小数的保留位数。指定双域宽后,实数不再按科学记数法形式输出,而是以小数形式输出。实际小数位数不足域宽时,右边用0补足位数;若数据实际位数超过域宽时,以保证数据的正确输出为原则,小数点后截尾,小数点前按需分配。

实践与交流

1.我国是一个严重缺水的国家,珍惜水资源,杜绝水浪费,这是我们每个公民的应尽之责,

据测试,拧不紧的水龙头每分钟会滴下2滴水,每滴水约0.05毫升,小明同学在洗手时,没有把水龙头拧紧,当小明离开x小时后水龙头滴了y毫升水,从键盘输入x和y的值,并计算小明同学浪费了多少水。

2.输入一个三位的整数,将它反向输出。例如输入123,输出321。

第三章选择结构程序设计

通常,计算机按在程序中书写的顺序执行语句。然而,如果一个程序只由赋值语句和输入输出过程组成,那么它们只能顺序地执行一次,而且必然执行一次。但一个程序仅有这类顺序执行的语句显然是不够的,经常需要的是根据某个变量或表达式的值做出判定,以决定执行哪些语句和跳过哪些语句不执行。我们称这种程序结构为选择结构。

为了实现选择结构程序设计,在PASCAL中引入了IF语句(条件语句)和CASE语句(情况语句),它们能从两个或多个语句中按一定的条件有选择的执行其中的一个。本章将介绍这两个语句及选择结构程序设计方法。

第一节IF语句

条件语句是用一个布尔表达式的值来决定程序的走向。即程序提供一个分支,由布尔表达式的值来决定程序究竟运行哪个分支。即程序已经不是顺序结构了,而是提供了一个分支结构。每次只可能运行其中的一个分支。简单IF语句可从两路语句中选择其一执行,从而实现双向分支。

任务

为了加强公民的节水意识,合理利用水资源,各地采用价格调控手段达到节约用水的目的,某市规定如下用水收费标准:每户每月的用水量不超过6立方米时,水费按每立方米2元收费,超过6立方米时,不超过的部分每立方米仍按2元收费,超过的部分每立方米按2.5元收费,请编写一个程序,输入一户人家的月用水量,计算需交水费。

任务分析

用计算机来完成这个计算,首先我们要对用户的用水量(用变量s记录)进行分析,然后选择不同的公式进行计算需交纳的水费(用变量m表示)。

算法

5、从键盘读入用水量,并赋值给变量s

6、判断用水量在哪个等级,如果s<=6则m:=s*2,否则m :=(s-6)*2.5+12

7、输出计算结果

流程图

程序

PROGRAM p3_1(INPUT,OUTPUT);

V AR s:INTEGER;

m:REAL;

BEGIN

WRITE(“请输入你家的本月用水量:”);

READ(s);

IF s>6 THEN m:=(s-6)*2.5+6*2

ELSE m:=s*2;

WRITE(“您本月需交水费”,m, “元”);

END.

指点迷津

一、条件语句有两种格式:

1、IF 布尔表达式

THEN 语句;

2、IF 布尔表达式

THEN 语句1

ELSE 语句2;

二、说明

1、格式1的作用是:如果布尔表达式值为TRUE(即该条件满足),则运行语句,否则不运行任何语句。

2、格式2的作用是:如果布尔表达式值为TRUE(即该条件满足),由运行语句1,否则(即布尔值为FALSE,亦即条件不满足)就运行语句2。

3、如果条件语句中的分支语句不止一句,可用“BEGIN……END;”来框住,加以区别

8、只有条件语句结束时才有分

9、有的时候判断的条件可能不只一个,这是就需要用到布尔表达式的组合或者是IF

语句的嵌套。即在ELSE语句中还包含IF语句,这种情况下要注意IF与ELSE的匹配问题,ELSE要与离它最近的IF相匹配。

三、IF语句常见的错误

在IF语句中常见的错误是,在THEN的语句和ELSE之间多加了一个分号。例如把语句:

IF x>5

THEN y:=3*x+5

ELSE y:=2*x+3

错写成了:

IF x>5

THEN y:=3*x+5;

ELSE y:=2*x+3

因为加分号以后,IF语句已经结束,而ELSE又不能作为另一个语句的开头,造成语法错误。

另一个常见的错误是在THEN或ELSE包括几个语句时,未加BEGIN与END构成复合语句的形式。例如把语句:

IF x>0

THEN BEGIN

Y:=2*x;

汇编语言程序设计

汇编语言基础《汇编语言程序设计》第01章在线测试 A B C D 、微机中每个存储单元具有一个地址,其中存放一个____量。 A B C D 、设段地址为5788H,该字节的物理地址_____。 A B C D 、汇编语言源程序中,每个语句由项组成,不影响语句功能的是_____。 A B C D 、下列标号不合法的是_____。 A B C D

B、生成的代码序列短小 C、运行速度快 D、编程容易 E、便于移植 2、8086段寄存器有_______。 A、IP B、DS C、CS D、ES E、SS 3、使用MASM 6.x版本的“ML /Fl eg101.asm”命令,如果源程序eg101.asm没有语法错误,则将生成_________文件。 A、目标代码文件 B、可执行文件 C、列表文件 D、调试文件 E、库文件 4、汇编语言中,______可以作为有效的名字,如标号、变量名等。 A、0fffh B、var00 C、loop1 D、test E、add 5、汇编语言中,程序员不能将______作为用户标识符。 A、DS

正确错误、有效地址是指存储器操作数的物理地址。 正确错误、采用汇编语言书写的一个源程序文件,需要使用汇编程序,例如MASM 正确错误 按逻辑段组织程序,需要执行的指令应该在代码段中。 正确错误、使用简化段定义源程序格式,必须具有语句,且位于所有简化段定义语句之前。 正确错误 《汇编语言程序设计》第02章在线测试 A B C D

2、伪指令DW定义的是______量的变量。 A、字节 B、字 C、双字 D、4字 3、将变量var定义如下,“var db 26h, 4ah”,欲以字属性存取该变量值,应采用______var。 A、offset B、byte ptr C、word ptr D、seg 4、语句“xyz db ˊABˊ, ˊCDˊ, ˊEˊ,ˊFˊ”汇编后占用的存储空间是______个字节。 A、4 B、5 C、6 D、8 5、在伪指令语句“number dw 1234h”中的number 项称为______。 A、标号 B、操作符 C、名字 D、操作数 第二题、多项选择题(每题2分,5道题共10分) 1、如下________寻址方式的操作数来自主存储器。 A、立即数寻址 B、寄存器寻址 C、直接寻址 D、寄存器相对寻址 E、寄存器间接寻址 2、“mov [bx+10h],al”指令的两个操作数采用的寻址方式有_______。 A、寄存器间接 B、寄存器 C、寄存器相对 D、基址变址 E、立即数

Pascal语言编程基础程序

Pascal语言编程基础程序 (常州市) 十进制转二进制 var i,n,j:longint; a:array[1..100] of longint; begin readln(n); i:=1; while n<>0 do begin a[i]:=n mod 2; i:=i+1; n:=n div 2; end; write('Bin:'); for j:= i-1 downto 1 do write(a[j]) end. 数组元素删除 var a:array[1..10]of longint; i,t,x:longint; begin read(x); for i:=1 to 10 do a[i]:=2*i-1; t:=a[x]; for i:=x+1 to 10 do a[i-1]:=a[i]; for i:=1 to 9 do write(a[i]:4); end. 数组元素删除2 var a:array[1..11]of longint; i:longint; begin for i:=1 to 10 do a[i]:=i; a[11]:=a[1]; for i:= 1 to 10 do a[i]:=a[i+1]; for i:= 1 to 10 do write(a[i]:4); end. 数组元素的移动 var a:array[1..10] of longint; s,n,i,x,t:longint; begin readln(n); for i:=1 to n do read(a[i]); readln(x); s:=a[x]; for i:=x+1 to n do a[i-1]:=a[i]; for i:=1 to n-1 do write(a[i],' '); write(s); end. 排除所有异形基因 var a:array[1..100] of longint; n,g,j,i,wz:longint; begin readln(n); for i:=1 to n do read(a[i]); g:=0; for i:=1 to n do if sqr(a[i]) mod 7=1 then begin wz:=i; for j:=wz+1 to n do a[j-1]:=a[j]; g:=g+1 end; write(a[1]); for i:=2 to n-g do write(' ',a[i]); writeln; end. 排除第一个异形基因 var a:array[1..100] of longint; n,i,wz:longint; begin readln(n); for i:=1 to n do read(a[i]); for i:=1 to n do if sqr(a[i]) mod 7=1

【汇编语言程序设计】试题及答案合集

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置?1?,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以?先入后出?为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

汇编语言程序设计

汇编语言程序设计 一、选择题 (共72题) 1、 用于指针及变址寄存器的有()。 A、 AX,BX,CX,DX B、 SP,BP,IP C、 CS,DS,SS D、 PSW 考生答案:B 2、 完成把汇编语言源程序模块转换为目标模块的程序是()。 A、 编辑程序 B、 汇编程序 C、 连接程序 D、 调试程序 考生答案:B 3、 指令JMP FAR PTR DONE中的寻址方式属于()。 A、 段内转移直接寻址 B、 段内转移间接寻址 C、 段间转移直接寻址 D、 段间转移间接寻址 考生答案:C 4、 对于下列程序段: AGAIN:MOV AL,[SI]

MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 也可用()指令完成同样的功能。 A、 REP MOVSB B、 REP LODSB C、 REP STOSB D、 REPE SCASB 考生答案:A 5、 在程序执行过程中,IP寄存器中始终保存的是()。 A、 上一条指令的首地址 B、 下一条指令的首地址 C、 正在执行指令的首地址 D、 需计算有效地址后才能确定地址 考生答案:B 6、 在汇编语言程序的开发过程中使用宏功能的顺序是()。 A、 宏定义,宏调用 B、 宏定义,宏展开 C、 宏定义,宏调用,宏展开 D、 宏定义,宏展开,宏调用 考生答案:C 7、 CPU要访问的某一存储单元的实际地址称()。 A、 段地址

偏移地址 C、 物理地址 D、 逻辑地址 考生答案:C 8、 AND、OR、XOR、NOT为四条逻辑运算指令,下面解释正确的是()。 A、 指令XOR AX,AX执行后,AX内容不变,但设置了标志位 B、 指令OR DX,1000H执行后,将DX最高位置1,其余各位置0 C、 指令AND AX,OFH执行后,分离出AL低四位 D、 NOT AX,执行后,将AX清0 考生答案:C 9、 完成对CL寄存器的内容乘以2的正确操作是()。 A、 ROL CL,1 B、 MUL 2 C、 SHL CL,1 D、 SHR CL,1 考生答案:C 10、 检查两个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP A L,BL”指令后应跟的分支指令是()。 A、 JE LOP1 B、 JAE LOP1 C、 JC LOP1 D、 JGE LOP1 考生答案:B 11、 已知变量VAR为字型,则TYPEVAR=()。

PASCAL语言程序设计

目录 第一部分 PASCAL语言程序设计 (1) 第一章 PASCAL语言基础 (1) 第一节程序的组成与上机调试运行 (2) 第二节常量、变量与数据类型 (3) 第三节表达式与标准函数 (6) 第四节赋值语句、输入与输出语句 (9) 习题 (12) 第二章程序的三种基本结构 (15) 第一节顺序结构 (15) 第二节选择结构 (15) 第三节循环结构 (17) 习题 (20) 第三章数组 (22) 第一节一维数组 (22) 第二节二维数组及应用 (25) 习题 (26) 第四章字符与字符串操作 (29) 第一节字符和字符数组 (29) 第二节字符串变量 (29) 第三节字符串应用举例 (31) 习题 (33) 第五章函数与过程 (35) 第一节自定义函数 (35) 第二节自定义过程 (38) 第四节递归 (42) 第五节递归与回溯 (45) 习题 (50) 第一部分 PASCAL语言程序设计 第一章 PASCAL语言基础 Pascal语言是瑞士苏黎士工科大学的Niklans Wirth(沃思)1971年发表的,是为了纪念17世纪法国著名哲学和数学研究者Blaisc Pascal而将它命名为Pascal程序设计语言。Pascal语言是信息学奥赛中普遍使用的程序设计语言。

第一节程序的组成与上机调试运行 一、程序的组成 我们先看一道例题。 例1-1 输入两个整数a和b,计算a和b的和(a+b)。 【参考程序】 program a1(input,output); //程序首部 var a,b,c:integer; //程序说明部分,a,b,c被说明为整型变量 begin //程序执行部分,下面是程序的内容 write('a='); //在屏幕上输出一个字符串“a=”,输出完后不换行 read(a); //从键盘输入一个数值赋给变量a write('b='); //在屏幕上输出一个字符串“b=”,输出完后不换行 read(b); //从键盘输入一个数值赋给变量b c:=a+b; //计算a+b的和,并将这个和赋值给变量c writeln(a,'+',b,'=',c); //输出a+b=c的等式,输出完后换行 end. //程序结束 【样例输入】 a=10 b=30 【样例输出】 10+30=40 由上可以看出,一个Pascal程序由以下三部分组成: (1)由Program 引导的一行是Pascal程序的首部。 程序首部指出了源程序的名称,是由用户自己给出的,该例子称为a1。程序名后用括号括住的两个参数input与output,通常表示程序运行中的标准输入和输出文件,程序首部以分号结束。 (2)Pascal程序的第二部分是说明部分。 说明部分要求列出程序中引用的全部常量、变量、转移标号、类型、过程和函数的有关说明。若变量c在说明部分没有说明,后边的语句c:=a+b在执行时;翻译软件便能指出其错误并提醒用户加以改正,程序中每个语句都以分号表示结束。 (3)程序的第三个部分是用BEGIN和END括住的一串语句,称为程序的执行部分。有的书中将说明部分和执行部分合称为程序体。 二、PASCAL语言编辑软件的基本操作 下面我们以Free Pascal 1.10系统为例来学习一下Pascal语言编辑软件的使用。 1.Free Pascal的启动 在运行程序目录下(一般是c:\pp\bin\go32v2)运行启动程序fp.exe,即可启动系统。屏幕上出现如图1-1所示的集成环境。 图1-1 2.Free Pascal系统集成开发环境(IDE)简介 最顶上一行为主菜单,中间蓝色框内为编辑窗口,在编辑窗口内可以进行程序的编辑,最底下一行为提示行,显示出系统中常用命令的快捷键,如将当前编辑窗口中文件存盘的命令快捷键为F2,打开磁盘文件命令F3,等等。

汇编语言程序设计(第四版)第3章【课后答案】

汇编语言程序设计第四版 【课后习题答案】--囮裑為檤 第3章汇编语言程序格式 〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用? 〔解答〕 伪指令语句与硬指令语句的本质区别是能不能产生CPU动作; 伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。 〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成? 〔解答〕 为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符; 汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。 〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。 〔解答 保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的DB就是伪指令助记符。 〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成? 〔解答〕 汇编语句有执行性语句和说明性语句; 执行性语句由标号、硬指令助记符、操作数和注释四部分组成; 说明性语句由名字、伪指令助记符、参数和注释四部分组成 〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕 ⒈编辑文本编辑程序汇编语言源程序.asm ⒉汇编汇编程序目标模块文件.obj ⒊连接连接程序可执行文件.exe或.com

⒋调试调试程序应用程序 〔习题3.6〕区分下列概念: (1)变量和标号 (2)数值表达式和地址表达式 (3)符号常量和字符串常量 〔解答〕 (1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。 (2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。 (3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。 〔习题3.7〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误原因。 (1)mov byte ptr [bx],1000 (2)mov bx,offset myword[si] (3)cmp mybyte1,mybyte2 (4)mov al,mybyte1+mybyte2 (5)sub al,myword (6)jnz myword 〔解答〕 (1)1000超出了一个字节范围 (2)寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,改为lea bx,myword[si] (3)两个都是存储单元,指令不允许 (4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量AL与字量myword,类型不匹配 (6)Jcc指令只有相对寻址方式,不支持间接寻址方式 〔习题3.8〕OPR1是一个常量,问下列语句中两个AND操作有什么区别? AND AL,OPR1 AND 0feh 〔解答〕

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期2017年10月26号 成绩 评阅人 软件学院

一、实验目的与意义 理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。 二、实验环境 操作系统:Microsoft Windows8 集成环境:Masm for Windows 上机地点:信息楼B405教室 三、实验的预习内容 预习的主要内容: 1. 使用DEBUG命令的方法; 2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,); 3. 分支结构和顺序结构的步骤以及相关的指令; 4. 常用的标志位状态及相应的作用; 实验思路: 在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。进一步优化算法。实验之前必须了解十进制、十六进制和ASCII码之间的转换。预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。 实验一: 题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A 命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。 题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。 实验二: 先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。 实验三: 先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数

新版汇编语言程序设计习题答案(钱晓捷主编)

新版汇编语言程序设计习题答案(钱晓捷主编) 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1.2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1.4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.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.13、什么是DOS和ROM-BIOS? 1.14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。 1.16、什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。

PASCAL程序设计

第一章PASCAL程序设计基础 我们日常工作、学习和生活中,要做某件事,如果事先没有计划,只是想一步做一步,是达不到理想效果的。要很好地、高效率地完成某件事,必须事先有一个计划,第一步做什么,下一步做什么,最后一步做什么。即先考虑好做这件事的所有步骤,然后按部就班地完成它。在计算机系统中,能完成某项任务的一系列指令或语句就是程序。程序设计是设计、书写和调试程序的过程。 第一节程序设计语言及算法 一、程序设计语言 人们使用计算机,可以通过某种计算机语言与其交谈,用计算机语言描述所要完成的工作。为了完成某项特定任务用计算机语言编写的一组指令序列就称之为程序。编写程序和执行程序是利用计算机解决问题的主要方法和手段。程序设计语言是用来书写计算机程序的语言。程序设计语言经历了机器语言、汇编语言、高级语言到面向对象的程序设计语言等多个阶段。 1.机器语言 机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。它是计算机的设计者通过计算机的硬件结构赋予计算机的操作功能。机器语言具有灵活、直接执行和速度快等特点。 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且编出的程序全是些0和1的指令代码,直观性差,还容易出错。现在,除了计算机生产厂家的专业人员外,绝大多数程序员已经不再去学习机器语言了。 2.汇编语言 为了克服机器语言难读、难编、难记和易出错的缺点,人们就用与代码指令实际含义相近的英文缩写词、字母和数字等符号来取代指令代码(如用ADD表示运算符号“+”的机器代码),于是就产生了汇编语言。汇编语言是一种用助记符表示的仍然面向机器的计算机语言。汇编语言像机器指令一样,是硬件操作的控制信息,因而仍然是面向机器的语言,使用起来还是比较繁琐费时,通用性也差。汇编语言是低级语言。 3.高级语言 20世纪50年代后期,在对低级语言的改进过程中,又研制出一种既接近于自然语言,又接近数学语言的程序设计语言。使用这种语言编写程序快捷方便,便于修改和高度,大大提高了编程的效率,同时这种语言编写的程序不依赖具体的机器,能用性好,我们称之为高级语言。用高级语言,不必考虑机器的结构和特点,可以集中精力考虑解决问题的算法,因此,高级语言也称为算法语言。 4.面向对象的程序设计语言

新版汇编语言程序设计钱晓捷第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〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

汇编语言程序设计

实验四程序设计 一、实验目的 学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG 中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。 二、实验题 1、已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。 【参考程序如下】 DSEG SEGMENT DATA1 DB 'ABCDEFG3' DATA2 DB 'ABCDEF3G' CNT DW 8 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV DL,31H LEA SI,DATA1 LEA DI,DATA2 MOV CX,CNT DEC SI DEC DI AGAIN:INC SI INC DI MOV AL,[SI] CMP AL,[DI] LOOPZ AGAIN JZ DISP DEC DL DISP: MOV AH,2

INT 21H MOV AH,4CH INT 21H CSEG ENDS END START 阅读程序,理解循环程序结构及执行过程,并改成串指令实现。 2 编写程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。 三、实验报告 写出程序清单,记录运行结果。 改写串指令实现: DSEG SEGMENT DATA1 DB'ABCDEFG3' DATA2 DB'ABCDEF3G' CNT DW8 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV ES,AX MOV DL,31H LEA SI,DATA1 LEA DI,DATA2 MOV CX,CNT CLD

汇编语言程序设计

汇编语言程序设计 课程介绍 1.属于低级语言的程序设计 2.硬件类课程和操作系统先行课 3.软件开发的一个组成部分(加密解密、逆向工程、有害代码的分析防治) 4.高级语言程序设计的扩展(硬件资源的管理、驱动等) 5.对计算机专业:专业基础课、必修课 第一章汇编语言基础知识 §1.1计算机语言基本概念 一、机器语言:(0、1代码) 1.机器指令:是指挥计算机完成某一基本操作的命令,是由硬件电路设计决定的,也叫硬指令。由操作码和地址码组成。 2.指令系统:每台计算机所特有的、全部指令的集合构成该CPU的指令系统。 3.机器语言程序:机器指令的集合构成了机器语言,用机器语言编写的程序就是机器语言程序。 4.特点:计算机能直接识别,执行速度快,但难于记忆、识别和编写。 二、汇编语言: 1.汇编指令:用便于记忆、并能描述指令功能的符号表示的机器指令。 2.汇编程序:就是把汇编语言源程序翻译成机器语言程序的一种系统软件。 3.汇编语言:汇编指令、伪指令、宏指令和汇编程序一起组成了汇编语言。 4.特点:汇编指令与机器指令一一对应,相对机器语言易于理解、掌握。汇编语言直接面向机器,用汇编语言编制的程序简洁、快速。 三、高级语言:

1.高级语言:机器语言和汇编语言以外的程序设计语言统称高级语言。 2.特点:其特点是更加接近自然语言和惯用的数学表达形式,与计算机硬件结构无关,因而便于使用,便于交流和推广。高级语言编程效率高,但运行效率低。 3.高级语言需要使用编译程序和解释程序将源程序翻译成机器语言程序,然后交计算机执行。 §1.2数据表示与运算 一、位计数制: 1.位权表示法:每位的位权与该位的数值相乘后相加得到该数的数值。 2.十进制:逢十进一,用0、1、2、3、4、5、6、7、8、9十个数码表示。(D) 二进制:逢二进一,用0、1两个数码表示。(B) 八进制:逢八进一,用0、1、2、3、4、5、6、7八个数码表示。(Q) 十六进制:逢十六进一,用0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个数码表示。(H) 二、不同数制之间的转化: 1.非十进制数转化为十进制: 1011100.1011B=1×26+0×25+1×24+1×23+1×22+0×21+0×20+1×2-1+0×2-2+1×2-3+1×2—4=92.6875D 1001.2Q=1×83+0×82+0×81+1×80+2×8-1 A031.2H=10×163+0×162+3×161+1×160+2×16-1=41009.125D 2.十进制转化为非十进制数: 十进制数转化位二进制数: 整数部分:除2取余,倒序排列得到的整数。 2 13 (1) 2 6 0

Turbo Pascal图形编程教程

Turbo Pascal图形编程教程Pascal是一款有很强图形功能的开发工具,它可以编制各种图形窗口,并且听说还支持鼠标.但是时过境迁,在vb,vc一统天下的今天,关于Pascal图形操作的书已经像古董一样难于寻找了,我现在将Tp 7.0的Help文件中的一些有关图形操作的过程与函数整理了一下,并自己写了一些例子,加入了一些自己的看法,便得到了这篇教程.其中如有错误,望各位不吝赐教。阅读之前希望大家做好准备,比如:找一些食品放在跟前,因为你可能因为钻研一个函数而耗费大量的时间,还有你可能因为初始化无法完成而大动肝火。 第一章使用Pascal进行图形操作前的准备 在 Turbo Pascal 中有一个 CRT 单元及一个 GRAPH 单元,简单的说 crt 单元是为了实现字符的显示与处理,另外的那个称为 GRAPH 单元是专门用来处理图形的。我们看到的有关图形的程序往往都要用到。所以若是要在 Turbo Pascal 中实现图形操作,就必须要调用 CRT 单元及 GRAPH 单元。那么怎么样来调用 CRT 及 GRAPH 单元呢?现在线来介绍一下单元调用语句:USES USES的语法: USES 单元表识符,……,单元表识符; 说明: 扩展名为*.TPW是Windows下的单元文件,*.TPU是DOS下的单元文件。 位置:变量说明var之前。 讲到这里,我还是要顺便提一下什么是单元?是这样的:我们在编程序的时候,要用到procedure 或者function ,中文名称一个是过程另一个是函数。做不同的程序时,往往要用到一些相同的过程或者相同的函数。如果统统放到程序中,程序会硕大无比,比例与调试与编译,并且在过去“惜kb如金”的年代里,这样的程序也很浪费。于是,简单的讲,人们把它们做成“包”--我们称之为单元。一来,免去很多重复的痛苦,大家共享代码也很简单,另外,很多不愿意让别人看到源程序的人也很乐于如此----这只是我的杜撰。生产pascal 语言的公司也提供一些做好的单元,放在安装盘上方便实用。crt ,graph 即使如此,还有dos ,system 等等。 第二章 Pascal图形模式的初始化及退出 1.初始化 Pascal的图形操作在使用之前必须先进行初始化。如果说你编写图形程序中出现问题,十有八九是卡在这里了。这也是非常令我头疼的问题。用过程 initgraph(GraphDriver,GraphMode,PathToDriver) 其中GraphDriver,GraphMode为整形变量,PathToDriver为字符串变量,GraphDriver为图形驱动器,GraphMode为图形模式,PathToDriver指定的路径名中建筑图形驱动程序(以.BGI为后缀)。initgraph使 用方法见下例: program t001 (input,output);

新版汇编语言程序设计实验指导书

汇编语言实验指导书 目录 实验一DEBUG的启动及其基本命令的使用(2 实验二内存操作数及寻址方法(6 实验三汇编语言程序的调试与运行(8 实验四查表程序设计(10 实验五系统功能调用(12 实验六循环程序设计(13 实验七分支程序设计(15 实验八子程序设计(18 实验九综合程序设计(20 附录实验报告(21 实验一DEBUG的启动及其基本命令的使用 一.实验目的: 掌握DEBUG的基本命令及其功能 二.实验内容: DEBUG是专门为汇编语言设计的一种调试工具,它通过步进,设置断点等方式为汇编语言程序员提供了非常有效的调试手段。 1、DEBUG程序的启动

在DOS提示符下,可键入命令: C>DEBUG[d:][path][文件名][ 参数1][参数2] 其中文件名是被调试文件的名称,它须是执行文件(EXE,两个参数是运行被调试文件时所需要的命令参数,在DEBUG程序调入后,出现提示符“- ”,此时,可键入所需的DEBUG命令。 在启动DEBUG时,如果输入了文件名,则DEBUG程序把指定文件装入内存。用户可以通过DEBUG的命令对指定文件进行修改、显示和执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令和装入命令把需要的文件装入内存,然后再用DEBUG的命令进行修改、显示和执行。 2、DEBUG的主要命令 (1汇编命令A,格式为: -A[地址] 该命令从指定地址开始允许输入汇编语句,把它们汇编成机 器代码相继存放在从指定地址开始的存储器中。 (2反汇编命令U,有两种格式: 1-U[地址] 该命令从指定地址开始,反汇编32个字节,若地址省略,则从上 一个U命令的最后一条指令的下一个单元开始显示32个字节。 2-U范围 该命令对指定范围的内存单元进行反汇编,例如:

一个PASCAL语言子集(PL0)编译器的设计与实现

编译原理课程设计报告 班级: 姓名: 2007-12

目录 1.设计任务 2.原理框图 3.函数说明 4.程序代码 5.程序测试 6.试验体会 7.参考资料

一.设计任务 课程设计的教学基本要求 1.巩固和加深对编译原理的理解,提高综合运用本课程所学知识的能力。2.培养独立思考,深入研究,分析问题、解决问题的能力。 3.能够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。 4.通过课程设计,培养严肃认真的工作作风。 ●课程设计题目 一个PASCAL语言子集(PL/0)编译器的设计与实现 ●PL/0语言的BNF描述(扩充的巴克斯范式表示法) → program → [][][{;}] → const {,} := → var {,} → procedure [({,})]; → begin {;}end := |if then [else ] |while do |call [({,})] | |read ({,}) |write ({,}) |odd → [+|-]{} {} ||() → =|<>|<|<=|>|>= → +|- → *|/ → l{l|d} (注:l表示字母) → d{d} 注释: :程序;:块、程序体;:常量说明;:常量;:变量说明;:分程序;:复合语句;:语句;:表达式;:条件;:项;:因子;:加法运算符;:乘法运算符;:关系运算符。 ●假想目标机的代码 LIT 0 ,a 取常量a放入数据栈栈顶

DSP控制器汇编语言程序设计(精)

DSP 控制器汇编语言程序设计 摘要:在当今的数字化时代背景下,DSP 控制器在数字信号处理中起着重要的作用。本论文概括介绍了TMS320C6XDSP 的硬件结构,并对TMS320C6XDSP 的汇编语言指令系统做了重点说明。在具备以上知识的基础上,详细介绍了基于DSP 的高速数据采集和IIR 数字滤波器在DSP 上的实现,通过这两个应用实例了解DSP 汇编语言程序开发的方法。 关键字: TMS320C6X DSP 汇编语言 IIR数字滤波器高速数据采集 Abstract :In digitized time ,DSP plays an important role in the digital signal processing. This paper summarily describes the hardware structure of the TMS320C6XDSP,and It introduced in detail the assembly language introductions.On the basis of having all above knowledge, a high speed data acquisition system based on DSP and using DSP to IIR Digital filter design was introduced,in order to understand the DSP assembly language program development method. Keyword: TMS320C6X DSP the assembly language IIR Digital filter design a high speed data acquisition system 前言 数字信号处理是一种将现实世界中的连续信号转换为计算机能够处理的信息的过程。比如人们说话的声音,这就是一个连续信号, 除此之外,现实生活中还有很多这样的信号,比如光、压力、温度等等。这些信号通过一个模拟向数字的转换过程(称之为AD ,变成数字信号送给处理器,进行数字计算,处理结束后,再把结果通过数字向模拟的转换过程重新变成连续信号(称之为DA 。用一般的通用微处理器可以完成这些工作,但是面临的问题是满足如此高的计算速度,就很难保证耗电量很低,更难保证价格足够便宜。因此,另一种微处理器应运而生:数字信号处理器,简称DSP 。

PASCAL语言_复习题

Pascal 复习题(专科) 一、选择题 1、设有如下的过程说明 PROCEDURE wri; BEGIN Writeln(‘Welcome to use pascal!!!’); End; 则下面有关过程wri的叙述中正确的是____D_____ A)过程说明有错,因为没有形式参数 B)过程说明有错,因未说明过程的类型 C)过程说明有错,因为在过程体内没有给过程名赋值的语句 D)过程说明正确 (2章赋值语句) 2、已知变量ch是字符型变量,下面PASCAL赋值语句正确的是___D_____ A)ch:=’ab cd’; B)ch:=chr(ord(succ(‘c’)+1)); C)ch:=ord(‘b ’)+ord(‘a’); D)ch:=pred(succ(succ(‘f’))); (2章赋值语句) 3、判断以下叙述,其中正确的是___A_______ A) 在pascal程序中所用到的变量必须先说明后使用 B) 在pascal程序中,允许使用的最小值是-maxint C) 在pascal程序中,分号是语句的一部分,在每个语句中不能省略 D) 在pascal程序中,符号常数的值可根据需要随时修改

(1,2章基本知识) 4、以下不符合pascal规定的字符常量是___B_________ A)‘2’ B)‘pascal’ C)’’’’ D)‘a’ (2章标准数据类型) 5、以下属非法的pascal用户自定义标识是_____A____ A)CONST B)FORMAT C) MAX D) NEXT (1章保留字) 6、下面循环语句仅执行一次的是_____A_____ A) I:=0; B) I:=0; Repeat while (I<3) do I:=I+1; I:=I+1; Writeln(i) writeln(i); Until I<3 C)for I:=0 downto 3 do D) I:=0 I:=I+1; while (I>0) or (I<3) do Writeln(i); I:=I+1; writeln(i); (4 章循环结构) 7、下面函数首部或过程首部合法的是__B_______ A)function sum;

相关文档
相关文档 最新文档