全国青少年信息学(计算机)奥林匹克竞赛提高组初赛试题及答案 下载本文

内容发布更新时间 : 2024/12/27 9:32:19星期一 下面是文章的全部内容请认真阅读。

第三届全国青少年信息学(计算机)奥林匹克分区联赛初赛试题

(高中组)

(PASCAL 语言 竞赛用时:2小时)

●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●

一、基础部分:

<1> WPS是属于________类的软件;FOXBASE 是属于_______类的软件。用FOXBASE

的命令:“CREATE GZB”,在磁盘中生成的是_______文件.

<2>在MS DOS 的根目录中,有如下文件: TIME.EXE TIME.COM TIME.BAT

试问:C:\\>TIME < 回车 > 执行的是什么命令?

<3> 已知ASCII码表中的大写字母后有6个其它字符,接着便是小写字母。现已知:A字母的

ASCII码为(41)16{ 表示16进制数41 },试写出如下字母用十进制表示的ASCII码: G → ( )10 B → ( )10 T → ( )10

<4> 设数组A[10..100,20..100] 以行优先的方式顺序存储,每个元素占4个字节,且已知

A[10,20]的地址为1000,则A[50,90]的地址是 。

<5>一个汉字的机内码目前通常用2个字节来表示:第一个字节是区位码的区号加(160)10;第二个字节是区位码的位码加(160)10 。

已知:汉字“却”的区位码是4020,试写出机内码两个字节的二进制的代码:

<6> 下图中用点表示城市,点与点之间的联系表示城市间的道路:

D C

E

F A B

试问:

① 能否找出一条从A城市出发,经过图中所有道路一次后又回到出发点的通路来? ② 能否从A出发,找出去每个城市且只去一次的通路来? 若能,则写出通路,否则说明理由。

<7> 为了便于处理表达式,常常将普通表达式(称为中缀表示)转换为前缀{运算符在前,如X/Y写为/XY} 和后缀 { 运算符在后,如X/Y写为XY/}的表达形式。 在这样的表示中可以不用括号即可确定求值的顺序,如:

(P+Q)*(R-S)→*+PQ-RS 或 → PQ + RS -*

① 试将下面的表达式改写成前缀与后缀的表示形式: A+B*C/D A-C*D+B∧E

② 试将下面的前缀表示还原成中缀的表示形式,同时写出后缀表示:

+△A *B△C {前缀式中△表示一元运算符取负号,如△A表示(-A)}

<8> 一个将角编了号的正三角形可以进行如下二种运动:

(a) 沿过顶点1的高H翻转1800,我们将这个运动用字母a来表示: 1 1

h a h 2 3 3 2 图一 图二

(b) 沿过三角形的外心,垂直于三角形所在平面的有向轴L(注意:三角形翻转时

L轴也随着翻转的),按右手法则旋转1200(右手法则是指用右手大拇指指向L轴的方向,由其余四指决定旋转方向的法则),我们将这样的运动用字母b来表示: 1 3 L L

h b h 2 3 1 2

如果将a,b作为运算对象,并将两个运动连续进行看作是一种运算(这里不妨

也称为乘法)则对图一的三角形而言,aa的结果便成为:

1 2

h h aa

2 3 3 1

若将运动前后的三角形状态简称为元素,那么三角形状态就可与运动的表达式关联。据此,请回答下列问题:

① 从图一的三角形的原始状态出发,可以运动出多少种不同状态的三角形,试写出

最简单的运算表达式(借助于a,b与乘法运算); ② 这样定义的乘法运算是否符合交换律与结合律?

③ 如果将三角形的某种状态运动回到原始状态称之为该元素的逆元素,例如: 1 3 1

b bb 2 3 1 2 2 3

∴ bb的逆元素为b ,可以表示为(bb)-1 =b

试求:(1)a-1 = (2)(ab)-1 = (3) ((aa)a) -1 = (4) b-1 =

二、根据题意,将以下程序补充完整

1.[问题描述] 一个正整数(非素数)可以表示成它的因子(1与其本身除外)的乘积。 例如:12有因子2,2,3,4,6,所以可表示为: 12=2?2?3=4?3=2?6 给出任一个正整数N,求出它所有的因子乘积的表达式(交换律得出的不同式子算同一种)。

[算法说明] 读入一个整数N,首先求出它的所有的因子以及每个因子可能的次数。 例如:整数48:

因子:2 3 4 6 8 12 16 24 次数:4 1 2 1 1 1 1 1

将上面的结果存入数组A:ARRAY[0..20,1..2]中。其中:A[?,1]表示因子;A[?,2]表示次数。

然后用简单回溯的方法求出所有可能的表示。

数组B[0..20]记录取数情况;C:ARRAY[1..20]工作单元。 [程序清单] program exp4(input,output);

var a : array[0..20,1..2] of integer; c,b : array[0..20] of integer; n,m,I,j,s,k,l : integer; Begin

WRITELN; readln(n); for i:=1 to 20 do a[i,1]:=0;

① ; a[0..2]:=1; j:=0; for i:=2 to n-1 do begin

s:=0; m:=n;

while(m<>0) and (m mod i=0) do begin

m:=m div i; ② ; end;

if ③ then begin

j:=j+1; ④ ; a[j,2]:= ⑤ ; end end;

for i:=0 to j do b[i]:=0; whil ⑥ do begin k:=j;

while B[K]=A[K,2] do k:=k-1; b[k]:=b[k]+1;

for L:= ⑦ do b[L]:=0;