程序设计
上海市(2000.4)

答 案

一、单项选择题(在下列每小题四个备选答案中选出一个正确答案,并将其字母标号填入题干后面的括号内。每小题1分,
共10分)
1.若x,y为实型变量,则要检查x等于y在pascal语言中可写成( )
 A.x=y B.|x-y|<1E-6 C.abs(x)=abs(y) D.abs(x-y)<1E-6
2.下列符号在pascal语言中是标准类型标识符的是( )
 A.begin B.text C.input D.odd
3.公式(1+y)4在pascal语言中可写成( )
 A.sqr(1+y)*(1+y)(1+y) B.(1+y)(1+y)(1+y) C.(1+y)(1+y)(1+y)(1+y) D.exp(4*ln(1+y))
4.设有如下程序片断,执行程序输出结果是( )
var a,b,c,d:integer;
 begin read(a,b);readln(c);readln(d);
 writeln(a:3,b:3,c:3,d:3)
end.
执行程序时输入数据:
  55 66  77 88  99 10
 A.55 66 77 10 B.55 77 88 99 C.55 66 77 99 D.66 88 99 10
5.for循环控制变量的类型是( )
 A.有序类型 B.简单类型 C.标准类型 D.有序类型和指针类型  
6.执行下列程序段输出是( )
sum:=0;
for counter:=7 downto 4 do
case counter of
1,7:sum:=sum+1;
2,3,6:
4,5:sum:=sum+2
end;
writeln(sum);
 A.5 B.1 C.0 D.4
7.过程与函数中的变量参数所对应的实在参数必须是( )
 A.常量 B.变量 C.表达式 D.常数与表达式
8.在记录类型中,定义开域语句的目的( )
 A.简化域变量的书写 B.简化域变量的操作 C.节省存储空间 D.提高运行速度
9.对文件进行读写操作时,勿须调用标准过程reset和rewrite的文件是( )
 A.正文文件 B.顺序文件 C.正文文件和顺序文件 D.标准文件input和output
10.在pascal语言中,指针变量允许进行赋值、相等和不相等运算,但要求类型必须( )
 A.相容 B.赋值相容 C.相同 D.一致

二、填空题(每空1分,共15分)
1.程序设计语言是指用来书写_______________的语言,是人与计算机进行信息通讯的工具。
2.布尔类型的值有两个:true和false。它们是标准常量,规定其次序关系为_______________。
3.pascal程序说明部分由标号说明,常量说明,_______________,变量说明及过程和函数说明五个部分组成。
4.pascal语言中,标识符有两类。一类是由pascal语言文本规定的标识符,称为_______________;另一类是由用户定义
的标识符。
5.执行语句writeln(succ(pred(358 div 6)))后,输出结果是_______________。
6.将代数式2根号[y2+4(x2/3)]写成pascal语言表达式_______________。
7.执行语句if(2*2=5)<(2*2=4) then writeln('true')else writeln('false') 后,输出结果是______________。
8.画出直到语句的语法图_______________
9.执行如下程序段: for ch:='a' to 'd' do begin for i:=4 downto 1 do write(ch:2); writeln end; 后,输
出结果是_______________ _______________ _______________ _______________
10.在程序的说明部分加以说明的且适用于整个程序的量,称为_______________。
11.执行如下程序段: var a,b:integer; procedure q(x,y:integer) begin x:=a+b;y:=a-b end; begin{main program} a:=1;b:=2;q(a,b);write(a:3,b:3) end. 后,输出结果是_______________。
12.设ch为字符变量,将以条件(ch='0')or(ch='2')or(ch='4')or(ch='8')用集合表示_______________。
13.设有以下说明: var a:array[-1..1,-1..1]of integer;则数组a的个数为_______________。
14.顺序文件是数据文件,仅有_______________。
15. 标准过程dispose(p)的作用是用来消去由_______________。

三、改错题(指出所给程序中的错误,在错误位置处打上横线标记,并注明错误原因。每小题4分,共20分)
1.1+1/(1·2)+1/(2·3)+…+1/[n(n+1)]…的和,直到最后一项小于0.001为止。
 程序:program exam1(input,output);
    var  b:integer;
       a,c:real;
    begin  a:=1
    repeat
    b:=b+1
    c:=1/(b*(b+1));
    a:=a+c
    until(a<=e-3)
    writeln('a=',a:8:2)
  end.
2.程序功能:读入一字母,如果它在字母表的前半部,则输出其后继字母,如果在字母表的后半部,则输出其
前趋的字母。
 程序:program exam2(input,output);
    var letter:char;
    begin
     readln(letter);
     case letter<=m of
     true:writeln(succ(letter));
     false:writeln(pred(letter))
    end.
3.程序功能:求y=xn。
 程序:program exam3(input,output);
     var n:integer;
     x:real;
     function power(x1:real,n1:integer):real;
     var i:integer;
       z:real;
     begin
       z:=1;
      if n1>1 then for i:=1 to n1 do z:=z*x1;
      if n1<0 then for i:=1 to n1 do z:=z div x1;
      power:=z
      end;
      begin
       read(x,n);
       power(x,n)
      end.
4.程序功能:求矩阵A的转置矩阵AT。(即A=(aij),则有AT=(aji))过程说明:设有类型定义:
procedure trans(a,at:array[1..n,1..n]of real);
var i,j:integer;
begin
for i:=1to n do
for j:=1 to n do
at[i][j]:=a[j][i]
end;
5.程序功能:设有如下类型color的集合a,此过程是求出a中的元素的个数。
过程说明: type primary=(red,yellow,blue);
color=set of primary;
procedure elem(a:color;var count:integer);
var x:primary;
begin
x:='red';
count:=0;
while a<>[]do
begin
while not([x] in a)do
x:=succ(x);
count:=count+1;
a:=a-[x]
end
end;

四、阅读程序(阅读给出的程序,将其运行结果写在横线上。第1、2小题各4分,第3、4小题各5分,第5小题7分,
共25分)
1. program exam1(input,output);
var i:integer;
begin
i:=1
while i*(i+2)<399 do i:=i+2;
if i*(i+2)=399
then writeln(i:3,i+2:3)
else writeln('No find')
end.
执行该程序,其输出为______________。
2. program exam2(output);
var a,b:integer;
procedure p(x:integer; var y:integer);
begin
x:=a+b;y:=a-b;writeln(x:3,y:3)
end;
begin
a:=1;b:=2;p(a,b);
writeln(a:3,b:3)
end.
执行该程序,其输出为_______________。
_______________。
3.program exam3(output);
const n=10;
var c:array [1..n] of integer;
i,k:integer;
begin
c[1]:=1; c[2]:=1
for i:=3 to 10 do c[i]:=c[i-2]+c[i-1];
k:=c[3];c[3]:=c[9];c[9]:=k;
for i:=1 to 10 do write(c[i]:4);
writeln
end.
执行程序,其输出为__________________________________________。
4.program exam4(input,output);
const n=5;
var i,j:integer;
a:array[0..n,0..n]of integer;
begin
for i:=0 to n do
for j:=0 to n do a[i,j]:=0;
a[0,1]:=1;
for i:=1 to n do
for j:=1 to i do
a[i,j]:=a[i-1,j]+a[i-1,j-1];
for i:=1 to n do
begin
write('':10-2*i);
for j:=1 to i do write(a[i,j]:4);
writeln
end
end.
执行该程序,其输出为:___________________________。
___________________________。
___________________________。
___________________________。
___________________________。
5.program exam5(input,output);
type pointer=^node;
node=record
data:integer;
next:pointer
end;
var first ,p,q:pointer;
i,m,n,x:integer;
begin
first:=nil;
read(x);new(q);first:=q;
m:=0;n:=0;i:=1;
while x>=0 do
begin
new(p);
p^.data:=x;
q^.next:=p;
q:=p;
if odd(i)then m:=m+x
else n:=n+x;
i:=i+1;
read(x)
end;
writeln('number1=',m/(i-i div 2):8:2);
writeln('number2=',n/4:8:2)
end.
执行该程序时如输入下列数据7 17 24 11 8 3 0 4 1 -4,
则其输出为:_________________________
_________________________

五、编程题(阅读给出的程序,在横线上填入适当的词句、表达式或其它万分,以完善程序。第1、2小题各4分,第3小题10分,第4、5 小题各6分,共30分) 1.编制程序,求级数:S=1-1/(1o2)+1/(2o3)-1/(3o4)+……+(-1)/[no(n+1)]+……的和。当|(-1)n/[no(n+1)]|<0.005时停止 计算,打印S的值 program calsum(output);
var k, n:integer;
s,term:real;
begin
k:=-1;(1)_____________;n:=1;
repeat
term:=1.0*k/(n*(n+1));s:=s+term;
(2)____________
(3)____________
until(4)_____________
write('s=',s:8:2)
end.
2.设p(x)是十进制整数x的所有数码的乘积。试求p(x)=x2-10x-22成立的一切正整数。(提示只有两位数) program ex68(output);
var i:integer;
function p(x:integer):integer;
begin p:=(x-10)*x-22 end;
function q(x:integer):integer;
var a:integer;
begin
(1)________________
while x>0 do
begin
a:a*(n mod 10);
(2)_______________
end;
(3)_______________
end;
begin
for i:=1 to 99 do
if(4)_______________then writeln(i:3)
end.
1 2 3 4 5
1 1 2 3 4
3.设计一个程序,形成矩阵 1 1 1 2 3 并输出。
1 1 1 1 2
1 1 1 1 1
program tran(input, output);
var i,j,n:integer;
a:(1)______________________________________________
begin
for i:=1 to 5 do
begin
(2)_______________
for j:=1 to 5 do
if(3)_______________then a[i,j]:=1
else begin
(4)______________
a[i,j]:=n
end
end;
for i:=1 to 5 do
begin
for j:=1 to 5 do write(a[i,j]:3);
(5)_______________
end
end.
4.编制程序生成一个文本文件,它由一个已知文件的所有奇数行组成。
program oddnum(oldfile,newfile,output);
var oldfile,newfile:(1)_______________
c:char;
begin
assign(oldfile,'1.txt');
assign(newfile,'e.txt');
reset(oldfile);rewrite(newfile);
while(2)______________do
begin
while(3)_________________do
begin
read(oldfile,c)
; (4)_________________
end;
(5)_________________
(6)_________________
end;
close(oldfile);close(newfile)
end.
5.编制一函数,复制以head为链头的链表,并将新链表之头的值作为一个函数值。设类型定义: type pointer=^t;
t=record ele:integer;next:pointer end;
函数说明如下:
function copy(head:pointer):pointer;
var p,q,tail:pointer;
begin
if head=nil then copy:=nil
else begin
new(p); p^.ele:=head^.ele;
tail:=p;head:=head^.next;
while(1)___________________do
begin
new(q);q^.ele:=head^.ele;
(2)____________________
tail:=q;head:=head^.next
end;
tail^.next:=nil;
(3)___________________
end
end;