泉州五中信息技术兴趣小组PASCAL语言测试题.docx
《泉州五中信息技术兴趣小组PASCAL语言测试题.docx》由会员分享,可在线阅读,更多相关《泉州五中信息技术兴趣小组PASCAL语言测试题.docx(24页珍藏版)》请在冰豆网上搜索。
泉州五中信息技术兴趣小组PASCAL语言测试题
2008年泉州五中信息技术兴趣小组PASCAL语言测试题
班级座号姓名
一.判断题(每小题1分,共10分)
()1.……
a:
=3;b:
=5;ifa=3andb=5thenwrite(’true’);
……
()2.varn:
integer
……
casenof
1,3,5:
writeln(’odders’);
2,4,6:
writeln(’evener’);
3,4,7:
writeln(’other’)
end;
……
()3.varb:
boolean;i,n:
integer;
……
b:
=true;
fori:
=2ton/2do
ifnmodi=0thenb:
=false;
……
()4.procedurepa(n:
integer):
integer;
()5.vara,b:
record
x,y:
real
end;
……
ifa=bthenwriteln(’allvalueisequal’);
……
()6.constc=100or50;
()7.vari,j,k=integer;ch1:
char;ch1:
boolean;
()8.functionpa(n:
integer);
()9.consta=20;a,b=20;
()10.varflag:
boolean;
……
read(flag);
……
二.不定项选择题(每小题1分,共15分)
()1.假设变量b、c的声明情况如下,选出下面正确的赋值
varc:
char;b:
boolean;
a.c:
=’1998’;b.c:
=1;c.b:
=’true’;d.c:
=’1’;
()2.选出下面正确的表达式。
a.3<>5and5-3=2b.‘5’+’3’
c.chr(ord(‘b’))d.ord(‘2’)/2mod2
()3.已知有数组说明:
var a:
array[1..10]ofinteger;
a中的值如下表所示:
a[1]
a[2]
a[3]
a[4]
a[5]
a[6]
a[7]
a[8]
a[9]
a[10]
1
12
4
3
7
7
14
10
4
2
执行语句writeln(a[a[7]diva[3]])后的输出是
a.4b.7 c.1d.12
()4.假设变量p、q、r、s的声明情况如下所述,且p、q、r、s都已赋值,选出下面正确的表达式。
varp,q:
integer;r,s:
real;
a.p:
=qb.p<>rc.p:
=rd.q<>s
()5.假设变量a和s按如下情况声明,且a和s已赋值,选出正确的表达式。
vars:
setof1..5;a:
setof‘a’..’e’;
a.a<>sb.a∩s=[]c.a<>[]d.not‘a’ins
()6.设有过程首部:
procedure f(var x:
integer;y:
real);
若a,b:
integer;c:
real; 则合法的调用语句是
a.f(2,3) b.f(2,3.0) c.f(a+b,c)d.f(b,2)
()7.设有一函数定义如下:
functionhigh(x,y:
integer):
integer;
begin
high:
=x-(x+y)div(x-y)
end;
执行语句t:
=high(4,high(6,high(4,1)))后,变量t的值是
a.3 b.-3c.1d.0
()8.分析下面的程序,判断a,b,c,d对应的4种语句中,正确的是
program pro(input,output);
type day=(mon,tue,wed,thu,fri);
var
a.h:
(x1,x2,x3,wed);
w1,busy:
day;
begin
b.busy:
=mon;
c.readln(w1);
d.writeln(w1)
end.
()9.设a, b, c,d均为整型变量,有下面的程序段:
a:
=10;b:
=0;
read(a,b);
readln(c);
readln(d);
若从键盘输入:
7
654
321(注:
表示回车)
则a、b、c、d中的数是。
a.7 0 6 3b.7 6 5 4 c.7 6 3 2 d.7 6 5 3
()10.已知有说明varx:
real;下列程序段中错误的是。
casex<=2.0of
0:
x:
=0;
1:
x:
=1;
end;
a.情况表达式中有常数b.情况常量与情况表达式类型不一致
c.情况表达式为关系d.赋值语句两边类型不一致
()11.有下列程序
program print(input,output);
var ch1,ch2,ch3:
char;
begin
readln(ch1); readln(ch2,ch2); readln(ch3,ch3,ch3);
writeln(ch1,ch2,ch3)
end.
若运行时输入
red
yellow
blue
则正确的输出是
a.rybb.reuc.rdld.blu
()12.下列程序段中,循环体执行的次数为
i:
=1;
repeat
n:
=i*i; i:
=i+1
until n>i;
a.1b.2c.3d.4
()13.下图为某链表的一部分,下列程序段可以实现释放q所指向的结点是
a.p^.next:
=r;dispose(q);b.p^:
=r;dispose(q);
c.p^.next:
=q^.next;dispose(q);d.p^:
=q^.next;dispose(q);
()14.执行后a的值与其他三个程序段不相同的是
a.a:
=0; b.a:
=0;i:
=1;
i:
=1; whilei<=5do
repeat begin
i:
=i+1; a:
=a+1;
a:
=a+1 i:
=i+1
untili>6; end;
c.a:
=0; d.a:
=0;i:
=1;
fori:
=1to5do repeat
a:
=a+1; i:
=i+1;
a:
=a+1
untili>5;
()15.设有说明:
typearr=array[1..10]ofinteger;
ptr=^arr;
varp:
ptr;
若已执行了new(p),下面合法的赋值语句是
a.p^[2]:
=10;b.p[2]^:
=10;c.p^:
=10;d.p[2]:
=10;
三、填空题(每空1分,共15分)
1.vara:
array[1..10,’a’..’e’]ofchar;a中有_________个元素,每个元素是_________类型。
2.vartool:
(bike,car,motor,bus);pred(car)=__________;succ(car)=______________。
3.varp,q:
^integer;
……
new(p);q:
=nil;
表达式p<>q的值是_____________,表达式p=q的值是_____________。
4.input是freepascal默认的输入设备,默认指向键盘,现要更改input的指向,欲让它指向文本文件pas.in,则需用语句来实现;打开被input关联的实际文件pas.in,准备读取pas.in文件的内容需用语句实现。
5.随机产生150-200之间的整数的表达式是。
6.如果x:
=’’,y:
=copy(x,4,5),那么y的结果为;length(x)的结果是。
7.设有集合a=[1,2,3,4],b=[1,3,5,7],c=[3],那么(a*b)=c的值是,c*a+b的值是。
8.设整型变量i和j的值分别为2和3,布尔变量b的值为true。
表达式b=(j—i>2) AND NOT (i>j) 0R (i<>3= AND b的值
9.写出将字符6转换成数字6的Pascal表达式
四、简答题(2分+2分+3分+3分,共10分。
)
1.写一个表达式,若x满足10-7<|x|<107,则表达式取值true,否则,取值false。
(3分)
2.写一个程序片段,计算1至100中能被3整除的所有整数之和。
(2分)
3.设有一函数子程序定义如下:
function f(x,y,z:
integer):
integer;
begin
f:
=z-ydivx;
end;
执行语句cal:
=f(f(2,4,6),6,8)后,变量cal的值。
(2分)
4.vara:
array[1..4,1..4]ofreal;写一程序片段,用赋值语句(即不用read过程),将下面的矩阵赋给a中元素。
(3分)
1.15.29.313.4
2.16.210.314.4
3.17.211.315.4
4.18.212.316.4
五.阅读程序,写出输出结果(每小题4分,共20分)
1.(4分)
programexam_51;
vari,j:
integer;
a,b:
array[1..5]ofinteger;
begin
fori:
=1to5do
begin
a[i]:
=2*i-1;
b[i]:
=i
end;
fori:
=1to5do
forj:
=1to5do
ifa[i]=b[j]thenwrite(a[i]:
4)
end.
输出:
2.(4分)
programexam_52;
varn,i,tem,t:
longint;
s:
string;
begin
readln(n);
s:
='1';
repeat
i:
=length(s);
whiles[i]='1'do
begin
s[i]:
='0';dec(i);
end;
ifi>0thens[i]:
='1'
elses:
='1'+s;
val(s,t,tem);
untiltmodn=0;
writeln(n,'*',tdivn,'=',s);
end.
输入:
6
输出:
3.(4分)
programexam_53;
vara,b,c:
integer;
procedurep(varx:
integer;y:
integer);
vartemp:
integer;
begin
temp:
=xdivy+c;x:
=temp;
writeln(x:
4,y:
4,temp:
4)
end;
begin
a:
=9;b:
=2;c:
=3;p(a,b);
writeln(a:
4,b:
4,c:
4)
end.
输出:
4.(4分)
programexam_54;
typepointer=^node;
node=record
n:
integer;
next:
pointer
end;
vari:
integer;
head,p,q:
pointer;
proceduremake(varhead:
pointer;key:
integer);
varp,q,r:
pointer;
begin
p:
=head;
while(key>=p^.n)and(p^.next<>nil)do
begin
q:
=p;p:
=p^.next
end;
new(r);r^.n:
=key;
ifkey
thenbeginr^.next:
=head;head:
=rend
elseifkey
thenbeginr^.next:
=p;q^.next:
=rend
elsebeginp^.next:
=r;r^.next:
=nilend
end;
procedurewlink(head:
pointer);
varp:
pointer;
begin
p:
=head;
whilep<>nildo
begin
write(p^.n:
4);
p:
=p^.next;
end;
end;
begin
head:
=nil;i:
=1;
whilei<=5do
begin
new(p);p^.n:
=2*i;
ifhead=nil
thenhead:
=p
elseq^.next:
=p;
q:
=p;i:
=i+1
end;
q^.next:
=nil;
wlink(head);
make(head,20);
wlink(head)
end.
输出:
5.(4分)
programexam_55;
vara,b:
array[1..32]ofinteger;
i:
integer;
proceduressort(i,j:
integer);
varm,k,x:
integer;
begin
ifj-i>1then
begin
m:
=(i+j)div2;
ssort(i,m);
ssort(m+1,j);
k:
=i;
forx:
=itomdo
begin
b[k]:
=a[x];b[k+1]:
=a[m+x-i+1];
k:
=k+2;
end;
forx:
=itojdo
a[x]:
=b[x];
end;
end;
begin
fori:
=1to16doa[i]:
=i;
ssort(1,16);
fori:
=1to16dowrite(a[i]:
3);
end.
输出:
六、程序填空(每空2分,共44分)
1.(12分),降序组合。
给定两个自然数n,r(n>r),输出从数1到n中按降序顺序取r个自然数的所有组合。
例如,n=5,r=3时,输出的结果是:
543
542
541
532
531
521
432
431
421
321
程序中用a1,a2,……ar表示一个降序排列的r个数的组合,要求a1>=r。
为了能够穷举出全部降序排列的r个数的组合,按递减顺序调整前一个组合的部分元素生成下一个组合,调整时,当a1=1就要回朔。
上例由回朔生成下一个组合的情况,有541→532,531→521,521→432(二次回朔),431→421,421→321(二次回朔)。
上述过程,当a1=r-1时结束。
[程序]
programexam_61;
varn,r,i,j:
integer;
a:
array[1..20]ofinteger;
begin
write('n,r=');
repeat
readln(n,r);
untiln>r;
i:
=1;
a[1]:
=n;
writeln('result:
');
repeat
ifi<>r
thenif___①_______
thenbegin
a[i+1]:
=___②_________;i:
=i+1;
end
elsebegin
_____③______;______④________;
end
elsebegin
forj:
=1tordowrite(a[j]:
3);
writeln;
ifa[r]=1
thenbegin
i:
=i-1;a[i]:
=a[i]-1;
end
else______⑤__________;
end
until_______⑥__________;
end.
2.(14分)
以下程序是将一组整数按从小到大的顺序排列。
排序的方法是将长度为n的数a分为两个长度分别为(ndiv2)与(n-ndiv2)的子数组a1,a2。
然后递归调用过程,将a1,a2分别排序,最后将a1,a2归并成数组a。
例如a=(3,1,2,4),那么a1=(3,1),a2=(2,4)。
调用排序过程将a1,a2排序,得到a1=(1,3),a2=(2,4)然后进行合并排序。
从键盘输入数的长度n以及n个整数,存在数组a中,调用子过程sort进行排序,最后输出排序结果。
programexam_62;
constmaxn=100;
typearr=array[1..maxn]ofinteger;
varn,i:
integer;a:
arr;
proceduresort(n:
integer;vara:
arr);
vari,p1,p2,n1,n2:
integer;
a1,a2:
arr;
begin
ifn=1thenexit;
fillchar(a1,sizeof(a1),0);
fillchar(a2,sizeof(a2),0);
n1:
=0;
n2:
=0;
n1:
=ndiv2;
n2:
=①;
fori:
=1ton1doa1[i]:
=a[i];
fori:
=1ton2doa2[i]:
=②;
③;
sort(n2,a2);
p1:
=1;p2:
=1;
n:
=0;
while(p1<=n1)and④do
begin
n:
=n+1;
if⑤
thenbegina[n]:
=a1[p1];inc(p1);end
elsebegin⑥;inc(p2);end;
end;
ifp1<=n1
thenfori:
=⑦ton1dobeginn:
=n+1;a[n]:
=a1[i];end
elsefori:
=p2ton2dobeginn:
=n+1;a[n]:
=a2[i];end;
end;
begin
write('n=');
readln(n);
fori:
=1tondoread(a[i]);
readln;
sort(n,a);
fori:
=1tondowrite(a[i],'');
writeln;
end.
3.(8分)
有(1<=n<=100)个同学种m(1<=n<=m<=100)种小树苗,例如:
4个同学每小时种4种树苗的数量估算如下表所示,编程输出每人种1种苗所用的总时间最少的安排方案和所花费的时间。
学生苗树
a
b
c
d
1
5
2
4
5
2
4
3
5
3
3
5
2
4
2
4
3
2
3
3
programexam_63;
constmaxn=100;maxm=100;
vara:
array[1..maxn,1..maxm]ofinteger;
m,n:
integer;
i,j,t:
integer;
procedurework(k,t1:
integer);
vari:
integer;
begin
if①then
begin
ift1=t1;
exit;
end;
fori:
=②to③do
work(k+1,④);
end;
begin
readln(n,m);
fori:
=1tondo
begin
forj:
=1tomdoread(a[i,j]);
readln;
end;
t:
=maxint;
work(1,0);
writeln(t);
end.
4.(10分)
程序的任务是用0..9中的数字填入如下乘法运算的*处,数字可重复使用,且所用的数字至少有一个是素数,要求输出满足下列算式的方案数。
输入:
n,10≥n≥1
输入:
n个0..9的不同数字t
输出:
方案数
***
╳**
———————
***
***
———————
****
programexam_64;
constp:
setof0..9=[2,3,5,7];
vars:
setof0..9;
n:
integer;
ans:
longint;
procedureinit;
vari:
integer;
t:
byte;
begin
readln(n);
s:
=[];
fori:
=1tondo
begin
read(t);
s:
=s+[t];
end;
end;
functionok(x,l:
integer):
boolean;{此函数判断x是否符合条件}
vart:
byte;
begin
ok:
=false;
if①<>lthenexit;
whilex<>0do
begin
t:
=xmod10;
ifnot(tins