第一讲 初识Pascal语言
一、Pascal 语言概述
Pascal 语言是一种算法语言,它是瑞士苏黎世联邦工业大学的Niklaus Wirth教授于1968年设计完成的,1971年正式发表。1975年对Pascal 语言进行了修改,作为“标准PASCAL语言”。
Pascal 语言是一种结构化的程序设计语言,可以用来编写应用程序。它又是一种系统程序设计语言,可以用来编写顺序型的系统软件(如编译程序)。它的功能强、编译程序简单。
二、Pascal 语言的特点
Pascal语言有以下几个主要的特点:
⒈ 它是结构化的语言。Pascal语言提供了直接实现三种基本结构的语句以及定义“过程”和“函数”的功能。可以方便地书写出结构化程序。在编写程序时可以完全不使用GOTO语句和标号。这就易于保证程序的正确性和易读性。Pascal语言强调的是可靠性、易于验证性、概念的清晰性和实现的简化。在结构化这一点上,比其它(如BASIC,FORTRAN77)更好一些。
⒉ 有丰富的数据类型。Pascal提供了整数、实型、字符型、布尔型、枚举型、子界型、数组类型、集合类型、记录类型、和文件类型和指针类型。 ⒊ 能适用于数值运算和非数值运算领域。PASCAL的功能较强,能广泛应用于各种领域。PASCAL语言还可以用于辅助设计,实现计算机绘图功能。
⒋ PASCAL程序的书写格式比较自由。PASCAL允许一行写多个语句,一个语句可以分写在多行上,这样就可以使PASCAL程序写得格式优美,便于阅读。
由于以上特点,许多学校选PASCAL作为程序设计语言,它能给学生严格而良好的程序设计的基本训练。培养学生结构化程序设计的风格。
三、Pascal语言程序的基本结构
程序设计语言都有着一组自己的记号和规则。PASCAL语言必须采用其本身所规定的记号和规则来编写程序。下面我们首先来了解Pascal语言的程序基本结构。
Pascal语言的程序结构为:
程序首部
标号说明语句
常量定义语句
类型定义语句 程序的说明部分
变量说明语句
函数和过程说明语句 分程序
程序体 程序的执行部分
先看一个简单的PASCAL程序:
program exam1(input,output);
var r,s,c:real;
begin
readln(r);
c:=3.14*2*r;
s:=3.14*r*r;
writeln(c,s)
end.
从这个简单的程序可以看到:
1、 一个PASCAL程序分为两个部分:程序首部和程序体(或称分程序)。
2、程序首部是程序的开头部分,它包括:
⑴ 程序标志。用“program”来标识“这是一个PASCAL 程序”。PASCAL规定任何一个PASCAL程序的首部都必须以此字开头。在Turbo pascal语言中,首部也可省略。
⑵ 程序名称。由程序设计者自己定义,如例中的exam1。
在写完程序首部之后,应有一个分号。
3、程序体是程序的主体。程序体包括说明部分(也可省略)和执行部分两个部分。
⑴ 说明部分用来描述程序中用到的变量、常量、类型、过程与函数等。本程序中第二行是“变量说明”,用来定义变量的名称、类型。
PASCAL规定,凡程序中用到所有变量、符号常量、数组、标号、过程与函数、记录、文件等数据都必须在说明部分进行定义(或称“说明”)。也就是说,不允许使用未说明先使用。
⑵ 执行部分的作用是通知计算机执行指定的操作。如果一个程序中不写执行部分,在程序运行时计算机什么工作也不做。因此,执行部分是一个PASCAL程序的核心部分。
执行部分以“begin”开始,以“end”结束,其间有若干个语句,语句之间以分号隔开。执行部分之后有一个句点,表示整个程序结束。
4、 PASCAL程序的书写方法比较灵活。 应以程序结构清晰、易读为目的。在编写程序时尽量模仿本书中例题程序格式。
5、在程序中,一对大括号间的文字称为注释。注释的内容由人们根据需要可用英语书写。注释可以放在任何空格可以出现的位置。执行程序时计算机对注释不予理睬。
6、保留字后不加标点符号(END除外)。
四、Turbo Pascal语言系统的使用
下面我们就学习常用的Turbo Pascal 7.0系统的使用。
1、系统的启动
在运行系统目录下的启动程序TURBO.EXE,即可启动系统。屏幕上出现如图1所示的集成环境。
2、Turbo Pascal系统集成环境简介
最顶上一行为主菜单。中间蓝色框内为编辑窗口,可进行程序的编辑。最底下一行为提示行,显示出系统中常用命令的快捷键。
3、新建程序窗口
按F10进行主菜单,选择File菜单,执行其中New命令。就可建立一个新的程序窗口(默认文件名为Noname00.pas或Noname01.pas等)。
4、程序的输入、编辑与运行
在当前程序窗口中,一行一行的输入程序。事实上,程序窗口是一个全屏幕编辑器。所以对程序的编辑与其它编辑器的编辑方法类似,这里不再重复。
当程序输入完毕之后,一般要先按Alt+F9(或执行compile菜单中compile命令)对程序进行编译。如果程序有语法错误,则会在程序窗口的第一行处显示第一个红色错误信息。若无语法错误,则窗口正中央会出现一个对话框,提示编译成功。接下来,我们可以运行程序了。
程序的运行可以通过按ALT+R打开RUN菜单中的RUN命令,或直接按快捷键CTRL+F9。则可以在用户窗口中输出运行结果。通常在程序运行结束后系统回到Pascal系统的集成环境,因此要查看运行结果,要按ALT+F5将屏幕切换到用户屏幕。
5、程序的保存与打开
当我们想把程序窗口中的程序存入磁盘时,可以通过按F2键(或执行File菜单中的save命令)来保存程序。第一次保存文件时屏幕上会出现一个对话框要求输入文件名(默认扩展名为.pas)。
当我们要将磁盘上的程序文件中的PASCAL程序装入窗口时,可按F3(或执行File菜单中的Open命令)来装入程序,此时系统也会弹出一个对话框要求输入要打开的文件名,或直接在文件对话框列表中选择所要的文件,然后回到打开文件。
第二讲 数据类型、表达式、函数
一、数据类型
整数类型 integer -32768~32767
字节型 type 0~255
字型 word 0~65535
实数型 real:包括正实数、负实数和实数零。实数的绝对值在1E-38到1E+38之间。
形式有两种:
⑴ 十进制表示法
人们日常使用的带小数点的表示方法。如0.0,-0.0,5.61,-8.0,等都是实数形式。
⑵ 科学记数法
科学记数法是采用指数形式的表示方法,如1.25×105可表示成1.25E+05。在科学记数法中,字母“E”表示10这个“底数”,而E之前为一个十进制表示的小数,称为尾数,E之后必须为一个整数,称为"指数"。 如-1234.56E+26 , 0.268E-5 , 1E5是合法形式,而.34E12 , 2.E5 , E5 ,E,1.2E+0.5都不是合法形式的实数。
和整数相比,实数能表示的范围大得多,但值得注意的是实数的运算整数的运算速度慢且无法像整数那样精确表示,只能近似表示。如2.03.0比23的运算慢。
字符型 char 括在两个单引号中的字符: ’a’表示字符;a表示标识符, ’3’ 表示字符;3表示整数值
布尔型 boolean
布尔型有两个值,真和假,分别用标准常量名true和false表示,序号分别为1和0。
二、常量
在程序运行过程中,其值不能被改变的量称为常量。如12,14.8,'abc',true等。
Pascal中有一个标准标识符Maxint,它代表所使用的计算机系统允许的最大整型数,而最小的整型数即为-Maxint-1。Turbo Pascal还定义了长整数常量MaxLongInt,其值为2147483647。
字符常量:是由字符组成,所有字符来自ASCII字符集,共有256个字符。在程序中,通常用一对单引号将单个字符括起来表示一个字符常量。如:'a','A','0'等。对于ASCII字符集中,按每个字符在字符集中的位置,将每个字符编号为0-255,编号称为对应字符的序号。
符号常量:一个常量即可以直接表示(称为直接常量, 如 124,156.8),也可以用一个标识符来代表一个常量,称为“符号常量”。但符号常量必须在程序中的说明部分先定义,后使用。
定义符号常量的一般格式:
CONST <常量标识符>=<常量>
说明:常量说明部分以关键字const开头, 后面的标识符为常量标识符,其中"="号后的常量为整数、实数、字符、 字符串。例如:
const
pi=3.14159;
zero=0;
var r,s,c:real;
则在程序中pi和zero作为符号常量,分别代表实数3.14159和整数0。也就是说,常量说明部分既定义了常量名及其值,又隐含定义了常量的类型。
Pi(function函数)为 3.1415926535897932385
三、变量
变量代表了一个存储单元,其中的值是可变的,故称为变量。即在程序运行过程中,其值可以改变的量,称为变量。
变量有三个要素是:变量名、变量类型、变量值。
一个程序中可能要使用到若干个变量,为了区别不同的变量,必须给每个变量(存贮单元)取一个名(称为变量名),该变量(存贮单元)存放的值称为变量的值,变量中能够存放值的类型为变量的类型。
1、变量名
用一个合法的标识符代表一个变量。如m,rot,total 等都是合法变量名。在程序中用到的变量必须在说明部分加以说明。
“自定义标识符”的命名规则为:自定义标识符必须以字母(包含下划线"_")开头,后面的字符可以是字母或数字。标识符长度不超过63个字符。
变量名应遵循自定义标识符的命名规则,并注意“见名知义”的原则,即用一些有意义的单词作为变量名。
2、变量的类型
常量是有类型的数据,变量在某一固定时刻用来存放一个常量,因此也应有相应的类型。如整型变量用来存放整数,实型变量用来存放实数。
3、变量说明
在程序中若要使用变量,变量的名称及类型在程序的变量说明部分加以定义,变量的值则在程序的执行部分中才能赋给。
变量说明的一般格式:
VAR <变量标识符> [,<变量标识符>]:<类型>; (中括号内部分表示可省)
其中VAR是pascal保留字,表示开始一个变量说明段, 每个变量标识符或由逗号隔开的多个变量标识, 必须在它的冒号后面说明成同一类型。一个程序中,可以说明许多不同类型的变量,每种类型变量之间用分号隔开,共用一个VAR符号。
例如:
var age,day:integer;
average:real;
其中,Integer(整型)、Real(实型)是标准标识符, 它们是“类型标识符”,代表了确定的类型,如age和 day 被定义为整型变量, average被定义为实型变量。
一旦定义了变量,就确定了它的类型,也就是说,就确定了该变量的取值范围和对该变量所能进行的运算。
四、表达式
表达式的定义
pascal语言中的算术表达式是由符合pascal语法规定的运算对象(包括常量、变量、函数)、算术运算符、圆括号组成的有意义的式子。如:A+3.14159*5/8.4-Abs(-13)
1、算术运算符
常用的有以下6个算术运算符: + 、- 、* 、 / (实数除)得到结果为实型.如 5.0/2.0=2.5, 5/2= 2. 5,4/2=2.0而不等于2。
div (整除) div它要求除数和被除数均为整型,结果也为整型。如10 div 3=3, 5 div 10=0, -15 div 4= -3。 div运算只取商的整数部分,参与div运算的两个对象不能为实型。
mod (求余),也只能用于整数运算,结果为整数。例如:10 mod 4=2 , -17 mod 4= -1 ,
4 mod (-3)=1, - 4 mod 3= -1,即 a mod b=a-(a div b)*b。
2、关系运算符: >、<、>=、<=、=、<>
4、运算优先顺序
如果一个表达式里出现两个或两个以上的运算符, 则必须规定它们的运算次序。
PASCAL语言规定运算优先级如下:
五、标准函数
学习标准函数要注意:
每个标准函数对自变量的数据类型都有一定的要求,函数经过运算后得到的函数值的类型也是一定的。函数值的类型关系到该函数能够参加的运算。函数也可做自变量。
1、算术运算函数函数
绝对值函数abs(x) abs(-10)=10
平方值函数 sqr(x) sqr(4)=16
平方根值函数sqrt(x) sqrt(4)=2
2、逻辑判断函数
奇数函数 odd(x) integer Boolean odd(-11)=true,odd(10)=false
3、转换函数
截尾函数 trunc(x) real integer trunc(3.7)=3, trunc(-7.9)=-7
舍入函数 round(x) real integer round(12.7)=13, round(12.4)=12
round(-5.7)=-6
序数函数 ord(x) 函数值为字符在ASCII中的序号 ord(‘a’)=97,
ord(‘0’)=48, ord(true)=1
字符函数 chr(x) x表示ASCII中的序号 函数值为该序号代表的字符值。
chr(48)=’0’ , chr(32)=’ ’
4、顺序函数
前驱函数 pred(x) pred(5)=4, pred(‘b’)=’a’, pred(true)=false
后继函数 succ(x) succ(5)=6, succ(‘A’)=’B’
第三讲 赋值语句 一、赋值语句 注意:1、赋值号与比较关系符是不同的两个符号, 2、赋值号两边的数据类型必须相容 3、变量在程序中如没有赋值,数值变量的值为0。 例1:下列赋值语句那些是错的?错在哪里?(var : x,y,z,a: integer; ) ① x:=x+y ② x=y+z ③ x+y:=z 例2:写出下列程序的运行结果 var a,b,c:integer; begin a:=5; b:=8; c:=a; a:=b; b:=c; writeln('a=’,a,’ ',’b=’,b) end.
思考题:如果不引入第三个中间变量,能否交换两个变量的值?编程序试一试。
学习两个过程: ① inc(x,n) 等价于 x:=x+n ② dec(x,n) 等价于 x:=x-n inc(x) 等价于 x:=x+1 dec(x) 等价于 x:=x-1
|
第四讲 输出语句
输出语句 输出语句的作用是先计算表达式的值,并按指定的格式输出到屏幕。 1、输出语句的两种格式 ① write语句 格式: Write(表达式1,表达式2,……); 如:write(1,2,3,4); write('My name is Liping'); ② writeln语句 格式: Writeln (表达式1,表达式2,……) 或 writeln
2、输出语句的功能
计算机执行到某一输出语句时,先计算出输出语句中的每个表达式的值,并将每一个表达式的值一个接一个地输出到屏幕上。 Write语句与writeln语句功能基本相同,但有两点不同:
① write语句将其后括号中的表达式一个接一个输出后,没有换行。而writeln语句则在输出各个表达式的值后换行。
② write语句至少必须输出一项内容,而writeln语句允许不输出任何内容,只是换行。
write(x,y); 等价于 write(x); write(y);
writeln(x,y); 不等价于writeln(x); writeln(y);
等价于write(x); writeln(y);
例1、以下两个程序段的输出分别为: ① write(1,2,3,4);write(5,6); ② writeln(1,2,3,4);write(5,6); 输出为: 输出为: 123456 1234 56 例2:有三个小朋友甲乙丙。甲有50粒糖果,乙有43粒糖果,两有13粒糖果。现在他们做一个游戏。从甲开始,将自己的糖分三份,自己留一份,其余两份分别给乙与丙,多余的糖果自己吃掉,然后乙与丙也依次这样做。问最后甲、乙、丙三人各有多少粒糖果? 分析:在游戏中每个小朋友拥有的的糖果数是在变化的,用a,b,c三个变量分别存放甲乙丙在某一时刻所拥有的糖果数。对于每人,分糖后,他的糖果数一定为原来的糖果数 div 3(用整除恰可以表示多余的糖自己吃掉)。而其他两人则增加与这个小朋友现在拥有的糖果数。 程序如下: var A,B,C:integer; begin A:=50; B:=43; C:=13; { 初始糖果数} A:=A div 3; B:=B+A; C:=C+A; {甲分糖果后,每个人拥有的糖果数变化情况} B:=B div 3; A:=A+B; C:=C+B; {乙分糖果后,每个人拥有的糖果数变化情况} C:=C div 3; A:=A+C; B:=B+C; {丙分糖果后,每个人拥有的糖果数变化情况} writeln('A=',A,' B=',B,' C=',C); end.
3、输出格式:数据的输出格式很重要,输出的数据所占的列数为场宽。
Ø
输出项中无指定格式符号,则按标准场宽输出,integer实际长度,real 17列,char串长。
Ø
单场宽(输出整数时自定义) 格式:e:n1 n1是正整数,表示e输出时所占的列数。
Ø
双场宽(输出实数时自定义) 格式:e:n1:n2 n1,n2是正整数,且n1>n2, n1输出总列数含符号位、整数部分、小数点、小数部分,n2小数部分的列数。
Ø
数据不突破场宽限制时,单场宽一律向右看齐,双场宽实数向小数点看齐,多余的小数位补0。
Ø 数据实际位数超过场宽时,以保证数据的正确输出为原则。单场宽时自动将n1扩展到所需位数,双场宽时自动将n1扩展到所需位数,n2小于实际的小数位数时,则舍去多余的位数,内存中仍保留该数的精确值。
例3、写出下列程序的运行结果:
const s='abcd';
var i:integer; r:real; c:char; b:Boolean;
begin
i:=1234; r:=123.456; c:= '*’; b:=true;
writeln(i,i:5,i:3);
writeln(r,r:8:4,i:8:2);
writeln(c,c:4);
writeln(s,s:8,s:3);
writeln(b,b:5,b:3)
end.
运行结果
1234 12341234
1.2345600000E+02123.4560 123.46
* *
abcd abcdabcd
TRUE TRUETRUE
|