2003计算机等级考试二级上机最新指南

2003-3-25 11:20:27   Count:
    

二级五种语言上机环境

    软件环境

    操作系统:MS-DOS5.0以上

    汉字系统:希望汉字系统(UCDOS)3.1 或5.0

    全屏幕编辑系统:EDIT、PE2、QEDIT

  BASIC语言:QBASIC或Turbo-Basic或Quick-BASIC

  FORTRAN语言:Fortran77

  PASCAL语言 :Turbo-Pascal5.0以上

  C 语言: Turbo-C2.0以上

  FoxBASE语言:FoxBase2.1(中文版)

  考试内容

  二级考试的上机内容由DOS命令操作、程序修改及程序设计三部分组成。

  二级考试上机考试的时间为60分钟,其内容如下:

  1、操作系统部分30分,6条DOS操作命令题目。

  2、程序修改部分30分,修改指定程序MODI.PRG中的三个或三类错误。

  3、程序设计部分40分,根据题目要求编制PROGI.PRG程序。

  上述三部分中,操作系统部分与一级考试相同,比较容易,考生一般不会在这部分出现差错,其他两部分内容相对较难,考生应仔细阅读题目要求。


  二级上机试题分析

  1、DOS 命令操作题

  (1)将考生目录下的TCYCX\TSR目录中的MOVE子目录删除。

  (2)将考生目录下APPLE\CUABC子目录中的文件README.DOC更名为README.TXT。

  (3)将考生目录下L\M子目录中的文件A1.BAT删除。

  (4)在考生目录下UNIX\GROUP子目录中建立一个新的子目录L。

  (5)取消考生目录下P\P子目录中文件PERSON.PAS的隐含属性。

  (6)将考生目录下SAVE子目录中的文件HEAD.TXT和考生目录下CHECK子目录中的文件SEARCH.DAT顺序合并拷贝到考生目录下的PCS子目录中, 文件名为BASE.OUT。

  参考答案:

  1、deltree tcycx\tsr\move

  2、ren apple\cuabc\readme.doc readme.txt

  3、del l\m\a1.bat

  4、md unix\group\l

  5、attrib–h p\p\person.pas

  6、copy save\head.txt+check\search.dat pcs\base.out

  分析:使用DOS命令一方面要清楚命令的名字,另一方面要清楚路径,操作时尽量使用相对路径,可节省时间。


  2、程序修改题 要求修改给定程序中的错误,错误均出现在星号行的下一行。每题后均附有正确答案。

  C语言部分:

  试题说明:给定程序MODI1.C中函数 fun 的功能是:将s所指字符串的正序和反序进行连接,形成一个新串放在t所指的数组中。

  例如,当s串为“ABCD”时,则t串中的内容应为“ABCDDCBA”。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!

  程序:

  #include

  #include

  #include

  /*******found1********/

  void fun (char s, char t)

  { int i, d;

   d = strlen(s);

   for (i = 0; i    for (i = 0; i   /*********found2*********/

   t[2*d-1] = '\0'; }

  main()

  {  char s[100], t[100];

   clrscr();

   printf(″\nPlease enter string S:″); scanf(″%s″, s);

   fun(s, t);

   printf(″\nThe result is: %s\n″, t); }

  答案:

  第一处改为:void fun (char *s, char *t)或fun (char *s, char *t)或void fun(char s[],char t[])或void fun(char *s, char t[])或void fun(char s[], char *t)或fun(char s[], char t[])或fun(char *s, char t[])或fun(char s[], char *t)

  第二处改为:t[2*d] = '\0'或t[2*d] = 0 或t[d*2] = '\0'或t[d*2] = 0或 t[d*2] = '\0'或t[d*2] = 0或t[d+d] = '\0'或t[d+d] = 0。

  分析:指针和数组有密不可分的关系,数组作为实参时,形参即可以是数组也可以是指针,所以第一处的答案有多种选择。'\0'或'\000'是代表ASCII码为0的控制字符,所以t[2*d] = '\0'和t[2*d] = 0有同样的效果。


  FoxBASE语言部分:

  试题说明:给定程序MODII.PRG的功能是:实现四则运算。程序中共有三个错误,请调试修改正确,但不得增加或删减。

  Set talk off

  Store 0 to c

  Do while .t.

  Clear

  @5,20

  input“输入第一个数:”to A

  input “输入第一个数:” to B

  accept “请输入运算符:”to OP

  do case

   case OP= “+”

    store A+B to C

   case OP= “-”

    store A-B to C

   case OP= “*”

    store A*B to C

   case OP= “/”

    store A/B to C

      otherwise

       @7,20 say “运算符错,重新输入”

  *********found1*********

     exit

    endcase

  *********found2*********

  store “A&OPB=” to exp

  ? exp+str(c)

  @20,30 say “是否继续?(y/n)”

  wait “” to go_on

  if upper(go_on)= “Y”

   clear

  else

  **********found3*********

   loop

     endif

    enddo

  clear

  @10,30 say“再见!”

  set talk on

  答案:第一处改为:loop;第二处改为:store “A&OP.B=” to exp;第三处改为:exit

  分析:本程序只能做两个数的加减乘除运算,第一个数存入变量A,第二个数存入变量B,运算符存入变量C,然后通过多分支结构DO CASE 语句判断作何种运算,运算结果存入C中,最后输出运算结果,让用户选择是否进行下一次运算。Loop和exit可在DO WHILE 和ENDDO之间的任何位置,loop表示进行下一次循环,直接跳到DO WHILE进行条件判断,loop后的命令不被执行,exit表示直接从循环体跳出,去执行ENDDO后面的命令。&是宏代换函数,它的作用范围是从符号&起直到遇见一个空格或圆点为止,若这样使用“A&OPB=”,它会把OPB=当成一个变量名进行宏代换,所以会产生错误。


程序编制题

  C语言部分:

  说明:C 程序设计为二级 C 上机操作第三题,分值为 40 分,要求将给定的程序编制完全。

  试题说明:函数fun的功能是将s所指字符串中下标为奇数的字符删除,s中剩余的字符形成一个新串放在t所指的数组中。

  例如,当s所指字符串为“ABCDEFGHIJK”时,t所指的数组的内容应是“ACEGIK”。注意: 部分源程序存在文件PROG1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

  程序 :

  #include 〈conio.h〉

  #include 〈stdio.h〉

  #include 〈string.h〉

  void fun(char *s, char t[])

  { 

  }

  main()

  {

   char s[100], t[100];

   clrscr();

   printf("\nPlease enter string S:"); scanf("%s", s);

   fun(s, t);

   printf("\nThe result is: %s\n", t);

   NONO();

  }

  NONO( )

  {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */

   char s[100], t[100] ;

   FILE *rf, *wf ;

   int i ;

   rf = fopen("bc01.dat", "r") ;

   wf = fopen("bc01.out", "w") ;

   for(i = 0 ; i 〈 10 ; i++) {

    fscanf(rf, "%s", s) ;

    fun(s, t) ;

    fprintf(wf, "%s\n", t) ;

   }

   fclose(rf) ;

   fclose(wf) ;

  }

  参考答案:

    void fun(char *s, char t[])

     { int i =0,j=0;

       while(*(s+j)!=’\0’)

        { if (j %2= =0)

         t[i]=*s;i++;

        j++;

       }

       t[i]= ’\0’;

     }

  分析:实参s和t都是数组,形参s是指针变量,t是数组,调用fun函数后,形参s指向实参s数组的起始位置,通过条件j %2= =0判断数组的下标是奇数还是偶数,若为偶数,将指针s所指的字符赋给数组t,以达到将字符串中下标为奇数的字符删除的目的。

  FoxBASE语言部分:

  试题说明:已给定职工数据库文件ZG.DBF(含有编号,姓名,基本工资等字段),考试成绩数据库文件KS.DBF(含有编号,姓名,考试成绩等字段)。请编写程序PROG%.PRG,完成以下数据操作:

  1、通过ZG.DBF复制生成工资数据库文件GZ.DBF,使其具有编号、姓名和基本工资三个字段数据。

  2、按考试成绩对GZ.DBF中的工资字段数据进行修改:凡考试成绩80分以上者基本工资增加50元,70分到80分者增加30元,60分到69分者增加10元。

  参考答案:

  USE ZG

  COPY TO GZ FIELDS 编号,姓名,基本工资

  SELECT 2

  USE KS

  INDEX ON 编号 TO KSIDX

  USE KS INDEX KSIDX

  SELECT 1

  USE GZ

  SET RELATION TO 编号 INTO B

  DO WHILE .NOT. EOF()

  DO CASE

   CASE B-〉考试成绩〉80

    REPLACE 基本工资 WITH 基本工资+50

   CASE B-〉考试成绩〉70 .AND. B-〉考试成绩〈=80

    REPLACE 基本工资 WITH 基本工资+30

   CASE B-〉考试成绩〉=60 .AND. B-〉考试成绩〈=69

    REPLACE 基本工资 WITH 基本工资+10

  ENDCASE

  SKIP

  ENDDO

  LIST

  SET RELATION TO

  CLOSE DATABASE

  分析:第一题用COPY命令进行复制即可。第二题中涉及到基本工资和考试成绩这两个字段,但这两个字段分别属于GZ和KS这两个数据库,因此要想同时对这两个字段操作,必须要使GZ和KS这两个数据库进行关联,GZ和KS中有一个共同的字段编号,可以作为这两个数据库的关联字段。由于是对考试成绩分段进行增加工资,所以用条件分支结构DO CASE能较好的实现。


  Qbasic语言部分:

  说明:QBASIC 程序编制题是二级 QBASIC 上机操作第三题,分值为 40 分,要求是按题目要求在出现方括号的地方填上适当的语句,使之正确。

  试题说明: 编制程序PROG1.BAS其功能是: 求 2*4*6*8*…*30 的值。请在【1】、【2】及【3】三处将程序补充完整。

  程序

  t = 【1】

  FOR j = 2 TO 30 【2】

  t = t * 【3】

  NEXT j

  PRINT t

  END

  答案:第一处填:t=1  第二处填:STEP 2  第三处填:t=t*j

  分析:改程序要求连乘积的值,所以可用一个循环来实现,变量t用于存放连乘积的值,它的初值应为1,变量j用于提供从2到30之间的偶数,跳出循环后,输出变量t的值,即2*4*6*8*…*30 的值。(全文完)




浏览该文章的用户为您推荐了该信息: 
       
   
   
 
站内检索:
栏目导航
本月授课安排
阅读排行