第四届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题
(初中组)
(PASCAL 语言 竞赛用时:2小时)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一、选择填空(25%)
1、操作系统是重要的系统软件,下面几个软件中不属于操作系统的是_______。 {1%}
(A)MS-DOS (B)UCDOS (C)PASCAL (D)WINDOWS 95
2、MS-DOS 系统对磁盘信息进行管理和使用是__________为单位的。 {1%}
(A) 文件 (B) 盘片 (C) 字节 (D) 命令
3、在计算机内部用来传送、存贮、加工处理的数据或指令(命令)都是以___形式进行的.{1%}
(A)十进制码 (B)智能拼音码 (C)二进制码 (D)五笔字型码
4.已知在计算机C:\DOS下有一个正确的FORMAT.COM文件,当执行如下命令:
C:\> FORMAT A: < 回车 > 得到的回答是 bad command or file name 提示信息,下面解释正确的是_____________。 {2%}
(A) 根目录中没有AUTOEXEC.BAT 文件
(B) 在执行该命令前操作者没执行过PATH 命令
(C) C:\DOS 中的FORMAT.COM文件有错
(D) 由于AUTOEXEC.BAT 或操作者最后执行过的PATH 命令缺少路径C:\DOS,或者根本没有执行PATH 命令
5.将A盘上50个文件用C:\>COPY A: *.* 命令复制到C盘的当前目录中,在复制到某一个文件时,由于读数据出错,屏幕显示: {2%}
Abort, Retrg , Ignore , Fail ?
键入“I”后,继续复制没再出现过错误信息,最后复制的结果是_________。
(A)读数据出错的文件不正确,其他文件正确
(B)读数据出错的文件不正确,其它文件也不正确
(C)读数据出错的文件正确,其它文件不正确
(D)复制的文件完全正确
6.下面四个不同进制的数,最小的一个数是 。 {2%}
(A)(11011001)2 (B)(75)10 (C)(37)8 (D)(A7)16
7.小张用十六进制、八进制和十进制写了如下一个等式: {3%}
52 - 19 = 33
式中三个数是各不相同进位制的数,试问52、19、33,分别为_________.
(A)八进制,十进制,十六进制 (B)十进制,十六进制,八进制
(C)八进制,十六进制,十进制 (D)十进制,八进制,十六进制
8.如果用一个字节来表示整数,最高位用作符号位,其它位表示数值。例如:{4%}
↑ 符号位表示正
↑ 符号位表示负
① 试问这样表示法的整数a 的范围应该是_____________________。
(A) -127 ≤ a ≤ 127 (B) -128 ≤ a ≤ 128
(C) –128 ≤ a < 128 (D) -128 < a ≤ 128
② 在这样表示法中,以下 说法是正确的。
(A)范围内的每一个数都只有唯一的格式
(B)范围内的每一个数都有两种格式
(C)范围内的一半数有两种格式
(D)范围内只有一个数有两种表示格式
9.下列IF语句中,ENDIF 表示相应IF的结束: {4%}
y=0
if x<0
then Y=5
else if x<10
then y=10
if x<100
then y=100
endif
else y=200
endif
endif
试指出:
当X=80 时,运行的结果是______;
当X=5 时,运行结果为_________。
(A) Y=9 (B) Y=5 (C) Y=10 (D) Y=100 (E)Y=200
10.设栈S的初始状态为空,现有5个元素组成的序列{1,2,3,4,5},对该序列在S栈上依次进行如下操作(从序列中的1开始,出栈后不再进栈):进栈、进栈、进栈,出栈、进栈、出栈、进栈。试问出栈的元素序列是______________。{4%}
(A){ 5,4,3,2,1} (B){2,1} (C){ 2,3} (D){3,4}
二、问题求解:(20%)
1.已知一个数列U1,U2,U3,…,UN,… 往往可以找到一个最小的K值和K个数a1,a2, …,ak使得数列从某项开始都满足:
UN+K=a1UN+K-1+a2UN+K-2+……+akUN (A)
例如对斐波拉契数列1,1,2,3,5,…可以发现:当K=2,a1 =1,a2 =1时,从第3项起(即N>=1)都满足U n+2 =Un+1+Un 。试对数列12,22,32,…,n2,…求K和a1,a2, …,aK使得(A)式成立。 {7%}
2.某班有50名学生,每位学生发一张调查卡,上写a,b,c三本书的书名,将读过的书打ü,结果统计数字如下: 只读a者8人;只读b者4人;只读c者3人;全部读过的有2人;读过a,b两本书的有4人;读过a,c两本书的有2人;读过b,c两本书的有3人;{6%}
(1)读过a的人数是 (2)一本书也没有读过的人数是
3.任给自然数n,k, 1≤K≤9 ,按如下计算步骤求序列XJXJ-1……X0的步骤:{8%}
(1) j=0
(2) 如果N>=K 则转第3步,否则转第7步
(3) Xj = N MOD K {div表示整数除法,结果取整数;
(4) N =N DIV K mod表示整除取余数}
(5) j=j+1
(6) 回第2步
(7) Xj = N
(8) 结束
试求当: N=1998, K=3时,XJXJ-1……X0 之值。
三、阅读程序,写出程序的正确运行结果(39%)
1. Program exp1 (imput,output); (7%)
Var i, s, max: integer;
a :array [1..10] of integer;
begin
for i:=1 to 10 do read (a[i]);
max:=a[1] ;s:=a[1];
for i:=2 to 10 do
begin
if s<0 then s:=0;
s:= s+a[i];
if s>max then max:=s
end;
writeln(‘max=’, max)
end.
输入:-2 13 -1 4 7 8 -1 -18 24 6
输出:max=
2. Program exp2 (input,output); {10%}
Const n=5;
Var i,j,k : integer;
a : array[1..2*n, 1..2*n] of integer;
Begin
K:=1;
For I:=1 to 2*n-1 do
If i<=n then
if odd(i) then
for j:= I downto 1 do
begin
a [I-j+1,j]:=k; k:=k+1
end
else for j: =1 to i do
begin
a[i-j+1,j]:=k; k:=k+1;
end
else if odd(i) then for j:=n downto I-n+1 do
begin
a[I-j+1,j]:=k; k:=k+1;
end
else for j:=I-n+1 to n do
begin
a[I-j+1,j]:=k; k:=k+1;
end;
for I:=1 to n do
begin
for j:=1 to n do
write(a[I,j]:3);
writeln
end;
end.
3. Program exp3 (input,output); {10%}
Const N=10;
Var
S,I : integer;
Function CO(I1:integer) : integer;
VAR J1,S1 : integer;
Begin
S1:=N;
For J1:= (N-1) downto (N-I1+1) do
S1:= S1*J1 div (N-J1+1);
CO:=S1
End;
Begin
S:=N+1;
For I:= 2 to N do S:=S + CO(I);
Writeln(‘S=’,S);
End.
4. Program exp4(input,output); {12%}
Const N=3;
VAR I,J,S,X :integer;
P :array[0..n+1] of integer;
G :array[0..100] of integer;
Begin
For I := 0 to 100 do G[I]:=0;
P[0]:=0; P[n+1]:=100;
For I:= 1 to n do read (P[I]); readln;
For I:= 0 to n do
For J:= I+1 to N+1 do
G[abs(P[J]-P[I])]:=G[abs(P[J]-P[I])]+1;
S:=0;
For I:=0 to 100 do
If G[I]>0 then begin
Write(I,:4); S:=S+1;
End;
Writeln;
writeln(‘S=’,S);
Writeln(‘input data:’); readln(X);
Writeln(G[x])
End.
输入:10 20 65
input data: 10
输出:
四、根据题意,补充完善以下程序:(14%)
输入一长度不超过80个字符的字符串(称为源串),该字符串由小写英文字母、空格组成,并以'.'结束。单词是由连续字母组成,两个单词之间至少有一个空格。本程序的功能为:首先找出字符串中所有单词并保留一个空格作为单词分隔,存入数组ch中。然后用键盘输入一个待查找的单词,以字符'$'结束。采用顺序查找的方法在ch中进行查找,若找到,则输出该单词在ch中出现的序号(若有多个位置出现该单词,则只输出第一个序号位置)。若不存在,则输出'NOT FOUND'。
程序如下:(14%)
PROGRAM EXP1;
VAR
A,B,CH : ARRAY[1..80] OF CHAR;
I,J,K,N,M : INTEGER;
BEGIN
N := 0;
REPEAT
_______1______; READ(A[N]); 1%
UNTIL A[N]='.';
READLN;
K := 0;
FOR I := 1 TO N DO
IF (A[I]>='a')AND(A[I]<='z') THEN
BEGIN
K := K + 1;
________2_________; 2%
END
ELSE IF K <> 0 THEN IF CH[K]<>'□' THEN {□表示一个空格,以下同}
BEGIN
K := K + 1;
CH[K] := '□'
END;
M := 0_________3________; 2%
REPEAT
M := M + 1; READ(B[M]);
UNTIL _______4_________; 2%
I := 1; J := 1; K := 1; B[M]:='□';
WHILE (I<=N)AND(J<=M) DO
BEGIN
IF _________5________ THEN BEGIN I := I + 1; J := J + 1 END 3%
ELSE BEGIN
WHILE CH[I] <> '□' DO ____6____; 2%
I := I + 1; J := 1; K := K +1
END
END;
IF _____7________ THEN WRITELN(K:4) 2%
ELSE WRITELN('NOT FOUND')
END.