当前位置:首页 >> 学科竞赛 >>

pascal语法讲义-第二讲


百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

第二讲 初识 Pascal
一、Pascal 程序结构
Pascal 程序的结构非常严谨,它有严格的规定,下面我们从实例 上来说明 Pascal 的程序结构。 例 1.2.1.1.1:对于某一关键字的 BOGO 排序 program p1_2_1_1_1(input,output);//程序首部 uses math;//单元引用 label 1;//标号定义 const n=10;//常量定义 type node=record x,y:longint; end; arr=array [1..n] of node;//类型定义 var a:arr;//变量定义 operator +(a,b:node)c:node;overload; begin c.x:=a.x+b.x; c.y:=a.y+b.y; end; operator -(a,b:node)c:node;overload; begin c.x:=a.x-b.x;
第 1 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

c.y:=a.y-b.y; end; operator <(a,b:node)c:boolean;overload; begin c:=a.x<b.x; end; operator =(a,b:node)c:boolean;overload; begin c:=(a.x=b.x)and(a.y=b.y); end;//操作符定义 function fac():boolean; var i:longint; begin for i:=2 to n do if a[i]<a[i-1] then exit(false); fac:=true; end;//函数定义 procedure init(); var i:longint; begin randomize();
第 2 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

for i:=1 to n do begin a[i].x:=random(100); a[i].y:=random(100); end; end; procedure trace(); var i:longint; begin for i:=1 to n do writeln(a[i].x,' ',a[i].y); writeln(); end; procedure sort(); var i,j:longint; procedure change(var a,b:node); begin if a=b then exit; a:=a+b; b:=a-b; a:=a-b; end;
第 3 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

begin i:=random(n)+1; j:=random(n)+1; change(a[i],a[j]); end; //过程定义 begin init(); 1: sort(); if not(fac()) then goto 1; trace(); readln(); end.//主程序 从这里我们可以看到 Pascal 程序的结构: 1)程序首部(head) 程序首部可以这样定义: “program <标识符>(input,output);” 其中, program 是保留字, 关于保留字我们将在本节后面的部分详细讲述。 , 括号中的 input 代表输入,output 代表输出。我们说过,一个程序可 以没有输入, 但一定要有输出。 当没有输入的时候, input 可以省略, 即“program <标识符>(output);”不过呢,TurboPascal 和 FreePascal 等常见编译器都可以允许省略参数表。即“program <标识符>;” 。其 中, 标识符指的是自定义标识符, 我们将在本节晚点的地方详细讲述。
第 4 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

当然,既然连参数表都能省略,那么,能不能整个程序首部都能省略 呢?答案是肯定的。 目前常见的 Pascal 编译器都支持省略程序首部的 程序。但是为了提升程序的可读性,编者强烈建议读者完整的写程序 首部。 以下为程序首部常见的几种正确的定义方式: 1. program ex(input,output); 2. program ex(output); 3. program ex; 但是, “program ex();”的定义方式是错误的。 2)单元引用 详见详见本教材的 1.7.1 部分。 3)标号定义 详见详见本教材的 1.3.3 部分。 4)常量定义 常量:指在程序执行过程中其值不能被改变的数据,例如系统定 义的 maxint(32767) 、maxlongint(2147483647)等。 通常意义上,常量所具有的类型就是它所定义的常量的类型。常 量的类型具有单一性和不改变性,即常量名只能唯一的被赋予某值, 对常量名不能做任何修改。 我们可以这样进行常量定义: const <自定义标识符>=<值>; 例如:const a=1;
第 5 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

其中,const 为保留字。 这样我们定义了一个值为 1 的常量 a。 在 FreePascal2.x 中我们也可以这样定义常量: const <自定义标识符>:<类型名>=<值>; 例如: const a:longint=5; //定义了一个长整型常量 a,值为 5 const a:array [1..10] of integer=(1,2,3,4,5,6,7,8,9,10); //定义了一个整型数组,值为(1,2,3,4,5,6,7,8,9,10)。 需要注意的是,以下几种常量定义方式是错误的: 1. const a,b=10; 2. const a:=10; 3. const a:10; 值得指出的是,在 FreePascal 的一些版本中,用户自定义的常量 是可以在主程序的部分进行修改的。但是这无疑是 FreePascal 的一个 BUG ,为了程序的可读性以及方便移植性,编者强烈建议使用这些 FreePascal 版本的读者不要这样来写程序。 5)类型定义 详见本教材的 1.4 部分。 6)变量定义 变量,指在程序执行过程中可以改变值的数据,变量必须先说明 后再在程序中使用。 (当然,这也是 Pascal 程序必须遵守的规定,不
第 6 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

只是变量要先定义后使用,常量、子程序等等,一切都需要先定义, 后使用。 ) 在 Pascal 中,变量只能属于一种数据类型,但是变量的值可以被 多次改变。 我们可以这样定义变量: var <标识符 1>,<标识符 2>,…,<标识符 n>:类型名; 例如: 1. var a:integer; 2. var b,c:longint; 都是可以的。甚至,我们可以这样定义 var a:integer; b,c:longint; 值得注意的是,变量不能重载,即一个变量只能被定义一次。所 以以下定义是非法的: var a:longint; a:char; 在 FreePascal2.x 中,我们也可以这样定义: var <标识符>:类型名=初始值; 例如:var a:char=’A’; 这里需要与常量定义相区分开来。 var a:char=’A’;中定义的 a 为字符型变量,初始值为“A” ,可以在 程序中修改其值。
第 7 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

const a:char=’A’; 中定义的 a 为字符型常量,值为“A” ,不可以在 程序中修改其值。 值得注意的是,以下定义是错误的: var a,b:longint=10; 7)操作符定义 详见本教材 1.5.1 部分。 8)函数定义 详见本教材 1.5.1 部分。 9)过程定义 详见本教材 1.5.1 部分。 10)主程序 主程序的开始为“begin” ,结尾为“end.” 。(“begin”与“end” 为保留字)需要注意的是结尾处的“end”后面有个句号(“.”)。在程 序中,每条语句结尾需要一个分号(“;”)。 例如: begin readln(); writeln() end. 值得注意的是, “end”前不需分号。 另外,一个“; ”可以看做一条空语句。 例如
第 8 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

begin readln(); writeln(); end. 这段程序可以看做是在系统执行完 writeln()后执行一个空语句。 值得注意的是,在 Pascal 中,并不一定每两条语句间必须换行, 下面的写法是可以被认可的: begin readln();writeln(); end. 甚至我们可以这样写: “begin readln();writeln();end.” 但是我们必须要在每两个保留字或标识符之间加一个空格使之 不会连在一起让系统产生用户所不需要的“误解” 。 当然,一条语句也可以分为几行来书写。 例如: for i in [1..5] do writeln(i); 这也是 Pascal 所认可的。 另外,一对“ begin” “end”可以构成一组复合语句,即让一个 程序段变成一条语句,如“begin readln();writeln();end;”其具体作用 我们将在未来的学习中进行阐述。 这里需要说明一下,这儿所列出的第二部分(单元引用)到第十
第 9 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

部分(主程序)合称为程序体(body),其中,第二部分(单元引用) 到第九部分(过程定义)可以看做整个程序的说明部分 (Description Part)。第十部分(主程序)可以看做整个(Execution Part)程序的执行 部分(Execution Part)。在每一个子程序(操作符、函数、过程)内部, 也拥有对应的说明部分与执行部分。

二、基本符号
Pascal 中一共有三类符号(Symbol) 。 1)字母 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 值得注意的是,在 Pascal 中,除字符与字符串中的字母外,字 母无大小写之分,即大写与小写被认为是相同的字符。 2)数字 0 1 2 3 4 5 6 7 8 9 3)特殊符号 + <= := >= . ( , * / ) : = [ ; <> ] ‘ > { .. < } ^

三、保留字
保留字(Reserved Word),指在高级语言中已经定义过的字,使 用者不能再将这些字作为变量名或过程名使用。 保留字包括关键字和未使用的保留字。 关键字则指在语言中有特
第 10 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

定含义,成为语法中一部分的那些字。在一些语言中,一些保留字可 能并没有应用于当前的语法中,这就成了保留字与关键字的区别。一 般出现这种情况可能是由于考虑扩展性。 在 Unextended Pascal(Basic Pascal)中,一共定义了 36 个保 留字,这些保留字我们将在以后的学习中一一接触。 (1)程序、函数、过程符号 :program , function , procedure (2)说明部分专用定义符号:array , const , file , label , of , packed , record , set , type , var (3)语句专用符号 :case , do , downto , else , for , forward , goto , if , repeat , then ,to,until , while , with (4)运算符号:and , div , in , mod (5)分隔符号:begin , end (6)空指针常量 :nil 这些保留字在程序中有着专门的作用, 所以标识符的命名规则中, 有一条——不得与保留字重名。 值得注意的是, 自 1971 年 N.Wirth 教师设计出 Pascal 语言以来, Pascal 已经经历了 40 余年的发展,也派生出了众多的版本,其中最 主 要 的 五 大 版 本 为 Unextended Pascal 、 Extended Pascal 、 Object-Oriented Extensions to Pascal、Borland Pascal 和 Delphi Object Pascal。 这些 Pascal 的版本也为我们带来了一些新的保留字: unit implementation interface string try……我们也会在本教材 的后面部分中介绍其中的一部分。
第 11 页,共 21 页

, not , or

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

四、标识符
标识符 (ID) , 是指以字母或下划线开头的字母数字下划线序列。 值得注意的是,标识符中“识”的读音为(zhì,志) 。 例:a、ab、a1、max、_12、_ab211、a_1、a_等 以下标识符是错误的: 5a a+2 begin a~2 _b!

标识符一共有两大类。 1)标准标识符 标准标识符是指 Pascal 编译器在 system 单元中已经定义好的标 识符。 标准常量:false,true,maxint. 等 标准类型:integer,real,char,boolean,text 等 标准文件:input,output 等 标准函数:abs, arctan, chr, cos, eof, eoln, exp, ln, odd, ord, pred, sin, sqr, sqrt, succ, trunc 等 标准过程:get, new, pack, page, put, read, readln, reset, rewrite, unpack, write, writeln 等 需要说明的是,由于编译器的不同,某些编译器会把部分标准标 识符理解为保留字,那么,在这些编译器下,这部分标准标识符与前 面所说的保留字一样,同时,在这些编译器下,自定义标识符也不得 与这些标准标识符同名。 2)自定义标识符
第 12 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

自定义标识符就是自己定义的标识符。 需要注意的是: 1.不能与保留字同名 2.如果与标准标识符同名,强行改变标准标识符原来意义(强烈 推荐不要使自己的自定义标识符与标准标识符同名) 3.最好有一定意义,使程序具有可读性(如π,在程序中可以起 名为 pi。强烈推荐使用 CamelCase(骆驼式命名法) ) 。 4.可以使用大写、小写、大小写混用,意义不变。 备注:在 TurboPascal 和 FreePascal 下,保留字显白色,标识 符与特殊符号显黄色,字符串显蓝色,数字符号显蓝绿色。

五、数据类型
Pascal 数据类型大致分为三类: 1)简单类型:标准类型、用户自定义型(枚举、子界) 2)构造类型:数组、记录、集合、文件、对象 3)指针类型

第 13 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

在这里我们先介绍标准类型, 剩余的类型我们将在未来的学习中 逐一介绍。 1)整型:整数类型。 类型名 shortint integer 整型 (smallint) longint int64 byte word cardinal qword 长整型 64 位长整型 ~9223372036854775807 字节型 字型 四字节型 八字节型 0~255 0~65536 0~4294967295 0~148446744073709551615 1 2 4 8 -2147483648~2147483648 -9223372036854775808 8 4 -32768~32767 2 中文名 短整型 范围 -128~127 占用字节数 1

值得注意的是,在 TurboPascal 和 FreePascal 中,整型是以补 码的形式存储的。这点在位运算时非常值得注意。 另外,在赋值时,除十进制外也可以使用二进制、八进制和十六 进制。所以以下赋值是等效的 十进制:a:=16; 二进制:a:=%10000 八进制:a:=&20 十六进制:a:=$10
第 14 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

2)实型:实数类型 类型名:real 赋值方法:例如我要把-0.1203 赋值给实型变量 a 1.十进制表示法 2.科学表示法 a:=-0.1203 a:=-1.203e-1

这两种赋值方法是等效的。 备注:-1.203e-1 意为-1.203*10-1。值得注意的是,指数部分不 能为小数,尾数部分不能省略。如:3.4E1.2、E+12 均为非法。 另外,在 TurboPascal 下打开编译开头{$N+}可以使用以下四类 实数:单精度型(single) ,双精度型(double),扩展型(extended) 以及装配十进制型 (comp) ,而在 FreePascal 下可不打开编译开头 {$N+}直接使用以上四类实数类型。 3)字符类型 目前 PC 上广泛使用 ASCII 码字符集满足 Pascal 对于字符集的要 求,字符类型的数据就是括在两个单引号之间的 Pascal 字符集。 如’A’,’1’,’:’分别表示字符 A、数字字符 1 和冒号。 另外,字符也可以直接使用#+ASCII 码值来表示。 例如#65 就是’A’ 在 Pascal 中字符类型用类型标识符 char 表示,它是有序的。 此外,还有 string 来表示字符串(字符串有关操作详见本书 1.4.2 部分) ,另外,值得注意的是,string 并不属于简单类型,而 是属于构造类型,所以 string 不是顺序类型。
第 15 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

4)布尔类型 布尔类型的数据只有两个:真和假,分别用 true(真) 、false (假)来表示。布尔类型的类型标识符为 boolean,是有序的。 值得注意的是, false 可以看做 0 , true 可以看做 1 。所以 false<true。 需要说明的是,简单类型(整型、实型、字符型、布尔型、枚举 型、子界型)中,只有实型不是顺序类型。 如果某一种类型是有序的,那么我们就称之为顺序类型。 一种类型是否有序,可以这样来看: 对于非最小值与最大值,每一个值都有且只有一个前驱 (precursor) ,有且只有一个后继(succeed) ,最小值有且只有一个 后继,没有前驱,最大值有且只有一个前驱,没有后继。 以 integer 类型来看:最小值-32768 没有前驱(-32769 不属于 integer 的值域) , 但有后继 (-32767) ; 最大值 32767 没有后继 (32768 不属于 integer 的值域) ,但有前驱(32766) 。 另外

? n∈{x|x∈integer∧x?{-32768,32767}}
=> n+1∈integer∧n-1∈integer boolean 类型也是如此,true 的前驱是 false,false 的后继是 true。 char 也是如此, ’a’的后继是’b’,’b’的前驱是’a’。 real 就不符合, 例如数字 1.2, 它的前驱可以是 1.1, 也可以是 1.19。 当然,我们不定义非顺序类型的前驱与后继。
第 16 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

五、操作符
操作符(operator)也称运算符。操作符用于执行程序代码运算, 会针对一个及一个以上操作数项目来进行运算。例如:2+3,其操作数 是 2 和 3,而操作符则是“+” 。 以下是 Pascal 中的运算符:
运算符 操作数类型 结果类型

+,-,* 算术 运算

整型或实型

整型或实型

/

整型或实型

实型

div,mod

整型

整型

=,<>

除文件类型以外各种数据类型

<,> 关系 运算 <=,>=

标准类型,枚举型,子界型 布尔 标准类型,枚举型,子界型,集合

in 逻辑 运算 位运 算符 集合 运算 赋值 运算

顺序类型、集合

not,and,or,xor

布尔

布尔

not,and,or,xor

整型

整型

+,-,*

集合

集合 除文件类型以外各种数 据类型

:=

除文件类型以外各种数据类型

备注: 1)div 是整除,指两数相除所得的商。mod 是求余。
第 17 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

例如 11 div 2 = 5 -4 div 3 = -1 11 mod 2 = 1 -4 mod 3 = -1

这里需要注意的是,由于 mod 运算的定义为 A mod B = A-(A div B)*B, 所以,mod 运算的结果符号与被除数相同,与除数无关。 2)/运算的结果必为 real,即使 6 / 2 结果亦为 3e0。 3)运算级
1 同级运算从左到右算,不同级别运算从高到低算 ○
E A

2 括号级别优先,从内向外逐层降低 ○
E A A

3 not 优先级为 4 ○
E A A

4 * / div mod and 优先级别为 3 ○
E A A

5 + - or xor 优先级别为 2 ○
E A A

6 in 优先级别为 1 ○
E A A

4)位运算 将整型数字转化为二进制数,0 代表 false,1 代表 true,按位 进行与位运算同名的逻辑运算。 例如 not(4)=-5 备注: 4(10)=00000100(2) 又 not(00000100)=11111011 将补码转成原码:10000101 即-5 同理可知 5 and -3 =5;4 or 7=7;-8 xor -9=15
第 18 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

5) 在 Extended Pascal 中 , 除 了 上 述 运 算 符 外 , 还 有 <<(shl)、>>(shr)等运算符。 <<,为左移,也可写作 shl,a<<b(即 a shl b)是指将 a 按二 进制向左移动 b 格,值可以看做 a*2b >>,为右移,也可写作 shr,a>>b(即 a shr b)是指将 a 按二 进制向又移动 b 格并取整,值可以看做 trunc(a*2-b)

六、表达式
表达式是指由常量、变量、函数、括号、集合与运算符连结起来 的式子。表达式中的变量必须要有明确的值,单个的常量、变量、函 数都可以看做是一个表达式。 1)算术表达式 结果为数值的表达式,例如 1+2*3(值为 7) 补充: 1.由于 Pascal 中运算符^有特殊定义,并非指数运算,故计算 ab 必须这样写:exp(b*ln(a))。有兴趣的同学可以根据对指数有关公 式进行证明。 (当然,也可以用 power 函数) 2.求一非负整数 a 的位数:trunc(ln(a)/ln(10))+1 值得注意的是:乘法运算符不能省略,即 2*a 不能简写为 2a。 2)字符表达式 结果为字符的表达式,例如 chr(65)(值为‘A’) 补充:将一小写字符 a 改为大写字符:chr(ord(a)-32)(当然也 可以用 upcase 函数。 )
第 19 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

3)布尔表达式 结果为布尔类型的表达式,例如 not(odd(4))(值为 true) 补充: 判断正整数 n 所代表的年份是否为闰年 (按照格里高利历) : (n mod 400 = 0)or((n mod 4 = 0) and (n mod 100 <> 0))

七、Pascal 语言的历史与特点
1968 年瑞士的 N.WIRTH 教授设计完成了 Pascal 语言, 1971 年正 式发表。1975 年,国际标准化组织(ISO)对 Pascal 语言进行了修 改,从而形成了标准 Pascal 语言。与以往的编程语言相比,Pascal 语言是一门结构化的语言,它具有丰富的数据类型和控制结构,简明 易懂,所以特别适合于教学。 PASCAL 语言是最早出现的结构式程序设计语言,具有丰富的数 据类型和简洁灵活的操作语句,适于描述数值和非数值的问题。它是 于 70 年代在 ALGOL 基础上研制出来的。它具有丰富的数据类型并提 供了数据类型定义设施,其控制结构体现了结构程序设计原则。 PASCAL 语言最初是为系统地教授程序设计而设计的,特点是简明化 和结构化,适合教学,科学计算与系统软件的研制。 Pascal 语言还是一种自编译的语言,这就使它的可靠性大大提 高了。在 Pascal 的各个版本中,尤以 Turbo Pascal 和 Free Pascal 的功能最为强大。目前 IOI、NOI、NOIP 均将 Pascal 定位为三大推 荐程序语言之一,与 C、C++同列。目前,比赛一般使用 FREEPASCAL 环境。 另外, 基于 Object Pascal 的 Delphi 也仍然占据着不小的市场,
第 20 页,共 21 页

百度 Pascal 吧公开培训教材-Pascal 培训课程普及讲义-第二讲

目前仍有不少用户使用 Delphi 进行各种平台的开发。

第 21 页,共 21 页


相关文章:
语法讲义
语法讲义_其它_高等教育_教育专区。英语考研讲义第一节 6.既可用作单数又可用作复数但意义不同的名词 air arm art authority brain chain compliment condition cong...
英语语法讲义
英语语法讲义前言 第一章 英语的时态第一节 第二节 第三节 第四节 第五节 第六节 第七节 第八节 第九节 第一节 第二节 第三节 第四节 一般现在时的...
pascal语言基本知识
目前信息学竞赛 可以使用的语言有 Pascal、C、C++,本期将进行 Pascal 语言教学。 2、数据结构: 将数学对象和事物对象表达成计算机可以接受的形式, 并根据特点把...
语法讲义
A.make B.made C.makes D.making - 16 - 理工园教育精编讲义 语法大课堂 第九讲 My Note: 时态(二) Class Work: 一.用动词的正确形式填空。 1.-___...
Pascal语法小全
Pascal语法小全_其它语言学习_外语学习_教育专区。Pascal 语法小全 OBJECTPASCALPROGRAMING(WRITEDBYC.Y.CATTENTIONSYSTEMDEVELOPMENTCO,.) 1.标记(TOKEN) 1.1特别...
《语法讲义》读书笔记
语法讲义》读书笔记第一章 语法单位 【主要内容】...二、词 1、语素是最基本的语法单位。比语素高一...【主要问题】 1、5.2 节中讲动词的分类时说: ...
语法讲义(词性)
语法讲义(词性)_英语_高中教育_教育专区。现代汉语实词...二 、动词意义及词例 : A.表示事物的形状、颜色:...如:第一、初五、老大。 你快走! 老师讲得很清楚...
Toefl语法讲义教师版
Toefl语法讲义教师版_英语考试_外语学习_教育专区。...二、基础语法规则(一) 词法 第一章 名词正确区分...(统计学,作统计数据讲时可数), physics, politics,...
Turbo Pascal7.0讲解
第二讲 Pascal 语言的基本结构 作者:网上收集 文章来源:网上收集 点击数:1127 ...{注意:该程序其实什么也没有做} 【练习】 1、以下语句语法正确的是___。 A...
语法讲义
8页 免费 高一语法讲义 22页 5财富值 雅思基础语法讲义1 9页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 ...
更多相关标签: