您现在的位置: 桂林德智外国语学校 >> 本校特色 >> 信息中心 >> 信息奥赛 >> 文章正文
专题栏目
更多内容
最新推荐 更多内容
相关文章
没有相关文章
更多内容
2005-2006上学期信息学奥赛培训教案         ★★★
2005-2006上学期信息学奥赛培训教案
作者:黎萍 文章来源:本站原创 点击数: 更新时间:2007-7-3 9:13:06

第一讲 Pascal语言概述与预备知识

1、关于Turbo Pascal
  Pascal是一种计算机通用的高级程序设计语言。它由瑞士Niklaus Wirth教授于六十年代末设计并创立。
  以法国数学家命名的Pascal语言现已成为使用最广泛的基于DOS的语言之一,其主要特点有:严格的结构化形式;丰富完备的数据类型;运行效率高;查错能力强。
  正因为上述特点,Pascal语言可以被方便地用于描述各种算法与数据结构。尤其是对于程序设计的初学者,Pascal语言有益于培养良好的程序设计风格和习惯。IOI(国际奥林匹克信息学竞赛)Pascal语言作为三种程序设计语言之一, NOI(全国奥林匹克信息学竞赛)Pascal语言定为唯一提倡的程序设计语言,在大学中Pascal语言也常常被用作学习数据结构与算法的教学语言。
  在Pascal问世以来的三十余年间,先后产生了适合于不同机型的各种各样版本。其中影响最大的莫过于Turbo Pascal系列软件。它是由美国Borland公司设计、研制的一种适用于微机的Pascal编译系统。该编译系统由1983年推出1.0版本发展到1992年推出的7.0版本,其版本不断更新,而功能更趋完善。
  下面列出Turbo Pascal的编年史:

年代

版本名称

主要特色

1983

Turbo Pascal 1.0

 

 

Turbo Pascal 2.0

 

 

Turbo-87 Pascal

提高实数运算速度并扩大值域

1985

Turbo Pascal 3.0

增加图形功能

 

Turbo BCD Pascal

特别适合应用于商业

1987

Turbo Pascal 4.0

提供集成开发环境(IDE),引入单元概念

1988

Turbo Pascal 5.0

增加调试功能

1989

Turbo Pascal 5.5

支持面向对象的程序设计(OPP)

1990

Turbo Pascal 6.0

提供面向对象的应用框架和库(Turbo Vision)

1992

Turbo Pascal 7.0

面向对象的应用系统、更完善的IDE

 

 

Turbo Vision 2.0

1993

Borland Pascal 7.0

开发 Object Windows

 

(For Windows)

提供对OLE多媒体应用开发的支持

1995

Delphi

Visual Pascal


  Turbo Pascal语言是编译型程序语言,它提供了一个集成环境的工作系统,集编辑、编译、运行、调试等多功能于一体。

2. Pascal 的启动
 Pascal
的启动
  a.DOS下的启动(适用于MS-DOS6.22之前的版本或Win9X & Win2000 Command Mode)
  DOS环境,在装有Turbo Pascal的文件目录下,键入turbo即可进入Turbo Pascal集成环境。
  b.Win9XWin2000模式下的启动(适用于Turbo Pascal 3.0以后的版本)
  如果在Win9XWin2000资源管理器装有Turbo Pascal的目录中,双击turbo.exe或在开始--程序菜单中通过MS-DOS方式来运行turbo.exe,它会提示你该程序设置为MS-DOS方式下运行,并且其它程序运行时,无法运行它。如果选择继续所有其它程序将关闭,所以在Win9XWin2000下无法直接运行它,这时你可以在你希望的地方(比如说桌面上)单击鼠标右键新建--快捷方式,单击浏览,找到turbo.exed选中,然后单击打开,再单击下一步,再单击完成;这还没完,选中前面新建的快捷方式(应该叫Turbo Pascal),单击右键,单击属性,选择程序,然后再单击高级,把“MS-DOS方式前面的那个勾去掉,也就是不要选“MS-DOS方式,然后单击确定,再单击确定就大功告成了,以后你运行Turbo Pascal的时候,只要双击那个你建立起的快捷方式就可以直接在Win9XWin2000下运行Turbo Pascal

3 Pascal编辑环境
  

   1.下载Turbo Pascal6.0

       (1)下载turbo pascal

       (2)属性设置

    2.Turbo Pascal 6.0环境介绍

       (1)进入与退出(注意:退出时必须使用文件菜单中的退出命令或Alt+X)

       (2)编辑程序

          光标移动键的使用

          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+F7

 

        

4、简单Pascal程序的结构
  例1下列是一Pascal源程序:

 

 program lt1;{程序首部}
  var         {说明部分}
   a,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.

 

作业:

1.
熟悉Pascal编辑环境.
2.
记住快捷键的使用
.
3.
编写78*67的值的Pascal程序并运行.

第二讲: Pascal语言基础知识

2.1 Pascal字符与符号
  
  1.标识符
  (1) 标识符的定义:标识符就是以字母开头的字母数字序列,有效长度为63个字符,并且大小写等效。可以用来标示常量、变量、程序、函数等。例如例1.1中的Area(程序名)pi(符号常量)sr(变量名)都是标识符。
  (2) 标识符的分类:

   a.保留字(关键字)
  所谓保留字是指在Pascal语言中具有特定的含义,你必须了解它的含义,以便于正确的使用,否则会造成错误。标准Pascal语言中的保留字一共有35个,Turbo Pascal语言一共有51个。下面是Pascal语言的保留字
:
  ANDARRAYBEGINCASECONSTDIVDODOWNTOELSEENDFILEFORFUNTIONGOTOIFINLABELMODNILNOTOFORPACKEDPROCEDUREPROGRAMRECORDREPEATSETTHENTOTYPEUNTILVARWHILEWITH

  b.标准标识符:指Pascal语言预先定义的标识符,具有特殊含义。
  以下列举了Turbo Pascal语言部分常用的标准表识符:
标准常量 False  Maxint True
标准类型 Boolean Char  Real  
Integer
标准函数 Abs   Arctan Chr   Cos   Eof  Eoln  
Exp
     Ln    Odd   Ord   Pred   Round Sin  
Sqr
     Sqrt   Succ  
Trunc
标准过程 Dispose Get   New   Pack   Page  Put  
Read
     Readln  Reset  Rewrite Unpack  Write 
Writeln
标准文件 Input  Output

   c.用户自定义标识符:由你自己根据需要来定义。
  (1)选用的标识符不能和保留字相同。
  (2)语法上允许预定义的标准标识符作为你自己定义的标识符使用,但最好还是不要用。
  以下列举了你自己在定义标识符时可以用的字符:
  A——Za——z0——9+-*/=<><=>=<>()[]{}:=,,,;,.,:,..'^

2.2 Pascal数据类型
  数据是程序设计的一个重要内容,其重要特征----数据类型,确定了该数据的形、取值范围以及所能参与的运算。
  Turbo Pascal 提供了丰富的数据类型,这些数据类型可以分为三大类:简单类型、构造类型和指针类型,其中简单类型可以分为标准类型(整型、实型、字符型和布尔型)和自定义类型(枚举型和子界型),构造类型可以分为数组类型、集合类型、记录类型和文件类型。这些数据类型中除了指针类型是动态数据类型外,其他的都是静态数据类型。在这些数据类型中的简单类型都是有序类型,除了实型以外的简单类型都是顺序类型,所谓顺序类型就是他们的值不仅是有序的而且是有顺序号。
  在这里主要介绍整型、实型、字符型和布尔型四种常用的数据类型。
  1.整型
  一个整型数据用来存放整数。Turbo Pascal支持五种预定义整型,它们是shortint(短整型)、 integer(整型)、 longint(长整型)、 byte(字节型)和 word(字类型),Turbo Pascal分别用相同的名字作为他们的标识符。每一种类型规定了相应的整数取值范围以及所占用的内存字节数。
  类型     数值范围    占字节数  格式
 shortint   -128..128      1      带符号8
 inteter   -32768..32767      2     带符号16
 longint -2147483648..2147483647   4     带符号32
 byte      0..255       1    带符号8
 word     0..65535       2    带符号16
  Turbo Pascal规定了两个预定义整型常量标识符maxintmaxlonint,他们各表示确定的常数值,maxint32767 longint2147483647,他们的类型分别是integer longint
  2.实型

  一个实型数据用来存放实数。Turbo Pascal支持五种预定义实型,它们是real(基本实型)、 single(但精度实型)、double(双精度实型)、extended(扩展实型)、comp(装配实型),Turbo Pascal分别用相同的名字作为他们的标识符。每一种类型规定了相应的实数取值范围、所占用的内存字节数以及它们所能达到的精度
  类型     数值范围    占字节数 有效位数
 real    2.9e-39..1.7e38    6   11..12
 single   1.5e-45..3.4e38    4   
7..8
 double   5.0e-324..1.7e308   8   
15..16
 

  Turbo Pascal支持两种用于执行实型运算的代码生成模式:软件仿真模式和80x87浮点模式。除了real可以在软件仿真模式下直接运行以外,其他类型必须在80x87浮点模式下运行。
  3.布尔型
  一个布尔型数据用来存放逻辑值(布尔值)。布尔型的值只有两个:falsetrue,并且false的序号是0true的序号是1false true都是预定义常数标识符,分别表示逻辑假和逻辑真。并且true<falseboolean是布尔型的标识符。
  4.字符型
  字符型用char作为标识符。字符型必须用单引号括起来,字母作为字符型时,大小写是不等价的,并且字符型只允许单引号中有一个字符,否则就是字符串。

2.3 常量与变量
  1.常量
  (1)常量:在某个程序的整个过程中其值不变的量。
  (2)常量定义:常量定义出现在说明部分。它的语法格式是:
const
<
常量标识符>=<常量>;
...
<
常量标识符>=<常量
>;
  常量标识符的类型由定义它的常量的类型决定。例如:const a=12 隐含说明a是整型;const r=3.21 隐含说明r是实型
......
  (3)常量定义部分必须以保留字const开头,可以包含一个或几个常量定义,而且每个常量均以分号结束。

  (4)Turbo Pascal类型常量
  类型常量,又称变量常数,它是Turbo Pascal的一个扩充特性。类型常量的定义与标准Pascal规定的常数定义和变量说明有所区别。类型常量定义的语法格式:
const
<
简单类型常量标识符>:简单类型=常数;
  例如:
const
counter:integer=0;
flag:boolean=true;
index:0..100=0;

  2.变量
  (1)变量:在某个程序中的运行过程中其值可以发生改变的量
  (2)变量说明:变量说明出现在说明部分。它的语法格式是:
var
<
变量标识符列表>:<类型>;
...
<
变量标识符列表>:<类型
>;
  其中,保留字var表示开始一个变量说明部分。变量标识符列表是一个用逗号隔开的标识符序列,冒号后面的类型是类型标识符。每个变量说明均以分号结束。

  例如:
var
a,b,c:integer;
m,n:real;

2.4 标准函数
  1.算术函数
 函数标识符  自变量类型    意义     结果类型
  abs    整型、实型    绝对值    同自变量
  arctan   整型、实型    反正切    实型
  cos    整型、实型    余弦     实型
  exp    整型、实型    指数     实型
  frac    整型、实型    小数部分   实型
  int    整型、实型    整数部分   实型
  ln     整型、实型    自然对数   实型
  pi     无自变量     圆周率    实型
  sin    整型、实型    正弦     实型
  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.标准函数
 函数标识符  自变量类型   意义     结果类型
  odd     整型     判断奇数    布尔型
  pred    离散类型   求前趋     同自变量
  succ    离散类型   求后继     同自变量
  例:odd(1000)=false  pred(2000)=1999  succ(2000)=2001
    odd(3)=true    pred('x')='w    succ('x')='y'

  3.转换函数
 函数标识符  自变量类型   意义      结果类型
  chr     byte   自变量对应的字符  字符型
  ord     离散类型 自变量对应的序号  longint
  round    实型   四舍五入      
longint
  trunc    实型   截断取整      
longint
  例:chr(66)='B' ord('A')=65 round(-4.3)=-5  trunc(2.88)=2

  4.杂类函数
 函数标识符  自变量类型   意义       结果类型
  random   无自变量  [0,1间的随机实数   real
  random   word   [0,自变量间的随机整数) 
word
  randomize  无自变量 初始化内部随机数产生器 
longint
  upcase   字符型  使小写英文字母变为大写 字符型

  downcase  字符型  使小写英文字母变为大写 字符型

2.5 运算符和表达式
  1.运算符和优先级
  (1)运算符
是实型,如果全部的运算对象都是整型并且运算不是除法,则结果为整型,若运算是除法,则结果是实型  a.算术运算符
 运算符  运算  运算对象       结果类型
  +    加  整型、实型  只要有一个运算对象是实型,结果就
  -    减  整型、实型  是实型,如果全部的运算对象都是整
  *    乘  整型、实型  型并且运算不是除法,则结果为整型,
  /    除  整型、实型  若运算是除法,则结果是实型。
  div  整除  整型         整型
  mod  取余  整型         整型

  b.逻辑运算符
 运算符   运算    运算对象    结果类型
  not   逻辑非    布尔型     布尔型
  and   逻辑与    布尔型     布尔型
  or    逻辑或    布尔型     布尔型
  xor   逻辑异或   布尔型     布尔型

  c.关系运算符
 运算符   运算    运算对象    结果类型
  =    等于    简单类型     布尔型
  <>    不等于   简单类型     布尔型
  <    小于    简单类型     布尔型
  >    大于    简单类型     布尔型
  <=    小于等于  简单类型     布尔型
  >=    大于等于  简单类型     布尔型

  (2)优先级
 运算符        优先级
  not         1()
*,/,div,mod,and
     
2
xor,+,-,or
       
3
in
,=,<>,>=,<=,<>
    4()

  2.表达式
  (1)算术表达式:算术表达式是由算术运算符连接常量、变量、函数的式子。算术表达式中各个运算符的次序为: ( )-->函数-->*,/,div,mod-->+,1
  (2)布尔表达式:Turbo Pascal提供给布尔表达式以下基本操作:逻辑运算和关系运算。

  3)数学上的表达式与pascal语言表达式的区别


   
数学表达式       PASCAL表达式            注意
    2a                   2*a                    *
号不能省略
    a÷b                 a/b                     
除号的写法
    a≠b                 a<>b                 
不等号的写法
    a≤b                 a<=b                 
小于等于号的写法
  
  

思考与练习:
  
  1、熟记Pascal的保留字和标准标识符,明确自定义标识符的定义要点。
  2、取整函数int与截断取整函数trunc有什么区别?举例说明。
     3、判断以下标识符的合法性:
        a3    3a    a17     abcd    ex9.5    α    β     λ
    5
、将下列的数学表达式改写成PASCAL表达式:
      b^2-4ac     
    6
、求下列表达式的值:
         20 mod 19     15 mod 9     7 div 8      19 div 3
        (4>5)   and   (7<8)
        (8>9)   or ( 9<10)
         2   and   ((3=3)   or  (3<7))

 

第三讲:第三章 顺序结构程序设计

3.1 赋值语句
 PASCAL有两个语句可以改变变量的值。赋值语句是其中之一(另一个是读语句)。赋值,顾名思义,就是把一个值赋予某个量。可以这理解:变量相当于装东西的容器,赋值的过程就是把东西放进容器的过程。赋值语句格式如下:
    
变量:=表达式;
    
写赋值语句有以下几点要注意:
    1
、赋值号=”
    
赋值号由两个字符构成,是一个运算符。如果把这两个字符拆开,那么这两个字符就是别的意思了:是分隔符而“=”是关系运算符,判定两个对象是否相等。刚刚写程序的同学要特别注意这一点。
    
例:abinteger——是一个说明语句。是变量表和变量类型的分隔符
        a=b——
是一个表达式。它的值是一个布尔类型的量:TRUEFALSE
        a
=3——是一个语句。把整型常量值3赋给整型变量a
    2
、变量要先说明
在赋值号左边出现的变量,要在程序头的说明部先加以说明,否则编译时出错。

    3
、表达式必须要有确定的值
    
赋值号右边出现的表达式,必须是可以求值的。也就是说,经过运算之后,能得出一个具体的、确定的值出来。大家想一想,如果连表达式自己都不知道自己的值是多少,怎么还能把值赋予别人呢?

     4
、赋值号两边的数据类型必须相同或相容
我们知道,PASCAL中的量不管是变量还是常量都有一个属性称为数据类型。数据类型相同的或相容的才可以相互赋值。
    
怎么来理解这句话呢?打个比方,我们沏功夫茶用的是小茶杯,装饭时用饭碗。如果用饭碗来泡功夫茶,用小茶杯来装饭,那情形一定很滑稽而且是不可行的。回到PASCAL中来,赋值号左边变量如果是整型,右边表达式的值的类型也要是整型;赋值号左边变量如果是字符型,右边表达式的值的类型也要是字符型……否则的话,也要出错了。这是数据类型相同的情况。
    
对于数据类型相容的,我们也可以用一个例子来帮助理解。我们都喝过功夫茶,也喝过大杯茶。把功夫茶倒在大茶杯里,一般不会出什么问题;但如果把大杯里的茶倒在功夫茶杯里呢?可能小茶杯装不下大茶杯里的茶,茶溢出了。在PASCAL中也会出现这种情况。当一种数据类型的取值范围包含着另一种数据类型的取值范围时,就可能出现类型相容的情况。如实型与整型,整型、字符型与它们各自的子界类型……如果把整型值赋给实型变量,把整型子界值赋给整型变量,不会出错;但如果反过来,就会出现溢出,出错了。
    
因些,我们在写赋值语句时,要注意两边的类型是否匹配。
    
例:有程序如下:
var a
bintegercreald0..100
begin
      a
=100
      b
=a
      {-------------
以上是相同数据类型进行赋值}
      d
=100
      b
=d
      c
=b
      {-------------
以上是相容数据类型进行赋值}
      d
=b
      a
=c
      {-------------
以上两个赋值语句都出现溢出,编译时出错}
end.
 
3.2
 读语句
读语句(read语句)和赋值语句一样,能够改变变量的值。与赋值语句不同,读语句从键盘或文件接收值赋予变量,而赋值语句则直接由程序语句获得。读语句格式如下:
     read(
变量名表)
     readln(
变量名表)
     readln

    
读语句是编程中用得最多的语句之一。在使用时有几点要注意:

    1
、变量名表。写在括号中的变量,都要在变量说明中先预以说明;变量与变量之间,以“,”分隔;
例:
var a,b:integer;
read(a,b);
    2
、从键盘接收数据时,要注意各种不同数据类型数据的分隔符不同。所谓分隔符就是两个完整的数值之间的标记,也可以这样理解,当计算机从键盘读入数据时,一旦碰到分隔符,就认为当前的数据读入已完成,可以把它赋给相应的变量了。各种数据类型的分隔符如下:
    
数值型(包括整型、实型以及它们的子界类型)以空格或回车符作为分隔符;
    
字符型不需分隔符(因为字符型数据的长度固定,只有一个);
    
字符串以回车符作为分隔符。

    3
、注意readreadln的区别
    
例:有两段程序有相同的变量说明如下,不同的读语句,我们可以通过比较它们执行结果的异同来理解readreadln的区别。

变量说明

var a,b,c,d:integer

执行结果

a

b

c

d

程序段一

read(a);
readln(b,c);
read(d);

1

2

3

6

程序段二

readln(a);
read(b,c);
read(d)

1

6

7

8

输入数据

1 2 3 4 5
6 7 8

    在程序段一执行时,“read(a);”语句接收了第一个数据1并将它赋给变量a;接着执行第二个语句“readln(b,c);”,接收了第一行数据中的23并把它们分别赋给变量b,c,同时,把本行其它数据全部屏蔽掉,也就是宣布它们全部作废。程序段二的执行情况也是如此。
    
因此,我们可以得出结论:语句read只管接收数据,语句readln接收完数据后,还把同行的其它数据全部宣布作废。

4
“readln;”语句从键盘接收一个回车符。这个语句通常用在需要暂停的地方。如输出时用来等待程序员看清结果。

3.3 写语句
写(write)语句是Pascal中唯一能将运算结果送出显示在显示器屏幕的语句。格式如下:
write(
输出量表){输出后不换行}
writeln(
输出量表){输出后换行}
writeln
{输出一个回车符}
使用写语句时也有一些小问题需要注意。 

1
、输出量可以是:
变量。输出变量的值。输出多个变量时,变量间用“,”分隔。
表达式。输出的是表达式的值。
常量。直接输出常量值。 

2
、场宽的限制在输出不同格式的数值时的作用:
1:输出多个空格。
write(''
n);句子的意思是以n个字符宽度输出冒号前数据项,如果数据项长度不足n,则前面以空格补齐;如果数据项长度大于n,则以实际长度输出。如上语句句输出n个空格。 
2:数据项间隔。
如输出最多四位的数据:write(x:5)。则数据间至少分隔一个空格。 
3:实型数据小数位数的确定。 
实型数据不带格式限制时,以科学计数法的形式输出,和我们的一般书写习惯不同。如果加上场宽的限制,则可以有不同的效果:
var a:real;
begin
a:=15/8;
writeln(a);{
输出 1.8750000000E+00}
wiiteln(a:0:2);{
输出 1.88 整数部分按实际位数输出,小数部分保留两位小数,末位四舍五入.}
writeln(a:0:0):{
输出 2 只输出整数部分,小数部分四舍五入}
end.

3
“writeln;”语句通常用于输出多组数据时在屏幕上输出空行来分隔数据组。
 

思考与练习:
 

1、 用字符输出一个猪锦佳的头像。

2 a,b,c分别等于112123,把它们按向左对齐、向右对齐的方式打印出来。

3、 输入一个四位整数,把它的各位数字倒序输出。(提示:用MODDIV运算完成)

4、 从键盘上读入小写的"pascal",利用CHR()和ORD()函数,输出大写的"PASCAL"

5、 从键盘上读入一个实数,利用ROUND()和TRUNC()函数,输出该实数本身、整数部分、小数部分、四舍五入后的值。
要求:分三行输出 ;输出实数本身时,格式与读入时相同;整数部分、小数部分在同一行输出;其它各占一行。

6、 从键盘上读入长方形的边长a,b,计算它的面积和周长,输出。

7、 输入一个时、分、秒,把它转换为一个秒数。

 

 

第四讲:作业讲评

 

 

第五讲:作业讲评

 

文章录入:陈永恒    责任编辑:陈永恒 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)