第三届绍兴市少儿信息学竞赛试题及答案

小学组PASCAL语言

一.选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题2分,每题只有一个正确答案,多选或错选都无分。共30分)
1)我们一般会根据计算机主要的元器件组成来划分它所属的阶段,那么1946年制造的ENIAC属于( )计算机。
A) 第二代 B) 第三代 C) 第四代 D) 第一代
2)下列计算机设备中,是存储设备的是( )
A) 键盘 B) RAM C) 显示器 D) CPU
3)我们一般把能播放VCD、CD光盘来看电影、听音乐的电脑称为“多媒体电脑”,下列硬件设备中,是多媒体电脑必须具备的是( )。
A) CD-ROM光驱 B) 网卡 C) 扫描仪 D) 打印机
4)计算机有计算功能,那么这个“计算”是在下列哪个硬件设备中完成的( )?
A) CPU B) ROM C) 内存 D) 显示卡
5)下面是计算机操作系统的是( )
A) Pascal B) Photoshop C) Word D) LINUX
6)十进制数11对应的二进制数是( )
A) 1011 B) 1100 C) 0011 D) 1010
7)pascal程序设计中,用integer类型来保存整数,下列整数中能用integer类型变量正确保存的是( )
A) 32650 B) 40000 C) 60000 D) 50000
8)通过因特网,我们可以利用( )和远方的朋友实时聊天。
A) E-MAIL B) 腾讯QQ C) BBS D) FTP
9)我们可以按照网络覆盖的区域大小来对网络分类,下列网络类别不是按照网络覆盖区域大小分类的是( )
A) 广域网 B) 城域网 C) 以太网 D) 局域网
10)下列关于计算机病毒的描述中,正确的是( )
A) 如果一个人有感冒病毒,那么他使用的计算机就有可能感染这个人身上的病毒,并最终发展为计算机病毒
B)如果一台计算机在生产厂家组装时周围环境不好(有灰尘等),这台计算机就会有计算机病毒
C) 计算机病毒实质上是一段计算机程序
D) 计算机病毒只能通过计算机网络传播
11)在PASCAL程序设计中,表达式“32 DIV 5”的计算结果是( )
A) 2 B) 7 C) 6.4 D) 6
12)在pascal程序设计中,我们可以利用( )语句来中途退出循环。
A) repeat B) end C) break D) continue
13)pascal源程序可以通过编译生成能直接在操作系统下执行的可执行程序,这些可执行程序的扩展名是( )。
A) .doc B) .exe C) .txt D) .pas
14)下列关于二叉树的描述中,正确的是( )
A) 某个结点可以没有子结点、或有1个子结点、或有2个子结点。
B) 根结点可以有3个子结点 C) 根结点可以有4个子结点
D) 任何结点最多都可以有4个子结点
15)已知一个队列中有若干个数(如下图所示),则最后出队的元素是( )

A) 12 B) 5 C) 9 D) 32

二.问题求解:(5+5=10分)
1.二叉树的每个结点最多只有二个子结点,而且子结点有左右之分(次序不能颠倒)。现在有三个结点a,b,c来构成一棵二叉树,现在规定根结点必须是a并且b是a的左儿子。问:满足上述条件的二叉树一共有多少种不同的形态?(只需写出数量)
2.新田忌赛马。田忌有3匹马(奔跑速度分别是40、60、90),齐王有3匹马(速度分别是50、70、100),田忌的马和齐王的马逐对进行比赛,由于每次出场顺序由田忌确定,所以田忌通过巧妙的策略赢得了最终的胜利(比齐王多赢一场),具体对阵形式如下(按田忌马速度从小到大排列,对阵形式中左边为田忌马的速度,右边为齐王马的速度):
40-100 60-50 90-70
现在田忌有8匹马(速度分别为10、20、30、40、50、60、70、80),齐王也有8匹马(速度分别为35、48、56、65、77、98、105、112),出场顺序仍由田忌来确定,问:田忌是否能找到一种出场顺序(回答“能”或者“不能”),使得田忌最终能赢得比赛(田忌赢的场次多于齐王)?如果回答“能”,请写出田忌胜的场次中,两匹马对阵的形式(格式仿照前面的例子书写,按照田忌马匹的速度从小到大书写)。

三.阅读程序并写出运行结果(7+7+8+8=30分。):
1.program test01;
var
x,y,s,p:integer;
begin
readln(x,y);
s:=x+y;p:=x-y;
if x<y then p:=y-x;
s:=s-p;
writeln(s);
end.
输入:
13 31
输出:

2.program test02;
var
i,j,k,t:integer;
a:array[1..7] of integer;
begin
for i:=1 to 7 do a[i]:=0;
for i:=1 to 4 do a[i]:=i;
t:=a[7];
for i:=7 downto 2 do a[i]:=a[i-1];
a[1]:=t;
for i:=1 to 7 do write(a[i]);
end.
输出:
3.program test03;
var
n,c,i,j,t,temp:integer;
a:array[1..50] of integer;
begin
readln(n);
for i:=1 to n do read(a[i]);
for i:=1 to n-1 do
begin
c:=a[i];t:=i;
for j:=i+1 to n do if c<a[j] then begin t:=j;c:=a[j];end;
if t<>i then begin temp:=a[i];a[i]:=a[t];a[t]:=temp;end;
end;
for i:=1 to n do write(a[i],' ');
end.
输入:
18
90 12 33 44 77 29 8 3 4 6 2 1 21 24 23 54 53 25
输出:
4.program test04;
var
i,j,s,h,v,n:integer;
a:array[1..20,1..20] of integer;
begin
readln(n,h,v);
for i:=1 to n do
begin
for j:=1 to n do read(a[i,j]);readln;
end;
s:=0;
for i:=1 to n do
if i=h then for j:=1 to n do s:=s+a[i,j];
for j:=1 to n do
if j=v then for i:=1 to n do s:=s+a[i,j];
if h<=v then
for i:=1 to n-(v-h) do s:=s+a[i,i+v-h]
else for j:=1 to n-(h-v) do s:=s+a[j+h-v,j];
for i:=1 to 2 do s:=s-a[h,v];
writeln(s);
end.
输入:
8 5 3
2 16 18 5 13 13 14 0
3 15 19 14 12 16 5 11
9 1 5 6 1 14 7 5
1 2 6 5 2 12 4 8
3 13 10 1 10 1 12 18
1 5 0 1 4 6 18 0
19 15 7 4 0 2 12 13
8 15 17 0 2 11 16 16
输出:

四.完善程序(根据问题要求和已有程序,在空格处填入适当的语句或符号,使程序完整。本题共30分。)
1.【旅游食品】(3+3+3+3=12分)
元旦到了,红旗小学要组织小学生外出旅游。炳炳妈给了炳炳s元钱,为了保证营养,她要求炳炳在n种食品(牛奶、苹果、矿泉水、蜜饯、鸡蛋、面包等)中必须每样买一份来充当中餐和点心(如果n种食品的价格分别用a[1]、a[2]、……a[n]保存,则肯定有s>a[1]+a[2]+a[3]+……+a[n]),剩余的钱由炳炳自由花费。
炳炳是一位很热心的学生,他想用剩余的钱全部用来购买这些食品中价格最便宜的那种,然后他打算把这些食品分给其他同学吃。
比如,现在妈妈给炳炳20元钱,妈妈要炳炳在矿泉水、蜜饯、牛奶、鸡蛋、苹果、面包(价格分别为1、1、3、2、1、4元)每样都必须购买一份,这样炳炳剩余的钱就是20-12=8元,炳炳就会把这剩余的8元全部用来购买矿泉水、苹果或者蜜饯(每样价格都是最低的1元),共可购买8份最便宜的食品,这样,加上炳炳原来购买的打算自己当作中餐和点心的6份食品,他就拥有了共14份食品。
下列程序中首先输入炳炳充当中餐和点心的食品数量和妈妈给炳炳的总款(用n和s表示,s必定小于100),然后会输入每种食品的价格,最后会输出炳炳手中拥有的所有食品的总的份数。对于前面的例子,输入和输出的样例如下:
【样例输入】
6 20
1 1 3 2 1 4
【样例输出】
14
请完善下列程序:
program test05;
var
n,i,j,tot,min,s:integer;
a:array[1..50] of integer;
begin
readln(n,s);
for i:=1 to n do begin read(a[i]);s:=s- ① ;end;
min:=32720;
for i:=1 to n do if min>a[i] then min:= ② ;
tot:=n;
while min<=s do
begin
tot:= ③ ;s:=s-min;
end;
writeln( ④ );
end.
2.【跳棋数】(3+3+3+3+3+3=18分)
跳棋是大家都熟悉的棋类活动,就是一颗棋子可以通过相邻的另一颗棋子笔直地跳到另一颗棋子相邻的空位上去。在一串很长的由数字组成的字符串中,如果某个位数为k的数值和间隔k个位置后面的位数为k的数值相等,就称为跳棋数。
比如对于字符串131313,如果规定k为1,则三个1构成了跳棋数,从第一个1开始开始跳,最多可以跳2步;从第二个位数为k的数值3开始,也构成了跳棋数,最多也可以跳2步。又如,1223122312341223,如果规定k为2,则从字符串的第一个k位数值“12”开始,组成的跳棋数的最多可以跳的步数是3(每步到达的目的地如上面下划线“__”所示),而第二个k位数值“23”开始的跳棋数最多可以跳的步数是1(每步到达的目的地如上面下划线“ ”所示)。也就是说,如果规定了k,则作为“棋子”的数值就是k位,而每次“跳棋”时必须跳过右面相邻的k个位置。
下列程序先从键盘输入k的值,然后会输入一个由数字组成的字符串(只包含0、1、…、9这些数字),而且规定,这个字符串的长度肯定是2*k的倍数。通过处理,程序最后能输出二个整数,分别表示字符串中第一个位数为k的数值开始的跳棋数最多能跳的步数和第二个位数为k的数值开始的跳棋数最多能跳的步数。请完善程序。
【知识链接】
1.t:string定义了一个字符串类型变量,s可以存储一串字符,每个字符分别存入对应的下表变量s[1]、s[2]、……中,最多可以保存255个字符。
2. t1:=copy(s,i,k)中copy( )是一个系统函数,作用是把保存在字符串变量s中的字符串从第i个位置开始复制k个,然后返回复制所得的字符串(本语句中是赋值给变量t1。
3.val(t1,a[i1],e)中val( )是一个系统过程,它能把保存在t1中的由数字组成的字符串转换成对应的数值(产生的数值可以进行四则运算),然后把数值保存到下标变量a[i1]中。比如,如果t1的值是字符串“2”,则调用val( )后a[i1]的值就是数值2。
4.length(s)是一个系统函数,作用是计算并返回保存在字符串变量s中的字符串的长度(字符个数)。
【样例输入】
3
123234123234123235123234
【样例输出】
3 1
program test06;
const maxn=200;
var
x1,x2,i,j,k,n:integer;
a:array[1..100] of integer;
b:array[1..100] of integer;
s:string;
procedure check(k:integer);
var
i,j,i1,j1,e:integer;
t1,t2:string;
begin
i:=1;i1:= ① ;j1:=0;x1:= ② ;x2:=0;
while i+2*k-1<=n do
begin
t1:=copy(s,i,k);i1:=i1+1;val(t1,a[i1],e);i:=i+k;
t2:=copy(s,i,k);j1:=j1+1;val(t2,b[j1],e);i:=i+k;
end;
i:=1;
while ( ③ ) and (i<i1) do
begin x1:= ④ ;i:=i+1;end;
j:=1;
while ( ⑤ ) and (j<j1) do
begin x2:= ⑥ ;j:=j+1;end;
end;
begin {main}
readln(k);
readln(s);n:=length(s);
check(k);
writeln(x1,' ',x2);
end.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-10-07
一.选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题2分,每题只有一个正确答案,多选或错选都无分。共30分)
1)我们一般会根据计算机主要的元器件组成来划分它所属的阶段,那么1946年制造的ENIAC属于( )计算机。
A) 第二代 B) 第三代 C) 第四代 D) 第一代
2)下列计算机设备中,是存储设备的是( )
A) 键盘 B) RAM C) 显示器 D) CPU
3)我们一般把能播放VCD、CD光盘来看电影、听音乐的电脑称为“多媒体电脑”,下列硬件设备中,是多媒体电脑必须具备的是( )。
A) CD-ROM光驱 B) 网卡 C) 扫描仪 D) 打印机
4)计算机有计算功能,那么这个“计算”是在下列哪个硬件设备中完成的( )?
A) CPU B) ROM C) 内存 D) 显示卡
5)下面是计算机操作系统的是( )
A) Pascal B) Photoshop C) Word D) LINUX
6)十进制数11对应的二进制数是( )
A) 1011 B) 1100 C) 0011 D) 1010
7)pascal程序设计中,用integer类型来保存整数,下列整数中能用integer类型变量正确保存的是( )
A) 32650 B) 40000 C) 60000 D) 50000
8)通过因特网,我们可以利用( )和远方的朋友实时聊天。
A) E-MAIL B) 腾讯QQ C) BBS D) FTP
9)我们可以按照网络覆盖的区域大小来对网络分类,下列网络类别不是按照网络覆盖区域大小分类的是( )
A) 广域网 B) 城域网 C) 以太网 D) 局域网
10)下列关于计算机病毒的描述中,正确的是( )
A) 如果一个人有感冒病毒,那么他使用的计算机就有可能感染这个人身上的病毒,并最终发展为计算机病毒
B)如果一台计算机在生产厂家组装时周围环境不好(有灰尘等),这台计算机就会有计算机病毒
C) 计算机病毒实质上是一段计算机程序
D) 计算机病毒只能通过计算机网络传播
11)在PASCAL程序设计中,表达式“32 DIV 5”的计算结果是( )
A) 2 B) 7 C) 6.4 D) 6
12)在pascal程序设计中,我们可以利用( )语句来中途退出循环。
A) repeat B) end C) break D) continue
13)pascal源程序可以通过编译生成能直接在操作系统下执行的可执行程序,这些可执行程序的扩展名是( )。
A) .doc B) .exe C) .txt D) .pas
14)下列关于二叉树的描述中,正确的是( )
A) 某个结点可以没有子结点、或有1个子结点、或有2个子结点。
B) 根结点可以有3个子结点 C) 根结点可以有4个子结点
D) 任何结点最多都可以有4个子结点
15)已知一个队列中有若干个数(如下图所示),则最后出队的元素是( )

A) 12 B) 5 C) 9 D) 32

二.问题求解:(5+5=10分)
1.二叉树的每个结点最多只有二个子结点,而且子结点有左右之分(次序不能颠倒)。现在有三个结点a,b,c来构成一棵二叉树,现在规定根结点必须是a并且b是a的左儿子。问:满足上述条件的二叉树一共有多少种不同的形态?(只需写出数量)
2.新田忌赛马。田忌有3匹马(奔跑速度分别是40、60、90),齐王有3匹马(速度分别是50、70、100),田忌的马和齐王的马逐对进行比赛,由于每次出场顺序由田忌确定,所以田忌通过巧妙的策略赢得了最终的胜利(比齐王多赢一场),具体对阵形式如下(按田忌马速度从小到大排列,对阵形式中左边为田忌马的速度,右边为齐王马的速度):
40-100 60-50 90-70
现在田忌有8匹马(速度分别为10、20、30、40、50、60、70、80),齐王也有8匹马(速度分别为35、48、56、65、77、98、105、112),出场顺序仍由田忌来确定,问:田忌是否能找到一种出场顺序(回答“能”或者“不能”),使得田忌最终能赢得比赛(田忌赢的场次多于齐王)?如果回答“能”,请写出田忌胜的场次中,两匹马对阵的形式(格式仿照前面的例子书写,按照田忌马匹的速度从小到大书写)。

三.阅读程序并写出运行结果(7+7+8+8=30分。):
1.program test01;
var
x,y,s,p:integer;
begin
readln(x,y);
s:=x+y;p:=x-y;
if x<y then p:=y-x;
s:=s-p;
writeln(s);
end.
输入:
13 31
输出:

2.program test02;
var
i,j,k,t:integer;
a:array[1..7] of integer;
begin
for i:=1 to 7 do a[i]:=0;
for i:=1 to 4 do a[i]:=i;
t:=a[7];
for i:=7 downto 2 do a[i]:=a[i-1];
a[1]:=t;
for i:=1 to 7 do write(a[i]);
end.
输出:
3.program test03;
var
n,c,i,j,t,temp:integer;
a:array[1..50] of integer;
begin
readln(n);
for i:=1 to n do read(a[i]);
for i:=1 to n-1 do
begin
c:=a[i];t:=i;
for j:=i+1 to n do if c<a[j] then begin t:=j;c:=a[j];end;
if t<>i then begin temp:=a[i];a[i]:=a[t];a[t]:=temp;end;
end;
for i:=1 to n do write(a[i],' ');
end.
输入:
18
90 12 33 44 77 29 8 3 4 6 2 1 21 24 23 54 53 25
输出:
4.program test04;
var
i,j,s,h,v,n:integer;
a:array[1..20,1..20] of integer;
begin
readln(n,h,v);
for i:=1 to n do
begin
for j:=1 to n do read(a[i,j]);readln;
end;
s:=0;
for i:=1 to n do
if i=h then for j:=1 to n do s:=s+a[i,j];
for j:=1 to n do
if j=v then for i:=1 to n do s:=s+a[i,j];
if h<=v then
for i:=1 to n-(v-h) do s:=s+a[i,i+v-h]
else for j:=1 to n-(h-v) do s:=s+a[j+h-v,j];
for i:=1 to 2 do s:=s-a[h,v];
writeln(s);
end.
输入:
8 5 3
2 16 18 5 13 13 14 0
3 15 19 14 12 16 5 11
9 1 5 6 1 14 7 5
1 2 6 5 2 12 4 8
3 13 10 1 10 1 12 18
1 5 0 1 4 6 18 0
19 15 7 4 0 2 12 13
8 15 17 0 2 11 16 16
输出:

四.完善程序(根据问题要求和已有程序,在空格处填入适当的语句或符号,使程序完整。本题共30分。)
1.【旅游食品】(3+3+3+3=12分)
元旦到了,红旗小学要组织小学生外出旅游。炳炳妈给了炳炳s元钱,为了保证营养,她要求炳炳在n种食品(牛奶、苹果、矿泉水、蜜饯、鸡蛋、面包等)中必须每样买一份来充当中餐和点心(如果n种食品的价格分别用a[1]、a[2]、……a[n]保存,则肯定有s>a[1]+a[2]+a[3]+……+a[n]),剩余的钱由炳炳自由花费。
炳炳是一位很热心的学生,他想用剩余的钱全部用来购买这些食品中价格最便宜的那种,然后他打算把这些食品分给其他同学吃。
比如,现在妈妈给炳炳20元钱,妈妈要炳炳在矿泉水、蜜饯、牛奶、鸡蛋、苹果、面包(价格分别为1、1、3、2、1、4元)每样都必须购买一份,这样炳炳剩余的钱就是20-12=8元,炳炳就会把这剩余的8元全部用来购买矿泉水、苹果或者蜜饯(每样价格都是最低的1元),共可购买8份最便宜的食品,这样,加上炳炳原来购买的打算自己当作中餐和点心的6份食品,他就拥有了共14份食品。
下列程序中首先输入炳炳充当中餐和点心的食品数量和妈妈给炳炳的总款(用n和s表示,s必定小于100),然后会输入每种食品的价格,最后会输出炳炳手中拥有的所有食品的总的份数。对于前面的例子,输入和输出的样例如下:
【样例输入】
6 20
1 1 3 2 1 4
【样例输出】
14
请完善下列程序:
program test05;
var
n,i,j,tot,min,s:integer;
a:array[1..50] of integer;
begin
readln(n,s);
for i:=1 to n do begin read(a[i]);s:=s- ① ;end;
min:=32720;
for i:=1 to n do if min>a[i] then min:= ② ;
tot:=n;
while min<=s do
begin
tot:= ③ ;s:=s-min;
end;
writeln( ④ );
end.
2.【跳棋数】(3+3+3+3+3+3=18分)
跳棋是大家都熟悉的棋类活动,就是一颗棋子可以通过相邻的另一颗棋子笔直地跳到另一颗棋子相邻的空位上去。在一串很长的由数字组成的字符串中,如果某个位数为k的数值和间隔k个位置后面的位数为k的数值相等,就称为跳棋数。
比如对于字符串131313,如果规定k为1,则三个1构成了跳棋数,从第一个1开始开始跳,最多可以跳2步;从第二个位数为k的数值3开始,也构成了跳棋数,最多也可以跳2步。又如,1223122312341223,如果规定k为2,则从字符串的第一个k位数值“12”开始,组成的跳棋数的最多可以跳的步数是3(每步到达的目的地如上面下划线“__”所示),而第二个k位数值“23”开始的跳棋数最多可以跳的步数是1(每步到达的目的地如上面下划线“ ”所示)。也就是说,如果规定了k,则作为“棋子”的数值就是k位,而每次“跳棋”时必须跳过右面相邻的k个位置。
下列程序先从键盘输入k的值,然后会输入一个由数字组成的字符串(只包含0、1、…、9这些数字),而且规定,这个字符串的长度肯定是2*k的倍数。通过处理,程序最后能输出二个整数,分别表示字符串中第一个位数为k的数值开始的跳棋数最多能跳的步数和第二个位数为k的数值开始的跳棋数最多能跳的步数。请完善程序。
【知识链接】
1.t:string定义了一个字符串类型变量,s可以存储一串字符,每个字符分别存入对应的下表变量s[1]、s[2]、……中,最多可以保存255个字符。
2. t1:=copy(s,i,k)中copy( )是一个系统函数,作用是把保存在字符串变量s中的字符串从第i个位置开始复制k个,然后返回复制所得的字符串(本语句中是赋值给变量t1。
3.val(t1,a[i1],e)中val( )是一个系统过程,它能把保存在t1中的由数字组成的字符串转换成对应的数值(产生的数值可以进行四则运算),然后把数值保存到下标变量a[i1]中。比如,如果t1的值是字符串“2”,则调用val( )后a[i1]的值就是数值2。
4.length(s)是一个系统函数,作用是计算并返回保存在字符串变量s中的字符串的长度(字符个数)。
【样例输入】
3
123234123234123235123234
【样例输出】
3 1
program test06;
const maxn=200;
var
x1,x2,i,j,k,n:integer;
a:array[1..100] of integer;
b:array[1..100] of integer;
s:string;
procedure check(k:integer);
var
i,j,i1,j1,e:integer;
t1,t2:string;
begin
i:=1;i1:= ① ;j1:=0;x1:= ② ;x2:=0;
while i+2*k-1<=n do
begin
t1:=copy(s,i,k);i1:=i1+1;val(t1,a[i1],e);i:=i+k;
t2:=copy(s,i,k);j1:=j1+1;val(t2,b[j1],e);i:=i+k;
end;
i:=1;
while ( ③ ) and (i<i1) do
begin x1:= ④ ;i:=i+1;end;
j:=1;
while ( ⑤ ) and (j<j1) do
begin x2:= ⑥ ;j:=j+1;end;
end;
begin {main}
readln(k);
readln(s);n:=length(s);
check(k);
writeln(x1,' ',x2);
end.

答案:

第三届绍兴市少儿信息学竞赛
小 学 组 参 考 答 案 及 评 分 标 准

一.选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题2分,每题只有一个正确答案,多选或错选都无分,共30分)
题 号 1 2 3 4 5 6 7 8
答 案 D B A A D A A B
题 号 9 10 11 12 13 14 15
答 案 C C D C B A D
二.问题求解:(5+5=10分)
1.二叉树种类数(5分):3
2.新田忌赛马:能(1分)
40-35 50-48 60-56 70-65 80-77(4分)
三.阅读程序并写出运行结果(7+7+8+8=30分):
1.程序的运行结果是:26
2.程序的运行结果是:0123400
3.程序的运行结果是:
90 77 54 53 44 33 29 25 24 23 21 12 8 6 4 3 2 1
4.程序的运行结果是:163

四.完善程序(根据问题要求和已有程序,在空格处填入适当的语句或符号,使程序完整。12+18=30分)
1. 旅游食品(3+3+3+3=12分)
① a[i]
② a[i]
③ tot+1
④ tot
2.跳棋数(3+3+3+3+3+3=18分)
① 0
② 0
③ a[i]=a[i+1]
④ x1+1
⑤ b[j]=b[j+1]
⑥ x2+1