信息学初赛模拟试题(六)
(中学组PASCAL语言,两小时完成)

◆    ◆请将正确答案在答卷上填写,在本试题卷上答题无效◆◆

一、选择题:(本题共20小题,1—15小题为单选题,16—20小题为不定项选择题,只有选对才有分。每题1.5分,共30分)

1.微型计算机的性能主要取决于(    )。
A. 内存         B. 中央处理器        C. 硬盘   D. 显示卡    E. 声音卡

2.字长为32位的计算机是指(    )。
A.该计算机能够处理的最大数不超过32 
B.该计算机中的CPU可以同时处理32位的二进制信息
C.该计算机的内存量为32MB
D.该计算机每秒钟所能执行的指令条数为32MIPS
E.该计算机的硬盘转速是32转 

3.MS——DOS文件系统目录的组织形式属于(    )。
  A.关系型结构   B.网络型结构   C.树型结构   D.直线型结构    E.星型结构

4.Windows应用环境中鼠标的拖动操作不能完成的是(    )。
  A.当窗口不是最大时,可以移动窗口的位置
B.当窗口最大时,可以将窗口缩小成图标
C.当窗口有滚动条时可以实现窗口内容的滚动
D.可以将一个文件移动(或复制)到另一个目录中去        
E.调整任务栏的大小和位置

5.下面关于PASCAL语言的几种说法中,正确的是(    )。
  A.它是一种高级语言   B.它是一种汇编语言   
C.它是一种低级语言   D.它是一种机器语言   E.它不是一种过程化语言

6.下列叙述中正确的是(    )。
  A.计算机病毒只能传染给可执行文件       
B.计算机软件是指存储在软盘中的程序       
C.计算机每次启动的过程之所以相同,是因为RAM 中的所有信息在关机后不会丢失      D.硬盘虽然装在主机箱内,但它属于外存       
E.ROM是随机存储器

7.多媒体计算机系统的两大组成部分是(    )。
A.    多媒体功能卡和多媒体主机      
B.    多媒体通信软件和多媒体开发工具      
C. 多媒体输入设备和多媒体输出设备     
D. 多媒体计算机硬件系统和多媒体计算机软件系统      
E. 多媒体主机和多媒体信息

8.用WORD编辑文档后并存储在文件中,该文件的文件名缺省后缀名为(    )
A. *.txt        B. *.bmp        C. *.exe        D. *.doc        E. *.com

9.要在WINDOWS标准窗口的下拉菜单中选择命令,下列操作错误的是(    )。
A.    用鼠标单击该命令选项     
B.    用键盘上的上下方向键将高亮度条移至该命令选项后再按回车键     
C.    同时按下CTRL键与该命令选项后括号中带有下划线的字母键    
D.    直接按该命令选项后面括号中带有下划线的字母键    
E.    同时按下ALT键与该命令选项后括号中带有下划线的字母键

10.十进制数397的十六进制值为(  )。
A. 18D        B. 18E       C. 277        D. 361       E.8



 
PROGRAM  EXP2 
VAR I,J,L,N,K,S,T: INTEGER;
B : ARRAY[1..10] OF 0..9;
BEGIN
READLN(L,N);S:=L; K:=1;  T:=L;
WHILE S<N DO
BEGIN K:=K+1; T:=T*L;   
S:=S+T  END;
S:=S-T; N:=N-S-1;
FOR I:=1 TO 10  DO  B[I]:=0;
 J:=11; 
WHILE  N>0  DO
BEGIN  J:=J-1;  B[J]:=N MOD L;           N:=N DIV  L END;
FOR I:=10-K+1 TO 10 DO WRITE(CHR(ORD('A')+B[I]));
END.
输入:4  167
输出:BBAC
PROGRAM  EXP3
   VAR 
    I,J:INTEGER;
    A:ARRAY[1..12] OF INTEGER;

   PROCEDURE  SW(I1,J1:INTEGER);
   VAR  K1:INTEGER;
   BEGIN
   FOR  K1:=1 TO(J1-I1+1) DIV 1  DO
   BEGIN
   A[I1+K1-1]:=A[I1+K1-1]+A[J1-K1+1];   
A[J1-K1+1]:=A[I1+K1-1]-A[J1-K1+1];
   A[I1+K1-1]:=A[I1-K1+1]-A[J1-K1+1];
   END;
  END;

BEGIN
 J:=200;
 FOR I:=1 TO 12 DO
  BEGIN
   A[I]:=I;  J:=J-I;
END;
SW(1,4);SW(5,10);
SW(11,14);SW(1,14);

FOR I:=1 TO 12 DO
  BEGIN
   IF J MOD I =1 THEN WRITE(A[I]:4);
   J:=J-A[I];
  END;
WRITELN;
 end.
输出:   2  68   5
 

4.PROGRAM  EXP4(INPUT,OUTPUT);
   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.
 
输出:S=1024
 

 

四、完善程序(共2题,每题14分,共28分)
 1. 1000!尾0问题
【问题描述】
以下程序用于统计1000!末尾有多少个0。其中1000!=1&acute;2&acute;3&acute;…&acute;1000。实际上我们只要统计1000!有多少个因子10。由于10=5&acute;2,因而只需统计有多少个因子5和2。显然在1~1000的所有数中,5的因子个数比2的因子个数少。因此,只要统计1~1000的所有数中共有多少个因子5就行了。
 
program COUNT0;
var  i,j,n:integer;
begin
  n:=0;
  for   i:=1 to 200 ①      do
    begin
      j:=i*5;
      while   j mod 5     =0 do
        begin
         n:=n+1;  ③    
         j:= j div 5; ④   
        end;
    end;
  writeln(n:4);
end.

2. 高精度正整数乘法问题 
以下程序用于求任意2正整数的乘积。程序中用a,b表示这2个正整数,并将它们的乘积存于数组ab中。根据数的乘法规则,将a的所有位与b的所有位从低位至高位两两相乘。设a的第i位与b的第j位相乘的结果为ab0,则ab0的个位应加到乘积ab的第i+j-1位上,ab0的十位应加到乘积ab的第i+j位上。在加的过程中也应注意进位。

program MULTIPLY;
const n=100;
Type arr=array[1..n] of integer;
var
  a,b:arr;
  ab:array[1..2*n]of integer;
  lab,la,w,lb,ab0,ab1,ab2,i,j,t:integer;
 procedure Init(var c:arr;var length:integer);
var i,t,m:integer;
    ch:Char;
begin
  length:=0;
  WriteLn('Input a number:');
  while (not eoln) do
    begin
      length:=length+1;
      read(ch);
      c[length]:=t;
    end;
    readln;
    writeln(length);
  WriteLn('The number is ');
  for i:=1 to length do Write(c[i]:1);
  Writeln;
  m:= length div 2;  
  for i:=1 to m do
    begin
      t:=c[i];
      c[i]:=c[length+1-i];
      c[length+1-i]:=t;
    end;
end;
 
begin
  Init(a,la);
  Init(b,lb);
  lab:=la+lb; 
  for i:=1 to lab do ab[i]:=0;
  for i:=1 to la do
    for j:=1 to lb do
      begin
        ab0:=a[i]*b[j];
        ab2:= ab0 div 10;     
        ab1:= ab0 mod 10;
        w:=i+j;
        ab[w-1]:=ab[w-1]+ab1;
        ab[w]:=ab[w]+ab2+(ab[w-1] div 10);
        ab[w-1]:=ab[w-1] mod 10;
      end;
  if ab[lab]=0 then   lab:=lab-1;   
  for i:=lab downto 1 do Write(ab[i]:1);
  Writeln;
end. 南海区青少年信息学奥林匹克竞赛初赛模拟试题参考答案
(中学组PASCAL语言)