中学信息学奥林匹克竞赛培训教程.docx

上传人:b****1 文档编号:13202890 上传时间:2023-06-12 格式:DOCX 页数:54 大小:116KB
下载 相关 举报
中学信息学奥林匹克竞赛培训教程.docx_第1页
第1页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第2页
第2页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第3页
第3页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第4页
第4页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第5页
第5页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第6页
第6页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第7页
第7页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第8页
第8页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第9页
第9页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第10页
第10页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第11页
第11页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第12页
第12页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第13页
第13页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第14页
第14页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第15页
第15页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第16页
第16页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第17页
第17页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第18页
第18页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第19页
第19页 / 共54页
中学信息学奥林匹克竞赛培训教程.docx_第20页
第20页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

中学信息学奥林匹克竞赛培训教程.docx

《中学信息学奥林匹克竞赛培训教程.docx》由会员分享,可在线阅读,更多相关《中学信息学奥林匹克竞赛培训教程.docx(54页珍藏版)》请在冰点文库上搜索。

中学信息学奥林匹克竞赛培训教程.docx

中学信息学奥林匹克竞赛培训教程

 

中学信息学奥林匹克竞赛培训教程

 

Pascal语言和程序设计根底

〔第一局部〕

 

第一局部Pascal语言和程序设计根底

预备知识

根本程序结构和几个概念:

标识符 保存字   常量 变量  运算符  表达式   标准数据类型

Pacal语言程序结构

Programprog_name;

var变量申明;

begin

程序体;

end.

例如:

programpname;

constn=4;

typearr=array[1..4]ofinteger;

vari:

integer;a:

arr;

begin

fori:

=1tondoread(a[i]);

readln;

fori:

=ndownto1dowrite(a[i]:

4);

writeln;

end.

以上是一个PASCAL程序。

从键盘读入4个数据,逆序输出。

一般来说,一个PASCAL程序包括以下几个局部:

程序头:

programpname; 其中,program是保存字,表示程序从这个地方开始,pname是标识符,是程序的名字,可由程序员自定。

保存字是PASCAL选定的,具有固定意义和用法的专用单词或缩写,这些单词不允许作其它使用。

如上,“program〞就有“程序从这里开始〞这样一种特别的意义,而“const〞就有“常量说明从这里开始〞的意义。

我们不能再用“program〞、“const〞来作为其它变量、常量等的名字。

标识符是以字母开头的字母数字串,其长度最大为8个字符。

用来表示常量、变量、类型、文件、过程、函数和程序的名字。

如“pname〞、“i〞、“j〞、“a1〞就是合法的标识符;但“1a〞、“#a〞是非法的标识符。

有一点要注意的是,在PASCAL中,字母除了作为字符值或字符串值之外,其大小写是无关的。

如标识符“A1〞和“a1〞在PASCLA看来是同一标识符。

在PASCAL中除了保存字和自定义的标识符外,还有一类有特殊含义的标识符,这类标识符称为标准标识符。

它们是用来标记程序中经常引用的处理对象,如常量、函数。

〔PASCAL定义的保存字和标准标识符附后〕

标识符在命名的时候要注意:

1、名字要易记易读,有意义。

如8皇后问题程序名可以是“queen〞也可以是“huanghou〞等;

2、不能用保存字、标准标识符作为自定义的标识符。

说明局部:

constn=4;

typear=array[1..4]ofinteger;

vari:

integer;a:

ar;

其中,const局部是常量说明,说明一些在以下局部用到的,在整个程序执行过程不改变值的量。

这些量PASCAL称为常量。

在程序中用到这个值的地方均用常量名来代替。

如上题中定义“n=4〞指本程序处理4个数值,在下面的程序体中就用“n〞来代替具体的值〔如fori:

=1ton〕。

如果要改变处理数据个数,那么只在常量说明局部修改“n=4〞这一句就行了,而不用在程序中每一个用到的地方都加以修改。

这样不但在编写程序的时候很方便,也增加了程序的可读性,修改时更方便。

常量说明在保存字“const〞下开始。

可以有多个语句。

常量说明语句的格式是:

“常量名=值;〞。

如“n=4;〞。

n是常量名,4是该常量的值,“;〞是语句分隔符。

type局部是类型说明,说明一些在以下局部用到的数据类型。

如数组、记录、指针等。

类型说明在保存字“type〞下开始。

可以有多个语句。

类型说明语句的格式是:

“类型名=类型说明;〞。

如“ar=array[1..4]ofinteger;〞。

ar是类型名,array[1..4]ofinteger是类型说明,“;〞是语句分隔符。

var局部是变量说明。

变量是指在程序执行过程中可以通过赋值语句或读语句来改变值的量。

所有在程序中使用的变量都应该先在变量说明局部说明。

PASCAL中引用的每个变量都有“名字〞和“类型〞属性。

变量说明“说明〞的主要工作是告诉PASCA下面程序中要用到这个名字的量,同时这个量的类型是什么。

变量说明在保存字“var〞下开始。

可以有多个语句。

变量说明语句的格式是:

“变量名:

变量类型;〞。

其中,如果有多个变量同一类型,那么变量名与变量名之间用逗号分隔,变量名与变量类型之间用冒号分隔。

如“i:

integer;〞〔i是变量名,integer是类型名〕、“i、j:

integer;〞〔i、j是变量名,integer是类型名〕……

变量说明要注意:

1、有效变量名称不能大于8个字符;2、变量名称必须以字母开头;3、在同一个有效范围内变量名称必须唯一。

各个说明局部均以该局部的保存字开始。

如“const〞开始常量说明;“type〞开始类型说明;“var〞开始变量说明。

一个程序包含多少种类型的说明,看需要而定,不是每一个程序都必须同时包含这三种说明。

如果程序不须要用到常量,那么常量说明局部可以省略;如果不须要用到类型说明,那么类型说明可省……

   PASCAL还有一条规那么:

先说明后引用。

即所有在程序体中用到的“名字〞必须都在说明局部说明过才能引用,否那么就会出错,通不过编译,也执行不了。

如上,类型“ar〞先在类型说明中定义,然后在变量说明中引用;变量i在变量说明中定义,在程序中引用。

程序体:

begin

fori:

=1tondo

read(a[i]);

readln;

fori:

=ndownto1do

write(a[i]:

4);

writeln;

end.

程序体是以begin  end.括起来的语句系列。

“end〞后面是一个小圆点,标识着程序结束,整个程序只有一个是一个程序的主要局部。

编程要完成的工作大局部都在这里完成。

程序体中每一语句均以“;〞作为结束符。

在书写程序时,以“分层缩进〞的风格来写,以便提高程序的可读性。

所谓的“分层缩进〞是指在逻辑上同一级的语句其起始点对齐,下一级的语句向右缩进。

运算符 表达式

PASCAL中的运算符有算术运算符和关系运算符。

和我们在数学课中学的根本一样但在写法上有些不同,在写程序时要特别注意写法的不同:

   +加号;-减号;*乘号(数学中写为×);/除号(数学中写为÷);MOD 取余 如:

8MOD2=0,7MOD2=1,2MOD3=2;DIV 取整 如:

8DIV2=4,7DIV2=3,2DIV3=0。

在PASCAL只有上面6种数学运算。

其它的就只能利用这6种运算的组合通过语句来实现。

如a^2〔a的平方〕可以化成a*a。

> 大于;< 小于;<>不等于(数学中写为≠);<=小于等于(数学中写为≤);>=大于等于(数学中写为≥),

变量、常量通过运算符连接起来的式子我们称为表达式。

一个单独的变量或常量也是表达式。

如a、a+3、a*3+b都是表达式。

写表达式时要注意PASCAL表达式跟我们已经熟悉的数学表达式在格式上的区别:

数学表达式

PASCAL表达式

注意

2a

2*a

*号不能省略

a÷b

a/b

除号的写法

a≠b

a<>b

不等号的写法

a≤b

a<=b

小于等于号的写法

标准数据类型:

整型 实型 字符型 布尔型

   数据类型可以理解为一个取值范围和定义在这取值范围上的运算规那么。

想一想我们对于数的理解:

小学学自然数,范围是从0开始,那时候不知道有小数,也不知道有负数,允许的运算是+、-、×、÷,而且对于减法规定被减数要大于减数。

到了中学,数的范围扩大了,整数包括正数和负数,减法运算也不再有额外的规定的了。

同理,在PASCAL中“数据类型〞也是一个取值范围和在它上面定义的运算规那么。

PASCAL中定义好的标准数据类型一共有4个:

整型、实型、字符型、布尔型,分别用保存字integer、real、char、boolean来标记它们。

其取值范围和运算如下:

   整型(integer):

范围 -32768——32767;运算 + - * / mod div

   实型(real):

范围 运算 + - * /

字符型(char):

范围 可显示的ASCII字符

布尔型(boolean):

范围 true false 运算 and or not

在PASCAL中可使用的根本符号有:

   〔1〕大写字母A—Z;小写字母a—z ;数字0—9

   〔2〕其它字符+ — * / = > <  >=   <=  <> :

=

〔 〕[ ].,:

‘ $^〔* *〕{ }

其中,有些符号是以双字符作为一个整体,拆开后就失去原有的意义。

如“<>〞是一个表示“不等于〞的关系运算符,如拆开后就变成了两个关系运算符,分别表示“小于〞、“大于〞。

PASCAL使用的保存字有:

AND、ARRAY、BEGIN、CASE、CONST、DIV、DO、DOWNTO、ELSE、END、FILE、FOR、FUNCTION、GOTO 、IF、IN、LABEL、MOD、NIL、NOT、OF、PACKED、PROCEDURE、PROGRAM、RECORD、REPEAT、SET、THEN、TO、TYPE、UNTIL、VAR、WHILE、WITH、FORWARD

常用的标准标识符有:

   标准常量:

FALSE TRUE MAXINT MAXLONGINT

   标准类型:

INTEGER BOOLEAN REAL CHAR TEXT

   标准文件:

INPUT OUTPUT

   标准函数:

ABS ACTAN CHR COS EOF ELON  EXP LN ODD

             ORD  PRED ROUND SIN SQR SQRT SUCC TRUNC

   标准过程:

ASSIGN GET NEW DISPOSE PACK  PUT READ

             READLN  RESET REWRITE UNPACK WRITE WRITELN

函数格式:

functionfun_name(参数表):

数据类型;

var变量声明;

begin

函数体;

end;

例题:

写出计算两个整数a,b的和函数add(a,b)。

过程格式:

procedureproc_name(参数表);

var变量声明;

begin

过程体;

end;

例题:

写出在屏幕打印一行文字:

〞hello,Pascallanguageisveryeasy!

函数和过程的调用:

例题:

从键盘输入:

a,b两个数,输出由这两个数为直角边的三角形的面积。

【】

programxoi00_01;

functionarea(consta,b:

real):

real;

vars:

real;

begin

s:

=a*b/2.0;

area:

=s;

end;

proceduremyproc;

vara,b:

real;

s:

real;

begin

write('Pleaseinputtwonumbera,b:

');

readln(a,b);

s:

=area(a,b);

writeln('theareaoftrianis:

',s:

5:

2);

end;

{=============mainprogram================}

begin

myproc;

end.

练习:

一、判断以下标识符的合法性:

a33aa17abcdex9.5αβλ

二、将以下的数学表达式改写成PASCAL表达式:

b^2-4ac

三、求以下表达式的值:

20mod19,一五mod9,7div8,19div3,(4>5)and(7<8),(8>9)or(9<10),2and((3=3)or(3<7))

第一节顺序结构

操作一

操作二

顺序结构是程序设计中最简单的结构,也是最根本的结构,它就是按照程序书写的顺序逐句执行程序中的指令。

流程图如下:

例题:

计算圆的周长的过程:

输入圆的半径;〔操作一〕

计算圆的周长;〔操作二〕

输出圆的周长;〔操作三〕

根本的程序语句:

赋值语句:

赋值语句是最简单的语句,其一般形式为:

<变量>:

=<表达式>;

“:

=〞称为赋值号,赋值语句的作用是计算表达式的值,并赋给变量。

对于任何一个变量必须首先赋值,然后才能引用,否那么,未赋初值的变量将以一个随机值参与运算。

另外,赋值号两边的类型必须相同,但表达式值为整数时,它可自动化为实型后赋给该实型变量,即符合赋值相容。

如:

Pi:

=3.14;R:

=2;Age:

=20;S:

=Pi*R*R

例:

关于赋值的例子

prssogramexample;

vara,b:

integer;

begin

a:

=3;

b:

=2;

a:

=a+b;

writeln(a);

writeln(b);

end.

输入语句

通过计算机的外设把数据送到计算机内存的过程称为输入。

TurboPascal语言的输入语句有如下两种形式:

read(<变量名表>);

readln(<变量名表>);

<变量名表>是一个或几个由逗号隔开的变量标识符,他们必须在程序说明局部预先说明,他们可以是整型、实型或字符型,布尔型不可以直接读入。

例如a,b,c为整型变量,read(a,b,c)之后,键盘输入:

203040表示回车),结果:

 a=20,b=30,c=40

readln语句和read语句不同之处在于输入数据到各变量之后,readln自动换行,从下一行开始再输入数据。

一个read语句执行完后,数据行中多余的未读数据可以被下一个输入语句读入;而一个readln于执行完后,数据行中多余未读数据就没有用了。

readln语句中可以不包含变量名表。

即有以下等价情况:

read(a,b);readln等价于readln(a,b)

输入语句输入的数据类型必须和变量一一对应。

如果输入的是一串整数或实数,数据间用空格或回车分隔;假设输入的是一串字符,那么不用分隔。

输出语句

输出是将内存中的数据送到外设的过程。

TurboPascal的输出语句有两种形式:

write(<输出项表>);

writeln(<输出项表>);

其中<输出项表>是一串用逗号分隔的常量、变量、函数名、表达式或字符串。

如果是变量、函数名、表达式,那么将其计算结果输出;如果是常量或字符串,那么直接输出其值。

write和writeln的区别在于:

write语句是输出项输出后,不换行,光标停留在最后一项后,writeln语句按项输出后,自动换行,光标那么停留在下一行的开始位置。

writeln语句允许不含有输出项,即仅writeln;表示换行。

TurboPascal语言把输出项的数据显示占用的宽度称为域宽,你可以根据输出格式的要求在输出语句中自动定义每个输出项的宽度。

定义宽度时分为单域宽和双域宽。

单域宽输出格式:

writeln(I:

n);

在n个字符宽的输出域上按右对齐方式输出I的值,假设n大于I的实际位数,那么在I值前面补(n-I的实际位数)个空格。

假设I的实际位数大于n,那么自动突破限制。

n必须是整数。

双域宽输出格式:

writeln(a:

n:

m);

双域宽主要用于实型数据的输出。

n的用法同上。

在n个字符宽的输出域上按右队齐方式用小数点形式输出a的数值,m是小数点后的位数。

原来的数据按该该格式指定的小数位数四舍五入。

假设m=0,那么不输出小数局部和小数点,原数据四舍五入取整。

n,m必须是整数。

例:

输出语句的例子

programshuchu;

consts='pascal';

vari:

integer;r:

real;c:

char;b:

boolean;

begin

i:

=12345;

c:

='a';

b:

=true;

writeln('i=');

writeln(i:

6);

writeln('r=',r,r:

6:

1);

writeln('c=',c,c:

10);

writeln('b=',b,b:

10)

end.

复合语句

复合语句是由假设干语句组成的序列,语句之间用分号“;〞隔开,并且以begin和end括起来,作为一条语句。

复合语句的一般形式:

begin

语句1;

语句2;

……

语句n;

end;

例:

变量值的交换

programswap;

var a,b,t:

integer;

begin

a:

=10;b:

=20;

begin

t:

=a;

a:

=b;

b:

=t;

end;

writeln('a=',a,'b=',b)

end.

 

例题1:

输入圆的半径,求出圆的周长和面积:

 

ProgamCalCircle;

varR,C,S:

Real;{变量声明}

begin

write(‘输入圆的半径:

’);

readln(R);

C:

=2*Pi*R;

write(‘周长=’,C);

readln;

S:

=Pi*sqr(R);{sqr(R)=R*R}

write(‘面积=’,S);

readln;

end.

例题2:

找出下面程序中的语法错误。

ProgramExample1;

{计算圆环面积的程序,R2表示外圆环的半径,R1表示内圆环的半径,R2>R1}

varR1,R2:

Real;

begin

S=(R2+R1)*(R2-R1)*Pi

为常数}

writeln(s)

end;

纠正以后的程序

ProgramExample1;

{计算圆环面积的程序,R2表示外圆环的半径,R1表示内圆环的半径,R2>R1}

varR1,R2:

real;

S:

real;{每一个变量都必须声明}

begin

为常数}

writeln(s);{语句必须以“;〞结束}

end.{主程序必须以“.〞结尾}

练习:

编写程序实现以下功能:

1、输入三角形三边的长,计算三角形的面积。

计算公式:

Pascal程序中计算平方根的函数为:

sqrt(x);{x:

real;x

0}

根本要求:

有友好的输入输出界面,不需要考虑输入的a,b,c是否可以构成三角形,假设输入的数据符合要求。

第二节IF分支结构

例题:

输入一个考试分数,如果大于等于60就说恭喜你考试及格,如果小于60就说真差劲,要努力哦!

programJudgeScore;

输入分数→score;

如果Score≥60那么

输出“恭喜你考试及格〞

否那么

输出“真差劲,要努力哦〞

“如果...那么〞形式的判断在Pascal中使用If语句来实现。

IF语句是由一个布尔表达式和两个供选择的操作序列组成。

运行时根据布尔表达式求值结果,选取其中之一的操作序列执行。

有两种形式的IF语句:

if <布尔表达式> then<语句>;

if <布尔表达式> then<语句1>

else <语句2>;

当布尔表达式的值为真,那么执行then后面的语句,值为假时有两种情况:

要么什么也不做,要么执行else后面的语句。

注意else前面没有分号,因为分号是两个语句之间的分隔符,而else并非语句。

如果在该处添了分号,那么在编译的时候就会认为if语句到此结束,而把else当作另一句的开头,输出出错信息。

前面例题的Pascal程序代码:

ProgramJudgeScore;

varscore:

real;{声明分数变量score}

begin

readln(score);{输入分数}

ifscore>=60then

begin{score代表分数的变量}

writeln(‘恭喜你,考试及格!

’);

endelsebegin

writeln(‘真差劲,要努力哦!

’);

end;{endifscore>=60}

end.

例:

求y=f(x),当x>0时,y=1,当x=0时,y=0,当x<0时,y=-1

programlianxi;

varx,y:

real;

begin

ifx>0theny:

=1;

ifx=0theny:

=0;

ifx<0theny:

=-1;

writeln('y=',y);

end.

在TurboPascal语言if语句中被构造的语句只能是一条语句,当条件选择某个分支的计算要用多个语句描述时,就必须把该分支用begin和end括来,写成复合语句。

在用if语句连续嵌套时,如果你插入适量的复合语句,有利于程序的阅读和理解。

例:

当x>0时候,计算x*x,并且输出x和x*x。

programlianxi;

varx,x1:

real;

begin

readln('x=',x);

 ifx>=then

  begin

   x1:

=x*x;

   writeln('x*x=',x1);

   writeln('x=',x);

  end;

 end.

当if语句嵌套时,TurboPascal约定else总是和最近的一个if配对。

前面介绍了If语句的使用情况,下面来概括if判断语句的使用方法。

分支结构的根本情况:

if条件成立then

begin

处理;

end;

下一语句;

if条件成立then

begin

操作B;

endelse{if条件不成立then}

begin

操作A;

end;

下一语句;

练习:

写出以下关系表达式和逻辑表达式的Pascal语句:

1、区分合格和不合格:

x>=60

2、60分到70分之间:

(x>=60)and(x<=70)

3、判别闰年的条件〔年份能被4整除,并且不能被100整除;或者能被400整除的整数年份〕:

〔〔ymod4=0〕and〔ymod100<>0〕〕or〔ymod400=0〕

编写程序实现以下功能:

1、从键盘读入一个数,判断它的正负。

是正数,那么输出"+",是负数,那么输出"-"

2、输入a,b,c三个不同的数,将它们按由小到大的顺序输出

3、铁路托运行李规定:

行李重不超过50公斤的,托运费按每公斤元计费;如超50公斤,超过局部每公斤加收元。

编一程序完成自动计费工作。

4、打印某年某月有多少天。

〔提示:

A、闰年的计算方法:

年数能被4整除,并且不能被100整除;或者能被400整除的整数年份。

B、利用MOD运算可以判断一个数能否被另一个数整除〕

5、从键盘输入3个数a,b,c输出其中最大的数。

第三节Case分支结构

case语句是由一个表达式和众多可选择的操作序列组成。

运行时,根据表达式的求值结果,在众多的分支中选取一个分支执行。

其形式为:

case 表达式 of

常量1:

语句1;

常量2:

语句2;

……

常量n:

语句n;

else 语句n+1; {可选项}

end;

表达式只能是顺序类型〔除了实型以外的简单类型〕,其值必须是唯一确定并且和表达式类型相同。

case语句执行和表达式值相匹配的case常数所指向的那条语句,如果没有相匹配的值,那么执行else局部〔如果有的话〕或者什么也不做。

在else前面的语句

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2