信息学奥林匹克竞赛资料初赛资料.docx

上传人:b****5 文档编号:5858181 上传时间:2023-01-01 格式:DOCX 页数:105 大小:307.70KB
下载 相关 举报
信息学奥林匹克竞赛资料初赛资料.docx_第1页
第1页 / 共105页
信息学奥林匹克竞赛资料初赛资料.docx_第2页
第2页 / 共105页
信息学奥林匹克竞赛资料初赛资料.docx_第3页
第3页 / 共105页
信息学奥林匹克竞赛资料初赛资料.docx_第4页
第4页 / 共105页
信息学奥林匹克竞赛资料初赛资料.docx_第5页
第5页 / 共105页
点击查看更多>>
下载资源
资源描述

信息学奥林匹克竞赛资料初赛资料.docx

《信息学奥林匹克竞赛资料初赛资料.docx》由会员分享,可在线阅读,更多相关《信息学奥林匹克竞赛资料初赛资料.docx(105页珍藏版)》请在冰豆网上搜索。

信息学奥林匹克竞赛资料初赛资料.docx

信息学奥林匹克竞赛资料初赛资料

青少年信息学竞赛简要介绍

青少年信息学(计算机)奥林匹克竞赛(早期称为青少年计算机程序设计竞赛)是旨在广大青少年中普及计算机教育,推广计算机应用的一项学科性竞赛活动。

全国从1984年开始举办全国性竞赛。

而自从1989年我国参加第一届国际信息学奥林匹克(InternationalOlympiadinInformatics,简称IOI)以来,全国青少年计算机程序设计竞赛也更名为全国青少年信息学(计算机)奥林匹克(NationalOlympiadinInformatics,简称NOI)。

全国信息学奥林匹克竞赛是经国家教委批准,中国科协具体领导,由中国计算机学会主办的。

浙江省信息学奥林匹克竞赛活动从84年参加全国赛开始,由省科学技术协会、省教育厅和省计算机学会联合组织。

为促进计算机普及并兼顾提高,从95年开始全国举办信息学奥林匹克竞赛分区联赛,根据浙江实际情况,我省将分区联赛初、复赛作为省信息学奥赛的初赛和复赛。

浙江省开始几年初赛试题自己命题,现在采用全国卷。

一.信息学奥林匹克竞赛的内容和考核方式:

对学生学习计算机理论知识和实践能力有一个整体性的全面要求,也即整个信息学(计算机)竞赛已成为智力和应用计算机能力的竞赛,涉及到有关计算机基础知识、计算机软件知识、程序设计知识、组合数学和运筹学的知识、人工智能初步知识以及计算机应用知识等,同时要求学生有较强的编程和上机调试的实践能力。

1.NOI全国分区联赛初赛(每年10月左右)

对象:

在校中学生,分初中、高中组

考试形式:

笔试性质:

普及

确定获初级选手证书名单及进入复赛名单,在各地市举行。

2.NOI全国分区联赛复赛(每年11月左右)

对象:

初赛优胜者分初中、高中组

考试形式:

上机试性质:

普及兼顾提高

确定全国分区联赛一、二等奖,省各等奖及全国各级证书获得者名单,在杭州进行,省派评委协助测评。

信息学奥林匹克竞赛复赛的考核方式是采用封闭式(连续3~4小时)上机编程解题的形式,编程语言基本限于BASIC与PASCAL,竞赛难度较大。

程序完成后要通过严格的数据测试,这就对同学们编程能力有更高的要求:

不但要能编程,编好的程序能运行,而且所设计的程序还要能通过在各种边界条件下和各种环境下设置的测试数据。

二.全国青少年信息学奥林匹克联赛大纲竞赛大纲

一、初赛内容与要求:

(#表示普及组可不涉及,以下同)

计 基

算 本

机 常

的 识

*诞生与发展*特点*在现代社会中的应用

*计算机系统的基本组成*计算机中的数的表示

*计算机的工作原理#

*计算机信息安全基础知识*计算机网络

计基

算本

机操

的作

*常见操作系统的使用基础

*常用输入/输出设备的种类、功能、使用

*汉字输入/输出方法*常用计算机屏示信息

程序的表示

*自然语言的描述*PASCAL或BASIC语言

数据结构

*简单数据的类型*构造类型:

数组、字符串

*了解基本数据结构(线性表、队列与栈)

程序设计

*结构化程序的基本概念*阅读理解程序的基本能力

*具有完成下列过程的能力:

现实世界(指知识范畴的问题)→信息世界(表达解法)

→计算机世界(将解法用计算机能实现的数据结构和算法描述出来)

基本算法

处理

*简单搜索*字串处理*排序*查找*统计*分类*合并

*简单的回溯算法*简单的递归算法

二、复赛内容与要求:

在初赛的内容上增加以下内容:

计算机

软件

*操作系统的使用知识

*编程语言的使用

数据

结构

*结构类型中的记录类型*指针类型*文件(提高组必须会使用文本文件输入)

*链表*树*图#

程序

设计

*程序设计能力*设计测试数据的能力

*运行时间和占用空间的估算能力#

算法

处理

*排列组合的应用*进一步加深回溯算法、递归算法

*分治法*搜索算法:

宽度、深度优先算法

*表达式处理:

计算、展开、化简等#*动态规划#

三、初赛试题类型:

注:

试题语言两者选一、高中学生必须参加提高组联赛。

(程序设计语言:

基本BASIC或TURBOPASCAL)

*判断*填空*完善程序*读程序写运行结果*问答

四、推荐读物:

*分区联赛辅导丛书*学生计算机世界报

三.Pascal语言

一、结构化程序设计

结构化程序设计实际上就是为了使程序具有合理的结构,以便保证和验证程序的正确性而规定的一套进行结构程序设计的方法。

用结构化程序设计的方法设计出来的程序称为结构化程序。

结构化程序设计语言就是反映了结构化程序设计的要求和限制,便于用来书写结构化程序的语言。

用这种语言书写的程序易于保证正确性。

二、PASCAL语言的特色

从使用者的角度看,PASCAL语言有以下几个主要特点:

1、它是结构化语言

PASCAL语言是结构化的程序设计语言。

PASCAL语言提供了直接实现3种基本结构的语句心以及定义子程序(“过程”和“函数”)的功能。

可以方便的书写出结构化的程序。

在编写程序时可以完全不使用转向语句。

这就易于保证程序的正确性和易读性。

PASCAL语言强调的是可靠性、易读性和概念性的清晰性。

2、有丰富的数据类型

PASCAL语言提供了整型、实型、字符型、布尔型、枚举型、子域型以及由以上类型构成的数组类型、集合类型、记录类型和文件类型。

此外,还提供了指针类型。

PASCAL语言所提供的丰富的数据结构和上述的结构化性质,使得它可以被方便地用来描述复杂的算法,得到质量较高的程序。

3、能适应于数值计算和非数值信息处理领域

在PASCAL语言出现之前,FORTRAN语言主要处理科学计算,而COBOL语言则主要用于非数值信息处理。

PASCAL语言则兼顾了这两个不同领域的应用。

PASCAL语言可广泛应用于各种领域,还可以用于计算机辅助教育、计算机绘图等应用领域。

4、PASCAL程序的书写格式比较自由

PASCAL允许一行写多个语句,一个语句可以分写在多行上,这样就可以使PASCAL程序写得像讲诗歌格式一样优美,便于阅读。

除了以上优点外,PASCAL语言还具有简单易学的特点,许多学校把PASCAL作为程序设计课程的第一种程序设计语言。

PASCA:

L语言的主要缺点:

不够灵活,书写较麻烦。

四.数据结构

数据结构是计算机专业基础课程之一,是十分重要的核心课程。

计算机的所有系统软件和应用软件都要用到各种类型的数据结构。

要想更好地运用计算机来解决实际问题,仅仅学习计算机语言而缺乏数据结构知识是远远不够的,而打好“数据结构”这门课程的扎实基础,对于学习计算机专业的其他课程都是十分重要的。

随着计算机应用领域不断扩大,非数值计算问题占据了当今计算机应用的绝大多数,简单的数据类型已经远远不能满足需要,各数据元素之间的复杂联系已经不是普通数学方程所能表达的。

因此,掌握好数据结构方面的知识,对于提高我们解决实际问题的能力将会有莫大的帮助。

实际上一个好的程序无非是选择一个合适的数据结构和好的算法,而好的算法的选择很大程度上取决于描述实际问题的数据结构的选取。

所以,学好数据结构,将是进一步提高我们程序设计的关键之一。

五.算法例子

1.称小球重量:

有6个小球分别用1~6编号,其中5个重量相同。

现在有一架台称,一次能称出放在上面的若干物体的总重,要求编一个程序,让计算机找出一种称法,只要称3次就可以知道每个小球的重量。

具体操作时由操作者默想6个物体的重量,然后由计算机用编号提问若干物体的重量,如此3次后程序应能输出每个物体的重量。

PROGRAMEX02;

VAR

S1,S2,S3,p:

integer;

BEGIN

P:

=0;

write(’请输入1号+2号+3号+4号的重量总和:

’);read(s1);

write(’请输入1号+2号+5号的重量总和:

');read(S2);

IF3*s1<>4*s2THEN

BEGIN

write('请输入1号+3号的重量总和:

’);read(s3);

IFS1+S3=2*S2THEN

BEGINP:

=1;Writeln(’第1号重’,S3+S2-S1,’其余重’,S2-S3);END;

IFS3+2*S2=2*S1THEN

BEGINp:

=1;writen(’第2号重’,3*S2-2*S1,’,其余重’,S1-S2);END;

IF2*S2+3*S3=3*S1THEN

BEGINp:

=1;writeln(’第3号重’,S3-(S2div3),’,其余重’,S2div3);END;

IF2*S2=3*S3THEN

BEGINp:

=1;writeln(’第4号重’,S1-3*(S3div2),’,其余重’,S3div2);END;

IFS1=2*S3THEN

BEGINp:

=1;writeln(’第5号重’,s2-2*(s3div2),’,其余重’,s3div2),END;

IFp:

=0THENwriteln('输入的数据不正确!

');

END

ELSEIF3*s1=4*s2THEN

BEGINwrite('请输入6号的重量:

');read(s3);

writeln('第6号重',s3,'其余重',s2div3);

END;

Writeln;

END.

2.打印奇数阶幻方:

方法:

M×M阶奇数幻方,在最后一行(第M行)的中间(M+1)/2处填上1,左下方向填2,....,若前方已经有数,在原数的上方填入。

三阶:

294

753

程序如下:

618

programhuafang;vari,j,k,n:

integer;a:

array[1..20,1..20]ofinteger;五阶:

92251811begin321191210fori:

=1to20do22201364forj:

=1to20doa[i,j]:

=0;16147523write('Inputn:

');readln(n);15812417

while(nmod2=1)and(n<=19)do

begin

i:

=n;j:

=(ndiv2)+1;a[i,j]:

=1;

fork:

=2ton*ndo

begin

i:

=i+1;j:

=j-1;

ifi=n+1theni:

=1;

ifj=0thenj:

=n;

ifa[i,j]=0thena[i,j]:

=k

elsebegin

i:

=i-2;j:

=j+1;

ifi<0theni:

=i+n;

ifj=n+1thenj:

=1;

a[i,j]:

=k;

end;

end;

fori:

=1tondo

begin

forj:

=1tondo

write(a[i,j]:

4);

writeln;

end;

exit;

end;

write('Error!

');

end.

3.13个人编号围成一圈,从1开始,4个一数,数到者出列,打印出列的顺序。

(方法一:

ProgramEX1301;

Constm=13;t=4;

Vari,k,p:

integer;

A:

array[1..m]ofinteger;

Begin

Fori:

=1tomdoa[i]:

=1;

I:

=0;k:

=0;p:

=0;

Repeat

I:

=i+1;ifi=m+1theni:

=1;

K:

=k+a[i];

Ifk=tthen

Begin

Write(i:

4);a[i]:

=0;p:

=p+1;k:

=0;

End;

Untilp=m;

Writeln;

End.

(方法二:

链接表)

ProgramEX1302;

Constm=13;t=4;

Vari,j,k,p:

integer;

A:

array[1..m]ofinteger;

Begin

Fori:

=1tom-1doa[i]:

=i+1;

A[m]:

=1;i:

=m;k:

=1;p:

=0;

Repeat

i:

=a[i];k:

=k+1;

Ifk=tthenBeginWrite(a[i]:

4);a[i]:

=a[a[i]];p:

=p+1;k:

=1;

End;

Untilp=m;

writeln;

End.

出列顺序:

48123917211101365

计算机的数制、码制及其运算

1.计算机是智能化的电器设备

计算机就其本身来说是一个电器设备,为了能够快速存储、处理、传递信息,其内部采用了大量的电子元件,在这些电子元件中,电路的通和断,电压高和低,这两种状态最容易实现,最稳定;也最容易实现对电路本身的控制。

我们将计算机所能表示这样的状态,用0,1来表示,就形成了用二进制数表示计算机内部的所有运算和操作。

计算机内部是以二进制形式表示数据的(指令、被处理的数据)。

二进制数的运算规则:

0+0=00+1=11+0=11+1=10;

0×0=00×1=01×0=01×1=1

2.进位基数和位权值

⑴数的进制与基数

计数的进制不同,则它们的基数也不相同,用到的数码也不一样。

如表1-1所示。

进制

基数

数码

二进制

2

01

三进制

3

012

四进制

4

0123

八进制

8

01234567

十进制

10

0123456789

十六进制

16

0123456789ABCDEF

进制基数:

指的是该进位记数制中可能用到的数码个数。

对于任意计数进制:

每一位计满这个基数后,都应向高位进位。

二进制,逢二进一;八进制,逢八进一;

十进制,逢十进一;十六进制,逢十六进一;

R进制(R为任意正整数):

数码个数为R个,分别为0~R-1,每一位数当计满R后,应向高位进位。

⑵数的权

不同进制的数,基数不同,其每位上所代表的值的大小也不相同,我们称之为“权”。

如:

(219)10=2×102+1×101+9×100(按权展开式)

2在百位上代表2个100即200;1在十位上代表1个10即10;9在个位上代表9个1即9。

注:

以后我们用下标来注明圆括号内数的进制。

(11010)2=1×24+1×23+0×22+1×21+0×20

(273)8=2×82+7×81+3×80

(27B)16=2×162+7×161+11×160

任意R进制S:

S=knkn-1…k0.k-1k-2…k-m

=kn×Rn+kn-1×Rn-1+…k0×R0+.k-1×R-1+k-2×R-2+…k-m×R-m

R为进位基数,Ri是对应的权值。

3.任意进制的数转换成十进制整数

将任意进制数转换成十进制数的基本方法是按权展开,然后求和——按权相加法。

因为在上式中基数我们已经转换成了相应的十进制数,所以展开式即是一个十进制数的表达式。

(11010.1011)2=1×24+1×23+0×22+1×21+0×20+1×2-1+0×2-2+1×2-3+1×2-4=(26.6875)10

(123)8=1×82+2×81+3×80=(83)10

(1AB)16=(427)10

4.十进制整数转换成任意进制数

⑴将十进制整数转换成任意进制数的基本方法是:

将十进制数除以所给定的进制的基数,再反向取余。

例如:

将十进制数39用二进制数表示,用除二反向取余法。

(39)10=(100111)2

(245)10=(365)8

⑵减权定位法:

把十进制数展开成所指定进制的基数的整数次幂之和,然后找到对应位上取值。

例如:

将十进制数123用二进制数表示。

(123)10=64+32+16+8+0+2+1

=1×26+1×25+1×24+1×23+0×22+1×21+1×20

=(1111011)2

5.十进制小数转换成任意进制数

常用把给定的十进制小数乘以给定进制数的基数,取积的整数部分,得到给定进制小数的小数点的第1位;乘积的小数部分再乘以基数,积的整数部分为小数点后的第2位;一直重复做下去,就可以得到希望的进制小数。

例如:

①将十进制小数0.75转换成二进制小数。

0.75×2=1.5

0.5×2=1

(0.75)10=(0.11)2

②(0.315)10=(0..0101)2

不是所有的十进制小数都可以用一个精确的二进制小数表示。

6.二进制与八进制之间的转换

三位二进制,正好能完全表示八进制的8个数码。

二进制

000

001

010

011

100

101

110

111

八进制

0

1

2

3

4

5

6

7

二进制数转换成八进制数的方法是:

从小数点开始,分别向左向右,每3位二进制数为一组,用八进制来书写。

若左侧位数不是3的倍数,则最左侧用0补充,若右侧位数不是3的倍数,则最右侧用0补充。

例如:

(10110111.01101)2=(267.32)8

反过来,八进制数转换成二进制数的方法:

将每个八进制数用3位二进制数来书写。

例如:

(1234.45)8=(1010011.100101)2

7.二进制与十六进制之间的转换

二进制

0000

0001

0010

1001

1010

1011

1100

1101

1110

1111

十六进制

0

1

2

9

A

B

C

D

E

F

每四位二进制数可以用一位十六进制数表示。

二进制数转换成十六进制数方法:

从小数点开始,分别向左向右,每4位二进制数为一组,用十六进制来书写。

若左侧位数不是4的倍数,则最左侧用0补充,若右侧位数不是4的倍数,则最右侧用0补充。

例如:

(110110111.01101)2=(1B7.68)16

十六进制数转换成二进制数方法:

将每个十六进制数用4位二进制来书写,其最左或最右侧的0可以省去。

例如:

(7AC.DE)16=(11110101100.1101111)2

综合例子:

①(3/32)10转换成二进制

解:

(3/32)10=3×2-5=(11)2×(0.00001)2=(0.00011)2

总之:

十进制数与二进制数之间的转换必须用前面讲的繁琐方法进行,因为10不能用2的整数次幂进行表示。

也就是不能象八进制或十六进制数那样用几位二进制数表示十进制数的十个数码。

②把十进制数27.625转换成二进制、八进数和十六进制数。

解:

(27)10=(11011)2

(0.625)10=(0.101)2

(27.625)10=(11011.101)2=(33.5)8=(1B.A)16

要把一个十进制数转换为八进制数或十六进制,最先把它转换成二进制数,再由二进制数转换成八进制或十六进制。

课后练习:

1请用等号或不等号联接下列不同进位制数值的大小。

(98.375)10(142.3)8(58.5)16(1011000.0101)2

2下面四个不同进制的数,最小的数是。

A(11011001)2B(75)10C(37)8D(A7)16

3小张用十六进制、八进制和十进制写了如下一个等式:

52-19=33式中三个数是各不相同进位制的数,请问52、19、33,分别为。

A八进制,十进制,十六进制B十进制,十六进制,八进制

C八进制,十六进制,十进制D十进制,八进制,十六进制

4十进制算术表达式:

3*512+7*64+4*8+5的运算结果,用二进制表示为()

A10111100101B11111100101C11110100101D11111101101

二进数在计算机内的表示

数值数据是用于表示数量的大小,经常用到数值范围和数据精度。

数值范围指的是一种类型的数据所能表示的最大值和最小值;数据精度通常用实数所能指出的有效数字位数来表示。

与用多少个二进制位表示某类数据,以及怎么对这些位进行编码有关。

机器数与真值

计算机中数的符号用数码表示。

一般情况下,用0表示正,用1表示负。

且符号位放在数的最高位。

例:

X1=(+1011011)2————真值数

X2=(-1011011)2

0

1

0

1

1

0

1

1

1

1

0

1

1

0

1

1

————机器数

连同符号位在一起作为一个数,称为机器数。

而它的数值部分称为真值数。

一、数的定点和浮点表示

计算机在处理数据时,要考虑到小数点的位置。

如果将小数点固定在某一位置,则称为定点表示;如果小数点可以任意移动,则称为浮点表示。

1.数的定点表示法——定点小数和定点整数

⑴定点小数格式:

小数点的位置固定在最高数据位的左边,小数点前面再设一位符号位。

任何m位二进制小数在计算机中用m+1位二进制表示。

由于小数点总是在符号位与最高数据位之间,因此在计算机中不明确表示出来

⑵定点整数格式:

小数点位置固定在最低数据位的右边。

整数又分为带符号和不带符号的两类。

带符号的整数,符号位安排在最高(最左)位。

Ns

Nn-1

Nn-2

N1

N0·

符号位n位数值小数点

由于小数点固定在最低数据右边,因此在计算机中不明确表示出来。

n位带符号整数N=NsNn-1…Nn-2N1N0在计算机中用n+1位二进制表示。

对于不带符号的整数,把所有n+1位二进制位全部视为数值。

在不同计算机中,使用多种位数的整数。

16位,32位,64位,64位二进制来表示一个整数。

2.数的浮点表示法

浮点数是指小数点数据中的位置可以左右移动的数。

一个数N要用浮点数表示可以写:

N=M*RE

M:

浮点数的尾数。

E:

浮点数的指数或阶码。

R:

浮点数的基数,是常数一般取2、8或16

一旦机器的浮点部件设计好了,基数的大小也就确定了,不能再改变了,基数在浮点数表示中不出现,是隐含的。

⑴浮点数的表示方法:

Es

Em……E2E1

Ms

Mn……M2M1

阶符阶码数符数码

M:

尾数。

用定点小数表示,表示浮点数的有效位,其位数n的大小决定了浮点数的精度。

E:

阶码。

用定点整数表示。

阶码用于表示小数点在浮点数中的位置。

其位数m的大小反映此浮点数所能表示的数的范围。

⑵浮点数的规格化:

规定计算机内浮点数的尾数用纯小数形式给出,而且当尾数的值不为0时,其绝对值应大于或等于0.5,不符合这一规定的浮点数要进行规格化。

(通过修改阶码的大小并同时左右移尾数的办法使其满足要求。

①正数:

1/2≤S<1,二进制表示S=0.1……

②负数:

-1/2≥S>-1,二进制表示S=1.1……

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

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1