信息学奥林匹克竞赛资料初赛资料Word格式文档下载.docx
- 文档编号:18845223
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:105
- 大小:307.70KB
信息学奥林匹克竞赛资料初赛资料Word格式文档下载.docx
《信息学奥林匹克竞赛资料初赛资料Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《信息学奥林匹克竞赛资料初赛资料Word格式文档下载.docx(105页珍藏版)》请在冰豆网上搜索。
数据结构
*简单数据的类型*构造类型:
数组、字符串
*了解基本数据结构(线性表、队列与栈)
程序设计
*结构化程序的基本概念*阅读理解程序的基本能力
*具有完成下列过程的能力:
现实世界(指知识范畴的问题)→信息世界(表达解法)
→计算机世界(将解法用计算机能实现的数据结构和算法描述出来)
基本算法
处理
*简单搜索*字串处理*排序*查找*统计*分类*合并
*简单的回溯算法*简单的递归算法
二、复赛内容与要求:
在初赛的内容上增加以下内容:
计算机
软件
*操作系统的使用知识
*编程语言的使用
数据
结构
*结构类型中的记录类型*指针类型*文件(提高组必须会使用文本文件输入)
*链表*树*图#
程序
设计
*程序设计能力*设计测试数据的能力
*运行时间和占用空间的估算能力#
算法
处理
*排列组合的应用*进一步加深回溯算法、递归算法
*分治法*搜索算法:
宽度、深度优先算法
*表达式处理:
计算、展开、化简等#*动态规划#
三、初赛试题类型:
注:
试题语言两者选一、高中学生必须参加提高组联赛。
(程序设计语言:
基本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:
writen(’第2号重’,3*S2-2*S1,’,其余重’,S1-S2);
IF2*S2+3*S3=3*S1THEN
writeln(’第3号重’,S3-(S2div3),’,其余重’,S2div3);
IF2*S2=3*S3THEN
writeln(’第4号重’,S1-3*(S3div2),’,其余重’,S3div2);
IFS1=2*S3THEN
writeln(’第5号重’,s2-2*(s3div2),’,其余重’,s3div2),END;
IFp:
=0THENwriteln('
输入的数据不正确!
END
ELSEIF3*s1=4*s2THEN
BEGINwrite('
请输入6号的重量:
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]:
16147523write('
Inputn:
readln(n);
15812417
while(nmod2=1)and(n<
=19)do
begin
i:
=n;
j:
=(ndiv2)+1;
a[i,j]:
fork:
=2ton*ndo
=i+1;
=j-1;
ifi=n+1theni:
ifj=0thenj:
ifa[i,j]=0thena[i,j]:
=k
elsebegin
=i-2;
=j+1;
ifi<
0theni:
=i+n;
ifj=n+1thenj:
=k;
end;
fori:
=1tondo
forj:
write(a[i,j]:
4);
writeln;
exit;
write('
Error!
end.
3.13个人编号围成一圈,从1开始,4个一数,数到者出列,打印出列的顺序。
(方法一:
)
ProgramEX1301;
Constm=13;
t=4;
Vari,k,p:
A:
array[1..m]ofinteger;
Begin
Fori:
=1tomdoa[i]:
I:
k:
p:
Repeat
ifi=m+1theni:
K:
=k+a[i];
Ifk=tthen
Write(i:
a[i]:
=p+1;
End;
Untilp=m;
Writeln;
End.
(方法二:
链接表)
ProgramEX1302;
Vari,j,k,p:
=1tom-1doa[i]:
A[m]:
=m;
=a[i];
=k+1;
Ifk=tthenBeginWrite(a[i]:
a[i]:
=a[a[i]];
出列顺序:
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×
20+1×
2-1+0×
2-2+1×
2-3+1×
2-4=(26.6875)10
(123)8=1×
82+2×
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×
=(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
1
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
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
————机器数
连同符号位在一起作为一个数,称为机器数。
而它的数值部分称为真值数。
一、数的定点和浮点表示
计算机在处理数据时,要考虑到小数点的位置。
如果将小数点固定在某一位置,则称为定点表示;
如果小数点可以任意移动,则称为浮点表示。
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
阶符阶码数符数码
尾数。
用定点小数表示,表示浮点数的有效位,其位数n的大小决定了浮点数的精度。
阶码。
用定点整数表示。
阶码用于表示小数点在浮点数中的位置。
其位数m的大小反映此浮点数所能表示的数的范围。
⑵浮点数的规格化:
规定计算机内浮点数的尾数用纯小数形式给出,而且当尾数的值不为0时,其绝对值应大于或等于0.5,不符合这一规定的浮点数要进行规格化。
(通过修改阶码的大小并同时左右移尾数的办法使其满足要求。
①正数:
1/2≤S<1,二进制表示S=0.1……
②负数:
-1/2≥S>-1,二进制表示S=1.1……
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息学 奥林匹克 竞赛 资料 初赛