第十届绍兴市少儿信息学奥赛初赛试题PASCAL.docx
《第十届绍兴市少儿信息学奥赛初赛试题PASCAL.docx》由会员分享,可在线阅读,更多相关《第十届绍兴市少儿信息学奥赛初赛试题PASCAL.docx(16页珍藏版)》请在冰豆网上搜索。
第十届绍兴市少儿信息学奥赛初赛试题PASCAL
第十届绍兴市少儿信息学竞赛
初赛试题
(小学组PASCAL语言二小时完成)
●●全部试题答案都要求写在答卷纸上,写在试卷上一律无效●●
一、选择一个正确答案代码(A/B/C/D),填入每题的括号内(每题2分,每题只有一个正确答案,多选无分。
共20分)
1.某算法的流程图如下所示:
依次输入x的值为5、3、0、6后,该算法的输出结果为
A)
6
B)
3
C)
14
D)
8
2.某用户电子邮箱收件夹中的内容如图所示:
从图中可以看出该收件夹内
A)
全部邮件有6封。
B)
未读的邮件有4封。
C)
带附件的邮件有5封。
D)
当天收到的邮件有3封。
3.笑笑的爷爷最近在学电脑,现在已经会上网了,但总是记不住网址,每次上网时都要问笑笑该输什么网址,后来笑笑略施小“技”,帮爷爷解决了这个难题。
之后爷爷再上网时,不仅不用记住网址就能快速地访问自己常去的一些网站,而且每次一启动IE就可以直接打开新华网浏览新闻,笑笑采用的方法是()
①将爷爷常用的网址都添加到IE的收藏夹中
②将爷爷常用的网址都添加到IE的临时文件夹中
③将新华网的网址设置为IE的主页
④将爷爷常用的网址都添加到IE的历史记录中
A)
①②
B)
①③
C)
②③
D)
②④
4.下列有关信息学名词解释中,错误的是()
A)
OnlineJudge:
简称OJ,信息学在线评测系统
B)
Excel:
Microsoft公司开发的电子表格处理软件。
C)
Flash:
Micromedia公司开发的三维动画制作软件。
D)
LOGO语言:
内置一套海龟绘图系统,通过向海龟发送命令,用户可以直观地学习程序的运行过程,是适合于儿童学习的入门级语言。
5.单字节5和-5在计算机内部分别表示为()
A)
0000010110000101
B)
0000010111111010
C)
1111101111111011
D)
0000010111111011
6.2名驾驶员和6名空中小姐分别上二架不同型号的旅游直升飞机,每机1名驾驶员及3名空中小姐,则上机方法共有多少种?
A)
60
B)
80
C)
40
D)
20
7.如图有两个栈s1,s2,有一数字序列2341,依次进入其中任意一个栈,任一个数字入栈后也可随时出栈,则不可能的出栈序列是:
A)
1324
B)
2134
C)
4231
D)
1234
8.寄存器是()的重要组成部分。
A)
硬盘
B)
高速缓存
C)
内存
D)
中央处理器(CPU)
9.在一个果园里,笑笑将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。
笑笑决定把所有的果子合成一堆。
每一次合并,笑笑可以把任意两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。
可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。
笑笑在合并果子时总共消耗的体力等于每次合并所耗体力之和。
假定有5堆果子,每堆果子的数量为12,4,20,15,10,每个果子重量都为2,笑笑想知道最小的体力耗费值是多少。
A)
272
B)
284
C)
164
D)
136
10.下面是信息学的相关知识,哪一句是正确的:
()
A)
图灵,美国数学家,1936年设计并成功实现了图灵机,鉴于他巨大的贡献,ACM于1966年以他的名字命名设立了图灵奖,图灵在人工智能方面也有重要的研究,被誉为人工智能之父。
B)
Dos、Win7、safari、Unix、Photoshop都是操作系统。
C)
信息学奥林匹克竞赛活动有NOIP、NOI、冬令营、IOI等,其中NOI是全国青少年信息学奥林匹克竞赛,它最早起源于1984年全国青少年程序设计竞赛。
D)
计算机语言分为机器语言、汇编语言和高级语言,高级语言由解释、编译两种方式翻译执行,第一个计算机高级语言是basic语言。
二、根据要求回答问题:
(5+5=10分)
1.中午,笑笑到花鸟市场闲逛,看到有位叔叔在买金鱼,笑笑就蹲在鱼缸边看金鱼吹泡泡,卖金鱼的叔叔看笑笑半天没动弹,还以为笑笑没钱买又很喜欢金鱼,就对笑笑说:
“上午我第一次卖出了全部金鱼的一半加2分之一条金鱼;第二次卖出剩余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之三条金鱼;第四次卖出剩余金鱼的八分之一加八分之一条金鱼;最后还剩下13条。
问原来有多少条金鱼?
如果你答对了,我免费送你两条金鱼。
”可怜的笑笑当场就糊涂了,请你帮帮她吧!
(每次卖出的都是整数条金鱼)
问:
原来一共有条金鱼。
2.XXX是一座风景秀丽,气候宜人,历史悠久的的城市,笑笑想到那儿去旅游向往已久。
这个暑假,爸爸决定亲自驾车带她到XXX城游玩,这可把笑笑高兴坏了。
出发前,爸爸通过网络在XXX城市的中心预订了酒店。
XXX城总共有5个景点,爸爸决定每天从酒店出发玩一个景点,晚上回酒店休息,为了节约汽车油费,爸爸事先对酒店及5个景点之间的道路及距离作了了解,如图(单位:
公里),也就是如果笑笑他们想到景点B游玩,可以选择酒店->景点B,也可以选择酒店->景点A->景点B,当然还有其它的选择。
爸爸想知道5天游完所有景点心爱的汽车最少需要跑多少公里?
问:
游完所有景点最少需要跑公里?
三、阅读程序并写出运行结果(8+8+8+8+8=40分):
1.programtest_2012_1;
varx,a,b,c,d,z:
integer;
begin
readln(x);
a:
=xmod10;
b:
=(xmod100)div10;
c:
=(xmod1000)div100;
d:
=xdiv1000;
z:
=a*a+b*b+c*c+d*d;
iftrunc((c*d)/(a*b))=(c*d)/(a*b)theninc(z,a*b)elseinc(z,c*d);
writeln(z);
end.
输入:
1234
输出:
2.programtest_2012_2;
varm,n,i,j,s:
integer;
d:
array[0..100]ofinteger;
begin
readln(n);
form:
=10TOnDO
begin
s:
=m*m;
j:
=0;
whiles>0DO
begin
j:
=j+1;
d[j]:
=smod10;
s:
=sdiv10;
end;
i:
=1;
while(d[i]=d[j])and(ibegin
i:
=i+1;
j:
=j-1;
end;
IFi>=jthenwriteln(m);
end;
end.
输入:
30
输出:
3、programtest_2012_3;
vara,b:
String;
i:
Integer;
begin
a:
='AABBCCDKKRRSSXX';
readln(b);
fori:
=1tolength(b)Do
If(b[i]>='0')AND(b[i]<='9')
thenwrite(b[i])
else
if(b[i]>='A')and(b[i]<='Z')
thenwrite(a[ord(b[i])-ord('A')]);
End.
输入:
NOIP-2012
输出:
4、programtest_2012_4;
varx:
integer;
procedureadd(varz:
integer);
begin
writeln(‘z=',z);z:
=z+10;writeln('z=',z);
end;
begin
x:
=5;writeln(‘x=',x);add(x);writeln(‘x=',x);
end.
输出:
5、programtest_2012_5;
varj,k:
integer;
functionpr(n:
integer):
boolean;
vari:
integer;t:
boolean;
begin
t:
=true;i:
=2;
whiletand(i<=sqrt(n))do
ifnmodi=0thent:
=false
elsei:
=i+1;
pr:
=t;
end;
begin
k:
=0;j:
=11;
whilej<=99do
begin
ifpr(j)andpr(j+2)then
beginwriteln(j:
4,j+2:
4);k:
=k+1;end;
j:
=j+2;
end;
writeln(‘total:
',k);
end.
输出:
四、完善程序(根据问题要求和已有程序,在程序空格处填入适当的语句或符号,使程序完整。
本题共15+15=30分)
1.【成绩处理】(3+3+3+3+3=15分)
笑笑最崇拜她的信息学Mrchen,这不,Mrchen正在教笑笑pascal语言中的记录类型:
有时候我们会遇到这种数据,它由性质各不相同的成分组成,例如:
学号字符串类型
姓名字符串类型
年龄整型
性别字符型
成绩实型
如果用5个变量来存储,就失去了一个整体性,Pascal给我们提供了一种叫做记录的结构类型。
在一个记录中,可以包含不同类型的并且互相相关的一些数据。
记录的定义:
(如上面的数据定义如下)
typenode=record
num:
string;{学号}
name:
string;{姓名}
age:
integer;{年龄}
sex:
string[6];{性别}
score:
real;{成绩}
end;
varstudent:
array[1..100]ofnode;{定义student数组的每个元素为node这种记录类型,该记录类型包含5个域}
记录的引用:
对记录中每个域的引用,如输入第i个学生的学号,有两种方法:
(1)可以写出记录变量名和域名,pascal语言表示为readln(student[i].num);
(2)使用开域语句with…do,pascal语言表示为withstudent[i]do
Readln(num)
笑笑立马就掌握了这种数据结构,为了在你面前炫耀,她出了一个记录类型的题目考考你,给出n(1<=n<200)个同学m(1<=m<=5)科的考试成绩,按总分找出前十名是哪些同学。
规定:
总分相同名次相同,且占用后面的名次,例如:
第2名有两个同学,那么将没有第3名,后面的同学将从第4名算起。
Input
第一行为n和m,下面n行为每个同学的成绩描述:
每行有m+1个数,其中第一个数为学号(小于等于200),后面为各科成绩,成绩为0~100之间的实数,中间用一个空格隔开。
Output
一行,成绩名次在前10的同学学号,不足10名全部输出。
当第10名有多个同学时,输出有可能超过10名同学的学号。
同名次按学号由小到大输出。
输出的各个学号之间用一个空格隔开。
SampleInput
172
1713
21854
34791
46586
54448
69288
78036
87668
95421
106511
116169
127832
13081
249332
154297
16289
176555
SampleOutput
648153112417712
programtest_2012_6;
typecj=array[1..5]ofreal;
rec=record
num:
integer;//学号
s:
cj;//考试科目成绩
m1:
integer;//名次
sum:
real;//总分
end;
vara:
array[1..200]ofrec;i,j,n,m,k:
integer;t:
rec;
begin
readln(n,m);
fori:
=1tondo
witha[i]do
begin
①;sum:
=0;
forj:
=1tomdobeginread(s[j]);sum:
=②end;
m1:
=0;
readln;
end;
fori:
=1ton-1do
forj:
=1ton-ido
if(a[j].sum(③)and(a[j].num>a[j+1].num)
thenbegint:
=a[j];④;a[j+1]:
=t;end;
a[1].m1:
=1;k:
=1;
fori:
=2tondo
ifa[i].sum=a[i-1].sumthena[i].m1:
=k
elsebegininc(k);a[i].m1:
=k;end;
fori:
=1tondo
ifi<=10thenwrite(a[i].num,'')
elseifa[i].sum=a[i-1].sumthenwrite(⑤,'')
elsebreak;
end.
2.【布置新房】(3+3+3+3+3=15分)
笑笑今天很开心,家里购置的新房领到钥匙了,新房里有一间笑笑自己专用的很宽敞的房间。
更让她高兴的是,妈妈昨天对她说:
“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过m元钱就行”。
笑笑怀里揣着m元RMB到了商场,商场里的物品真多啊,让人眼花缭乱。
笑笑想买的东西很多,于是,她把想买的每件物品规定了一个重要度,用整数表示,数值越大越重要,当然每件物品都有价格,笑笑经过仔细观察,发现这个商场很奇特,所有物品的价格都是整数。
笑笑希望在不超过m元(可以等于m元)的前提下,买回去布置新房的物品的重要度之和最大。
比如想买有4件物品,价格分别为3,4,5,8,对应的重要度分别为4,5,7,10,笑笑总共有12元钱,则取编号为1,2,3的物品,得到最大的重要度之和为16。
Input
第一行为m和n,中间用空格隔开,表示m元RMB和商场中有n件物品。
下面n行依次为每件物品的价格和重要度,中间用一个空格隔开。
Output
一行,表示在不超过m元的前提下笑笑购买物品的最大重要度之和。
SampleInput
124
34
45
57
810
SampleOutput
16
算法思路:
穷举。
用一个b数组来存放物品选取的情况,当b[i]=0时表示第i件物品不取,当b[i]=1时表示第i件物品已取,初始化全部取0,可以从后面的物品开始取起,通过b数组的取值把15种取法全部穷举出来,重要度之和max初始化为0。
b[0]b[1]b[2]b[3]b[4]
00000{初始化}
00001{取第4件物品,价格为8,不超,重要度为10,将max替换为10}
00010{取物品3,价格为5,不超,重要度为7,小于max,不换}
00011{取物品3,4,价格为13,超}
00100{取物品2,价格为4,不超,重要度为5,不换}
00101
00110
00111
…
01110{取物品1,2,3,价格为12,重要度为16,将max替换为16}
01111
10000{当b[0]=1时停止,b[0]称为哨兵}
programtest_2012_7;
varv,p:
array[1..100]ofinteger;//物品的价格和重要度
b:
array[0..100]of0..1;//表示物品的选取情况
i,j,m,n,max,vsum,psum:
integer;
begin
readln(m,n);
fori:
=1tondo
①;
fillchar(b,sizeof(b),0);
max:
=0;
whileb[0]=0do
begin
j:
=n;
whileb[j]=1dodec(j);
b[j]:
=1;
fori:
=j+1tondo②;
vsum:
=0;psum:
=0;
forj:
=1tondo
ifb[j]=1thenbegin③;psum:
=psum+p[j];end;
ifvsum<=mthenifmaxend;
writeln(⑤);
end.