|| 返回 || 本站首页 ||奥赛信息||计算机基础||pascal基础||数据结构||经典算法||试题汇编||校本教程||自主练习||

|| 试题汇编>> 1998年全国初赛试题(提高组)

双击自动滚屏 

   

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

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

  一、选择填空:(23%)

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

(A)MSDOS      (B)UCDOS      (C)PASCAL       (D)WINDOWS 95

2、在计算机内部,用来传送、存储、加工处理的数据或指令(命令)都是以_____形式进行的。(1%)

(A)十进制码     (B)智能拼音码   (C)二进制码       (D)五笔字型码

3、已知计算机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命令。

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

Abort, Retry, Ignore, Fail?

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

(A)读数据出错的文件不正确,其他文件正确;

(B)读数据出错的文件不正确,其他文件也不正确;

(C)读数据出错的文件正确,其他文件不正确;

(D)复制的文件全正确;

5、表达式(4 MOD (3))(4 MOD 3)的值为:_______(2%)

(A)1,-1      (B)1,-1      (C)11        (D)11

6、小张用十六进制,八进制和十进制写了如下一个等式:

5219=33

式中三个数是各不相同进位制的数,试问521933,分别为________(3%)

(A)八进制,十进制,十六进制    (B)十进制,十六进制,八进制

(C)八进制,十六进制,十进制     (D)十进制,八进制,十六进制

7、某班有50名学生,每位学生发一张调查卡,上写a, b, c三本书的书名,将读过的书打√,结果统计数字如下:                                                      (4%)

只读a8人;只读b4人;只读c3人;全部读过的有2人;

读过ab两本书的有4人;读过ac两本书的有2人;读过bc两本书的有3人;

问:(1)读过a的人数是_____   (2)一本书也没读过的人数是______

(A)12     (B)30     (C)10     (D)24      (E)31

8、下列if语句中,endif表示相应if的结束:                          (2%)

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时结果为______         (2%)

(A)y=9          (B)y=5        (C)y=10       (D)y=100       (E)y=200

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

例如:

0

0

0

0

0

0

0

1

   ↑符号位表示正              表示+1

1

0

0

0

0

0

0

1

   ↑符号位表示负              表示-1

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

(A)127a127                          (B)128a128

(C)128a<128                           (D)128<a128

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

(A)范围内的每一个数都只有唯一的格式

(B)范围内的每一个数都有两种格式

(C)范围内的一半数有两种格式

(D)范围内只有一个数有两种表示格式

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

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

二、问题求解:(21%)

1、已知一个数列U1U2U3,…Un,…往往可以找到一个最小的k值和k个数a1a2,…,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)成立。         (8%)

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


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

三、阅读程序写出程序的正确运行结果;(39%)

1.  program exp1(input,output);                          (6%)

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.

输入:8  9  -1  24  6  5  11  15  -28  9

输出:max=

 

2.  program exp2(input,output);                         (9%)

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.

 

3.  Program exp3(input,output);                        (12%)

VAR I,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.  Program EXP4(input,output);                          (12%)

const n=4;

type se=array[1..n*2] of char;

var i,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

     if a[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;

                       if s>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   输出:

四、根据题意,补充完善以下程序:(17%)

    FBZ串问题。已知一个由01字符组成的长为2n的字符串。请按.以下规则将已给出的字符串分解成FBZ串:

若其中字符全为‘1’,则称其为‘B’串;

若其中字符全为‘0’,则称其为‘Z’串;

若不全为‘0’,同时也不全为‘1’,则称‘F’串。若此串为F串。则应将此串分解为2个长为2n1的子串。

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


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

最后输出:FFFBZBFFBZFZB

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

程序如下:(17%)

Program EXP5;

  const n=8;

  var

i,j,st11,st12,st2,s,t:integer;

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

str2           :array[1..40] of char;

      Begin

      for i:=1 to n*2 do

         for j:=1 to n do   str1[i,j]:=‘ ’;

         st11:=1;  st12:=1;  st2:=0;

      for i:=1 to n do read(str1[1,i]);   readln;

      while       do                                  (4%)

        begin

          s:=0;  t:=0;

          for i:=1 to n do

            begin

              if str1[st12,i]=’1’ then s:=s+1;

              if str1[st12,i]=’0’ then t:=t+1;

            end;

          if     then begin                          (2%)

                         st2:=st2+1;  str2[st2]:=’B’

                        end

                    else if       then begin            (2%)

                                        st2:=st2+1;  str[st2]:=’Z’

                                      end

                                  else begin

                                       st2:=st2+1; str2[st2]:=’F’; j:=(s+t) div 2;

                                       for s:=n*22 downto      do        (3%)

                                         for t:=1 to n do

                                           str1[s+2,t]:=str1[s,t];

                                         st11:=st11+2;

                                       for i:=1 to j do

                                         begin

                                           str1[st12+1,i]:=str1[st12,i];

                                           str1[st12+2,i]:=             (4%)

                                         end;

                    for i:=      do begin                                 (2%)

                                     str1[st12+1,i]:=’ ’; str1[st12+2,i]:=’ ’

                                    end;

                 end;

                   st12:=st12+1;

           end;

           for i:=1 to st2 do    write(str2[i]);  writeln;

         End.