关于全国奥林匹克计算机竞赛初中组

有了pascal7.0,第一章开始写pascal语言程序。

第2章Pascal语言的基础知识

第三章序列结构编程

第四章选择结构化程序设计。

第五章循环结构规划

仅此而已。1.1帕斯卡编辑环境

2.1帕斯卡字符和符号

1.标识符

(1)标识符的定义:标识符是以字母开头的字母数字序列,有效长度为63个字符,大小写相等。可用于标记常量、变量、程序、函数等。例如,在示例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,fun,GOTO,IF,IN,LABEL,MOD,NIL,NOT,OF,OR,PACKED,PROCEDURE,PROGRAM,RECORD,REPEAT,SET,THEN。

b标准标识符:指Pascal语言中预定义的标识符,具有特殊含义。

下面列出了Turbo Pascal语言中一些常用的标准表标识符:

标准常数False Maxint True

标准类型布尔字符实数整数

标准函数Abs Arctan Chr Cos Eof Eoln Exp

在奇数Ord Pred回合中

Sqrt成功中继c

标准过程Dispose Get New Pack Page Put Read

Readln复位重写解包写入写入

标准文件输入输出

C.自定义标识:根据自己的需求自行定义。

(1)所选标识符不能与保留字相同。

(2)语法上,预定义的标准标识符允许作为你自己定义的标识符,但最好不要使用。

下面列出了定义标识符时可以使用的字符:

a——Z;a——z;0——9;+,-,*,/,=,& lt& gt,& lt=,& gt=,& lt,& gt,(,),[,],{,},:=,,,;,.,:,..,',^

2.2帕斯卡数据类型

数据是编程的重要内容,它的重要特征——数据类型——决定了数据可以参与的形状、取值范围和运算。

Turbo Pascal提供了丰富的数据类型,分为简单类型、构造类型和指针类型三大类,其中简单类型又分为标准型(整型、实型、字符型和布尔型)和自定义型(枚举型和子边界型),构造型又分为数组型、集合型、记录型和文件型。除了指针类型是动态数据类型以外,这些数据类型都是静态数据类型。在这些数据类型中,简单类型都是有序类型,除了实型之外的简单类型都是有序类型。所谓有序型,是指它们的值不仅有序而且有序号。

本文主要介绍四种常用的数据类型:整型、实型、字符型和布尔型。

1.整数

整数数据用于存储整数。Turbo Pascal支持五种预定义的整数,分别是短整型、整型、长整型、字节型和字型。Turbo Pascal使用相同的名称作为它们的标识符。每种类型指定相应的整数值范围和占用的内存字节数。

以字节格式键入数值范围

Shortint-128...128 1有符号8位

因特尔-32768...32767 2有符号16位

Longint-2147483648...2147483647 4有符号32位

字节0..255 1有符号8位

单词0..65535 2有符号16位。

Turbo Pascal指定了两个预定义的整数常量标识符maxint和maxlonint,它们分别代表某些常量值。maxint是32767,longint是2147483647,它们的类型分别是Integer和longint。

2.实型

实数数据用于存储实数。Turbo Pascal支持五种预定义的实数类型,分别是real(基本实数类型)、single(但精确实数类型)、double(双精度实数类型)、extended(扩展实数类型)和comp(汇编实数类型)。Turbo Pascal分别使用相同的名称作为它们的标识符。每种类型都指定了相应的实数范围、占用的内存字节数以及它们可以达到的精度。

以字节表示的数值范围类型的有效位数

真实2.9e-39..1.7e38 6 11..12

单个1.5e-45..3.4e38 4 7..8

双5.0e-324..1.7e308 8 15..16

Turbo Pascal支持两种执行实际操作的代码生成模式:软件模拟模式和80x87浮点模式。除了real可以直接运行在软件仿真模式下,其他类型都必须运行在80x87浮点模式下。

3.布尔型

布尔数据用于存储逻辑值(布尔值)。布尔值只有两个:假和真,假的序号是0,真的序号是1。False和true是预定义的常量标识符,分别表示逻辑false和逻辑true。真实的

4.字符类型

Char用作字符类型的标识符。字符类型必须用单引号括起来。字母作为字符类型时,大小写不等价,字符类型只允许单引号中有一个字符,否则就是字符串。

2.3常量和变量

1.常数

(1)常数:在程序的整个运行过程中其值保持不变的量。

(2)常量定义:常量定义出现在描述部分。其语法格式为:

常数

& lt常量标识符> = & lt常数>;

...

& lt常量标识符> = & lt常数>;

常数标识符的类型由定义它的常数的类型决定。例如,const a=12暗示A是整数;Const r=3.21暗示R是实型。......

(3)常量定义部分必须以保留字const开头,可以包含一个或几个常量定义,每个常量以分号结尾。

(4)Turbo Pascal型常数

类型常量,也称为变量常量,是Turbo Pascal的一个扩展特性。类型常量的定义不同于标准Pascal规定的常量和变量的定义。类型常数定义的语法格式:

常数

& lt简单类型常量标识符>;:简单类型=常量;

例如:

常数

计数器:整数= 0;

标志:boolean = true

索引:0..100=0;

2.可变的

(1)变量:在程序运行过程中其值可以改变的量。

(2)变量描述:变量描述出现在描述部分。其语法格式为:

定义变量

& lt变量标识符列表>;:& lttype >;

...

& lt变量标识符列表>;:& lttype >;

其中,保留字var表示变量描述部分的开始。变量标识符列表是用逗号分隔的标识符序列,冒号后面的类型是类型标识符。每个变量描述都以分号结束。

例如:

定义变量

a、b、c:整数;

m,n:真实;

2.4标准功能

1.算术函数

函数标识符参数类型表示结果类型

Abs整数和实绝对值与自变量相同。

反正切整数

Cos整数,实余弦实数

指数整数,实数指数实数类型

Frac整数,实数小数部分实数

Int整数,实数整数,部分实数整数

整数,实数自然对数实数类型

Pi自变量pi实型

正弦整数,实数正弦实数

Sqr整数和实平方是同一个自变量。

Sqrt整数,实数平方根实数类型

例如:ABS(-4)= 4 ABS(-7.49)= 7.49 arctan(0)= 0.0。

sin(pi)= 0.0 cos(pi)=-1.0 frac(-3.71)=-0.71

int(-3.71)=-3.0 sqr(4)= 16 sqrt(4)= 2

2.标准函数

函数标识符参数类型表示结果类型

奇整数判断奇布尔类型

Pred离散型求前向收敛自变量

连续相同自变量的Succ离散型

例如:odd(1000)= false pred(2000)= 1999 succ(2000)= 2001。

odd(3)= true pred(' x ')= ' w succ(' x ')= ' y '

3.转移函数

函数标识符参数类型表示结果类型

对应于chr字节独立变量的字符类型

顺序离散型自变量对应序号长。

舍入实数舍入长度

Trunc实数截断整数长度

例如:chr(66)= ' b ' ord(' a ')= 65 round(-4.3)=-5 trunc(2.88)= 2。

4.杂项功能

函数标识符参数类型表示结果类型

Random没有自变量[0,1,随机实数为实数。

随机字[0,独立变量之间的随机整数]字

Randomize初始化没有参数的内部随机数生成器longint。

大写字符类型将小写英文字母转换为大写字符。

Downcase字符类型将小写英文字母更改为大写字符。

2.5运算符和表达式

65438+

(1)运算符

是实打实的类型。如果所有操作数都是整数,并且运算不是除法,则结果是整数。如果运算是除法,结果是实数类型。算术运算符

运算符运算操作数结果类型

+加整型,实型只要有一个操作数是实型,结果就是

-减法整数,实数类型是实数类型,如果所有操作数都是整数。

*整数相乘,实数类型且运算不是除法,则结果是整数。

/Divide integer,real type如果运算是除法,结果是real type。

Div整除整数整数

模整数整数

B.逻辑运算符

运算符运算操作数结果类型

非逻辑、非布尔、布尔

与逻辑和布尔布尔类型

或逻辑或布尔布尔

异或逻辑异或布尔布尔

C.关系运算符

运算符运算操作数结果类型

=等于简单类型布尔类型

& lt& gt不等于简单类型布尔类型

& lt布尔类型小于简单类型

& gt大于简单类型的布尔类型

& lt=小于或等于简单类型的布尔类型

& gt=大于或等于简单类型的布尔类型

(2)优先权

操作员优先级

不是1(高)

*、/、div、mod和2

异或、+、-或3

in,=,& lt& gt,& gt=,& lt=,& lt& gt4(低)

2.表示

(1)算术表达式:算术表达式是用算术运算符连接常数、变量和函数的公式。算术表达式中每个运算符的顺序是:()-& gt;功能-& gt;*,/,div,mod-& gt;+,1

(2)布尔表达式:Turbo Pascal为布尔表达式提供了以下基本运算:逻辑运算和关系运算。

(3)数学表达式和pascal语言表达式的区别

数学表达式帕斯卡表达式注意

2a 2*a *不能省略。

a \b a/b除法符号的书写

a≠b a & lt;& gtb不等式符号的书写

a≤b a & lt;=b小于或等于符号。

3.1赋值语句

PASCAL有两个可以改变变量值的语句。赋值语句是其中之一(另一个是read语句)。赋值,顾名思义就是给某个量赋值。可以理解为变量相当于事物的容器,赋值的过程就是把事物放入容器的过程。赋值语句的格式如下:

变量:=表达式;

写赋值语句有以下几点要注意:

1,分配号":= "

赋值号由两个字符组成,是一个运算符。如果把这两个字符分开,它们还有其他的含义:“:”是分隔符,“=”是关系运算符,决定两个对象是否相等。刚写完程序的同学要特别注意这一点。

例子:a,b:整数;-是一个声明。“:”是变量表和变量类型的分隔符。

a = b——这是一个表达式。它的值是布尔类型的量:真或假。

a:= 3;-是一个声明。将整数常量值3赋给整数变量a。

2.首先应该解释变量。

出现在赋值号左边的变量应该先在程序头的描述部解释,否则编译时会出错。

3.表达式必须有明确的值。

出现在赋值号右边的表达式必须是可求值的。也就是说,运算之后,可以得到一个具体明确的值。想想看,如果你连自己的价值都不知道,怎么把价值“给”给别人呢?

4.分配号两边的数据类型必须相同或兼容。

我们知道,PASCAL中的变量和常量都有一个属性叫做“数据类型”。只有那些具有相同或兼容数据类型的用户才能相互赋值。

这句话怎么理解?比如我们用小茶杯泡功夫茶,用饭碗盛饭。如果用饭碗泡功夫茶,用小杯子盛米饭,一定很搞笑,不可行。回到PASCAL,如果赋值号左边的变量是整数,那么右边表达式的值也应该是整数;如果赋值号左边的变量是字符类型,那么右边表达式的值类型也应该是字符类型...否则,将会出现错误。这是数据类型相同的情况。

对于数据类型兼容性,我们也可以用一个例子来帮助理解。我们都喝过功夫茶和一大杯茶。把功夫茶倒在大茶杯里,一般没有问题;但是如果把大杯的茶倒进功夫杯呢?可能小杯装不下大杯里的茶,茶就“溢出”了。在PASCAL中也会出现这种情况。当一种数据类型的值范围包含另一种数据类型的值范围时,可能会出现类型兼容。实数类型和整数类型、整数类型、字符类型以及它们各自的子边界类型...如果把整数值赋给实变量,把整数子界值赋给整型变量,就不会出错;但如果反过来,就会出现“溢出”,就会出错。

所以在写赋值语句的时候,要注意两边的类型是否匹配。

示例:有如下步骤:

var a,b:整数;c:真实;d:0..100;

开始

a:= 100;

b:= a;

{ -上述值被赋予相同的数据类型}

d:= 100;

b:= d;

c:= b;

{ -

d:= b;

a:= c;

{ -上面两条赋值语句都溢出了,编译时出错。}

结束。

3.2阅读陈述

read语句和赋值语句一样,可以改变变量的值。与赋值语句不同,读语句从键盘或文件中接收值来给变量赋值,而赋值语句是直接从程序语句中获取的。阅读声明的格式如下:

Read(变量名列表);

Readln(变量名表);

readln

Reading语句是编程中最常用的语句之一。使用时有几点需要注意:

1,变量列表。写在括号里的变量要在变量描述里提前说明;变量之间用“,”分隔;

示例:

var a,b:整数;

读(a,b);

2.从键盘接收数据时,要注意不同数据类型数据的分隔符不同。所谓分隔符,就是两个完整数值之间的标记。也可以理解为,计算机从键盘读取数据时,一旦遇到分隔符,就认为当前数据读取完毕,可以赋给相应的变量。各种数据类型的分隔符如下:

数值类型(包括整数类型、实数类型及其子边界类型)以空格或回车符作为分隔符;

字符型不需要分隔符(因为字符型数据的长度是固定的,只有一个);

字符串由回车符分隔。

3.注意read和readln的区别。

示例:有两个程序具有相同的变量,如下所示。我们可以通过比较read和readln对于不同read语句的执行结果的异同,来了解两者的区别。

变量描述var a,b,c,d:整数;执行结果

a b c d

程序段1读作(a);

readln(b,c);

改为(d);

1 2 3 6

程序段2 readln(a);

读作(b,c);

阅读(d) 1 6 7 8

输入数据1 2 3 4 5

6 7 8

当程序段被执行时,“读(a);”语句接收第一个数据1,并将其赋给变量a;然后执行第二条语句“readln(b,c);”,接收第一行数据中的2和3,分别赋给变量b和c。与此同时,这个银行里的其他所有数据都被屏蔽了,也就是被宣布无效。程序段2的实施也是如此。

所以我们可以得出一个结论,read只接收数据的语句,在readln语句接收到数据后,也声明了其他所有对等体的数据无效。

4、“阅读”语句从键盘接收回车。这种说法通常用在需要停顿的地方。比如输出的时候,用来等程序员看清楚结果。

3.3写一份声明

Write语句是Pascal中唯一能发出运算结果并显示在显示屏上的语句。格式如下:

写(输出刻度);{输出后不换行}

Writeln(输出规模);{输出后换行}

writeln{输出回车符}

使用写语句也有一些小问题需要注意。

1,输出可以是:

可变。输出变量的值。输出多个变量时,变量之间用“,”分隔。

表情。输出是表达式的值。

不变。直接输出常量值。

2.字段宽度限制在以不同格式输出数值时的作用:

示例1:输出多个空格。

写(':n);句子的意思是输出冒号前的数据项,宽度为n个字符。如果数据项的长度小于n,前面用空格填充;如果数据项的长度大于n,则以实际长度输出。如上输出n个空格。

示例2:数据项间隔。

比如最多输出四位数据:write(x:5)。数据之间至少有一个空格。

例3:实际数据小数位数的确定。

当真实数据没有格式限制时,以科学计数的形式输出,与我们一般的书写习惯不同。如果字段宽度有限,它会产生不同的效果:

var a:真实;

开始

a:= 15/8;

writeln(a);{输出1.875000000e+00}

wiiteln(甲:0:2);{输出1.88的整数部分按实际位数输出,小数部分保留两位小数,最后一位四舍五入。}

Writeln(a:0:0):{ Output 2只输出整数部分,小数部分四舍五入}

结束。

3、“书面”语句通常用于在输出多组数据时,通过在屏幕上输出空行来分隔数据组。

4.1 IF语句

条件语句用于响应条件的两个方面。

比如今天下雨,我们就在家;否则(不会下雨),我们就去旅游。

再比如:如果已经得到搜索结果,就把答案打印出来;否则(还没有结果),继续搜索。

IF语句的一般格式是:

IF条件

THEN语句1{条件为真时的响应和处理}

ELSE语句2;{条件为假时的响应和处理}

使用条件语句时要注意:

1.条件语句是一种语句。IF、THEN和ELSE都是语句的一部分。所以它只能有一个“;”作为分隔符,放在句末,尤其是ELSE之前。

2.如果我们的程序只需要处理条件为真的情况,而不需要处理条件为假的情况,那么IF语句省略ELSE子句,格式变成:

IF条件

然后语句1;{条件为真时的响应和处理}

例如,如果数字a大于或等于0,则输出它的平方根。

如果a & gt=0然后writeln(sqrt(a));

对于上面的例子,当条件为假时,我们不需要处理它,所以我们简单地省去ELSE子句。

3.if语句可以嵌套在多个层中。为了避免嵌套时产生误解,可以用begin、end end将嵌套部分括起来;Else子句通常与最近的if子句匹配:

IF条件

那么开始吧

如果条件1,则...其他...;

结束

否则开始

如果条件2,则...其他...;

结束;

示例1。输入A和B两个数,输出较大的数。

tt计划;

var a,b:整数;

开始

写('请输入a,b:');

readln(a,b);

如果a & gt然后写下(a)

else writeln(b);

结束。

4.2案例陈述

情况陈述适用于响应一个条件的多种情况。

格式:

的格表达式

参考号1:语句1;

2号:陈述2;

……

参考号n:语句n;

Else语句n+1

结束;

使用case语句时有几点需要注意:

1.end对应case标签和句子用“:”隔开;else和语句之间没有分隔符。

2.标签必须是与表达式类型相同的常数。

例2:某自动加油站A、B、C汽油单价(元/公斤)分别为1.50、1.35、1.65、438+08,还提供“自加”或“辅助”两种服务等级,用户可得5%或65438。写个程序,用户输入油量,汽油品种,服务类型(f-自动,m-自助,e-辅助),然后计算应付。

程序PCA se 1;

定义变量

油,助:炭;

kg,合计:实;

开始

写('输入以公斤(kg)为单位的数量):');readln(千克);

写('哪种汽油(a、b、c):');readln(油);

wirte('哪种类型的服务(f,m,e):');readln(帮助);

的外壳油

' a ':合计:= 1.50 * kg;

b ':合计:= 1.35 * kg;

' c ':合计:= 1.18 * kg;

else writeln('输入错误!')

结束;

{——————待处理的汽油种类}

案例帮助

f ':

' m ':合计:=合计*(1-0.05);

e ':合计:=合计*(1-0.10);

else writeln('输入错误!')

结束;

{———————办理服务类型}

writeln

writeln('合计为',合计:10:2);

结束。

3.多个标签可以对应同一个句子。

4.语句可以是多条语句,但必须用语句括号括起来(begin...结束)。

5.case语句也可以嵌套。

例3:从键盘读取年和月,输出一个月有多少天。

程序pcase2

定义变量

年、月、日:整数;

runnian:布尔型;

开始

写('输入年份和月份:');readln(年、月);

案例月份

1,3,5,7,8,10,12:日:= 31;

4,6,9,11:日:= 30;{—————处理31天及以上30天的情况}

2:开始

runnian:=(年模400=0)或((年模4=0)和(年模100 & lt;& gt0));

案例运行年份

true:day:= 28;

false:day:= 29;

结束;

结束;{————以上处理的是2月的情况:闰年28天,平年29天}

结束;

结束。