
十二届全国青少年信息学奥林匹克联赛初赛试题
( 普及组 Pascal 语言 二小时完成 )
● ● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效 ●●
一、 单项选择题 (共20题,每题15分,共计30分。每题有且仅有一个正确答案)。
1 在下面各世界顶级的奖项中,为计算机科学与技术领域做出杰出贡献的科学家设立的奖项是( )。
A 沃尔夫奖 B 诺贝尔奖 C 菲尔兹奖 D 图灵奖
2 在下列各软件中,不属于NOIP竞赛(复赛)推荐使用的语言环境有( )。
A gcc/g++ B Turbo Pascal
C RHIDE D free pascal
3 以下断电之后仍能保存数据的有( )。
A 寄存器 B ROM C RAM D 高速缓存
4.Linux是一种( )。
A 绘图软件 B 程序设计语言 C *** 作系统 D 网络浏览器
5 CPU是( )的简称。
A 硬盘 B 中央处理器 C 高级程序语言 D 核心寄存器
6 在计算机中,防火墙的作用是( )。
A 防止火灾蔓延 B防止网络攻击
C 防止计算机死机 D 防止使用者误删除数据
7 在下列关于计算机语言的说法中,不正确的是( )。
A Pascal和C都是编译执行的高级语言
B 高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上
C C++是历史上的第一个支持面向对象的计算机语言
D 与汇编语言相比,高级语言程序更容易阅读
8 在下列关于计算机算法的说法中,不正确的是( )。
A 一个正确的算法至少要有一个输入
B 算法的改进,在很大程度上推动了计算机科学与技术的进步
C 判断一个算法的好坏的主要标准是算法的时间复杂性与空间复杂性
D 目前仍然存在许多涉及到国计民生的重大课题,还没有找到能够在计算机上实施的有效算法
9 在下列各种排序算法中,不是以"比较"作为主要 *** 作的算法是( )。
A 选择排序 B 冒泡排序 C 插入排序 D 基数排序
10.在编程时(使用任一种高级语言,不一定是Pascal),如果需要从磁盘文件中输入一个很大的二维数组(例如10001000的double型数组),按行读(即外层循环是关于行的)与按列读(即外层循环是关于列的)相比,在输入效率上( )。
A 没有区别 B 按行读的方式要高一些
C 按列读的方式要高一些 D 取决于数组的存储方式。
11.在Pascal语言中,表达式 (21 xor 2)的值是( )
A 441 B 42 C23 D24
12.在Pascal语言中,判断a不等于0且b不等于0的正确的条件表达式是( )
A not a=0 or not b=0 B not((a=0)and(b=0))
C not(a=0 and b=0) D (a<>0)and (b<>0)
13.某个车站呈狭长形,宽度只能容下一台车,并且只有一个出入口。已知某时刻该车站状态为空,从这一时刻开始的出入记录为:"进,出,进,进,进,出,出,进,进,进,出,出"。假设车辆入站的顺序为1,2,3,……,则车辆出站的顺序为( )。
A 1, 2, 3, 4, 5 B 1, 2, 4, 5, 7
C 1, 4, 3, 7, 6 D 1, 4, 3, 7, 2
14.高度为n的均衡的二叉树是指:如果去掉叶结点及相应的树枝,它应该是高度为n-1的满二叉树。在这里,树高等于叶结点的最大深度,根结点的深度为0,如果某个均衡的二叉树共有2381个结点,则该树的树高为( )。
A 10 B 11 C 12 D 13
15 与十进制数1770 对应的八进制数是( )。
A 3350 B 3351 C 3352 D 3540
16.将5个数的序列排序,不论原先的顺序如何,最少都可以通过( )次比较,完成从小到大的排序。
A 6 B 7 C 8 D 9
17 设A=B=D=true,C=false,以下逻辑运算表达式值为真的有( )。
A (A∧B)∨(C∧D) B ((A∨B∨D)∧C)
C A∧(B∨C∨D) D (A∧B∧C)∨ D
18 (2010)16 + (32)8的结果是( )。
A (8234)10 B (202B)16
C (20056)8 D (100000000110)2
19 设栈S的初始状态为空,元素a, b, c, d, e 依次入栈,以下出栈序列不可能出现的有( )。
A a, b, c, e, d B b, c, a, e, d
C a, e, c, b, d D d, c, e, b, a
20 已知6个结点的二叉树的先根遍历是1 2 3 4 5 6(数字为结点的编号,以下同),后根遍历是3 2 5 6 4 1,则该二叉树的可能的中根遍历是( )
A 3 2 1 4 6 5 B 3 2 1 5 4 6
C 2 1 3 5 4 6 D 2 3 1 4 6 5
二.问题求解(共2题,每题5分,共计10分)
1.(寻找假币) 现有80枚硬币,其中有一枚是假币,其重量稍轻,所有真币的重量都相同,如果使用不带砝码的天平称重,最少需要称几次,就可以找出假币?你还要指出第1次的称重方法。请写出你的结果:_________________________________________________。
2.(取石子游戏) 现有5堆石子,石子数依次为3,5,7,19,50,甲乙两人轮流从任一堆中任取(每次只能取自一堆,不能不取), 取最后一颗石子的一方获胜。甲先取,问甲有没有获胜策略(即无论乙怎样取,甲只要不失误,都能获胜)?如果有,甲第一步应该在哪一堆里取多少?请写出你的结果:
_________________________________________________。
三.阅读程序写结果(共4题,每题8分,共计32分)
1 Program ex301;
var
u:array[03] of integer;
i,a,b,x,y:integer;
begin
y:=10;
for i:=0 to 3 do
read(u[i]);
a:=(u[0]+u[1]+u[2]+u[3]) div 7;
b:=u[0] div ((u[1]-u[2]) div u[3]);
x:=(u[0]+a+2)-u[(u[3]+3) mod 4];
if (x>10) then
y:=y+(b100-u[3]) div (u[u[0] mod 3]5)
else
y:=y+20+(b100-u[3]) div (u[u[0] mod 3]5);
writeln (x,',',y);
end
输入:9 3 9 4
输出:_______________
2Program ex302;
const
m:array[04] of integer=(2,3,5,7,13);
var
i,j:integer;
t: longint;
begin
for i:=0 to 4 do
begin
t:=1;
for j:=1 to m[i]-1 do
t:=t2;
t:=(t2-1)t;
write (t,' ');
end;
writeln;
end
输出:____________________
3Program ex303;
Const
NN=7;
Type
Arr1=array[030] of char;
var
s:arr1;
k,p:integer;
Function fun(s:arr1; a:char;n:integer):integer;
var
j:integer;
begin
j:=n;
while (a<s[j])and(j>0) do dec(j);
fun:=j;
end;
begin
for k:=1 to NN do
s[k]:=chr(ord('A')+2k+1);
k:=fun(s,'M',NN);
writeln(k);
end
输出:_____________
4program ex304;
var
x,x2:longint;
procedure digit(n,m:longint);
var n2:integer;
begin
if(m>0) then
begin
n2:=n mod 10;
write(n2:2);
if(m>1) then digit(n div 10,m div 10);
n2:=n mod 10;
write(n2:2);
end;
end;
begin
writeln('Input a number:');
readln(x);
x2:=1;
while(x2<x) do x2:=x210;
x2:=x2 div 10;
digit(x,x2);
writeln; 5
end
输入:9734526
输出:______________________________
四.完善程序 (前4空,每空25分,后6空,每空3分,共28分)
1.(全排列)下面程序的功能是利用递归方法生成从1到n(n<10)的n个数的全部可能的排列(不一定按升序输出)。例如,输入3,则应该输出(每行输出5个排列):
123 132 213 231 321
312
程序:
Program ex401;
Var
i,n,k:integer;
a:array[110] of integer;
count:longint;
Procedure perm(k:integer);
var j,p,t:integer;
begin
if ① then
begin
inc(count);
for p:=1 to k do
write(a[p]:1);
write(' ');
if ( ② ) then writeln;
exit;
end;
for j:=k to n do
begin
t:=a[k]; a[k]:=a[j]; a[j]:=t;
③ ;
t:=a[k]; ④ ;
end
end;
begin
writeln('Entry n:');
read(n);
count:=0;
for i:=1 to n do a[i]:=i;
⑤ ;
end
2 由键盘输入一个奇数 P (P<100,000,000),其个位数字不是5,求一个整数 S,使 P×S = 11111 ( 在给定的条件下,解 S 必存在)。要求在屏幕上依次输出以下结果:
(1)S 的全部数字。除最后一行外,每行输出 50 位数字。 (2) 乘积的数字位数。
例1:输入p=13,由于138547=111111,则应输出(1)8547,(2)6
例2:输入p=147,则输出结果应为(1)755857898715041572184429327286470143613
(2)42,即等式的右端有42个1。
程序:
program ex402;
var
p,a,b,c,t,n:longint;
begin
while (true) do
begin
writeln ('Input p, the last digit is 1 or 3 or 7 or 9:');
readln(p);
if (p mod 2<>0)and(p mod 5<>0) then
⑥ ;
end;
a:=0; n:=0;
while (a<p) do
begin
a:=a10+1; inc(n);
end;
t:=0;
repeat
b:=a div p;
write(b:1);
inc(t);
if ( ⑦ ) then writeln;
c:= ⑧ ; a:= ⑨ inc(n);
until c<=0;
dec(n);
writeln; writeln('n=', ⑩ );
end
第十二届全国青少年信息学联赛(普及组)答案
普及组(Pascal语言)参考答案与评分标准
一、单项选择题:(每题15分)
1 D 2 B 3 B 4 C 5 B 6B 7 C 8 A 9 D 10 D
11 C 12 D 13 C 14 B 15 C 16 B 17 B 18 A 19 C 20 B
二、问题求解:(每题 5分)
1. 4次 (1分),
第一步:分成3组:27,27,26,将前2组放到天平上(4分)。
2.有获胜策略(1分),,第1次在第5堆中取32颗石子(4分),。
三、阅读程序写结果
1 10,10 (对1个数给4分,无逗号扣1分)
2 6 28 496 8128 33550336
(前2个对1个数给1分,后3个对1个数给2分)
3 5
4 6 2 5 4 3 7 9 9 7 3 4 5 2 6(数字之间无空格扣2分)
四、完善程序(前4空(①--④),每空25分,后6空(⑤--⑩),每空3分)
1.① k=n (或n=k)
② count mod 5=0
③ perm(k+1)
④ a[k]:=a[j];a[j]:=t
⑤ perm(1)
2.⑥ break
⑦ t mod 50=0
⑧ a-pb(或a-bp)
⑨ c10+1 (或10c+1)
⑩ n
一、
1B
2A
二、
1
#include <stdioh>
void strcopy(char s,char t)
{ int i=0;
while((t+1) != NUll)
{ s=t;
i++;
t++;
}
}
void main()
{ char a[20],b[10];
gets(b);
strcopy(a,b);
puts(a);
}
2
w,one
3p表示a (&a)= p
三
1第一个是正确的 具体怎么改 我还没想好 方法很多
2
ABCDEFG
CDEFG
EFG
G
#include <stdioh>
int main(void)
{
int electric,money;
printf("请输入用电量:");
scanf("%d",&electric);
if(electric<=50)
{
money=electric053;
}
else
{
money=50053+(053+005)(electric-50);
}
printf("电费:%d元\n",money);
return 0;
}
49因为你用static来声明i,所以局部变量的值在函数调用结束后不消失而保留原值.你可以想成static int f=1;这一句只执行了1次.执行完ff(1)f为1,执行完ff(2)f为2,执行完ff(3)f为23=6,执行完ff(4)f为64=24,执行完ff(5)f为245=120.
怎么好几道52题
第2,3,5,6道是同一个道理:
#define f(x) xx 和 #define f(x) (x)(x)两者是不一样的,建议你以后都用后者这种写法.
如果是#define f(x) xx 那么f(3+4)就变成了 3+4*3+4
如果是#define f(x) (x)(x) 那么f(3+4)就是 (3+4)(3+4)
这么说,你应该懂了吧
第4道和上面这个道理类似:宏定义只是用宏名代替一个字符串,只是简单的置换.
#define N 2
#define M N+1
#define NUM 2M+1 这里NUM就是 2N+1+1也就是22+1+1
54题的话:
我只能引用这几句话:
typedef int size; 此声明定义了一个 int 的同义字,名字为 size。注意 typedef 并不创建新的类型。它仅仅为现有类型添加一个同义字。你可以在任何需要 int 的上下文中使用 size
53道:我也不明白
p=(double ) malloc(sizeof(double)) 因为 malloc()返回值类型是void,用(double)强行转换,另一个就不懂了
知道的补充下
4题。百度之星,又名Astar,是由全球最大的中文搜索引擎公司百度,面向中国高校学生和编程爱好者所举办的高水平的程序设计大赛,根据比赛规则,2022年百度之星程序设计大赛的初赛是每场4题的,该比赛自2005年起已成功举办十六届,已成为校园程序高手交流切磋的优秀竞赛平台。
以上就是关于用FREE PASCAL编程 2011年长沙市小学生信息学奥林匹克竞赛决赛试题全部的内容,包括:用FREE PASCAL编程 2011年长沙市小学生信息学奥林匹克竞赛决赛试题、C语言程序设计题目、C语言程序设计的题目,满意后加分等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)