不是VIP会员,不能显示答案,请在后台“我的信息” 在线升级 VIP

一.选择题(每题1.5分,共30分。每小题只有唯一一个答案)

1. 在宁波市中小学生程序设计比赛复赛(上机编程)时,以下不能使用的编程语言是:

  • A.Turbo Pascal
  • B.Free Pascal
  • C.C
  • D.C++

2. 在Free Pascal中按功能键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. 在Free Pascal语言,以下关于各种数据类型占内存空间大小的描述错误的是:

  • A.每个intege型占2个字节
  • B.每个longint型占4个字节
  • C.每个boolean型占2个字节
  • D.每个extended型占10个字节

8. 使用数组逐层保存完全二叉树结构,则以下叙述正确的是:

  • A.逻辑结构为完全二叉树,物理结构为数组
  • B.物理结构为完全二叉树,逻辑结构为数组
  • C.逻辑结构和物理结构均为完全二叉树
  • D.逻辑结构和物理结构均为数组

9. 关键码相同的二个元素,原来在排在前面的还能保证排在前面,这种排序算法我们称它是稳定的。冒泡排序、选择排序、插入排序中,一般意义上是稳定的有几种:

  • A.1
  • B.2
  • C.3
  • D.0

10. 在Free Pascal中编辑当前源程序时,可以使用快捷键Ctrl+F7增加调试程序时监视的变量,但如果不小心错按为Ctrl+F6时,会将当前源程序窗口隐藏起来。此时,可以使用菜单命令“Windows/List”调出Windows List对话框,在该对话框中选中隐藏的当前正在编辑的源程序,然后按下面哪个命令按钮可以显示当前正在编辑的源程序?

  • A.Ok
  • B.Not Hide
  • C.Show
  • D.Delete

11. 当n>=10000时,以下四个程序段运行后count的值最大的是:

  • A.A
  • B.B
  • C.C
  • D.D

12. 结构化程序设计的三种基本控制结构为顺序结构、选择结构和循环结构,以下说法正确的是:

  • A.三种结构都是基本结构,内部不能再有其它结构
  • B.三种结构都是基本结构,内部除了允许嵌套同一种结构外, 不能再有其它结构
  • C.选择结构和循环结构内部可以嵌套有其它结构,顺序结构 不可以嵌套其它结构
  • D.三种结构内部都可以嵌套其它结构

13. 以下属于计算机的基本指令的是:

  • A.数值和逻辑运算指令
  • B.存储和输入输出指令
  • C.控制和转移指令
  • D.以上都是

14. 以下属于汉字输出时使用的编码的是:

  • A.国标码
  • B.区位码
  • C.字形码
  • D.五笔字形

15. 以下存储介质中,一般说来存取速度最快的是:

  • A.硬盘
  • B.内存
  • C.U盘
  • D.光盘

16. HTTP协议的默认端口是:

  • A.8080
  • B.80
  • C.25
  • D.15

17. 有二个图像A和B,其中A比B能更好地表现图像的色彩和层次,B在放大或缩小时不易失真,那么A和B应该属于:

  • A.位图、位图
  • B.矢量图、位图
  • C.位图、矢量图
  • D.矢量图、矢量图

18. 用来描述网页中的文本、图像、超链接和表格等基本元素的语言是:

  • A.BASIC
  • B.Pascal
  • C.FrontPage
  • D.HTML

19. 标准ASCII码最多能表示的字符个数是:

  • A.128
  • B.64
  • C.256
  • D.8

20. 下列属于信息的是:

  • A.《宁波日报》
  • B.数码相机
  • C.2010年温歌华冬奥会实况直播
  • D.音乐光盘

二.问题求解(每题5分,共10分)

1. 一副扑克牌除去大小王外,有52张牌。其中有黑桃(Spade)、红心(Heart)、方块(Diamond)、梅花(Club)四种2 花色,每种花色点数从小到大各有13张,它们是:2、3、4、5、6、7、8、9、10、J、Q、K、A。 在上述52张中任取5张,取得炸弹(four of a kind,即四张点数相同的牌加一张另外点数的牌)的取法数有13*48=624种;取得辅鲁(full house,即三张点数相同另加二张点数相同牌)的取法数有多少种?请注意,二种取法中,只要有一张牌花色不同或点数不同,这二种取法就是不同的。
答案:3744

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堆有1枚硬币,第2堆有2枚硬币,第3堆有4枚硬币,第4堆有5枚硬币。问甲先取,在大家都使用最佳方法的情况下,甲能否获胜?如果甲能获胜,请写出第一次在第几堆取多少枚硬币才能获胜?如果不能获胜,则只要写上“No”。
答案:第二堆取2枚

三.阅读程序,求程序运行输出结果(每题8分,共32分)

1.

Program cz2010_1; 
var a,b,c,d,n,i,j:longint; 
    find:boolean; 
    f:array[0..19]of longint; 
 begin 
   n:=-1;i:=1; 
   while n<19 do begin 
      i:=i+1;find:=false; 
      for j:=2 to trunc(sqrt(i)) do 
         if i mod j=0 then begin 
            find:=true;break; 
         end; 
      if not find then begin 
         n:=n+1;f[n]:=i; 
      end; 
   end; 
   readln(a,b,c,d); 
   n:=n+1; 
   a:=((f[a]*f[b]-f[c]*f[d]) mod n+n) mod n; 
   b:=((f[b]* f[c]-f[d]* f[a]) mod n+n) mod n; 
   c:=((f[c]* f[d]-f[a]* f[b]) mod n+n) mod n; 
   d:=((f[d]* f[a]-f[b]* f[c]) mod n+n) mod n; 
   writeln(a,' ',b,' ',c,' ',d); 
end. 
【输入】:2  3  5  7 
输出:8 14 6 18

2.

Program cz2010_2; 
var a:array[1..30]of char; 
    s,n,i,x,y,z:longint;c:char; 
 begin 
   s:=0;readln(x,y); 
   while not eoln do begin 
      read(c); 
      if c<='9' then     s:=s*x+ord(c)-ord('0') 
      else     s:=s*x+ord(c)-ord('A')+10; 
   end; 
   readln;write(s,’ ‘);   n:=0; 
   while s>0 do begin 
      n:=n+1;z:=s mod y; 
      if z>9 then     a[n]:=chr(z-10+ord('A')) 
      else    a[n]:=chr(z+ord('0')); 
      s:=s div y; 
   end; 
   for i:=n downto 1 do write(a[i]); 
   writeln; 
 end. 
【输入1】: 
7 2 
126 

【输入2】: 
16 13 
3A2B 
输出:69 1000101|14891 6A16

3.

Program cz2010_3; 
var fu,a,num,b,tot,k,n:longint; 
  shu:boolean;c:char; 
begin 
  num:=0;a:=0;fu:=1;shu:=false;b:=0; 
  while not(eoln) do begin  //当一行输入未结束时 
      read(c); 
      if c='-' then fu:=-1 
      else if (c<='9') and (c>='0') then begin  
val(c,k);  num:=10*num+k;  shu:=true;  end; 
      else if shu then begin 
          shu:=false; 
          if (fu=1) and (num>0) then inc(a); 
          if fu=-1 then inc(b); 
          inc(tot,num*fu); 
          inc(n);num:=0;fu:=1; 
      end; 
   end; 
   if shu then begin 
       shu:=false; 
       if (fu=1) and (num>0) then inc(a); 
       if fu=-1 then inc(b); 
       inc(n); inc(tot,num*fu); 
       num:=0;fu:=1; 
  end; 
  writeln(tot/n:0:3,' ',a,' ',b); 
  close(input);close(output); 
end. 
【输入】 
54hiy-24 51 
输出:27.000 2 1

4.

Program cz2010_4; 
var f:array[1..46]of longint; 
    a:array[1..100]of longint; 
    x,y,z,i,j,n,count:longint; 
function find(i,h,x:longint):longint; 
var m:longint; 
begin 
   if i<3 then exit(0); 
   m:=h+f[i-1]-1;   count:=count+1; 
   if x=a[m] then exit(m); 
   if x<a[m] then exit(find(i-1,h,x)) 
     else exit(find(i-2,m+1,x)); 
end; 
 begin 
   f[1]:=1;f[2]:=1; 
   for i:=3 to 46 do  f[i]:=f[i-1]+f[i-2]; 
   readln(n,x,y,z); 
   for i:=1 to n do a[i]:=3*i-1; 
   i:=1; 
   while f[i]-1<n do inc(i); 
   for j:=n+1 to f[i]-1 do a[j]:=maxlongint; 
   count:=0;   j:=find(i,1,x); 
   writeln(j,' ',count);   count:=0; 
   j:=find(i,1,y);   writeln(j,' ',count);   count:=0; 
   j:=find(i,1,z);   writeln(j,' ',count); 
end. 
 【输入】 
8  14  7  17 
输出:5 2 0 4 6 4

四.程序填空(第1题每空2分,第2题每空3分,共28分)

1. 多项式乘法
二个只含有一个未知数x的多项式相乘,得到的结果也是含有未知数x的多项式。比如
1+2x2+4x4)*(6+x-2x3)=6+x+12x2+24x4-8x7。计算过程中,可以让第1个多项式的每一项去乘上第2个多项式,将得到的每个乘积结果相加。比如上述二式相乘的例子中:
1乘上第2式得: 6+x-2x3,
2x2乘上第2式得: 12x2+2x3-4x5,
4x4乘上第2式得: 24x4+4x5-8x7,
三个乘积相加得最终结果:6+x+12x2+24x4-8x7。
样例输出:
6.000 0
1.000 1
12.000 2
24.000 4
-8.000 7

样例输入:
3 3
1 0
2 2
4 4
6 0
1 1
-2 3
以下程序中将第一个多项式的系数和指数分别存储在a1和b1数组中,将第二个多项式的系数和指数分别存储在a2和b2数组中,结果存放在数组a和b中。其中变量n1和n2分别表示二个多项式的项数。
假设二个相乘的多项式均不超过1000项,且x的次数 最高项均不超过1000。请将该程序补充完整。

 Program cz2010_5; 
const  maxn=1000;      eps=1e-10; 
var a1,a2:array[1..maxn]of extended; 
    b1,b2:array[1..maxn]of longint; 
    a:array[   0..max  ]of extended; 
    b:array[   0..max  ]of longint; 
    n1,n2,n,i,j,k:longint;    s:extended; 
begin 4 
 
   readln(n1,n2); 
   for i:=1 to n1 do readln(a1[i],b1[i]);// 输入第1个多项式
系数和指数 
   for i:=1 to n2 do readln(a2[i],b2[i]); // 输入第2个多项式
系数和指数 
   fillchar(a,sizeof(a),0); 
   for i:=1 to n1 do 
      for j:=1 to n2 do begin 
         k:=    n*2       ; 
         a[k]:=  b1[i]+b2[j]   ; 
      end; 
   n:=-1;   i:=0; 
   while i<=b1[n1]+b2[n2] do begin 
      if abs(a[i])>=eps then begin 
         n:=n+1;   a[k]+a1[i]*a2[j]      ;  b[n]:=  a[n]:=a[i]         ; 
      end; 
      i:=i+1; 
   end; 
   for i:=0 to n do writeln(a[i]:0:3,' ',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)
【样例输出】
600

Program cz2010_6; 
var s:ansistring;    n,i,tc,tn:longint;    x,y:extended; 
    num:array[1..1001]of extended; 
    code:array[1..1001]of char; 
 function cal(x,y:extended;c:char):extended;//计算x和y在运算c下的值 
begin 
   if c='-' then  cal:=x-y 
   else if c='+' then cal:=x+y 
   else cal:=x*y; 
end; 
function prio(x,y:char):boolean;//运算符x比运算y级别高吗? 
begin 
   if x='(' then prio:=false 
   else if x='*' then prio:=true 
   else if (x='+')and((y='+')or(y='-'))then prio:=true 
   else if (x='-')and((y='+')or(y='-'))then prio:=true 
   else prio:=false; 
end; 
 begin 
   readln(s);s:='('+s+')'; 
   n:=length(s); 
   x:=0;tc:=0;tn:=0; 
   for i:=1 to n do begin 
      if (s[i]>='0')and(s[i]<='9') then 
         x:=x*10+ord(s[i])-ord('0') 
      else begin 
         if x<>0 then begin 
            inc(tn);num[tn]:=x;  x:=0   ;end; 
         if s[i]='(' then begin 
            inc(t)      ;code[tc]:=s[i];end 
else if s[i]=')' then begin 
            while  code[tc]<>s[i]  do begin 
               dec(tn); 
               num[tn]:=    cal(num[tn],num[tn+1],code[tc])       ; 
               dec(tc); 
            end; 
            dec(tc)        ; 
         end else begin  //+,-,* 
            while prio(code[tc],s[i]) do begin 
               dec(tn); 
               num[tn]:=  cal(num[tn],num[tn+1],code[tc])     ; 
               dec(tc); 
            end; 
            inc(tc); 
            code[tc]:=s[i]                           ; 
         end; 
      end; 
   end; 
   writeln(num[1]:0:0); 
end.