2023年中学信息学奥林匹克竞赛培训教程_第1页
2023年中学信息学奥林匹克竞赛培训教程_第2页
2023年中学信息学奥林匹克竞赛培训教程_第3页
2023年中学信息学奥林匹克竞赛培训教程_第4页
2023年中学信息学奥林匹克竞赛培训教程_第5页
已阅读5页,还剩48页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

*心以待言和在格世什米勒

(第一部台)

第一部分Pascal语言和程序设计基础

预备知识

基本程序构造和几种概念::

标识符保留字常量变量运算符体现式原则数据类型

Pacal语言程序构造

Programprog_name;

var变量中明;

begin

程序体;

end.

例如:

programpname;

tunsin-4;

typearr=array[1..41ofinteger;

vari:integer;a:arr;

begin

fori:=ltondoread(a[i]);

readln;

fori:=ndownto1dowrite(a[il:4);

writeln;

end.

以上是一种PASCAL程序,从键盘读入4个数据,逆序输出。

一般来说,一种PASCAL程序包括如下几种部分:

程序头:programpname;其中,program是保留字,表达程序从这个地方开始,pname是标识符,

是程序的名字,可由程序员自足。保留字是PASCAL选定口勺,具有固定意义和使用方法的专用单

词或缩写,这些单词不容许作其他使用。如上,“program”就有“程序从这里开始”这样一种尤其日勺

意义,而“consl”就有“常量阐明从这里开始呼J意义。我们不能再用“program"、“const”来作为其他

变量、常量等H勺名字。标识符是以字母开头H勺字母数字串,其长度最大为8个字符。用来表达常量、

变量、类型、文献、过程、函数和程序的名字。如“pname”、“j”、“al”就是合法的标识符;但

“la”、“#a”是非法日勺标识符。有•点要注意日勺是,在PASCAL中,字母除了作为字符值或字符串值

之外,其大小写是无关的。如标识符“A1”和“al”在PASCLA看来是同一标识符。在PASCAL中除

了保留字和自定义H勺标识符外,尚有一类有特殊含义的标识符,此类标识符称为原则标识符。它们

是用来标识程序中常常引用的处理对象,如常量、函数。(PASCAL定义II勺保留字和原则标识符附后)

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

1、名字要易记易读,故意义。如8皇后问题程序名可以是“queen”也可以是“huanghou”等;

2、不能用保留字、原则标识符作为自定义的标识符。

阐明部分:

constn=4;

typear=array[1..4]ofinteger;

vari:integer;a:ar;

其中,const部分是常量阐明,阐明某些在如下部分用到日勺,在整个程序执行过程不变化值日勺

量。这些量PASCAL称为常量。在程序中用到这个值的地方均用常量名来替代。如上题中定义“n=4”

指本程序处理4个数值,在下面的程序体中就用“n”来替代详细的值(如fori:=lton)0假如

要变化处理数据个数,则只在常量阐明部分修改“n=4”这一句就行了,而不用在程序中每一种用

到口勺地方都加以修改。这样不仅在编写程序的时候很以便,也漕长了程序的可读性,修改时更以便。

常量阐明在保留字“const”下开始。可以有多种语句。常量阐明语句日勺格式是:“常量名=值;、

如“n=4;”。n是常量名,4是该常量的值,匕”是语句分隔符。

type部分是类型阐明,阐明某些在如下部分用到的数据类型。如数组、记录、指针等。

类型阐明在保留字“type”下开始。可以有多种语句。类型阐明语句的格式是:“类型名二类型

阐明;"。如"ar=array[1..4]ofinteger;woar是类型名,array[1..4]ofinteger是类型阐

明,“;”是语句分隔符。

var部分是变量阐明。变量是指在程序执行过程中可以通过赋值语句或读语句来变化值H勺量。

所有在程序中使用的变量都应当先在变量阐明部分阐明。PASCAL中引用的每个变量均有“名字”

和“类型”属性。变量阐明“阐明”日勺重要工作是告诉PASCA下面程序中要用到这个名字的量,同

步这个量的类型是什么。

变量阐明在保留字“var”下开始。可以有多种语句。变量阐明语句H勺格式是:“变量名:变量

类型;其中,假如有多种变量同一类型,则变量名与变量名之间用逗号分隔,变量名与变量类型

之间用冒号分隔。如"i:integer;"(i是变量名,integer是类型名)、“i、j:integer;”(i、j

是变量名,integer是类型名)……

变量阐明要注意:1、有效变量名称不能不小于8个字符;2、变量名称必须以字母开头;3、

在同一种有效范围内变量名称必须唯一。

各个阐明部分均以该部分的保留字开始。如“const”开始常量阐明;“type”开始类型阐明;

“var”开始变量阐明。一种程序包括多少种类型H勺阐明,看需要而定,不是每一种程序都必须同

步包括这三种阐明。假如程序不须要用到常量,则常量阐明部分可以省略;假如不须要用到类型阐

明,则类型阐明可省……

PASCAL尚有一条规则:先阐明后引用。即所有在程序体中用到的“名字”必须都在阐明部

分阐明过才能引用,否则就会出错,通不过编译,也执行不了。如上,类型“ar”先在类型阐明中

定义,然后在变量阐明中引用:变量i在变量阐明中定义,在程序中引用。

程序体:

begin

fori:=1tondo

read(a[i]);

readln;

fori:=ndownto1do

write(a[i]:4);

writein;

end.

程序体是以beginend.括起来l向语句系列。“end”背面是一种小圆点,标识着程序结束,

整个程序只有•种是•种程序的重要部分。编程要完毕B勺工作大部分都在这里完毕。程序体中每一

语句均以“;”作为结束符。在书写程序时,以“分层缩进”向风格来写,以便提高程序的可读性。

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

运算符体现式

PASCAL中的运算符有算术运算符和关系运算符。和我们在数学课中学的基本同样但在写法上有些

不一样,在写程序时要尤其注意写法的不一样:

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

8MOD2=0,7MOD2=1,2MOD3=2;DIV取整如:8DIV2=4,7DIV2=3,2DIV3=0。在PASCAL

只有上面6种数学运算。其他的就只能运用这6种运算H勺组合通过语句来实现。如晨2(a时平方)

可以化成a*ao

>不小于;<不不小于;◊不等于(数学中写为#);<=不不小于等于(数学中写为W);>=

不小于等于(数学中写为2),

变量、常量通过运算符连接起来的式子我们称为体现式。一种单独的变量或常量也是体现式。

如a、a+3、a*3+b都是体现式。写体现式时要注意PASCAL体现式跟我们已经熟悉日勺数学体现式在

格式上的I区别:

数学体现式PASCAL体现式注意

2a2*a*号不能省略

a4-ba/b除号的写法

a#baOb不等号的写法

aWba<=b不不小于等于号的写

原则数据类型:整型实型字符型布尔型

数据类型可以理解为i种取值范围和定义在这取值范围I:的运算规则。想一想我们对于数

内理解:小学学自然数,范围是从0开始,那时候不懂得有小数,也不懂得有负数,容许的运算是

+、=X、+,并且对于减法规定被减数要不小于减数。到了中学,数的范围扩大了,整数包括正

数和负数,减法运算也不再有额外的规定H勺了。同理,在PASCAL中“数据类型”也是一种取值范

围和在它上面定义的运算规则。PASCAL中定义好的原则数据类型一共有4个:整型、实型、字符

型、布尔型,分别用保留字integer、real.型ar、boolean来标识它们。其取值范围和运算如下:

整型(integer):范围-32768——32767;运算+-*/moddiv

实型(real):范围运算+-*/

字符型(char):范围可显示的ASCII字符

布尔型(boolean):范围truefalse运算andornot

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

(1)大写字母A-Z;小写字母a-z;数字()一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

常用日勺原则标识符有:

原则常量:FALSETRUEMAXINTMAXLONGINT

原则类型:INTEGERBOOLEANREALCHARTEXT

原则文献:INPUTOUTPUT

原则函数:ABSACTANCHRCOSEOFELONEXPLNODD

ORDPREDROUNDSINSQRSQRTSUCCTRUNC

原贝I」过程:ASSIGNGETNEWDISPOSEPACKPUTREAD

READLNRESETREWRITEUNPACKWRITEWRITELN

函数格式:

functionfun_name(参数表):数据类型;

var变量申明;

begin

函数体;

end;

例题:写出计算两个整数a,b的和函数add(a,b)o

过程格式:

procedureprojname(参数表);

var变量申明;

begin

过程体;

end;

例题:写出在屏幕打印一行文字:"hello,Pascallanguageisveryeasy!"

函数和过程的调用:

例题:从键盘输入:a,b两个数,输出由这两个数为直角边的三角形的面积。[xoi00_01.pas】

programxoi00_01;

functionarea(consta,b:real):real;

vars:real;

begin

s:=aAb/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.

练习:

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

a33aal7abedex9.5apX

二、将下列的数学体现式改写成PASCAL体现式:

bA2-4ac

三、求下列体现式的值:

20mod19,15mod9,7div8,19div3,(4>5)and(7<8),(8>9)or(9<10),

2and((3=3)or(3<7))

第一节次序构造

次序构造是程序设计中最简朴的构造,也是最基本的构造,它就是按照程序书

写口勺次序逐句执行程序中的指令。流程图如下:

例题:计算圆的周氏口勺过程:

输入圆的半径;(操作一)

计算圆的周长;(操作二)

输出圆的J周长:(操作三)

基本日勺程序语句:

赋值语句:

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

〈变量〉:V体现式>;

“尸”称为赋值号,赋值语句的作用是计算体现式的值,并赋给变量。对于任何一种变量必须首

先赋值,然后才能引用,否则,未赋初值的变量将以一种随机值参与运算。此外,赋值号两边的类

型必须相似,但体现式值为整数时,它可自动化为实型后赋给该实型变量,即符合赋值相容。

如: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.

输入语句

通过计算机日勺外设把数据送到计算机内存的J过程称为输入。TurboPascal语言的输入语句有如

下两种形式:

ready变量名表>);

reading变量名表》);

〈变量名表》是一种或几种由逗号隔开H勺变量标识符,他TJ必须在程序阐明部分预先阐明,他

们可以是整型、实型或字符型,布尔型不可以直接读入。例如a,b,c为整型变量,read(a,b,c)

之后,键盘输入:203040<CR>(vCR>表达回车),成果:a=20,b=30,c=40

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

再输入数据。一种read语句执行完后,数据行中多出时未读数据可以被下一种输入语句读入;而

一种readln于执行完后,数据行中多出未读数据就没有用了。readln语句中可以不包括变量名表。

即有如下等价状况:

read(a,b);readln等价丁•readln(a,b)

输入语句输入H勺数据类型必须和变量一一对应。假如输入H勺是一串整数或实数,数据间用空格

或回车分隔;若输入的是一串字符,则不用分隔。

输出语句

输出是将内存中口勺数据送到外设的过程。TurboPascal的输出语句有两种形式:

write(v输出项表>);

writeln(〈输出项表>);

其中〈输出项表》是一串用逗号分隔欧I常量、变量、函数名、体现式或字符串。假如是变量、

函数名、体现式,则将其计算成果输出;假如是常展或字符串,则直接输出其值。

write和writein的J区别在于:write语句是输出项输出后,不换行,光标停留在最终一项后,

wiiteln语句按项输出后,自动换行,光标则停留在下一行"勺开始位置。

writein语句容许不具有输出项,即仅writeln;表达换行。

TurboPascal语言把输出项的数据显示占用的宽度称为域宽,你可以根据输出格式的规定在输

出语句中自动定义每个输出项的宽度。定义宽度时分为单域宽和双域宽。

单域宽输出格式;writeln(Ln);

在n个字符宽的输出域上按右对齐方式输出I的值,若n不小于I的实际位数,则在I值前面补(n-l

内实际位数)个空格。若I口勺实际位数不小于n,则自动突破限制。n必须是整数。

双域宽输出格式:writelnfa:n:m);

双域宽重要用于实型数据的输出。nH勺使用方法同上。在n个字符宽的输出域上按右队齐方式

用小数点形式输出a的数值,m是小数点后的位数。本来的数据按该该格式指定的小数位数四舍五

入。若m=0,则不输出小数部分和小数点,原数据四舍五入取整。n,m必须是整数。

例:输出语句的例子

programshuchu;

consts='pascal';

vari:integer;r:real;c:char;b:boolean;

begin

i:=12345;

r:=123.45

c:='a";

b:=true;

writeln('i=');

writeln(i:6);

wHteln('r=',rj:6:1);

writeln('c=',c,c:10);

whteln('b=',b,b:10)

end.

复合语句

复合语句是由若干语句构成的序列,语句之间用分号隔开,并且以begin和end后起来,

作为一条语句。复合语句的一般形式:

begin

语句1;

语句2;

语句n;

end;

例:变量值的互换

programswap;

vara,b,t:integer;

begin

a:=10;b:=20;

begin

t:=a;

a:=b;

b:=t;

end;

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

end.

例题1:输入圆的半径,求出圆卧J周长和面积:

ProgamCalCircle;

varR,C,S:Real;{变量申明}

begin

write。输入圆的半径:,);

readln(R);

C:=2*Pi*R;

write,周长=\C);

readIn;

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

writef面积=\S);

readln;

end

例题2:找出下面程序中的语法错误。

ProgramExamplel;

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

varR1,R2:Real;

begin

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

{Pi=3.14为常数}

writeln(s)

end;

纠正后来的程序

ProgramExamplel;

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

varR1,R2:real;

S:real;{每一种变量都必须申明}

begin

S=(R2+R1)*(R2-R1)*Pi;{Pi=3.14为常数}

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

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

练习:

编写程序实现如下功能:

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

计算公式:

s=(〃-a)(〃一])(〃一c)

a+b+c

Pascal程序中计算平方根的函数为:sqrt(x);{x:real;x>0}

基本规定:有友好的输入输出界面,不需要考虑输入的a,b,c与否可以构成三角形,假设输入的数

据符合规定。

第二节IF分支构造

例题:输入一种考试分数,假如不小于等于60就说恭喜你考

试及格,假如不不小于60就说真差劲,要努力哦!

programJudgeScore;

输入分数一score;

假如Score260那么

输出“恭喜你考试及格”

否则

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

“假如…那么”形式的判断在Pascal中使用If语句来实现,IF语句是由一种布尔体现式和两个

供选择的操作序列构成。运行时根据布尔体现式求值成果,选用其中之一的操作序列执行。有两种

形式口勺IF语句:

ifv布尔体现式〉then〈语句〉;

ifv布尔体现式〉then〈语句1>

else〈语句2>;

当布尔体现式日勺值为真,则执行then背面的语句,值为假时有两种状况:要么什么也不做,

要么执行else背面的语句.注意else前面没有分号,由于分号是两个语句之间H勺分隔符,而else

并非语句。假如在该处添了分号,则在编译U勺时候就会认为if语句到此结束,而把else当作另一

句的I开头,输出出错信息。

前面例题的Pascal程序代码:

ProgramJudgeScore;

varscore:real;{申明分数变量score}

begin

readln(score);{输入分数}

ifscore>=60then

begin{score代表分数的变最}

writein('恭喜你,考试及格!,);

endelsebegin

writelnC真差劲,要努力哦!’);

end;{endifscore>=60}

end.

例:求y=f(x),当x>0时,y=1,当x=0时,y=0,当xvO时,y=-1

programlianxi;

varx,y:real;

begin

ifx>0theny:=1;

ifx=0theny:=0;

ifx<0theny:=-1;

writeln('y=',y);

end.

在TurboPascal语言if语句中被构造U勺语句只能是一条语句,当条件选择某个分支的计算要

用多种语句描述时,就必须把该分支用begin和end括来,写成复合语句。在用if语句持续嵌套

时,假如你插入适量的复合语句,有助『程序口勺阅读和理解。

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

programlianxi;

varx,>:1:real;

begin

readln('x=',x);

ifx>=then

begin

x1:=x*x;

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

wAteln"='x);

end;

end.

当if语句嵌套时,TurboPascal约定else总是和近来的•种if配对。前面简介了If语句3勺使用

状况,下面来概括if判断语句的使用措施。

分支构造的基本状况:

i;条件成立then

begin

处理;

end;

下一语句;

i'条件成立then

begin

操作B;

endelse{if条件不成v:then}

begin

操作A;

end;

下一语句;

练习:

写出下列关系体现式和逻辑体现式的Pascal语句:

i、辨别合格和不合格:x>=60

2、60分到70分之间:(x>=60)and(x<=70)

3、鉴别闰年的J条件(年份能被4整除,并且不能被100整除;或者能被4(X)整除日勺整数年份):“),

mod4=0)and(ymodl00<>0))or(ymod400=0)

编写程序实现下列功能:

1、从键盘读入一种数,判断它的正负。是正数,则输出"+”,是负数,则输出“-"

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

3、铁路托运行李规定:行李重不超过50公斤的,托运费按每公斤0.15元计费;如超5()公斤,超

过部分每公斤加收0.10元。编一程序完毕自动计费工作。

4、打印某年某月有多少天。(提醒:A、闰年的计算措施:年数能被4整除,并且不能被100整除;

或者能被400整除的整数年份。B、运用MOD运算可以判断一种数能否被另一种数整除)

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

第三节Case分支构造

case语句是由一种体现式和众多可选择日勺操作序列构成。运行时,根据体现式日勺求值成果,

在众多的分支中选用一种分支执行。其形式为:

case体现式of

常量1:语句1;

常量2:语句2;

常量语句n;

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

end;

体现式只能是次序类型(除了实型以外的简朴类型),其值必须是唯一确定并且和体现式类型

相似。case语句执行和体现式直相匹配日勺case常数所指向的那条语句,假如没有相匹配口勺值,则

执行else部分(假如有的话)或者什么也不做。在else前面口勺语句末尾有分号,这是和if语句不

一样的。

Case体现式的应用:

例题:输入一种考试分数(整数),根据分数状况汇报对应的信息。

0<x<60不及格

-60<x<90及格

90<x<100优秀

规定:假设输入的分数为[0,100]之间的整数。

ProgramJudgeScore2;

varx:real;

begin

read(x);{输入一种分数}

casexof

0..59:{0<x<60}

writein('不及格';

60..89:{60<X<90)

writeln('及格');

90..100;{90<X<100)

writeln。优秀,);

else

writelK错误H勺分数');

end;{casexof}

end.

例:根据学生的成绩予以对应的等级,对应关系如下:

90------100A

80——89B

6079C

60如下D

programchengji;

vars:real;ch:char;

begin

write('inputthescore:');

rcadln(s);

if(s>=0)and(s<=1OOJthen

casesdiv10of

10,9:ch:='A';

8:ch:='B';

7,6:='C;

elsech:='D';

end;

writeln(s,'-',ch);

end.

练习:

1、我们把字母作如下的分类:大写字母1A1Z;小写字母:Z..N;数字:O..9;其他字母,编

写一种程序,根据上述分类的措施,输入一种字母,汇报该字母所属的类型。

2、某超市为了促销,规定:购物局限性50元的按原价付款,超过50局限性100的按九折付

款,超过100元的,超过部分按八折付款。编一程序完毕超市U勺自动计费的工作。

第四节for循环构造

程序设计时我们常常要做莫些反复打勺任务通过反复的执行某一种动作来完毕任务,编写这一类

程序我们使用循环构造来实现。如计算1+2+3+..,.+100cPascal中循环构造通过使用For、While、

Repeat三种语句来实现。

For语句是形式最简朴H勺循环语句。

2・

例题1:输入正整数N,计算日

分析:日=1+2+3+…+N,因此我们必需反复的执行S:=S+i,其中S代表和,

S=1{i=1}

S=1+2{i=2}

S=1+2+3{i=3}

S=1+2+3+4{i=4}

S=1+2+3+4+…+N{i=N}

i从1变化到N,计算前I项口勺和:1+2+3+...+I,写成Pascal代码如下:

Fori:=1toNDOS:=S+i;{i从1变化到N反复执行S:=S+i}

完整日勺程序如下:

ProgramExamplel4

Var

N,l,S:integer;

Begin

Write('输入正整数N:');Readln(N);

S:=0;

Forl:=0tondoS:=S+I;

Writelnf1+2+3+...+,,n,,=\s);

End.

fife入正整数M:«il

卜“门♦…"1。=51so

FOR循环有两种形式:

升序形式:forv控制变量>:=v初值>tov终值》dov语句〉

降序形式:forv控制变量>:二v初值>downtov终值,dov语句》

for语句功能描述:

虽然for循环形式简朴,不过执行的机制却很复杂。其

基本过程如下:

1.计算初值并记忆

2.判断初值与否超过终值、假如超过则执行环节7,

否则执行环军3

3.把初值赋给控制变量

4.执行d。背面的语句(循环体)

5.判断控制变量口勺值与否达道终值,假如是则执行环节6,否则执行环节7

6.控制变量取下一种值(升序取后继,降序取前驱)

7.(循环结束)执行下一语句.

例题:编写程序输出序号从32到126的ASCII字符与对应代码之间"勺对应关系。每行输出5个字

符,输出成果如卜如所示。(Example4_2)

3233!3M3S3programexample4_2;

37x3l&3*4O4

42.344Sa

«♦V

47/.404I5Bsvari,j:byte;

52^s3556s5s

s7fsl56O6

••r

62>s3?6c656begin

47C68D6E7I7

72N73I7J757

77M7tN7O8O0fori:=32to126do

t2R.3S8I8S0

87W8sX8Y9O8

9\]A9begin

2“39959

97*sb9c000

s2f0390h050if(jmod5=0)thenwritein;

17k.t—0M1O1

213115

1pr1

7u1s1w202write(i:5,chr(i):2);

2223225

z—2

j:=j+1;

e

nd

end

程序阐明:

原则函数chr(i)可以得到代码为iH勺字符。jmod5求j模5的余数。语句if(jmod5=0)then

wiiteln;用于控制换行,每行写5个字符的对应关系。语句write(i:5,chr(i):2);用于格式化输出成果。

编程完毕下列计算:

^i2=l2+22+...+N2

1、»='

,11(T严

1------h...........H------------

2、23n

3、把数码1,2,3,4,…,9提成3组,每组构成一种3位数,使这3个3位数恰好成1:2:3,

该怎样分?求出所有的解答来。(如:192,384,576就是一组解答)

4、求出所有口勺三位数X*,它除以|1所得余数等于它的三个数字日勺平方和。

第五节while、repeat循环构造

While语句是此外一种实现循环口勺语句,一般形式如下:

Whilev条件Ado〈语句〉

While循环的执行过程如下:

1.判断条件与否成立,条件成立时执行环节2,否则执行环节4

2.执行do背面的语句(循环体)

3.返回环节1

4.结束循环,执行下一语句

注意:一定要有使条件取假(False)的时候,否则会出现死循环。

例题:从键盘输入一批学生考试数据,记录这些数据中不小于80时数的个数。

分析:由于学生的人数没有确定,因此不以便用for循环来完毕此项工作,不过用while循环比较

轻易实现。(example4_3)

whilescore>=0do

输入一种学生成绩一score;计算总分;

Pascal代码:

whilescore>=0do

begin

readln(score);

total:=total+score;

end;

完整的程序代码:

programoxamplc4_3;

var

score:integer;

total:integer;

c:char;

begin

writein(1输入学生分数:');

readln(score);

total:=0;

whilescore>=0do

begin

readln(score);

total:=total+score;

end;

writein('总分为:'.total);

read(c);

end.

Repeat语句与while语句基本类类似,只是while先判断条件,reapeat语句先执行循环体然后再

判断。

Repeat

〈语句〉;{循环体部分}

Untilv条件〉;{循环结束条件}

执行过程如下:

1.执行循环体

2.判断条件,假如充满足反复1,否则执行环节3

3.结束循环,执行下一语句

例题:改写Example4_3程序便用Repeat循环语•句实现c(Example4_4)

programexample4_4;

var

score:integer;

total:integer;

c:char;

begin

wiiteln。输入学生分数:);

total:=0;

repeat

readlniscore);

total:=total+score;

untilscore<0;

whteln。总分为:*total);

read(c);

end.

练习:

1、计算下列式子口勺值:

(1)1+3+5+...+99

(2)1+2+4+8+...+128+256+512+1024

(3)1+(1+2)+(1+2+3)+…+(1+2+3+4+…+N)

_[358_1321

2、有一分数序列:2,2,3,?S'\39……求出这个数列的前20项的和。

3、求水仙花数。所谓水仙花数,是指一种三位数诙,假如满足,+尸+。3=嬴,则an是水

仙花数。

4、输入一种整数,计算它各位上数字日勺和。(注意:是任意位的I整数)

5、输入一整数A,判断它与否质数。(提醒:若从2到AH勺平方根的范围内,没有一种数能整除

A,则A是质数。)

6、求两个数的最小公倍数和最大公约数。(提醒:公约数•定不不小于等于两数中的小数,且能

整除两数中的大数。公倍数一定不小于等于两数中的大数,且是大数日勺倍数,又能给两数中的

小数整除。)

7、编写一种译码程序,把一种英语句子译成数字代码。译码规则是以数字1替代字母A,数字2

替代字母B...26替代字母Z,如遇空格则打印一种星号,*英文句子以Y结束。

8、“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3文钱可以买1只公鸡,2文钱可以

买一只母鸡,I文钱可以买3只小鸡。用100文钱买100只鸡,那么各有公鸡、母鸡、小鸡多

少只?与之相似,有“鸡兔同笼”问题。

9、输入一种正整数N,把它分解成质因子相乘日勺形式。如:36=1X2X2X3X3;19=1X19(提

醒:设因子为1,从2开始到N,让N反兔被I除,假如能整除,则用商取代N,1为一种因子;

假如不能整除,再将I增大,继续以上操作,直到I等于N。)

n

10、编程实现:求5”=〃+初+时。+…+的〃-4的之值,其中a是一种数字。例如:

2+22+222+2222+22222(当n=5时),n由键盘输入。

11、一种数假如恰好等于它的因子之和,这个数就称为“完数”。例如:6口勺因子为1、2、3,

而6=1+2+3,因此6是“完数”。编程序找出1000以内的所有完数。

aX+bY=c

12、编一程序,输入a,b,c,d,e,f,然后解出方程组【公+'丫='的解。

第六节数据类型

简朴数据类型

Pascal语言基本数据类型由:integer(longint,shortint,byte),real,char,Boolean.等构成。

自定义数据类型:

我们可以在基本数据类型H勺基础上定义新日勺数据类型,类型定义的保留字为“Type”,格式为:

TYPE

〈类型标识符>=〈数据类型〉

如:

Type

MyLong=Longint;

枚举类型:

“枚举”H勺意思就是把所需要H勺对象都一种一种口勺列举出来,比方说星期是一种只有7个元素日勺

数据,因此我们可以定义一种数据类型TWeekDay代表星期,假如一种变量定义为TWeekDay类

型,那么他的取值范围就是Sunday-Saturday,此外颜色TColor也同样。习惯上我们在自定义类

型名称前加上“T",如TColor,TWeekDay,并且单词以大写字母开始。

Type

TWeekDay=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);

TColor=(Red,Yellow,Blue,Green.Purple,White,Black);

枚举变量的第一种代表0,第二个代表1,以此类推,如上面定义小JTweekDay类型,Sunday=0,

Monday=1,…,Saturday=G,

例题:输入今天U勺日期数字:0=Sunday,1=Monday,...6=Saturday,输出明天及J日期,用英

文单词表达。[xoi00_02.pas】

programxoi00_02;

TypeTWeekDay=(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday);

vartoday,tomorrow:TWeekDay;

number,i:integer;

begin

write('Entertodaynumber:');readln(niimber);

if(number<0)or(number>6;then

writeln('Errornumber')

elsebegin

today:=Sunday;

fori:=0tonumber-1dotoday:=succ(today);

iftoday=Saturdaythen

tomorrow:=Saturday

else

tomorrow:=succ(todayj;

writefTomorrowis:');

casetomorrowof

Sunday:writeln('Sunday');

Monday:writeln('Monday');

Thursday:writftln('ThusdAy');

Wednesday:writeln('V\/ednesday');

Thursday:writeln('Thursday');

FridayiwritelnCFriday');

Saturday:writeln('Saturday');

end;{iftoday=saturdaythen}

end;{if(number<0)or(number>6)}

end.

子界类型:

子界类型是在其他日勺离散类型口勺值域中取出一部分构成独立的类型。

子界类型的I一般定义形式如下:

TYPE

〈子界类型标识符>=〈下界常量〉上界常量,;

如:TYPETmonth=1..12;

TYPETscore=0..100;

例按月、日、年次序读入一日期,输出该日期是这一年中的第几天。

programdate;

varyear:0..2023;

month,i:1..12;

day:1..31;

dayth:integer;

begin

read(month,day,year);

dyath:=O;

fori:=1tomonth-1do

caseiof

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

2:if((yearmod4=0)and(yearmod100<>0)or(yearmod400=0)

thendayth:=dayth+29

elsedayth=:=dayth+28;

4,6,9,11:dayth:=dayth+30;

end;

dayth:=dayth+day;

writeln(dayth)

end.

数组类型:

定义数组:

Type

数组类型标识符:Array[下标类型]OF数组元素类型

数组元素类型自身也可以是复杂日勺自定义类型,如子界类型,数组类型,记录等。

例如:定义寄存学生姓名的J字符数组:

TYPETName=Array[1..20]ofChar;

定义一种寄存班级学生(50人)名单H勺数组:

TYPETStudents=Array[1..50]ofTName

也可以这样定义:

TYPETStudents=Array[1..50]ofArray[1..2O]ofChar;

例1:输入5个考分数,计算它们的总分。【xoi00_03.pas】

programxoi00_03;

TypeTScore=Array[l..5]ofinteger;

varscore:TScore;i:integer;sum:integer;

begin

fori:=1to5do

begin

write('EnterNumber

readln(score[i]);

end;

sum:=0;

fori:=1to5do

begin

sum:=sum+score[ij;

end;

writeln('TotalScoreis:',sum);

end.

例2:从键盘输入10个数,将这10个数逆序输入,并求这10个数的和,输出这个和。

programp1;

var

a:array[1..101ofinteger;

i,s:integer;

begin

fori:=1to10do

read(a[i]);

fori:=10downto1do

write(a[i],'f);

writeln;

s:=0;

fori:=Ito10do

s:=s+afi];

wnteln('s=',s);

end.

例3:用筛法求100以内H勺素数(质数)。

分析:素数是除了I和它自身以外没有其他约数的数。用筛法求素数的措施是:用质数筛去合数:

从第一种素数2开始,把它的侪数去掉;这样2后来H勺第一科非0数就一定也是素数,把它均倍数

也删了……反复这个删数过程,直到在所找到的素数后再也找不到一种非0数。把所有非0数输出。

programp2;

a:array[1..100]ofinteger;

i,j,k:integer;

begin

fori:=1to100do

a[i]:=i;

a[l]:=0;

i:=2;

whilei<=100do

begin

whilek<=100do

begin

k:=k+i;

a[k]:=0;

end;

{.一上面将所有a[i]口勺倍数清0}

i:=i+1;

whilea[i]=0do

i:=i+1;

{—查找接下来日勺第一种非。数}

end;

fori:=Ito1(X)do

ifa[i]<>0thenwrite(a[ij,'*);

end.

字符串类型:

假如数组寄存的是字符,则成为字符数组。例如前面提到的学生姓名:Tname可以寄存20个

字符。为了操作以便TurboPascal提供了字符串类型和操作函数。字符串类型:Suing。例如前面

内学生姓名可以定义为:TypeTName=String[20];

字符串定义时,如不指定长度,则按该类型H勺最大长度(255个字符)分派空间,使用时最大

可用长度为255个;假如在中括号中给出一种详细U勺值(1—255之间),则按这个值的大小分派空

间。使用时,最大的J可用长度即为该值。

字符串类型既可按数组方式输入、输出,也可直接输入、输出:readln(s);writeln(s);多种字

符串输入时以回车作为数据间的分隔符;每个readln语句只能读入一种字符串。

操作函数:

连接函数:concat(s1,s1,...,sn),相称于:S1+S2+...+Sn

截取子字符串:copy(S,l,L),从字符串S左边第I个字符起持续截取L个字符。

长度函数:length(S),计算字符串S的长度.Length(S)=Ord(S[0])

子串点的函数:pos(P.S),返回P在S中第一次出现的位置。

删除子串过程:delete(S,l,L),在S中从的I个字符起删除L个字符。

插入子串函数:insert(S,D,L),在D中日勺第I个字符位置插入字符串S“

记录类型:

记录类型由固定数量日勺具有不一样类型口勺成分构成,在实际口勺程序设计中,这种类型非常有用,

比方说学生的信息包括:学号,姓名,语文,数学,英语成绩,平均分等构成,用一种简朴的数据

类型无法体现。我们可以这样定义:

Type

TScore=0..100;

TScores=Array[1..5]ofTScore;

TStudent=Record

NO:String[5];

Name:String[16];

Score:TScores;

Avg:Real;

End;{EndTypeTStudent}

TStudents=Array[1..50]ofTStudent;

在程序中可以使用Varstudent:Tstudents;定义一种学生变量,可以使

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论