第四届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题(高中组)
(Pascal 语言竞赛用时:2小时)
●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一.选择填空:
1、操作系统是一类重要的系统软件,下面几个软件中不属于操作系统的是 。
(A)MS-DOS (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)-1,1 (D)1,1
6、小张用十六进制,八进制和十进制写了如下一个等式:
52-19=33
式中三个数是各不相同进位制的数,试问52,19,33,分别为________。
(A)八进制,十进制,十六进制 (B)十进制,十六进制,八进制
(C)八进制,十六进制,十进制 (D)十进制,八进制,十六进制
7、某班有50名学生,每位学生发一张调查卡,上写a,b, c 三本书的书名,将读过的书 打√,结果统计数字如下:
只读a者8人;只读b者4人;只读c者3人;全部读过的有2人;
读过a,b两本书的有4人;读过a,c两本书的有2人;读过b,c两本书的有3人; 问:(1)读过a的人数是_____。 (2)一本书也没读过的人数是______。
(A)12人 (B)30人 (C)10人 (D)24人 (E)31人8、下列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 |
↑符号位表示负
①试问这种表示法的整数a的范围应是_______。
(A)-127≤a≤127 (B)-128≤a≤128(C)-128≤a<128 (D)-128<a≤128
②在这样表示法中,以下_____说法是正确的。
(A)范围内的每一个数都只有唯一的格式 (B)范围内的每一个数都有两种格式(C)范围内的一半数有两种格式 (D)范围内只有一个数有两种表示格式
10、设栈S的初始状态为空,现有5个元素组成的序列{1,2,3,4,5},对该序列在S栈上依次进行如下操作(从序列中的1开始,出栈后不再进栈):进栈,进栈,进栈,出栈,进栈,出栈,进栈,试问出栈的元素序列是________。
(A){5,4,3,2,1} (B){2,1} (C){2,3} (D){3,4}
二、问题求解:
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)都满足un+2=un+1+un。
试对数列13,23,33,…,n3,…求k和a1,a2,…,ak使得(A)成立。
2、给出一棵二叉树的中序遍历:DBGEACHFI与后序遍历:DGEBHIFCA画出此二叉树。
3、用邻接矩阵表示下面的无向图:
三、阅读程序写出程序的正确运行结果:
1.programexp1(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=
2.programexp2(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.
3.Programexp3(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.
4.ProgramEXP4(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 输出:
四、根据题意,补充完善以下程序:
1.FBZ串问题。已知一个由0,1字符组成的长为2n的字符串。请按.以下规则将已给出 的字符串分解成FBZ串:
①若其中字符全为‘1’,则称其为‘B’串;
②若其中字符全为‘0’,则称其为‘Z’串;
③若不全为‘0’,同时也不全为‘1’
,则称‘F’串。若此串为F串,则应将此串分 解为2个长为2n-1的子串。
对分解后的子串,仍按以上规则继续分解,直到全部为B串或为Z串为止。
例如n=3时,给出0—1串为:‘10111001’
最后输出:FFFBZBFFBZFZB
问题:给出0,1串,分解成FBZ串。
程序如下:
ProgramEXP5;
const n=8;
var
i, j , st11 , st12 , st2 , s , t : integer;
str1 | :array[ 1..n*2 , 1..n ] 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*2-2downto ④ 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.
因篇幅问题不能全部显示,请点此查看更多更全内容