不是VIP会员,不能显示答案,请在后台“我的信息” 在线升级 VIP

一、    基础部分:共44分

1. 我国先后自行研制成功“银河”系列的巨型计算机,其中: “银河”于1983年问世,其运算速度为每秒___________次; “银河Ⅱ”于1992年诞生,其运算速度为每秒__________次; “银河Ⅲ”于1997年通过国家鉴定,其运算速度为每秒__________次。
答案:1亿 10亿 100亿

2. 下列软件均属于操作系统的是:___________________

  • A.WPS与PCDOS
  • B.WINDOWS与MSDOS
  • C.WORD与WINDOWS
  • D.FOXBASE与OS/2

3. 在MS DOS 的根目录中,有如下文件: TIME.EXE TIME.COM TIME.BAT 试问:C:\>TIME < 回车 > 执行的是什么命令?
答案:内部命令TIME

4. 设数组A[10..100,20..100] 以行优先的方式顺序存储,每个元素占4个字节,且已知A[10,20]的地址为1000,则A[50,90]的地址是 。
答案:14240

5. 下面是一个求:1/1+1/2+2/3+3/5+5/8+8/13+13/21+21/32…前20项的和的程序段,试将程序补充完整:
S:=0 ;A:=1 ; B:=1 ;
FOR K:=1 TO 10 DO
BEGIN
S:=____$0$_ ;A:= ___$1$____;
S:= __$2$__ ;
B:= _$3$__ ;
END;
WRITELN(S)

一个求:1/1+1/2+2/3+3/5+5/8+8/13+13/21+21/32…前20项的和的程序段,试将程序补充完整:
          S:=0 ;A:=1 ; B:=1 ;
          FOR  K:=1  TO   10  DO  
            BEGIN 
              S:=____S+A/B_   ;A:= ___A+B____; 
              S:= __S+B/A__      ;
              B:= _A+B__    ;
           END;
         WRITELN(

6. 一个汉字的机内码目前通常用二个字节来表示:第一个字节是区位码的区号加(160)10;第二个字节是区位码的位码加(160)10 。 已知:汉字“却”的区位码是4020,试写出机内码两个字节的二进制的代码:
答案:11001000,10110100

7. 已知ASCII码表中的大写字母后有6个其它字符,接着便是小写字母。现已知:A字母的ASCII码为(41)16{ 表示16进制数41 },试写出如下字母用十进制表示的ASCII码: G → ( )10 B → ( )10 T → ( )10
答案:71 98 116

8. 下图中用点表示城市,点与点之间的联系表示城市间的道路: 试问: ① 能否找出一条从A城市出发,经过图中所有道路一次后又回到出发点的通路来? ② 能否从A出发,找出去每个城市且只去一次的通路来? 若能,则写出通路,否则说明理由。
答案:① 能。例如A→D→C→E→A→F→C→B→A ② 不能。本题的回答要点如下:要到达D,E,F,B四个点之一,必须由A,C出发才可,因为A,C只可能出发一次,所以这样的通路不存在。

9. 为了便于处理表达式,常常将普通表达式(称为中缀表示)转换为前缀{运算符在前,如X/Y写为/XY} 和后缀 { 运算符在后,如X/Y写为XY/}的表达形式。 在这样的表示中可以不用括号即可确定求值的顺序,如: (P+Q)*(R-S)→*+PQ-RS 或 → PQ + RS -* ①试将下面的表达式改写成前缀与后缀的表示形式:   (A) A+B*C/D (B) A-C*D+B∧E ② 试将下面的前缀表示还原成中缀的表示形式,同时写出后缀表示:   +△A *B△C {前缀式中△表示一元运算符取负号,如△A表示(-A)}
答案:①<a>前缀形式为:+A/*BCD;后缀形式为:ABC*D/+ <b>前缀形式为:+-A*CD∧BE;后缀形式为:ACD*-BE∧+ ② 中缀形式为(-A)+B*(-C);后缀形式为:A△BC△*+

10. 一个将角编了号的正三角形可以绕着外心O(中心)逆时针旋转1200,如下图所示: 如果将这一旋转用字母a 来表示,看作运算对象,同时用aa或a^2表示旋转120°后再旋转120° ,也就是说将连续运动看作乘法运算,那么三角形状态(可简称为元素)即可与运动表达式关联起来,请回答: ① 如果将图一的原始三角形连续旋转120°N次,简单地表示为a^n (N为任意自然数),试求an 的值(指三角形旋转后的结果状态); ② 如果将下面的旋转看作是a的逆元素,记为a-1 ,则有a^-1 = a^2 试求:a^-n
答案: a ,当n MOD 3=1 时; a2,当n MOD 3=1 时; a2,当n MOD 3=2 时; a ,当n MOD 3=2 时; a3,当n MOD 3=0 时; a3,当n MOD 3=0 时;

二、根据题目要求,补充完善以下程序:(共56分)

1. [问题描述] 读入n个不相同且不为0的数(1<=n<=100),不用排序,求出其中第r个大的数(1≤r≤n),即有r-1个数比它大,其余的数都比它小。
例如:输入3,14,22,15,17,6,其中第3个大的数为15。

[算法说明] 以数组a[1..100]记录读入的n个数,并以0结束(0本身不是n个数中的数)。然后从第一个数开始,将它与其余的数进行比较并记录出比它大的数的个数(存于变量y中),若y=r-1时,得到所求结果:否则对下一个数进行同样的处理。
[程序清单]

    program exp2(input,output)
                 Var r,i,j,k,x,y : integer;
                    a       : array[1..100] of integer;
                    p       : boolean;
               Begin
                   j:=0;
                   readln(x);
                   while  X<>0  do
                           begin
                                    J:=J+1     ;
                               a[j]:=x;
                                    READLN(X)     
                      end;
                    readln(r);  p:=true;  i:=1;
                    while  p  do
                      begin
                            X:=A[I]  ; y:=0;
                          for k:=1 to j do
                              if  x<a[k]  then     Y:=Y+1  ;
                              if      Y=R-1     then  begin
                                                    writeln(x);
                                                     p:=false
                                                  end
                               else  i:=i+1
                      end
               End.

2. [问题描述] 在进行正整数的除法运算时,可以通过减法来实现。
例如x?y=Q..R(Q:商,R:余数)可通过下列的方式实现:
q:=0; r:=x;
while r>=y do begin r:=r-y; q:=q+1 end;
结果,商在q中,余数在r中。

[算法说明] 上面的算法有一个缺点,就是当x比较大、y比较小时,则运算的次数非常多,速度太慢。为提高速度,下面给出改进的算法:先找一个非常接近x的数w,且满足:w=y?2k,y?2 k-1<=x<w,然后通过减法与移位的运算,以较少的运算次数完成除法。

[程序清单]

      program exp3(input,output)
                   var  x,y,w,r,q:integer;
                 Begin
                    readln(x);
                    r:=x;
                            W:=Y       
                   while  w<=r  do      W:=W+W     
                   q:=0;
                   while      W>Y     do
                      begin
                         w:=w div 2;
                              Q:=Q+Q     
                         if r>=w then begin
                                          Q:=Q+1    ;
                                      R:=    R-W    ;
                                    end;
                       end;
                          writeln(q, ‘…’, R);
                 End.

3. [问题描述] 一个正整数(非素数)可表示成它的因子(1与其本身除外)的乘积。
例如:12有因子2,3,4,6,所以可表示为:
12=2*2*3=4*3=2*6
给出任一个正整数N,求出它所有的因子乘积的表达式(交换律得出的不同式子算同一种)。

[算法说明] 读入一个整数N,首先求出它的所有的因子以及每个因子可能的次数。
例如:整数48:
因子:2 3 4 6 8 12 16 24
次数:4 1 2 1 1 1 1 1
将上面的结果存入数组A:ARRAY[0..20,1..2]中。其中:A[?,1]表示因子;A[?,2]表示次数。
然后用简单回溯的方法求出所有可能的表示。
数组B[0..20]记录取数情况;C:ARRAY[0..20]工作单元。
[程序清单]

      program exp4(input,output);
                  var a          : array[0..20,1..2] of integer;
                     c,b         : array[0..20] of integer;
                     n,m,I,j,s,k,l  : integer;
                Begin
                  WRITELN;readln(n);
                   for i:=1 to 20 do a[i,1]:=0;
                        a[0,1]:=1   ;  a[0..2]:=1; j:=0;  
                   for i:=2 to n-1 do
                         begin
                           s:=0; m:=n;
                           while(m<>0) and (m mod i=0) do
                           begin
                              m:=m div i;
                                  S:=S+1    ;
                           end;
                           if     S>0     then begin
                                               j:=j+1;      a[J,1]:=i ;
                                               a[j,2]:=  S  ;
                                             end
                         end;

                 for i:=0 to j do b[i]:=0;
                    whil b[0]=0 do
                      begin
                        k:=j;
                        while   b[k]:=a[k,2]   do k:=k-1;
                        b[k]:=b[k]+1;
                        for L:=  K+1 TO J   do b[L]:=0;
                        s:=1;
                        for i:=1 to j do
                           if b[i]<>0 then for L:=1 to b[i] do
                                            S:=S*a[i,1]    ;
                        if s=n then begin
                                   for i:=1 to j do c[i]:=b[i];
                                    WRITE(‘(‘); M:=1;
                                    for i:=1 to j do
                                      while(c[i]>0) and (M<>N) do
                                      begin
                                         M:=M?A[i.1];
                                         if M=N then write(a[i,j])
                                            else begin
                                                 write(A[i,1],’?’); 
                                                 c[i]:=c[i]-1;
                                                end;
                                       end;
                                    writeln(‘)’);
                                 end
                      end
               End.