第五届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题(高中组)
(Pascal 语言竞赛用时:2小时)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一.选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题1.5分,多选无分,
共30分)
1.微机内存储器的地址是按()编址的。
A. 二进制位 | B. 字长 | C. 字节 | D. 微处理器的型号 |
2.下列诸因素中,对微机工作影响最小的是()
A. 尘土 | B. 噪声 | C. 温度 | D. 湿度 |
3.在24*24点阵的字库中,汉字“一”与“编”的字模占用字节数分别是()
A. 32,32 | B. 32,72 | C. 72,72 | D. 72,32 |
4.将DOS系统盘插入A驱动器启动机器,随后使用一批应用软件,在此过程中,DOS系
统盘()
A.必须始终插入在A驱动器中 B.不必再用
C.可能有时要插入A驱动器中 D.可能有时要插入B驱动中
5.以下DOS命令中,有可能在磁盘上建立子目录的是().
A.type B. dir C. xcopy D.cd
6.在config.sys文件中,装入特定的可安装设备驱动程序的命令是().
A.buffer B. files C. driver D.device
7.计算机能直接执行的指令包括两部分,它们是().
A.源操作数与目标操作数B.操作码与操作数
C.ASCII码与汉字代码D.数字与字符
8.在微机中,通用寄存器的位数是().
A.8位B.16位C.计算机字长 D.32位
9.在计算机中,ASCII码是()位二进制代码
A. 8 | B. 7 | C. 12 | D. 16 |
10.计算机的软件系统通常分为()
A. 系统软件与应用软件 C. 军用软件与民用软件
B.高级软件与一般软件
D.管理软件与控制软件
11. 执行DOS 命令:C>ATTRIB A:*.* 的功能是()
A. 查看A 盘上所有文件属性
C. 查看A 盘上所有系统文件属性
B.查看A盘上当前目录中所有文件属性D.删去A盘上所有隐含文件的属性
12.执件下列DOS命令,效果等价的是()组.
A. copy * . for 与 copy * . for con
B. copy A: * . * B: 与 xcopy A: * . * B:
C. copy fole1.txt + file2.txt 与 copy flle2.txt + file1.txt
D. xcopy A: * . * B: /S 与 diskcopy A: B:
13.已知小写字母‘m’的十六进制的ASCll码值是6D,则小写字母‘c’的十六进制的ASCII
码值是()
A. 98 | B. 62 | C. 99 | D. 63 |
14.计算机中的数有浮点数与定点数两种,其中用浮点数表示的数,通常由()这两部
分组成。
A. 指数与基数 | B. 尾数与小数 | C. 阶码与尾数 | D. 整数与小数 |
15.下列文件名中,属于DOS中的保留设备名的为()
A. AUX | B. COM | C. CON 1 | D. PRN 1 |
16.启动计算机引导DOS是将操作系统()
A. 从磁盘调入中央处理器 C. 从软盘调入硬盘
B.从内存储器调入高速缓冲存储器D.从系统盘调入内存储器
17. 十进制算术表达式:3* 512 + 7 * 64 + 4 * 8 + 5 的运算结果,用二进制表示为().
A. 10111100101 B. 11111100101
C. 11110100101 D. 11111101101
l8. 组成‘教授’(jiao shou)‘副教授’(fu jiao shou)与‘讲师’(jiang shi)这三个词的汉
字,在GB2312-80 字符集中都是一级汉字.对这三个词排序的结果是().
A. 教授,副教授,讲师 C. 讲师,副教授,教授
B.副教授,教授,讲师
D.副教授,讲师,教授
19. 不同的计算机,其指令系统也不同,这主要取决于().
A. 所用的操作系统 C. 所用的CPU
B.系统的总体结构
D.所用的程序设计语言
20. 对具有隐含属性(H)的当前目录下的文件 ab. txt,能成功执行的 DOS 命令是() A. TYPE ab.txt B. COPY ab. txt xy. txt
C. DIR ab.txt D. REN ab. txt xy. txt
二.回答问题:(共10 分)
将Ln 定义为求在一个平面中用n 条直线所能确定的最大区域数目。
例如:当n=1 时,L1=2,进一步考虑,用n 条折成角的直线(角度任意),放在平面上,能确定的最大区域数目Zn 是多少?例如:当n=1 时,Z1=2 (如图所示)
当给出n后,请写出以下的表达式:
Ln= | Zn= |
三.阅读程序,并写出程序的正确运行结果:(每题15分,共30分)
1.programexgp1;
var i , j , k : integer;
a : array [0..100] of integer;
Begin
for i:=0 to 100 do a[i]:=i;
for k:=5 downto 2 do
begin
for i:=1 to 100 do if(i mod k)=0 then a[i]:=0; for i:=1 to 99 do
for j:=1 to 100-i do
if a[j]>a[j+1] then begin
a[j]:=a[j]+a[j+1];
a[j+1]:=a[j]-a[j+1];
a[j]:=a[j]-a[j+1];
end;
end;
j:=1;
while(a[j]=0) and (j<100) do j:=j+1;
fori:=j to 100 do a[0]:=a[0]+a[i]; writeln(a[0]); End
本题的运行结果是:
2.设数组A[1],A[2],…A[N],已存入了数据,调入不同的排序程序,则数据比较的次数将会不同,试计算出分别调用下列不同的排序过程的比较运算的次数。其中SWAP(I,J)表示A[I ]与A[J ]进行交换。
(1) PROCEDURE SORT1(N:INTEGER);
VAR I , J : INTEGER;
BEGIN
FOR I:=1 TO N-1DO
FOR J:=1 TO N DO
IF A[J]<A[I] THEN SWAP(I , J)
END
调用该过程的语句为SORT1( N ),比较运算的次数为:
(2) PROCEDURE SORT2 ( I , N : INTEGER );
VAR J: INTEGER;
BEGIN
IF I=N THEN WRITE (A[N])
ELSEFOR J:=I+1 TO N DO
IFA[ J ]<A[ I ] THEN SWAP(I , J)
WRITE(A[ I ]);
SORT2(I+1, N)
END;
调用该过程的语句为SORT2( 0 , N),比较运算的次数为:
(3) PROCEDURE SORT3 ( I , J : INTEGER);
VAR M : INTEGER;
BEGIN
IF I <>J THEN
BEGIN
M:=(I+J)DIV 2;
SORT2(I , M); SORT3 (M+1 , J);
MERGE; {假设合并的元素分别为P、Q个,需要比较P+Q次} END;
END;
调用该过程的语句为SORT3( 0 , N),比较运算的次数为:
四.根据题意,将程序补充完整(共30分)
1.【问题描述】求一棵树的深度与宽度。
【算法说明】树可用数组tree:array[1..n,1..5] of integer;
其中:tree[i,1]表示结点号;tree[i,2]——tree[i,5]所属结点。
如右图可表示为:
1 | 2 | 3 | 4 | 0 |
2 | 5 | 6 | 7 | 0 |
3 | 8 | 0 | 0 | 0 |
4 9 10 0 0
5 | 0 | 0 | 0 | 0 |
6 0 0 0 0
7 11 12 0 0
8 0 0 0 0
9 0 0 0 0
10 0 0 0 0
11 0 0 0 0
12 1 3 0 0 0
13 0 0 0 0
在求解的过程中,用到数组g:array[1..n,1..7]ofinteger; 其中:g[i,1]表示父结点,g[i,2]表示层次,
g[i,3]表示本结点号,g[i,4]——g[i,7]表示子女结点;同时,设2个指针SP1(取数指针),SP2(存数指针)
【程序清单】
programexcp3;
constn=13;
vari,j,k,sp1,sp2,n1,n2,jmax,p:integer;
tree:array[1..n,1..5]of integer;
g:array[1..n,1..7]of integer;
begin
fori:=1 to n do
begin
tree[i,1]:=i;
forj:=2 to 5 do read(tree[i,j]); readln;
end;
sp1:=1;sp2:=1; g[1,1]:=0; g[1,2]:=1; g[1,3]:=1;
fori:=4 to 7 do g[1,i]:=tree[1,i-2];
while_____①_____ do
begin
p:=g[sp1,2]; n2:=g[sp1,3]; ______②______; j:=4; while_____③_____ do
begin
n1:=g[sp1,j]; j:=j+1; ______④______;
g[sp2,1]:=n2; g[sp2,2]:=p; g[sp2,3]:=n1;
fori:=1 to 4 do g[sp2,i+3]:=tree[n1,i+1];
end;
_____⑤_____;
end;
writeln(‘maxd=’,g[sp2,2]); j:=1; k:=g[1,2]; jmax:=0; fori:=2 to sp2 do
if____⑥____ then j:=j+1
elsebegin
ifj>jmax then jmax:=j;
_____⑦_____; k:=g[i,2];
end;
ifj>jmax then jmax:=j;
writeln(‘maxl=’,jmax);
end
2.【问题描述】用生成法求出1, 2 , ……, r 的全排列(r< = 8)
【算法说明】用数组a:array[1..r]of integer;表示排列;
初始化时,a[i]:=1( i=1,2,…,r )
设中间的某一个排列为a[1],a[2],…,a[r]
则求出下一个排列的算法为:
① 从后面向前找,直到找到一个顺序为止(设下标为j-1,则a[j-1]<a[j]) ② 从a[j]-a[r]中,找出一个a[k]比a[j-1]大的最小元素
③ 将a[j-1]与a[k]交换
④ 将a[j],a[j+1],…a[r]由小到大排序。
【程序清单】
programexcp4;
constr=7;
varn,i,s,k,j,i1,t:integer;
a:array[1..r]of integer;
procedureprint1;
varik ;integer;
begin
forik:=1 to r do write(a[ik]:8); writeln;
end;
begin
fori:=1 to r do _____①_____; print1;
s:=1;
fori:=2 to r do s:=s*i;
s:=s-1;
fori:=_____②_____ do
begin
j:=r;
while_____③_____ do j:=j-1;
k:=j;
fori1:=j+1 to r do
if_____④_____ then k:=i1;
t:=a[j-1]; a[j-1]:=a[k]; a[k]:=t;
fori1:=j to r-1 do
fork:=i1+1 to r do
if_____⑤_____ then begin
t:=a[i1]; a[i1]:=a[k]; a[k]:=t; end;
print1;
end;
end
因篇幅问题不能全部显示,请点此查看更多更全内容