宁波市第26届中小学生计算机程序设计竞赛初赛试题小学组.docx
《宁波市第26届中小学生计算机程序设计竞赛初赛试题小学组.docx》由会员分享,可在线阅读,更多相关《宁波市第26届中小学生计算机程序设计竞赛初赛试题小学组.docx(13页珍藏版)》请在冰点文库上搜索。
宁波市第26届中小学生计算机程序设计竞赛初赛试题小学组
宁波市第26届中小学生程序设计竞赛小学组
初赛试题
一、选择题(每题2分,共30分。
每小题只有唯一一个正确答案)
1.二进制数(1011101)2的值是()
(A)94(B)93(C)62(D)61
2.每个不同的二进制数可以表示一种颜色,赤、橙、红、绿、青、蓝、紫这7种颜色,最少需要几位二进制数来表示?
()
3.以下运算结果为False的是()
(A)not(5>5)(B)(5>=4)and(7<7)(C)not(false)(D)(5<4)or(5>=5)
4.Pascal源程序的扩展民是()
(A)p(B)psc(C)pas(D)pascal
5.计算机的中央处理器的组成部件是()
(A)控制器和存储器(B)存储器和运算器
(C)控制器和运算器(D)控制器、存储器和运算器
6.宁波市中小学程序设计竞赛自从首届举办以来,除了其中有一届因举办时间从下半年调整到次年的上半年而没有举行外,每年举办一次。
首届宁波市中小学程序设计竞赛是哪一年举办的?
(A)1984年(B)1985年(C)1986年(D)1987年
7.已知一维数组定义a:
array[1..100]oflongint;每个元素占4个字节地址。
已知a[1]的开始地址为第10000个字节处,问a[11]的开始地址是第几个字节:
()
8.在宁波市中小学生程序设计竞赛上机复赛中,阅卷老师会批改以下的哪些(个)文件()
(A)先批改选手的源程序文件,如果找不到会批改可执行文件
(B)先批改选手的可执行文件,如果找不到会批改源程序文件
(C)只批改选手编译生成的可执行文件
(D)只批改选手的源程序文件
9.以下哪些(个)行为是不符合青少年网络文明公约的:
()
(A)相信绝大多数的网友是真诚的,随意与网友约会
(B)沉溺于网络游戏,影响学习
(C)上电脑课时下载大量迷幻类、穿越类的小说,以便晚上睡觉躲被窝看
(D)以上都是
10.在FreePascal编程时,你写了一下的程序()
varn:
longint;
begin
assign(input,’a,txt’);reset(input);//输入文件重定向到a.txt文件
read(n);
close(input);//关闭输入文件
end.
运行该程序时,返回如右图所示的错误信息,这是由于
(A)当前目录下找不到输入文件“a.txt”
(B)源程序存在2号语法错误
(C)输入的值与变量n不匹配
(D)Pascal编译器没有正确安装
11.有以下的程序:
vars:
string;
begin
readln(s);
writeln(s[1]);
end.
该程序运行时,输入如下的”ABC”后按回车键,输出为()
(A)1(B)字符‘A’(C)字符‘A’的ASCII码65(D)字符串”ABC”
12.宁波市程序设计竞赛使用的FreePascal2.0.4中integer型数据的是表示范围是()
(A)-32768~32767(B)约正负21亿之间(C)0~65536(D)不一定
13.在Pascal程序中,以下变量名称正确的是()
(A)begin(B)2011xx(C)hello(D)array
14.以下程序段结构,总体上看是属于哪个基本结构()
fori:
=1todo
ifimod2=0thens:
=s+1;
(A)顺序结构(B)循环结构(C)选择结构(D)树型结构
15.进行在线游戏时,①用户登录;②进入在线游戏网;③选择游戏伙伴、开始游戏;④选择游戏室。
正确的次序是()
(A)①②④③(B)②①④③(C)①②③④(D)②①③④
二.问题求解(每题5分,共10分)
1.有三个正整数x,y和z,它们相加之和等于21,且x≤y≤z。
显然x=1,y=1,z=19是一组解,x=5,y=6,z=10是另一组解。
请问共有几组解呢?
0
0
1
0
0
0
1
0
1
0
0
1
1
0
1
1
2.在四行四列的表格中放有16枚硬币(每格1枚硬币),以1表示正面朝上,0表示反面朝上。
一次翻硬币是指,要么把某一行整行反转,要么把某一列整列反转。
某一行或某一列反转后,这一行上原来正面朝上的全变反面朝上,原来反面朝上的全变为正面朝上了。
原来的硬币状态如右图所示(图中有7枚硬币正面朝上,9枚硬币反面朝上),经若干次整行、整列的翻转后,右图中最多可以使多少枚硬币正面朝上?
使最多枚硬币正面朝上时最少需要翻几次?
三.阅读程序,求程序运行输出结果(每题8分,共32分)
第1题:
programxx2011_1;
varn,i,c:
longint;ave,s:
extended;
输入:
5
7376839177
输出:
f:
array[1..10000]oflongint;
begin
read(n);ave:
=0;
fori:
=1tondobegin
read(f[i]);
ave:
=ave+f[i];
end;
ave:
=ave/n;c:
=0;
fori:
=1tondo
iff[i]=c+1;
writeln(ave:
0:
2,’‘,c);
end.
第2题:
programxx2011_2;
输入:
152
输出:
varn,i,x,p,s:
longint;
begin
read(n,x);
s:
=0;p:
=1;
fori:
=1tondobegin
p:
=p*x;
s:
=s+p;
end;
writeln(s);
end.
第3题:
programxx2011_3;
constmaxn=100000;
var
f:
array[1..maxn]oflongint;
stack:
array[1..maxn,1..2]oflongint;
n,i,j,h,t,last,x,s:
longint;
begin
read(n);
fori:
=1tondoread(f[i]);
stack[1,1]:
=1;
stack[1,2]:
=n;
last:
=2;
whilelast>1dobegin
last:
=last-1;
h:
=stack[last,1];
t:
=stack[last,2];
i:
=h;
j:
=t;
x:
=f[h];
whileiwhile(i=j-1;
ifif[i]:
=f[j];
i:
=i+1;
end;
while(ix)doi:
=i+1;
ifif[j]:
=f[i];j:
=j-1;
end;
end;
f[i]:
=x;
if(hstack[last,1]:
=h;stack[last,2]:
=i-1;last:
=last+1;
end;
if(i+1stack[last,1]:
=i+1;stack[last,2]:
=t;last:
=last+1;
end;
end;
s:
=f[2]-f[1];
fori:
=3tondos:
=s+f[i]-f[i-1];
writeln(s);
end.
第4题
programxx2011_4;
var
n,a,b,c,d:
longint;
procedurematric(vara,b,c,d:
longint;n:
longint);
vara1,b1,c1,d1,a2,b2,c2,d2,a3,b3,c3,d3:
longint;
begin
ifn=1thenbegina:
=0;b:
=1;c:
=1;d:
=1;exit;end;
matric(a1,b1,c1,d1,ndiv2);
matric(a2,b2,c2,d2,ndiv2);
a3:
=a1*a2+b1*c2;
b3:
=a1*b2+b1*d2;
c3:
=c1*a2+d1*c2;
d3:
=c1*b2+d1*d2;
ifnmod2=1thenbegin
a:
=b3;b:
=a3+b3;c:
=d3;d:
=c3+d3;
end
elsebegin
a:
=a3;b:
=b3;c:
=c3;d:
=d3;
end;
end;
begin
read(n);
ifn<3thenwriteln
(1)
elsebegin
matric(a,b,c,d,n-2);
writeln(c+d);
end;
end.
四.程序填空(前5空每空2分,后6空每空3分,共28分)
第1题:
幻方
把1至n×n的正整数填在n行n列的表格内,使每一行、每一列和二条多角线上n个数之和都相等。
这样的正方形表格叫做幻方。
如右图所示是一个3行3列的幻方。
下面的程序生成一个行(列)数为奇数的幻方。
如果输入的行列数n是偶数,输出字符串”notoddnumber!
”,否则按一下的方法生成幻方:
1.第一个数1填入第一行最中间的一列;
2.以后每次填下一个数时,填入的位置为:
(1)如果已填的数的个数为n的倍数,则填入下一行;
(2)否则填入上一行右一列。
如果向上越界,则填至最后一行;如果向右越界,填至第一列。
生成的数字保存在二维数组a中,程序输出n行,每行n个数据。
【样例输入】
3
【样例输出】
816
357
492
请将程序补充完整。
programxx2011_5;
constmaxn=1001;
varn,i,j,p:
longint;
a:
array[1..maxn,1..maxn]oflongint;
begin
readln(n);
ifnmod2=0thenbegin
wrtieln(‘notoddnumber!
’);
exit;
end;
i:
=1;
j:
=(n+1)mod2;
forp:
=1ton*ndobegin
a[i,j]:
=p;
ifpmodn=0theni:
=i+1
elsebegin
i:
=i-1;j:
=j+1;
ifi<1theni:
=n;
ifj>nthenj:
=1;
end;
end;
fori:
=1tondobegin
forj:
=1ton-1do
write(a[i,j],’‘);
writeln;
end;
end.
第2题:
完美覆盖
以1×2的多米诺骨牌去覆盖n×m的棋盘,当棋盘中的每一格都刚好被一块多米诺骨牌覆盖时,这种覆盖叫多米诺骨牌的完美覆盖。
如下图所示,2行3列的棋盘,有3种完美覆盖方案。
以下程序求得n×m棋盘的完美覆盖总方案数。
程序从第1行第1列开始,按照1行1列、1行2列、1行3列、…、1行m列、2行1列、2行2列、2行3列、…、2行m列、…n行1列、n行2列、n行3列、…、n行m列的次序,逐格尝试各格子的不同覆盖方案。
以f[i,j]=0表示第i行j列格子还没有被覆盖,以f[i,j]=1表示第i行j列格子被横向覆盖,以f[i,j]=2表示第i行j列格子被纵向覆盖,覆盖的总方案数在变量ans中求得。
请将程序补充完整。
programxx2011_6;
constmaxn=100;maxm=100;
var
n,m,i,j:
longint;
ans:
extended;
f:
array[1..maxn,1..maxm]oflongint;
proceduredomino(i,j:
longint);
begin
ifi>nthenbegin
;
exit;
end;
ifthen
begin
ifjdomino(i,j+1)
else
domino();
end
else
begin
ifthen
begin
f[i,j]:
=1;
f[i,j+1]:
=1;
ifjdomino(i,j+1)
else
domino();
f[i,j]:
=0;f[i,j+1]:
=0;
end;
ifthen
begin
f[i,j]:
=2;
f[i+1,j]:
=2;
ifjdomino(i,j+1)
else
domino();
f[i,j]:
=0;f[i+1,j]:
=0;
end;
end;
end;
begin
read(n,m);
fori:
=1tondo
forj:
=1tomdo
f[i,j]:
=0;
ans:
=0;
domino();
writeln(ans:
0:
0);
end.