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

一、    基础题:共34分

1. 执行①C>DIR 命令后,屏幕上显示如下画面:        FORMAT   COM   12145        SYS      COM    4878        PUC      BAT     126        XCOPY    EXE   11216      4 FILE(S) 123456   bytes  free 接着又顺序执行了如下几条DOS 命令: ② C>DIR> DF.TXT     //表示将列表显示的目录作为文件写盘 // ③C>TYPE  DF.TXT ④C>DIR 试问:执行命令③和④ 在屏幕上显示的结果是否与①相同
答案:显示结果不相同,③和④比①多出一个文件目录。

2. 请将以下程序段表示的计算公式写出来(假设X的值已给出) E:=1 ; A:=1 ; FOR N:=1 TO 10 DO A:=A*X/N ; E:=E+A ; ENDFOR ; 写出所表示的公式。
答案:E=1+X/1!+ X2/2!+ X3/3!+……+ X10/10!

3. 列举一个算法,使算法的解能对应相应的问题。 例如,设问题为:学生答题,答对一题可得10分,答错一题则要扣去5分,输入答对的题数(M)与答错的题数(N),求最后得分(S)是多少? 列举出相应算法为: X:=10; Y:=5; READ(M,N); S:=X*M-Y*N; 现有以下问题:用五角钱换成5分、2分与1分的硬币,可有多少种换法?
答案:列出的算法是: K:=0 FOR i:=0 TO 10 DO K:=K+(50-I*5) DIV 2+1; ENDFOR;

4. 已知如下N*(N+1)/2个数据,按行的顺序存入数组A[1],A[2],……中: a11 a21 a22 a31 a32 a33 …… an1 an2 an3 …… ann 其中:第一个下标表示行 第二个下标表示列。 若:aij(i≥j,j,i=1,2,……n)存贮在A[k]中,试问: (1) k和i,j之间的关系如何表示? (2) 给定k值(k≤n*(n+1)/2)后,写出能决定相应的i,j值的算法。
答案:(1) k和i,j之间的关系表示为:4% k:=(i-1)*i/2+j (2) 给定k值后,决定相应的i,j值的算法为:6% j:=k; i:=1; While j>i do j:=j-I; i:=i+1; Endwhile;

5. 有红、黄、黑、白四色球各一个,放置在一个内存编号为1、2、3、4四个格子的盒中,每个格子放置一只球,它们的顺序不知。甲、乙、丙三人猜测放置顺序如下: 甲:黑编号1,黄编号2; 乙:黑编号2,白编号3; 丙:红编号2,白编号4 。 结果证明甲乙丙三人各猜中了一半。 写出四色球在盒子中放置情况及推理过程。
答案:四色球在盒子中放置的情况为:4% 1 2 3 4 黑 红 白 黄 推理过程是:4% 假定: 黑为1√ 黄为2×    黑为2× 白为3√      红为2√ 白为4×      黄为4√

二、根据题日要求,补充完善以下伪代码程序:(共66分)

1. 求出所有满足下列条件的二位数:将此二位数的个位数字与十位数字进行交换,可得到一个新的数,要求新数与原数之和小于100。
程序要求:每行输出6个满足条件的数。
[算法提要]
分解每一个二位数,然后重新组成一个新数,当满足条件时,用计数器来统计个数。
程序:

		  K := 0;
                 FOR i := _____for i:=10 to 99 do____  TO  99   DO
                    X := ____x:=i mod 10;_____;    Y := ____y:=i div 10;_____;
                  J := x * 10 + y;
                     IF ____If (i+j)<100_____  THEN
                           K := k + 1;
                           Write(I : 4);
                          ______ if k mod 6=0_____    THEN WRITELN;
                       ENDIF
                   ENDFOR;

2. 找出小于33的6个正整数,用这些整数进行加法运算,使得包括原来的整数在内能组成尽可能多的不同整数。
例如:用2,3,5这三个数能可组成下面的数
2, 3, 5
2 + 3 = 5, 但5已经存在
2 + 5 = 7, 3 + 5 = 8, 2 + 3 + 5 = 10
所以用2,3,5能组成6个不同的数。
程序要求:输出所选的这6个数,以及能组成不同整数的个数。
[算法提要]:选择的这6个数,用来组成数时应该尽可能不重复,引入数组A保存找出的这6个整数。
程序:

      A[1] := 1; t := 0;
                For i := 2 to 6 do
                    _____s:=0;____;
              for j := 1 to i - 1 do
                s := ______ s:=s+a[j];_______;
              ENDFOR;
               a[i] := _______ a[i]:=s+1_______;
             ENDFOR;
           FOR i:=1 TO 6  DO
      		   T := ______ t:=t+a[i];  或t:=t*2+1______  WRITE(a[i], ' ');
             ENDFOR;
           Writeln('能组成不同整数的个数:', t)
        End.

3. 求出2~1000之间长度最长的、成等差数列的素数(质数)。
例如:在2~50之间的全部素数有
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47
其中公差为1的素数数列为2, 3,其长度为2
公差为2的素数数列为3, 5, 7,其长度为3
……
程序要求:输出满足条件的素数数列。
[算法提要]:首先用筛选法求出此范围内的全部素数,存放在数组B中,然后用2个变量i,j,逐步求出满足条件的素数数列。
程序:

    Max := 0; num := 1000;
                 For i := 2 to num do 
                  b[i] := i;
                 ENDFOR
                  For i := 2  to   ______①	for i:=2 to num-1 do 或for i:=2 to sqrt(num)do______ do
                   If  ______if b[i] <>0_____   then
                                       k := i + i;
                       While k <= num do
                          B[k] := 0;
                            K := k + i
                          ENDWHILE;
                          ENDIF;
                        ENDFOR;
                       For i := 2  to  num - 1 do
                        If ________if b[i]<>0_________    then
                             J := 1;
                             D[j] := b[i];
                                For i1 := __________for i1:=i+1 to ____________   do
                                  If  b[i1] <> 0 then  
                                        Delta := ________num do _______;
                                        k := delta;
                                          While (i+k<=num)and ______delta:=i1-i; 或delta=b[i1]-b[i]______ do
                                              j := j + 1;
                                              d[j] := i + k;
                                              k := k + delta
                                           ENDWHILE;
                                           If   j >  max then begin
                                                    Max := j;
                                                    C :=d  //数组D的每个元素值
                                                          分别送放数组C的相应
                                                           元素中去//
                                             ENDIF;
                                              J := 1
                                            ENDIF;
                                        ENDFOR;
                                       ENDIF;
                                      ENDFOR;
                                   writeln('The max length is: ', max);
                                   write('The string is: ');
                                         for i := 1 to max do write(c[i],' ');
                                            writeln
                                         ENDFOR;

4. 求出二个整形数组错位相加的最大面积。
1.数组面积的定义:(限定数组头尾不为0)
设有一个数组C=(4,8,12,0,6)
则C的面积为:
Sc=(4+8)/2 + (8+12)/2 + 12/2 + 6/2
也就是说,Sc=各梯形面积之和(其中梯
形的高约定为1,三角形作为梯形的特殊情况
处理)。
又如D=(12, 24, 6)时,其面积的定义为Sd=(12+24)/2 + (24+6)/2

2.数组错位相加的定义
设有2个正整数的数组a,b,长度为n,当n=5时:
a=(34,26,15,44,12) b=(23,46,4,0,18)
对a、b进行错位相加,可能有下列情况

34 26 15 44 12
+) 23 46 4 0 18
34 26 15 44 12 23 46 4 0 18
或:
34 26 15 44 12
+) 23 46 4 0 18 -
34 26 15 44 35 46 4 0 18
或:
34 26 15 44 12
+) 23 46 4 0 18
34 26 15 67 58 4 0 18
或:……
最后有:
34 26 15 44 12
+) 23 46 4 0 18 -
23 46 4 0 18 34 26 15 44 12
可以看到:由于错位不同,相加的结果也不同。

程序要求:找出一个错位相加的方案,使得输出的数组面积为最大。
[算法提要]: 设a,b的长度为10,用a,b: array[1..10] of integer表示,其结果用数组C,D: array[1..30] of integer表示。
错位相加的过程可以从开始不重叠,然后逐步重叠,再到最后的不重叠。
梯形面积的计算公式为:(上底+下底)×高÷2
其中由于约定高为1,故可写为(上底+下底)÷2。
程序:

   n = 10;
……        Function sea : real; {计算数组C面积}
               Begin
                 J1 := 1;
                 While __c[j1]=0 and j1<3*n__ do 
                   j1 := j1 + 1;
                 ENDWHILE;
                 If   j1 = 3 * n   then sea := 0  
                               Else begin
                                    J2 := 3 * n;
                                    While ___c[j2]=0 and j2>j1__  do 
                                      j2 := j2 - 1;
                                      If  j1 = j2  then sea := 0 
                                                 Else begin
                                                       J3 := c[j1] + c[j2];
                                                       For  j4 := j1 + 1 to j2 - 1 do
                                                         INC(j3,c[j4]*2);
                                                       ENDFOR;
                                                       Sea := j3 / 2
                                                     end
                                        ENDIF;
                                 End;

  //主程序//
        For  i := 1 to n do read(a[I]); endfor;
        For  j := 1 to n do read(b[j]); endfor;
        __s:=0;__;
        for  i := 1 to 2 * n + 1 do
            for  j := 1 to 3 * n do _c[j]:=0;__     endfor;
          for  j := 1 to n do c[j + n] := a[j]                 endfor;
          for  j := 1 to n do
               _c[i+j-1]:=c[i+j-1]+b[j]__;
          endfor;
          p := sea;
          if p > s then begin 
                       d := c;
                       s := p
                    end;
            endif;
          endfor;
          for I := 1 to 3 * n do write(d[I],' ');    endfor;
          write(s);
      End.  //主程序结束//