您现在的位置:小学生自学网>> 信息>> pascal语言>> 基础教程

PASCAL第二讲:程序的基本结构

作者: 来源: 发布时间:2009年05月12日 点击数:
 
一、程序的基本结构

program area_of_cicle;
const pi=3.1416;
var s:real;
 r:integer;
begin
 writeln(‘Please input radius :’);
 readln(r);
 s:=pi*r*r;
 writeln(‘s=’,s);
 readln;
end. 

每一个 PASCAL程序都由程序头部和程序主体组成,最后以“ end.”作为整个程序的结束。 

程序头部

程序头部毫无疑问是在程序的开头位置,以“ program”这个词开始(但经常省略这一),
以第一个 BEGIN的前一行结束,中间每行后均有分号。

以 CONST为开始的部分是说明程序中要用到的常量,以 VAR为开始的部分是说明程序中要用
到的变量。即程序中要用到的所有的常量及变量,我们必需在程序首部加以说明其名称及类
型。这些我们将在稍后讲到。

程序主体

以第一个 BEGIN开始,以最后一个 END结束,中间即为程序命令行,每一行均以分号结束!

二、Pascal用到的数和符号

1、PASCAL语言的字符表

是ASCII字符集,主要有:

 ⑴26个英文字母(不分大小写)

 ⑵十个数字符号

 ⑶特殊符号。如+-*/=><][:;.等

2、标识符

以字母开头的字母数字序列(大小写等效,可跟下划线_),用来标识常量、变量、程序、函数等。

自定义标识符时要注意遵循此规则。

3、标准标识符与保留字

标准标识符有40个,五类(false true maxint Boolean real integer char abs trunc read 
write)详见书P16。

保留字是Pascal语言中具有特定的含义的字符。在PASCAL7.0中书写保留字的时候,字符颜色会
变为白色。
一共36个保留字:
(program function begin end procedure var const array if then else case for to do 
repeat until while and div in mod not or nil

4、常量和变量:

程序设计中经常要用到常量和变量,这些都必须先定义后才能使用。

PASCAL语言的常量与变量都必须在程序头部先加以说明,即说明常量、变量的的名称及数据类型。
PASCAL语言的数据类型很多,最常用的有以下几种:

整数类型(没有小数部分) 
INTEGER:取值范围 [-32768, 32767]。占用内存 2个字节( 16位)。

WORD:取值范围 [0, 65535]。占用内存 2个字节( 16位)。

BYTE:取值范围 [0, 255]。占用内存 1个字节( 8位)。

LONGINT:取值范围 [-2147483648, 2147483647]。占用内存 4个字节( 32位)。

SHORTINT:取值范围 [-128, 127]。占用内存 1个字节( 8位)。

特点:

可进行+、-、*、DIV(整除)、MOD(取余) 
注意不能用/,因为得到的结果可能不为整型。

实数类型 
REAL:取值范围 [2.9E-39, 1.7E+38]。占用内存 6个字节( 48位)。

实数的表示法有两种:

1、十进制表示法,如: -0.4576, 123.567, -234, 0

2、科学计数法,如: 1.234E-4, -3.546E12

表示 1.234乘 10的负 4次 .方; -3.546乘 10的 12次方。

特点:

包括正实数、负实数和零。运算慢,无法精确表示。 
可进行+、-、*、/运算。整数与实数运算时自动转为实数进行运算。 
字符类型 
CHAR:单字符型,即取 1个字符,如‘ A’, ‘ 1’。

STRING:字符串型,即多个字符,如‘ ABCD! 123’,‘ %¥ #DS12’。

如果一个常 /变量只要用到 1个字符,则可把它定义成 CHAR型;如果是多个字符,但不知
确切多少个,则定义成 STRING型,如果知道确切有 N个字符,则定义成 STRING[N]型。字
符串在 PASCAL中使用都是加上单引号。

特点:

字符常 /变量是由单个字符组成的,所有字符都来自ASCII字符集。字符的数据是用两个单
引号把单个字符括起来表示的。 
每个字符都有一个序值(在ASCII字符集的位置),可以用六个关系运算符(>,=,<,>=,
<=,!=)来比较大小。 
布尔型 
BOOLEAN:布尔型即为逻辑型,取值为 TRUE、 FALSE, 即真、假。也有序,true 为1,false为0。

      布尔型有三个运算符:and or not

 

常量:指程序运行过程中,其值不能改变的量。 在程序头部中说明,以 CONST引导。

分为四类:

⑴整型常量

⑵实型常量

⑶字符常量

⑷布尔型常量

格式:
   const <常量标识符>=<常量>; 
  例:const pi:=3.14;

变量:是指在程序执行过程中,其值可以改变的量。 在程序头部中加以说明,以 VAR引导。

变量三要素:变量名、变量类型、变量值。

⑴变量名用一个合法的标识符来表示。

⑵变量在某一固定时刻是用来存放常量的,而常量是有类型的数据,因而变量也是有类型的。
类型不能有两义性。

⑶变量值。在程序中由赋值语句来赋值。

var <变量标识符列表>:<类型>; 
   例:var a,b:integer; c,d:real;

5、表达式

由算术运算符( +,—, *, /)及数字、常量、变量、标准函数所组成的式子中心表达式。

如: 5+9; A*B-34*ABS( -34) /INT( B)

另外, PASCAL中有两个很有用的运算符, DIV:求商的整数值; MOD:求余数。如:

8 DIV 3 的值是 2, 10 DIV 3 的值是 3;

8 MOD 3的值是 2, 10 MOD 3的值是 1;

在 PASCAL的表达式中,不允许出现我们日常生活中的那种分式或根号等式子,我们必须按照 
PASCAL的语法把它们改写成 PASCAL表达式。

Pascal语言中的运算符及其优先级 

单目运算符 (最高优先级) 
@ 取变量或函数的地址(返回一个指针) 
not 逻辑取反或按位取反 
乘除及按位运算符 
* 相乘或集合交集 
/ 浮点相除 
div 整数相除 
mod 取模 (整数相除的余数) 
as 程序运行阶段类型转换 (RTTI运算符) 
and 逻辑或按位求和 
shl 按位左移 
shr 按位右移 
加减运算符 
+ 相加、集合并集、字符串连接或指针增加一个偏移量 
- 相减、集合差集或指针减少一个偏移量 
or 逻辑或按位或运算 
xor 逻辑或按位异或运算 
关系及比较运算符(最低优先级) 
= 判断是否相等 
<> 判断是否不相等 
< 判断是否小于 
> 判断是否大于 
<= 判断是否小于或等于,或是否是一个集合的子集 
>= 判断是否大于或等于,或是否是一个集合的父集 
in 判断是否是集合成员 
is 判断对象是否类型兼容 (又一个RTTI运算符) 


具体优先顺序:

⑴括号内先算

⑵函数

⑶运算符优先顺序

⑷同级运算按从左到右的次序。

注意:

1、与大多数编程语言相反,Pascal语言中and和or运算符的优先级比关系运算符高。因此,如果你
的代码为a < b and c < d,编译器首先会编译and运算符,由此导致编译出错。为此你应该把每个
 < 表达式用小括号括起来: (a < b) and (c < d)。 
2、 同一种运算符用于不同数据类型时它的作用不同。例如,运算符 + 可以计算两个数字的和、连
接两个字符串、求两个集合的并集、甚至给PChar 指针加一个偏移量。然而,你不能象在C语言中那
样将两个字符相加。 
3、 另一个特殊的运算符是 div。在Pascal 中,你能用 / 计算两个数字(实数或整数)的商,而且
你总能得到一个实型结果。如果计算两个整数的商并想要一个整型结果,那么就需要用 div 运算符。 


例如:把下列算式改写成 PASCAL表达式:



改写为 PASCAL表达式为: (x*x+3*y-5*(z-2))/(x-y*y)

从上例中可以看出:

运算符两端,除实型和整数型外不允许为两种不同的数据类型。 
PASCAL表达式中没有分式,只能以除号“ /”来隔开; 
PASCAL表达式中的分子与分母应该用括号括开; 
PASCAL表达式中只有小括号,不能有中括号或大括号,小括号可以有很多层; 
PASCAL表达式中没有乘幂,只能用乘法来表达; 
PASCAL*表达式中任意两个常量、变量、数值、括号、函数之间都必须不能缺省运算符,即乘号
必不可少; 
这些要求希望大家记熟,这是我们编写 PASCAL程序的必要基础。

表达式的数据类型根据它的值来划分。(所以表达式分为算术表达式、字符表达式、布尔表达式)

6、标准函数的使用。

PASCAL语言提供数量非常大的标准函数供我们使用,这些函数有些可以直接调用,有些放在另外的
单元( UNIT)中。 PASCAL也提供了大量的标准过程,和标准函数一样供用户直接或间接调用。

如果一个函数或过程不在 SYSTEM(即默认调用的单元)中,而在其它单元中话,即在程序头部的第
一行正式行中加上 USES 单元名;如,如果要使用 CLRSCR(清屏过程,在 DOS单元中)的话,就必
须在程序头部加上: USES DOS;

函数的调用:如: A: =ABS( -34),即把 -34的绝对值赋给变量 A;(注意:函数只能出现在表
达式中,即赋值语句中)。此时: A的数据类型与括号中的参数 -34是一致的。函数的语法中都会说
明,这个函数的参数的类型及这个函数的值(结果)的类型。

过程的调用:过程即命令,如: CLRACR; 程序运行结果是清屏。

常用标准函数与过程很多,这里只列出最常用的几个。

标准函数 
 
函数名 
 语法 
 说明 
 
Abs 
 Abs ( r:real/integer) :real/integer 
 返回参数 R的绝对值,类型与参数相同 
 
Chr 
 chr ( i: integer): char 
 返回参数所对应的 ASCII码值,类型为 CHAR 
 
Copy 
 Copy(s:string;n,m:integer):string 
 返回字串 S的第 N个字符开始的 M个字符 
 
Cos 
 Cos(r:real):real 
 返回参数 R的余弦值 
 
Exp 
 Exp(r:real):real 
 返回参数 R的以 e为底的幂 
 
Int 
 Int(r:real):real 
 返回参数 R的整数部分,返回的值是实数类型 
 
Length 
 Length(s:string):integer 
 返回字串 S的长度 
 
Ln 
 Ln(r:real):real 
 返回参数 R的自然对数 
 
odd 
 Odd(I:integer):boolean 
 判断参数 I是否奇数,如是,则返回 TRUE 
 
ord 
 Ord(s:scalar):integer 
 返回任意有序量的序值 
 
random 
 Random 
 返回 0至于间的任意一个小数(随机数) 
 
round 
 Round(r:real):longint 
 返回参数 R的四舍五入取整值 
 
sin 
 Sin(r:real):real 
 返回参数 R的正弦值 
 
sqrt 
 sqrt(r:real):real 
 返回参数 R的平方根 
 
trunc 
 Trunc(r:real):integer 
 返回参数 R的整数部分,返回的值是整数类型 
 
标准过程 
 
过程名 
 语法 
 说明 
 
Delay (CRT 单元 ) 
 Delay(ms:word) 
 延迟发声 MS毫秒 
 
Delete 
 Delete(s:string;n,m:integer) 
 把串 S中的第 N个字符开始的 M个字符删除 
 
Exit 
 Exit 
 从当前执行的程序中退出 
 
Gotoxy (CRT 单元 ) 
 Gotoxy(x,y:integer) 
 把光标定位到第 X列 Y行处 
 
halt 
 Halt 
 中断程序的运行 
 
nosound 
 Nosound 
 关闭机器喇叭 
 
Sound (CRT 单元 ) 
 Sound(f:word) 
 让机器喇叭发出频率为 F的声音,直到 nosound 
 
str 
 Str(I:integer;var s:string) 
 把数值 I转换为字符串 S 
 
val 
 Val(s:string;var r:real;var c:word) 
 把字符串 S转换为数值 R,并返回错误代码 C 
 

练习题:
   一、判断以下标识符的合法性:
     a3   3a   a17    abcd   ex9.5   α   β    λ
   二、将下列的数学表达式改写成PASCAL表达式:
     b^2-4ac    
   三、求下列表达式的值:
     20 mod 19   15 mod 9   7 div 8    19 div 3
     (4>5)   and   (7<8)
     (8>9)   or ( 9<10)
     2   and   ((3=3)   or  (3<7))
     31 div (5 mod 2) 
     31 div 5 mod 2 
     31 /5 div 2 
   四、把下列算式改写为 PASCAL表达式: