1、(完整版)信息竞赛复习资料2-pascal语言(NOIP)Pascal语言概述与预备知识1、关于Turbo PascalPascal是一种计算机通用的高级程序设计语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。以法国数学家命名的Pascal语言现已成为使用最广泛的基于DOS的语言之一,其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。正因为上述特点,Pascal语言可以被方便地用于描述各种算法与数据结构。尤其是对于程序设计的初学者,Pascal语言有益于培养良好的程序设计风格和习惯.IOI(国际奥林匹克信息学竞赛)把Pascal语言作为三种程序设计
2、语言之一, NOI(全国奥林匹克信息学竞赛)把Pascal语言定为唯一提倡的程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的教学语言.在Pascal问世以来的三十余年间,先后产生了适合于不同机型的各种各样版本。其中影响最大的莫过于Turbo Pascal系列软件。它是由美国Borland公司设计、研制的一种适用于微机的Pascal编译系统。该编译系统由1983年推出1.0版本发展到1992年推出的7.0版本,其版本不断更新,而功能更趋完善。下面列出Turbo Pascal的编年史: 年代版本名称主要特色1983Turbo Pascal 1.0Turbo Pascal 2.
3、0Turbo-87 Pascal提高实数运算速度并扩大值域1985Turbo Pascal 3。0增加图形功能Turbo BCD Pascal特别适合应用于商业1987Turbo Pascal 4。0提供集成开发环境(IDE),引入单元概念1988Turbo Pascal 5.0增加调试功能1989Turbo Pascal 5.5支持面向对象的程序设计(OPP)1990Turbo Pascal 6。0提供面向对象的应用框架和库(Turbo Vision)1992Turbo Pascal 7。0面向对象的应用系统、更完善的IDETurbo Vision 2。01993Borland Pascal
4、 7.0开发 Object Windows库(For Windows)提供对OLE多媒体应用开发的支持1995DelphiVisual PascalTurbo Pascal语言是编译型程序语言,它提供了一个集成环境的工作系统,集编辑、编译、运行、调试等多功能于一体。 2。 Pascal 的启动Pascal的启动a。DOS下的启动(适用于MSDOS6.22之前的版本或Win9X & Win2000 的Command Mode)DOS环境,在装有Turbo Pascal的文件目录下,键入turbo即可进入Turbo Pascal集成环境.b。Win9X或Win2000模式下的启动(适用于Turbo
5、 Pascal 3。0以后的版本)如果在Win9X或Win2000的“资源管理器装有Turbo Pascal的目录中,双击turbo。exe或在“开始-程序”菜单中通过MS-DOS方式来运行turbo.exe,它会提示你“该程序设置为MSDOS方式下运行,并且其它程序运行时,无法运行它。如果选择继续所有其它程序将关闭”,所以在Win9X或Win2000下无法直接运行它,这时你可以在你希望的地方(比如说桌面上)单击鼠标右键“新建快捷方式,单击“浏览,找到turbo。exed选中,然后单击“打开”,再单击“下一步,再单击完成;这还没完,选中前面新建的快捷方式(应该叫Turbo Pascal吧),单
6、击右键,单击“属性,选择“程序”,然后再单击“高级”,把“MS-DOS方式前面的那个勾去掉,也就是不要选“MSDOS方式”,然后单击“确定”,再单击“确定”就大功告成了,以后你运行Turbo Pascal的时候,只要双击那个你建立起的快捷方式就可以直接在Win9X或Win2000下运行Turbo Pascal。第一章 开始编写pascal语言程序1.1 Pascal编辑环境 1。下载Turbo Pascal6.0 (1)下载turbo pascal (2)属性设置 2。Turbo Pascal 6.0环境介绍 (1)进入与退出(注意:退出时必须使用文件菜单中的退出命令或Alt+X) (2)编辑
7、程序 光标移动键的使用 Backspace键:删除光标前一个字符 Ctrl+N:在光标前插入一行 Ctrl+Y:删除光标所在行 Home:光标移到行首 End:光标移到行尾 PageUp/PageDown:上下翻页 Insert:插入与改写状态切换 (3)编译程序(Compile):Alt+F9 (4)运行程序(Run):Ctrl+F9 (5)保存程序(Save):F2 (6)打开原有的程序:F3 (7)查看程序运行结果:Alt+F5 (8)调试时增加观察项:Ctrl+F71.2 简单Pascal程序的结构例1下列是一Pascal源程序: program lt1;程序首部 var 说明部分 a
8、,b:integer; sum:integer; begin 执行部分 a:=3355; b:=789; sum:=a+b; writeln(sum=,sum); end.1.3 完整的Pascal程序结构一个完全的Pascal程序结构program 程序名;uses已知单元说明;label 标号说明;const 常量说明;type 类型说明;var 变量说明;function函数说明;procedure 过程说明;begin语句;语句;语句;end.第二章Pascal语言基础知识2.1 Pascal字符与符号 1标识符(1) 标识符的定义:标识符就是以字母开头的字母数字序列,有效长度为63个
9、字符,并且大小写等效.可以用来标示常量、变量、程序、函数等。例如例1.1中的Area(程序名),pi(符号常量),s、r(变量名)都是标识符。(2) 标识符的分类: a。保留字(关键字)所谓保留字是指在Pascal语言中具有特定的含义,你必须了解它的含义,以便于正确的使用,否则会造成错误。标准Pascal语言中的保留字一共有35个,Turbo Pascal语言一共有51个。下面是Pascal语言的保留字:AND,ARRAY,BEGIN,CASE,CONST,DIV,DO,DOWNTO,ELSE,END,FILE,FOR,FUNTION,GOTO,IF,IN,LABEL,MOD,NIL,NOT,
10、OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN,TO,TYPE,UNTIL,VAR,WHILE,WITH等b。标准标识符:指Pascal语言预先定义的标识符,具有特殊含义。以下列举了Turbo Pascal语言部分常用的标准表识符:标准常量FalseMaxintTrue标准类型BooleanCharReal Integer标准函数AbsArctanChrCosEofEolnExpLn Odd OrdPred RoundSin SqrSqrt SuccTrunc标准过程DisposeGet NewPack Page Put ReadRe
11、adln Reset RewriteUnpack WriteWriteln标准文件InputOutputc用户自定义标识符:由你自己根据需要来定义。(1)选用的标识符不能和保留字相同。(2)语法上允许预定义的标准标识符作为你自己定义的标识符使用,但最好还是不要用。以下列举了你自己在定义标识符时可以用的字符:AZ;a-z;09;+,,/,=,=,=,,(,),:=,,,;,.,:,.,,2.2Pascal数据类型数据是程序设计的一个重要内容,其重要特征-数据类型,确定了该数据的形、取值范围以及所能参与的运算。Turbo Pascal 提供了丰富的数据类型,这些数据类型可以分为三大类:简单类型、构
12、造类型和指针类型,其中简单类型可以分为标准类型(整型、实型、字符型和布尔型)和自定义类型(枚举型和子界型),构造类型可以分为数组类型、集合类型、记录类型和文件类型。这些数据类型中除了指针类型是动态数据类型外,其他的都是静态数据类型。在这些数据类型中的简单类型都是有序类型,除了实型以外的简单类型都是顺序类型,所谓顺序类型就是他们的值不仅是有序的而且是有顺序号。在这里主要介绍整型、实型、字符型和布尔型四种常用的数据类型。1.整型一个整型数据用来存放整数.Turbo Pascal支持五种预定义整型,它们是shortint(短整型)、 integer(整型)、 longint(长整型)、 byte(字
13、节型)和 word(字类型),Turbo Pascal分别用相同的名字作为他们的标识符。每一种类型规定了相应的整数取值范围以及所占用的内存字节数。类型数值范围占字节数格式shortint128。1281 带符号8位inteter -32768。.32767 2 带符号16位longint2147483648.。2147483647 4 带符号32位byte0。.255 1 带符号8位word0.。65535 2 带符号16位Turbo Pascal规定了两个预定义整型常量标识符maxint和maxlonint,他们各表示确定的常数值,maxint为32767, longint为21474836
14、47,他们的类型分别是integer 和longint2。实型一个实型数据用来存放实数.Turbo Pascal支持五种预定义实型,它们是real(基本实型)、 single(但精度实型)、double(双精度实型)、extended(扩展实型)、comp(装配实型),Turbo Pascal分别用相同的名字作为他们的标识符.每一种类型规定了相应的实数取值范围、所占用的内存字节数以及它们所能达到的精度类型数值范围占字节数有效位数real2.9e39.1.7e38611.。12single1.5e45。.3。4e3847.。8double5.0e324.。1.7e308815。.16Turbo
15、Pascal支持两种用于执行实型运算的代码生成模式:软件仿真模式和80x87浮点模式。除了real可以在软件仿真模式下直接运行以外,其他类型必须在80x87浮点模式下运行。3。布尔型一个布尔型数据用来存放逻辑值(布尔值)。布尔型的值只有两个:false和true,并且false的序号是0,true的序号是1。false 和true都是预定义常数标识符,分别表示逻辑假和逻辑真.并且true=常量;.。常量标识符=;常量标识符的类型由定义它的常量的类型决定。例如:const a=12 隐含说明a是整型;const r=3.21 隐含说明r是实型。.。.。(3)常量定义部分必须以保留字const开头
16、,可以包含一个或几个常量定义,而且每个常量均以分号结束.(4)Turbo Pascal类型常量类型常量,又称变量常数,它是Turbo Pascal的一个扩充特性。类型常量的定义与标准Pascal规定的常数定义和变量说明有所区别.类型常量定义的语法格式:const:简单类型=常数;例如:constcounter:integer=0;flag:boolean=true;index:0。.100=0;2。变量(1)变量:在某个程序中的运行过程中其值可以发生改变的量(2)变量说明:变量说明出现在说明部分。它的语法格式是:var:类型;。.变量标识符列表:;其中,保留字var表示开始一个变量说明部分。变
17、量标识符列表是一个用逗号隔开的标识符序列,冒号后面的类型是类型标识符。每个变量说明均以分号结束。例如:vara,b,c:integer;m,n:real;2。4标准函数1.算术函数函数标识符 自变量类型意义结果类型abs整型、实型绝对值同自变量arctan 整型、实型反正切实型cos整型、实型余弦实型exp整型、实型指数实型frac 整型、实型小数部分实型int整型、实型整数部分实型ln 整型、实型自然对数实型pi 无自变量圆周率实型sin整型、实型正弦实型sqr整型、实型平方同自变量sqrt 整型、实型平方根实型例:abs(-4)=4abs(-7。49)=7.49arctan(0)=0.0s
18、in(pi)=0。0cos(pi)=-1。0frac(3.71)=0。71int(-3。71)=-3.0sqr(4)=16sqrt(4)=22。标准函数函数标识符自变量类型意义结果类型odd 整型判断奇数布尔型pred离散类型求前趋同自变量succ离散类型求后继同自变量例:odd(1000)=falsepred(2000)=1999succ(2000)=2001odd(3)=truepred(x)=wsucc(x)=y3。转换函数函数标识符自变量类型意义 结果类型chrbyte自变量对应的字符字符型ord离散类型自变量对应的序号longintround实型四舍五入longinttrunc实型截
19、断取整longint例:chr(66)=Bord(A)=65round(-4.3)=5trunc(2.88)=24。杂类函数函数标识符自变量类型意义结果类型random无自变量0,1间的随机实数realrandomword0,自变量间的随机整数) wordrandomize 无自变量初始化内部随机数产生器longintupcase字符型使小写英文字母变为大写字符型downcase字符型使小写英文字母变为大写字符型2.5运算符和表达式1。运算符和优先级(1)运算符是实型,如果全部的运算对象都是整型并且运算不是除法,则结果为整型,若运算是除法,则结果是实型a.算术运算符运算符运算运算对象结果类型+
20、加整型、实型只要有一个运算对象是实型,结果就-减整型、实型是实型,如果全部的运算对象都是整*乘整型、实型型并且运算不是除法,则结果为整型,/除整型、实型若运算是除法,则结果是实型。div整除整型整型mod取余整型整型b。逻辑运算符运算符运算运算对象结果类型not逻辑非布尔型布尔型and逻辑与布尔型布尔型or 逻辑或布尔型布尔型xor逻辑异或布尔型布尔型c。关系运算符运算符运算运算对象结果类型=等于简单类型布尔型 不等于简单类型布尔型小于简单类型布尔型大于简单类型布尔型,=,=,/,div,mod-+,1(2)布尔表达式:Turbo Pascal提供给布尔表达式以下基本操作:逻辑运算和关系运算.
21、 (3)数学上的表达式与pascal语言表达式的区别 数学表达式 PASCAL表达式 注意 2a 2*a *号不能省略 ab a/b 除号的写法 ab a9) or( 910) 2 and (3=3) or (3=0 then writeln(sqrt(a)); 对以上的例子,条件为假时不需处理,于是我们干脆省去ELSE分句.3、if语句可以多层嵌套。嵌套时为了避免误解,可以用begin ,end括起嵌套部分;else分句一般和最近的if分句配套:IF 条件 THEN BEGINif 条件1 then else ; ENDELSE BEGINif 条件2 then else ; end; 例1
22、、输入两个数a,b,输出较大的数。program tt;var a,b:integer;beginwrite(please input a,b:);readln(a,b);if ab then writeln(a)else writeln(b);end。 4.2 CASE语句 分情况语句适用于对一个条件的多种情况的响应。 格式:case 表达式 of标号1:语句1;标号2:语句2; 标号n:语句n;else 语句n+1end; case语句在使用时有几点要注意: 1. end与case对应;标号与语句之间用“:”分隔;else与语句之间不用分隔符。 2。 标号必须是一常量,其类型与表达式的类型
23、一致例2: 某全自动加油站a,b,c三种汽油的单价(元/kg)分别是1.50、1。35和1.18,也提供了“自己加”或“协助加两个服务等级,这样用户可以得到5%或10%的优惠。编一个程序,用户输入加油量、汽油品种和服务类型(f自动,m自己,e协助),然后计算应付款.program pcase1;varoil,help:char; kg,total:real;begin write(Enter the amount in kilograms(kg):); readln(kg); write(Which type of the gasoline(a,b,c):); readln(oil); wir
24、te(Which type for service(f,m,e):); readln(help); case oil of a: total:=1.50*kg; b: total:=1。35*kg; c: total:=1。18*kg; else writeln(Input Error!) end;-处理汽油的类型 case help of f:; m: total:=total(1-0.05); e: total:=total(1-0.10); else writeln(Input Error!) end;-处理服务类型 writeln; writeln(Total is ,total:10
25、:2);end.3. 可以多个标号对应同一条语句 4. 语句可以是多个语句,但必须用语句括号(beginend)括起 5. case语句也可以嵌套 例3:从键盘上读入年和月,输出该月有多少天。program pcase2;var year,month,day:integer; runnian:boolean;begin write(Enter year and month:); readln(year,month); case month of 1,3,5,7,8,10,12: day:=31; 4,6,9,11: day:=30;-以上处理31天和30天的情况 2:begin runnian
26、:=(year mod 400=0) or (year mod 4=0) and (year mod 1000); case runnian of true: day:=28; false: day:=29; end; end; -以上处理2月的情况:闰年28天,平年29天 end;end.第五章 循环结构程序设计5.1 For语句 1.递增型FOR循环。 FOR 循环控制变量:=循环初值 TO 循环终值 DO 循环的语句(或语段)例: FOR I:=5 TO 10 DO WRITELN (I);输出的结果为: 5 6 7 8 9 10 即循环一共执行了6次如果要重复多个语句,一定要用BEGINEND形式:例:FOR I:=1 TO 10 DOBEGINWRITELN (I);WRITELN (10I);END;2.递减型FOR循环 FOR 循环控制变量:=循环初值 DOWNTO 循环终值 DO 循环语句递减型FOR循环与递增型FOR循环基本相同,只是循环控制变量每次递减。3.FOR循环的几点注意内容:(1)循环控制变量必须是顺序类型的变量。所谓顺序类型的变量,就是指整型,字符型,枚举型,子界型,不允许是实型。(2)不允许在循环体内再对循环控制变量赋值。例如:A:=10;B:=50;FOR K:=A TO B DOB