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

pascal语法讲义-第二讲


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

第二讲 初识 Pascal
一、Pascal 程序结构
Pascal 程序的结构非常严谨,它有严格的规定,下面我们从实例 上来说明 Pascal 的程序结构。 例 1.2.1.1.1:对于某一关键字的 BOGO 排序 program p1_2_1_1_1(inpu

t,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 页


相关文章:
Pascal第二讲:顺序程序结构
Pascal 第二讲:顺序程序结构 一、概述 PASCAL 是一种结构化的程序设计语言,其...顺序结构的程序,希望大家看懂程序每一句的作用,进一 步理解 PASCAL 程序的语法...
第二讲 过程与函数
pascal 中,函数也遵循先说明后使用的规则,在程序中,函数的说明放在调用该函...信息学奥林匹克竞赛冬令营讲义 第二讲 说明: 1、把需要提前引用的过程或函数的...
第二课 Pascal的预备知识
第二讲Pascal语言基础知... 33页 20财富值 预备知识第二课 鼠标和键盘.....类型常量定义的语法格 式: const <简单类型常量标识符>:简单类型=常数; 例如:...
语法知识第二讲——动词
系动词语法讲义 10页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能...语法知识第二讲——动词 本将主要涉及动词的分类及其动词短语归纳本将主要涉及动词...
完整的Pascal讲义(word)
完整的Pascal讲义(word)_IT认证_资格考试/认证_教育...如果程 序有语法错误,则会在程序窗口的第一行处...⑤readln 语句与 read 语句的第二个区别是:read ...
PASCAL讲义
PASCAL讲义_IT/计算机_专业资料。编程必备第...上机时要注意 第一步:保存程序 Save(F2) 第二步...pascal 语言中的算术表达式是由符合 pascal 语法规定...
pascal语法
pascal语法_经济学_高等教育_教育专区。DELPHI语言pascal 语法 2005 年 1 月 27 日 09:45 作者:不详 来源:中国烟机备件网 第一章,pascal 介绍 一,pascal 的基...
Pascal语法小全
Pascal语法小全_其它语言学习_外语学习_教育专区。Pascal 语法小全 OBJECTPASCALPROGRAMING(WRITEDBYC.Y.CATTENTIONSYSTEMDEVELOPMENTCO,.) 1.标记(TOKEN) 1.1特别...
语法讲义
A.make B.made C.makes D.making - 16 - 理工园教育精编讲义 语法大课堂 第九讲 My Note: 时态(二) Class Work: 一.用动词的正确形式填空。 1.-___...
PASCAL语法基础-答案
Pascal 语法基础习题 第一题:下列哪些常量是对的,哪些是错误的,错在哪? Const...第二题:下面的表达式,哪些是正确的,哪些是错误的;正确的请求出表达式的值,错误...
更多相关标签:
英语语法入门第二讲 | pocket英语语法第二讲 | pascal语法 | pascalscript语法 | pascal基本语法 | pascal语法分析器 | pascal语言语法 | pascal if then 语法 |