您的当前位置:首页正文

98高初试题

2021-03-12 来源:步旅网



第四届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题(高中组)

(Pascal 语言竞赛用时:2小时)

●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●

一.选择填空:

1、操作系统是一类重要的系统软件,下面几个软件中不属于操作系统的是

(A)MSDOS (B)UCDOS (C)PASCAL (D)WINDOWS 95
2、在计算机内部,用来传送、存储、加工处理的数据或指令(命令)都是以 形式进 行的。

(A)十进制码 (B)智能拼音码 (C)二进制码 (D)五笔字型码
3、已知计算机C:\DOS下有一个正确的FORMAT.COM文件,当执行如下命令:
C:\>FORMAT A: <回车>
得到的回答是badcommand or file name 提示信息,下面解释正确的是

(A)根目录中没有AUTOEXEC.BAT文件;
(B)在执行该命令前操作者没执行过PATH命令;
(C)C:\DOS中的FORMAT.COM文件有错
(D)由于AUTOEXEC.BAT或操作者最后执行过的PATH命令中缺少路径C:\DOS,或者 根本没有执行过PATH命令。

4、将A盘上50个文件用:C:\>COPYA:*.* 命令复制到C盘的当前目录中。在复制到某一 个文件时,由于读数据出错,屏幕显示:
Abort,Retry, Ignore, Fail?

键入“I”后,继续复制没再出现过出错信息。最后复制的结果是_______

(A)读数据出错的文件不正确,其他文件正确; (B)读数据出错的文件不正确,其他文件也不正确; (C)读数据出错的文件正确,其他文件不正确; (D)复制的文件全正确;
5、表达式(4MOD (3))(4MOD 3)的值为:_______

(A)1,-1 (B)1,-1 (C)11 (D)11
6、小张用十六进制,八进制和十进制写了如下一个等式:
5219=33
式中三个数是各不相同进位制的数,试问521933,分别为________

(A)八进制,十进制,十六进制 (B)十进制,十六进制,八进制
(C)八进制,十六进制,十进制 (D)十进制,八进制,十六进制
7、某班有50名学生,每位学生发一张调查卡,上写a,b, c 三本书的书名,将读过的书 打√,结果统计数字如下:
只读a8人;只读b4人;只读c3人;全部读过的有2人;
读过ab两本书的有4人;读过ac两本书的有2人;读过bc两本书的有3人; 问:(1)读过a的人数是_____(2)一本书也没读过的人数是______



(A)12(B)30(C)10(D)24(E)318、下列if语句中,endif表示相应if的结束:
y=0
ifx<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

9、如果用一个字节来表示整数,最高位用作符号位,其他位表示数值。 例如:

0

0

0

0

0

0

0

1

符号位表示正


1

0

0

0

0

0

0

1


表示 -1

符号位表示负

试问这种表示法的整数a的范围应是_______

(A)127≤a≤127 (B)128≤a≤128(C)128≤a<128 (D)128<a≤128

在这样表示法中,以下_____说法是正确的。

(A)范围内的每一个数都只有唯一的格式 (B)范围内的每一个数都有两种格式(C)范围内的一半数有两种格式 (D)范围内只有一个数有两种表示格式

10、设栈S的初始状态为空,现有5个元素组成的序列{12345},对该序列在S栈上依次进行如下操作(从序列中的1开始,出栈后不再进栈):进栈,进栈,进栈,出栈,进栈,出栈,进栈,试问出栈的元素序列是________

(A){54321} (B){21} (C){23} (D){34}

二、问题求解
1、已知一个数列U1,U2,U3,Un,往往可以找到一个最小的k值和k个数a1,a2,, ak,使得数列从某项开始都满足:
un+k=a1un+k1+a2un+k2++akun (A)

例如对斐波拉契数列11235,…可以发现:当k=2a1=1a2=1时,从第3项起(n1)都满足un+2=un+1+un



试对数列132333,…,n3,…求ka1a2,…,ak使得(A)成立。

2、给出一棵二叉树的中序遍历:DBGEACHFI与后序遍历:DGEBHIFCA画出此二叉树。

3、用邻接矩阵表示下面的无向图:

三、阅读程序写出程序的正确运行结果:
1programexp1(input,output);
VARi, 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.

输入:8 9 1 24 6 5 11 15 28 9输出:max=

2programexp2(input,output);
CONSTN=10;
VAR S,I:INTEGER;
FUNCTIONCO(I1:INTEGER):INTEGER;
VAR J1,S1:INTEGER;
BEGIN
S1:=N;
FORJ1:=(N-1) DOWNTO (N-I1+1) DO S1:=S1*J1DIV (N-J1+1);
CO:=S1;
END;
BEGIN
S:=N+1;
FOR I:=2 TO N DO S:=S+CO(I);



WRITELN('S=',S);
END.

3Programexp3(input,output);
VARI,J,S:INTEGER;
B :ARRAY[0..5] OF INTEGER;
BEGIN
S:=1;
FOR I:=1 TO 5 DO B[I]:=I;
J:=1;
WHILE J>0 DO
BEGIN
J:=5;
WHILE (J>0) AND (B[J]=10+J-5) DO J:=J-1;
IF J>0 THEN BEGIN
S:=S+1; B[J]:=B[J]+1;
FOR i:=J+1 TO 5 DO B[i]:=B[J]+i-J END;
END;
WRITELN('S=',S);
END.

4ProgramEXP4(input,output);
constn=4;
typese=array[1..n*2] of char;
vari,j,i1,j1,k,s,t,s1,L,swap:integer;
temp :char;
a :se;
Begin
for i:=1 to n*2 do read(a[i]); readln;
s:=0; t:=0;
for i:=1 to n*2 do
ifa[i]='1' then s:=s+1
else if a[i]='0' then t:=t+1;
if (s<>n) or (t<>n) then writeln('error')
else begin s1:=0;
for i:=1 to 2*n-1 do if a[i]<>a[i+1] then s1:=s1+1; writeln('jamp=',s1); swap:=0;
for i:=1 to 2*n-1 do
for j:=i+1 to 2*n do



if a[i]<>a[j] then begin
temp:=a[i]; a[i]:=a[j]; a[j]:=temp;
s:=0;
for L:=1 to 2*n-1 do
if a[L]<>a[L+1] then s:=s+1;
ifs>swap then begin
swap:=s; i1:=i; j1:=j end;
temp:=a[i];a [i]:=a[j]; a[j]:=temp
end;
if swap>0 then
writeln('maxswap=',swap-s1,'i=',i1,' j=',j1) end
End.

输入:10101100 输出:

四、根据题意,补充完善以下程序

1FBZ串问题。已知一个由01字符组成的长为2n的字符串。请按.以下规则将已给出 的字符串分解成FBZ串:
若其中字符全为‘1,则称其为‘B串;
若其中字符全为‘0,则称其为‘Z串;
若不全为‘0,同时也不全为‘1
,则称‘F串。若此串为F串,则应将此串分 解为2个长为2n1的子串。

对分解后的子串,仍按以上规则继续分解,直到全部为B串或为Z串为止。

例如n=3时,给出01串为:‘10111001

最后输出:FFFBZBFFBZFZB

问题:给出01串,分解成FBZ串。

程序如下:
ProgramEXP5;
const n=8;
var
i, j , st11 , st12 , st2 , s , t : integer;



str1
str2

:array[ 1..n*2 , 1..n ] of char;
:array[ 1..40 ] of char;

Begin
fori:=1 to n*2 do
forj:=1 to n do str1[ i , j ]:=‘ ’;
st11:=1; st12:=1; st2:=0;
fori:=1 to n do read(str1[1, i ]); readln;

while

do



begin
s:=0; t:=0;
fori:=1 to n do
begin
ifstr1[ st12 , i ]=’1’ then s:=s+1;
ifstr1[ st12 , i ]=’0’ then t:=t+1;
end;
if thenbegin
st2:=st2+1; str2[st2]:=’B’
end

else if

then begin



st2:=st2+1; str[st2]:=’Z’
end
elsebegin
st2:=st2+1; str2[st2]:=’F’; j:=(s+ t) div 2; fors:=n*22downto do
fort:=1 to n do
str1[s+2,t]:=str1[s,t];
st11:=st11+2;
fori:=1 to j do
begin
str1[st12+1,i ]:=str1[st12 , i ];
str1[st12+2,i ]:=
end;
fori:= dobegin
str1[st12+1,i]:=’ ’; str1[st12+2,i]:=’ ’ end;
end;
st12:=st12+1;
end;
fori:=1 to st2 do write(str2[i]); writeln;



End.

因篇幅问题不能全部显示,请点此查看更多更全内容