A. not ((a0) or (b0) or (c0))
B. not ((a0) and (b0) and (c0))
C. not ((a=0) and (b=0)) or (c=0)
D.(a=0) and (b=0) and (c=0)
E. not ((a=0) or (b=0) or (c=0))
7. 地面上有标号为A、B、c的3根细柱, 在A柱上放有10个直径相同中间有孔的圆盘, 从上到下次依次编号为1, 2, 3, ……,将A柱上的部分盘子经过B柱移入c柱, 也可以在B柱上暂存。如果B柱上的操作记录为:“进,进,出,进,进,出,出,进,进,出,进,出,出”。那么, 在c柱上, 从下到上的盘子的编号为( )。
A. 2 4 3 6 5 7 B. 2 4 1 2 5 7 c. 2 4 3 1 7 6
D. 2 4 3 6 7 5 E. 2 1 4 3 7 5
8. 与十进制数17.5625相对应的8进制数是( )。
A. 21.5625 B. 21.44 c. 21.73
D. 21.731 E. 前4个答案都不对
9. 欧拉图G是指可以构成一个闭回路的图,且图G的每一条边恰好在这个闭回路上出现一次(即一笔画成)。在以下各个描述中, 不一定是欧拉图的是:( )。
A. 图G中没有度为奇数的顶点
B. 包括欧拉环游的图(欧拉环游是指通过图中每边恰好一次的闭路径) c. 包括欧拉闭迹的图(欧拉迹是指通过途中每边恰好一次的路径)
D. 存在一条回路, 通过每个顶点恰好一次
E. 本身为闭迹的图
10. 一个无法靠自身的控制终止的循环称为“死循环”,例如在c语言程序中,语句“while(1)printf("*");”就是一个死循环,运行它将无休止地打印*号。下面关于死循环的说法中, 只有( )是正确的。
A. 不存在一种算法, 对任何一个程序及相应的输入数据, 都可以判断是否会出现死循环, 因而, 任何编译系统都不做死循环检查
B. 有些编译系统可以检测出死循环 c. 死循环属于语法错误, 既然编译系统能检查各种语法错误, 当然也能检查出死循环
D. 死循环与多进程中出现的“死锁”差不多,而死锁是可以检测的,因而,死循环也是可以检测的
E. 对于死循环,只能等到发生时做现场处理, 没有什么更积极的手段
15. 冗余数据是指可以由以他数据导出的数据,例如,数据库中已存放了学生的数学、语文、和英语的三科成绩,如果还存放三科成绩的总分,则总分就可以看做冗余数据。冗余数据往往会造成数据的不一致,例如上面4个数据如果都是输入的,由于操作错误使总分不等于三科成绩之和,就会产生矛盾。下面关于冗余数据的说法中, 正确的是( )。
A. 应该在数据库中消除一切冗余数据
B. 与用高级语言编写的数据处理系统相比, 用关系数据库编写的系统更容易消除冗余数据 c. 为了提高查询效率, 在数据库中可以适当保留一些冗余数据, 但更新时要做相容性检验
D. 做相容性检验会降低效率, 可以不理睬数据库中的冗余数据
18. 在下列关于计算机语言的说法中,正确的有( )。
A. 高级语言比汇编语言更高级, 是因为它的程序的运行效率更高
B. 随着Pascal、c等高级语言的出现, 机器语言和汇编语言已经退出了历史舞台 c. 高级语言程序比汇编语言程序更容易从一种计算机移植到另一种计算机上
D. c是一种面向过程的高级计算机语言
19. 在下列关于算法复杂性的说法中, 正确的有( )。
A. 算法的时间复杂度,是指它在某台计算机上具体实现时的运行时间
B. 算法的时间复杂度,是指对于该算法的一种或几种主要的运算, 运算的次数与问题的规模之间的函数关系 c. 一个问题如果是NPc类的, 就意味着在解决该问题时, 不存在一个具有多项式时间复杂度的算法. 但这一点还没有得到理论上证实,也没有被否定
D. 一个问题如果是NP类的,与c有相同的结论 [/url]
20. 近20年来, 许多[url=http://www.oinew.com/]计算机专家都大力推崇递归算法,认为它是解决较复杂问题的强有力的工具. 在下列关于递归的说法中, 正确的是( )。
A. 在1977年前后形成标准的计算机高级语言"FORTRAN77"禁止在程序使用递归, 原因之一是该方法可能会占用更多的内存空间.
B. 和非递归算法相比, 解决同一个问题, 递归算法一般运行得更快一些 c. 对于较复杂的问题, 用递归方式编程往往比非递归方式更容易一些
D. 对于已定义好的标准数学函数sin(x), 应用程序中的语句“y=sin(sin(x));”就是一种递归调用
1. Program s401; var p,q:array[0..5] of integer;
i,x,y:integer;
begin
y:=20;
for i:=0 to 4 do read(p);
readln;
q[0]:=(p[0]+p[1])+(p[2]+p[3]+p[4]) div 7;
q[1]:=p[0]+p[1] div ((p[2]+p[3]) div p[4]);
q[2]:=p[0]*p[1] div p[2];
q[3]:=q[0]*q[1];
q[4]:=q[1]+q[2]+q[3];
x:=(q[0]+q[4]+2)-p[(q[3]+3) mod 4];
if (x>10) then
y:=y+(q[1]*100-q[3]) div (p[p[4] mod 3]*5)
else
y:=y+20+(q[2]*100-q[3]) div (p[p[4] mod 3]*5);
writeln(x,',',y);
end.
/*注:本例中,给定的输入数据可以避免分母为 0 或下标越界。[/url] */
输入:6 6 5 5 3
输出:
2. [url=http://oinew.com/]Program s402; var a,b:integer;
x,y:^integer;
procedure fun(a,b:integer); var k:integer;
begin
k:=a; a:=b; b:=k;
end;
begin
a:=3; b:=6;
x:=@a; y:=@b;
fun(x^,y^);
write('No.1:',a,',',b,' ');
fun(a,b);
writeln('No.2:',a,',',b);
end.
输出:
3. Program S403; var a1:array[1..50] of integer; var i,j,t,t2,n,n2:integer;
begin
n:=50;
for i:=1 to n do a1:=0;
n2:=round(sqrt(n));
for i:=2 to n2 do
if(a1=0) then
begin
t2:=n div i;
for j:=2 to t2 do a1[i*j]:=1;
end;
t:=0;
for i:=2 to n do
if (a1=0) then
begin
write(i:4); inc(t);
if(t mod 10=0) then writeln;
end;
writeln;
end.
输出:
4. Program S404; const n=12;
ch2:array[0..12] of char
=('q','A','S','O','R','T','E','X','A','M','P','L','E'); var k:integer;
ch:array[0..12] of char;
procedure shift(k,n:integer); var v:char;
j:integer;
begin
v:=ch[k]; j:=k+k;
while (j
begin
if (j
if (ord(v)
begin ch[j div 2]:=ch[j]; j:=j*2; end
else
exit; ch[j div 2]:=v;
end;
end;
procedure hpsrt; var k:integer;
tmp:char;
begin
for k:=n div 2 downto 1 do shift(k,n);
write('No.1: ');
for k:=1 to n do write(ch[k]);
writeln;
for k:=n downto 1 do
begin
tmp:=ch[1]; ch[1]:=ch[k]; ch[k]:=tmp;
shift(1,k-1);
end;
end;
begin
for k:=0 to n do ch[k]:=ch2[k];
hpsrt;
write('No.2: ');
for k:=1 to n do write(ch[k]);
writeln;
end.
输出:
Program s501; var bound,m,n,i,j,b,p:integer;
gr:array[0..14]of integer;
begin
bound:=1;
writeln('input n,m');
readln(n,m);
for i:=1 to n do bound:=[ ① ];
if (m=bound) then
begin
writeln('Data error!'); [ ② ];
end;
b:=1;
for i:=1 to n do
begin
p:=0; b:=b*2;
for[ ③ ] to m do
if ([ ④ ] ) then
p:=1-p;
gr:=p;
end;
for i:=n[ ⑤ ] do
write(gr);
writeln;
end.
2.(连续邮资问题)某国发行了n种不同面值的邮票,并规定每封信上最多允许贴m张邮票。在这些约束下,为了能贴出{1,2,3,…,maxvalue}连续整数集合的所有邮资,并使maxvalue的值最大,应该如何设计各邮票的面值?例如,当n=5和m=4时,面值设计为(1,3,11,15,32),可使maxvalue达到最大值70(或者说,用这些面值的1至4张邮票可以表示不超过70的所有邮资,但无法表示邮资71)。而用其他面值的1至4张邮票如果可以表示不超过k的所有邮资,必有k≤70)
下面是用递归回溯求解连续邮资问题的程序。数组x[1:n]表示n种不同的邮票面值,并约定各元素按下标是严格递增的。数组bestx[1:n]存放使maxvalue达到最大值的邮票面值(最优解),数组y[maxl]用于记录当前已选定的邮票面值x[1:i]能贴出的各种邮资所需的最少邮票张数。请将程序补充完整。 Program S502; const NN=20;
maxint=30000;
maxl=500; var bestx,x:array [0..NN] of integer;
y:array [0..maxl] of integer;
j,n,m,maxvalue:integer;
procedure result; var j:integer;
begin
writeln('max=',maxvalue);
for j:=1 to n do write(bestx[j]:4);
writeln;
end;
procedure backtrace(i,r:integer); var j,k:integer;
z: array[0..maxl] of integer;
begin
for j:=0 to[ ① ]do
if (y[j]
for k:=1 to m-y[j] do
if (y[j]+k② ]) then
y[③ ]:=y[j]+k;
while (y[r]
if (i>n) then
begin
if (r-1>maxvalue) then
begin
maxvalue:=[ ④ ] ;
for j:=1 to n do bestx[j]:=x[j];
end;
exit;
end;
for k:=0 to maxl do z[k]:=y[k];
for j:=[ ⑤ ] to r do
begin
x:=j; [ ⑥ ];
for k:=0 to maxl do y[k]:=z[k];
end;
end;
begin
maxvalue:=0;
writeln('input n,m:');
readln(n,m);
for j:=1 to maxl do y[j]:=maxint;
y[0]:=0; x[0]:=0; x[1]:=1;
backtrace(2,1);
result;
end.
一、单项选择题:(每题1.5分)
1. D 2. E 3. D 4. B 5. A
6. B 7. D 8. B 9. D 10. A
二、 不定项选择题 (共10题,每题1.5分,共计15分。每题正确答案的个数大于或等于1。多选或少选均不得分)。
11. ABc 12. AD 13. ABD 14. ABD 15. Bc
16. ABD 17. AB 18. cD 19. Bc 20. Ac
三、问题求解:(共2题,每题5分,共计10分)
1.350
2.289
四、阅读程序写结果(共4题,每题8分,共计32分)
1 129,43
2 No.1:3,6 No.2:3,6
3 2 3 5 7 11 13 17 19 23 29
31 37 41 43 47
4 No.1: XTORSEAAMPLE
No.2: AAEELMOPRSTX
五.完善程序 (前5空,每空2分,后6空,每空3分,共28分)
(说明:以下各程序填空可能还有一些等价的写法,各省可请本省专家审定和上机验证,不一定上报科学委员会审查)
1 ① bound*2
② exit
③ j:=0
④ (j mod b-(b div 2))=0
⑤ downto 1
2 ① x[i-2]*(m-1)
② j+x[i-1]*k
③ j+x[i-1]*k (同2)
④ r-1
⑤ x[i-1]+1
⑥ backtrace(i+1,r)
完整程序: Program S501; var bound,m,n,i,j,b,p:integer;
gr:array[0..14] of integer;
begin
bound:=1;
writeln('input n,m');
readln(n,m);
for i:=1 to n do bound:=bound*2 ;
if (m=bound) then
begin
writeln('Data error!');
exit ;
end;
b:=1;
for i:=1 to n do
begin
p:=0; b:=b*2;
for j:=0 to m do
if (j mod b-(b div 2))=0 then
p:=1-p;
gr:=p;
end;
for i:=n downto 1 do
write(gr);
writeln;
end.
Program S502; const NN=20;
maxint=30000;
maxl=500; var bestx,x:array [0..NN] of integer;
y:array [0..maxl] of integer;
j,n,m,maxvalue:integer;
procedure result; var j:integer;
begin
writeln('max=',maxvalue);
for j:=1 to n do write(bestx[j]:4);
writeln;
end;
procedure backtrace(i,r:integer); var j,k:integer;
z: array[0..maxl] of integer;
begin
for j:=0 to x[i-2]*(m-1) do
if (y[j]
for k:=1 to m-y[j] do
if (y[j]+k
y[j+x[i-1]*k]:=y[j]+k;
while (y[r]
if (i>n) then
begin
if (r-1>maxvalue) then
begin
maxvalue:=r-1 ;
for j:=1 to n do bestx[j]:=x[j];
end;
exit;
end;
for k:=0 to maxl do z[k]:=y[k];
for j:=x[i-1]+1 to r do
begin
x:=j;
backtrace(i+1,r);
for k:=0 to maxl do y[k]:=z[k];
end;
end;
begin
maxvalue:=0;
writeln('input n,m:');
readln(n,m);
for j:=1 to maxl do y[j]:=maxint;
y[0]:=0; x[0]:=0; x[1]:=1;
backtrace(2,1);
result;end.