宁波市第25届中小学生程序设计竞赛小学组初赛试题.docx
《宁波市第25届中小学生程序设计竞赛小学组初赛试题.docx》由会员分享,可在线阅读,更多相关《宁波市第25届中小学生程序设计竞赛小学组初赛试题.docx(17页珍藏版)》请在冰豆网上搜索。
![宁波市第25届中小学生程序设计竞赛小学组初赛试题.docx](https://file1.bdocx.com/fileroot1/2023-2/23/10526864-4230-4340-aa90-2c11dc176c69/10526864-4230-4340-aa90-2c11dc176c691.gif)
宁波市第25届中小学生程序设计竞赛小学组初赛试题
宁波市第25届中小学生程序设计竞赛
小学组初赛试题
一、选择题(每题2分,共30分。
每小题只有唯一一个正确答案)
1、在宁波市中小学生程序设计比赛复赛(上机编程)时,以下不能使用的编程语言是:
(A)TurboPascal (B)FreePascal (C)C (D)C++
2、在FreePascal中按功能键F7或F4时,以下叙述正确的是:
(A)F4逐条语句执行(包括子程序),F7运行至光标位置
(B)F7逐条语句执行(包括子程序),F4运行至光标位置
(C)F4逐条语句执行(不包括子程序),F7运行至光标位置
(D)F7逐条语句执行(不包括子程序),F4运行至光标位置
3、使用高级语言编写的程序称之为:
(A)源程序 (B)编辑程序 (C)编译程序 (D)链接程序
4、如果自己的程序进入了死循环,应当按什么键终止?
(A)Ctrl+C (B)Ctrl+D (C)Alt+C (D)Alt+D
5、参加宁波市中小学生程序设计比赛复赛(上机编程)时,以下哪种行为是允许的?
(A)访问互联网或局域网 (B)使用U盘或光盘
(C)使用自带的草稿纸 (D)考试时发现机器有问题,举手示意监考人员处理
6、参加宁波市中小学生程序设计比赛复赛(上机编程)时,你有一个程序被判0分。
你发现程序其实是正确的,但存在以下问题,提出申诉,以下哪个申诉会被接受?
(A)源程序文件名和存放源程序的目录名错误
(B)只是存放源程序的目录名错误,源程序文件名是正确的
(C)存放源程序的目录名正确,源程序文件名是错误的
(D)根据比赛规则,以上申斥都不会被接受
7、在FreePascal语言,以下关于各种数据类型占内存空间大小的描述错误的是:
(A)每个integer型占2个字节 (B)每个longint型占4个字节
(C)每个boolean型占2个字节 (D)每个extended型占10个字节
8、关键码相同的二个元素,原来在排在前面的还能保证排在前面,这种排序算法我们称它是稳定的。
冒泡排序、选择排序、插入排序中,一般意义上是稳定的有几种:
(A)1 (B)2 (C)3 (D)0
9、在FreePascal中编辑当前源程序时,可以使用快捷键Ctrl+F7增加调试程序时监视的变量,但如果不小心错按为Ctrl+F6时,会将当前源程序窗口隐藏起来。
此时,可以使用菜单命令“Windows/List”调出WindowsList对话框,在该对话框中选中隐藏的当前正在编辑的源程序,然后按下面哪个命令按钮可以显示当前正在编辑的源程序?
(A)Ok (B)NotHide (C)Show (D)Delete
10、结构化程序设计的三种基本控制结构为顺序结构、选择结构和循环结构,以下说法正确的是:
(A)三种结构都是基本结构,内部不能再有其它结构
(B)三种结构都是基本结构,内部除了允许嵌套同一种结构外,不能再有其它结构
(C)选择结构和循环结构内部可以嵌套有其它结构,顺序结构不可以嵌套其它结构
(D)三种结构内部都可以嵌套其它结构
11、以下属于计算机的基本指令的是:
(A)数值和逻辑运算指令(B)存储和输入输出指令(C)控制和转移指令 (D)以上都是
12、以下属于汉字输出时使用的编码的是:
(A)国标码 (B)区位码 (C)字形码 (D)五笔字形
13、以下存储介质中,一般说来存取速度最快的是:
(A)硬盘 (B)内存 (C)U盘 (D)光盘
14、以下主要用来网页制作的是:
(A)BASIC (B)Pascal (C)FrontPage (D)HTML
15、标准ASCII码最多能表示的字符个数是:
(A)128 (B)64 (C)256 (D)8
二.问题求解(每题5分,共10分)
1、一副扑克牌除去大小王外,有52张牌。
其中有黑桃(Spade)、红心(Heart)、方块(Diamond)、梅花(Club)四种花色,每种花色点数从小到大各有13张,它们是:
2、3、4、5、6、7、8、9、10、J、Q、K、A。
在上述52张中任取5张,取得炸弹(fourofakind,即四张点数相同的牌加一张另外点数的牌)的取法数有13*48=624种;取得辅鲁(fullhouse,即三张点数相同另加二张点数相同牌)的取法数有多少种?
请注意,二种取法中,只要有一张牌花色不同或点数不同,这二种取法就是不同的。
2、有若干堆硬币,甲乙二人参加游戏,游戏规则如下:
(1)由甲开始,二人轮流取硬币,每次取时只能从某一堆中取若干个硬币,可以把该堆硬币全部取完,最少可以只取一个硬币,但不能不取硬币。
(2)最后取完最后一个硬币的人为胜者。
比如一开始有二堆硬币,第一堆1枚,第二堆2枚,有几种取法:
(1)甲取第一堆1枚,乙取第二堆1枚,甲取第二堆1枚,甲获胜!
(2)甲取第一堆1枚,乙取第二堆2枚,乙获胜!
(3)甲取第二堆1枚,乙取第一堆1枚,甲取第二堆1枚,甲获胜!
(4)甲取第二堆1枚,乙取第二堆1枚,甲取第一堆1枚,甲获胜!
(5)甲取第二堆2枚,乙取第一堆1枚,乙获胜!
显然,当甲先取第二堆1枚时,甲能获胜!
当甲采取其它取法时,当乙取对时,甲会失败的。
但如果一开始二堆硬币数都为2枚,则甲无论在哪一堆中取多少个,乙可以在另外一堆中取同样多个,乙获胜,甲失败。
现在有三堆硬币,第1堆有2枚硬币,第2堆有4枚硬币,第3堆有5枚硬币。
问甲先取,在大家都使用最佳方法的情况下,甲能否获胜?
如果甲能获胜,请写出第一次在第几堆取多少枚硬币才能获胜?
如果不能获胜,则只要写上“No”。
三.阅读程序,求程序运行输出结果(每题8分,共32分)
第1题:
programxx2010_1;
vari,j,s:
longint;prime:
boolean;
begin
fori:
=2to20dobegin
prime:
=true;
forj:
=2toi-1do
ifimodj=0thenbegin
prime:
=false;
break;
end;
ifprimethens:
=s+1;
end;
writeln(s);
end.
【输出】:
______________
第2题:
Programxx2010_2;
vara,b,c,d,n,i,j:
longint;find:
boolean;
f:
array[0..9]oflongint;
begin
f[0]:
=2;f[1]:
=3;f[2]:
=5;f[3]:
=7;f[4]:
=11;
f[5]:
=13;f[6]:
=17;f[7]:
=19;f[8]:
=23;f[9]:
=29;
readln(a,b,c,d);
n:
=10;
a:
=((f[a]*f[b]-f[c]*f[d])modn+n)modn;
b:
=((f[b]*f[c]-f[d]*f[a])modn+n)modn;
c:
=((f[c]*f[d]-f[a]*f[b])modn+n)modn;
d:
=((f[d]*f[a]-f[b]*f[c])modn+n)modn;
writeln(a,'',b,'',c,'',d);
end.
【输入】:
2 3 5 7
【输出】:
______________
第3题:
Programxx2010_3;
vara:
array[1..30]oflongint;
s,n,i,x,y,z:
longint;c:
char;
begin
readln(x,y);
readln(z);
n:
=0;
whilez>0dobegin
n:
=n+1;a[n]:
=zmod10;z:
=zdiv10;
end;
s:
=0;
fori:
=ndownto1dos:
=s*x+a[i];
writeln(s);
n:
=0;
whiles>0dobegin
n:
=n+1;a[n]:
=smody;s:
=sdivy;
end;
fori:
=ndownto1dowrite(a[i]);
writeln;
end.
【输入】:
72
126
【输出】:
__________
__________
第4题:
Programxx2010_4;
varf:
array[1..46]oflongint;
a:
array[1..100]oflongint;
x,y,z,i,j,n,count:
longint;
functionfind(i,h,x:
longint):
longint;
varm:
longint;
begin
ifi<3thenfind:
=0
elsebegin
m:
=h+f[i-1]-1;
count:
=count+1;
ifx=a[m]thenfind:
=m
elseifx=find(i-1,h,x)
elsefind:
=find(i-2,m+1,x);
end;
end;
begin
f[1]:
=1;f[2]:
=1;
fori:
=3to46dof[i]:
=f[i-1]+f[i-2];
readln(n,x,y);
fori:
=1tondoa[i]:
=3*i-1;
i:
=1;
whilef[i]-1 forj:
=n+1tof[i]-1doa[j]:
=maxlongint;
count:
=0;j:
=find(i,1,x);
writeln(j,'',count);
count:
=0;j:
=find(i,1,y);
writeln(j,'',count);
end.
【输入】:
8 14 7
【输出】:
_________
_________
四.程序填空(第1题每空2分,第2题每空3分,共28分)
1、人数统计
有二幢高楼,已知:
(1)第一幢高楼的各层上男性人数与第二幢高楼的同一层上的男性人数的差;
(2)第一幢高楼的各层上女性人数与第二幢高楼的同一层上的女性人数的差;
求第一幢高楼的各层上总人数与第二幢高楼的同一层上的总人数的差;
输入:
第1行二个整数n1和n2。
第2行至第n1+1行,每行二个整数a1和b1。
表示第b1层男性人数的差额为a1。
第n1+2行至第n1+n2+1行,每行二个整数a2和b2。
表示第b2层女性人数的差额为a2。
输出:
每行二个整数a和b,表示第b层总人数的差额为a。
请注意:
(1)输入时,如果某一层上二幢楼均没有男性(或女性),则不输入该层的差额情况
(2)输出时,如果某一层上二幢楼均没有人,则不输出该层的差额情况
(3)输入和输出时,均按照层数递增的次序。
请将程序补充完整。
【样例输入】
3 2
1 1
5 2
6 7
-5 2
3 4
【样例输出】
1 1
0 2
3 4
6 7
【样例说明】
输入:
男性第1层差1,第2层差5,第7层差6
女性第2层差-5,第4层差3
输出:
总人数第1层差1,第2层差,
第4层差3,第7层差6
Programxx2010_5;
vara1,a2,b1,b2,a,b:
array[1..100]oflongint;
n1,n2,n,i,j:
longint;
begin
readln(n1,n2);
fori:
=1ton1doread(a1[i],b1[i]);
fori:
=1ton2doread(a2[i],b2[i]);
i:
=1;j:
=1;① ;
while ② dobegin
ifb1[i]=b2[j]thenbegin
a[n]:
=③ ;b[n]:
=④ ;
i:
=i+1;j:
=j+1;n:
=n+1;
endelseifb1[i] a[n]:
=a1[i];b[n]:
=b1[i];
i:
=i+1;n:
=n+1;
endelsebegin
a[n]:
=a2[j];b[n]:
=b2[j];
j:
=j+1;
n:
=n+1;
end;
end;
whilei<=n1dobegin
a[n]:
=a1[i];b[n]:
=b1[i];
i:
=i+1;n:
=n+1;
end;
whilej<=n2dobegin
a[n]:
=a2[j];b[n]:
=b2[j];
j:
=j+1;n:
=n+1;
end;
⑤ ;
fori:
=1tondo
writeln(a[i],'',b[i]);
end.
2、表达式求值
栈是一种后进先出的数据结构,实际编程时,常常以数组来模拟栈。
以下程序计算包含“+”、“-”、“*”、“(”、“)”和正整数的一个表达式的值。
以数组num和数组code作为二个栈。
其中栈num用来存储表达式中的数值以及计算的中间结果,栈code用来存储表达式中的运算符号。
最终结果存储在num[1]中,程序输出最终求得的一个整数值num[1]。
程序逐字符扫描表达式:
1、如果是运算数,则直接进运算数栈num。
2、如果是运算符:
2.1如果当前运算符级别低于或相同于位于运算符栈顶的前一个运算符的级别,则:
2.1.1在运算数栈中出栈两次,得到a,b;
2.1.2运算符栈出栈,得运算符p;
2.1.3将a和b在运算p下的计算结果入运算数栈;
2.1.4当前运算符继续与位于运算符栈顶的前一个运算符比较;
2.2如果当前运算符级别高于位于运算符栈顶的前一个运算符级别,则当前运算符进栈:
3、左括号最高级。
右括号最低级
3.1因此,遇左括号时,左括号入栈;但左括号在栈内时,级别低于任何其它符号!
3.2遇右括号时,一直作运算,直至遇上左括号,则简单地作左括号出栈即可,且此时右括号不进栈;
为方便起见,程序会在输入的表达式前后加上一对括号。
另外,输入数据保证是正确的。
请将程序补充完整。
【样例输入】
12+2*34+(45-5)*(6+7)
Programxx2010_6;
vars:
ansistring;
n,i,tc,tn:
longint;
【样例输出】
600
x,y:
extended;
num:
array[1..1001]ofextended;
code:
array[1..1001]ofchar;
functioncal(x,y:
extended;c:
char):
extended;//计算x和y在运算c下的值
begin
ifc='-'then cal:
=x-y
elseifc='+'thencal:
=x+y
elsecal:
=x*y;
end;
functionprio(x,y:
char):
boolean;//前一个运算符x比后一个运算符y级别高吗?
begin
ifx='('thenprio:
=false
elseifx='*'thenprio:
=true
elseif(x='+')and((y='+')or(y='-'))thenprio:
=true
elseif(x='-')and((y='+')or(y='-'))thenprio:
=true
elseprio:
=false;
end;
begin
readln(s);⑥ ;
n:
=length(s);
x:
=0;tc:
=0;tn:
=0;
fori:
=1tondobegin //逐字符扫描输入的表达式
if(s[i]>='0')and(s[i]<='9')then //第i个字符是数字
x:
=x*10+ord(s[i])-ord('0')//得到连续数字表示的整数值,存储在变量x中
elsebegin
ifx<>0thenbegin//前面已经得到正整数值,当前数字x进入数字栈
tn:
=tn+1;num[tn]:
=x;x:
=0;end;
ifs[i]='('thenbegin//第i个字符为左括号,入符号栈
tc:
=tc+1;code[tc]:
=s[i];end
elseifs[i]=')'thenbegin//第i个字符为右括号
while⑦ dobegin
tn:
=tn-1;
num[tn]:
=⑧ ;
tc:
=tc-1;
end;
⑨ ;
endelsebegin //第i个字符为+,-,*
whileprio(code[tc],s[i])dobegin
tn:
=tn-1;
num[tn]:
=⑧ ;
tc:
=tc-1;
end;
tc:
=tc+1;
⑩ ;
end;
end;
end;
writeln(⑾ );
end.
宁波市第25届中小学计算机程序设计竞赛
小学组初赛答案
一、单项选择题(每题1.5分,共计30分)
12345678910
ABAADDCBA或CD
1112131415
DCBCA
二、问题求解(共2题,每题5分,共10分)
1、13*6*12*4=37442、第1堆取1枚
三、阅读程序,求程序运行输出结果(共4题,每题8分,共32分)
1、8
2、8446
3、
69
1000101
4、
52
04
四、程序填空(前5空,每空2分,后6空每空3分,共28分)
①n:
=1
②(i<=n1)and(j<=n2)必须有二个括号,and前后可以没有空格,前后可以再加一个括号
③a1[i]+a2[j]或a2[j]+a1[i]
④b1[i]或b2[j]
⑤n:
=n-1或dec(n)或dec(n,1)
⑥s:
='('+s+')'
⑦code[tc]<>'('前后可以有括号
⑧cal(num[tn],num[tn+1],code[tc])
⑨tc:
=tc-1或dec(tc)或dec(tc,1)
⑩code[tc]:
=s[i]
⑾num[1]:
0:
0