2008年上半年程序员考试下午试题及答案

总之来说,这次的题比以前考的都简单,不知道这是一种趋势还是偶尔现象。考完之后又翻了下数,自己弄出了一部分答案,供大家参考。红字为我自己的答案和注释

这份题可是我牺牲了一个午休和半个下午后弄出来的,大家看的时候顺便顶几下了呵呵….    下载方式:有偿下载(要顶我博客),Ctrl+c, Ctrl+v,后即可完成….

我的博客:www.hi.baidu.com/陈显锋      

下午试题,

(前四道必做,后三道选择一道)

面附有人家的答案,是个高手做的,我觉得没有错的。

比较有意思的是C#JAVA的题是同一个题,唉……不知道出题的 人是怎么想的,虽说题简单,但也不能做的这么露骨啊  唉……..没救了 .

试题一 (共 15 分)

  阅读以下说明和流程图,填补流程图中的空缺 1)~(9),将解答填入答题纸的对应栏内。

[说明]

  假设数组 A 中的各元素 A(1)A(2) A(M)已经按从小到大排序 M≥1);数组 B 中的各元素B(1)B(2)B(N)也已经按从小到大排序 N≥1)。执行下面的流程图后,可以将数组A与数组 B中所有的元素全都存入数组 C中,且按从小到大排序(注意:序列中相同的数全部保留并不计排列顺序)。例如,设数组A中有元素:25679;数组B中有元素:2347;则数组C中将有元素:223456779

[流程图]

我想不出来世界上还有什么比这还简单的流程图…………(不是说大话,确实是这样啊

试题二 (共 15 分)

  阅读以下说明和C程序,将应填入 n 处的字句写在答题纸的对应栏内。

[说明]

  下面的程序按照以下规则输出给定名词的复数形式:
  a. 若名词以 “y”结尾,则删除y并添加 “ies”
  b. 若名词以 “s”“ch”“sh”结尾,则添加 “es”
  c. 其他所有情况,直接添加 “s”

[C程序]

#include
#include
char *plural(char *word)
 {
 int n;
 char *pstr;
 n = strlen(word); /*求给定单词的长度*/
 pstr = (char *)malloc(n+3); /*申请给定单词的复数形式存储空间*/
 if (!pstr || n < 2)
 return NULL;
 strcpy(pstr,word); /*复制给定单词*/
 if ( (1) )
  {pstr[n-1] = 'i'; pstr[n] = 'e'; pstr[n+1] = 's'; (2) ;
  }
 else
 if(pstr[n-1]=='s'||pstr[n-1]== 'h' && ( (3) ))
 {
  pstr[n] = 'e'; pstr[n+1] = 's'; pstr[n+2] = '/0';
 }
  else{ pstr[n] = 's'; pstr[n+1] = '/0';
 }(4) ;
 }

 main( )
 {
 int i; char *ps;char wc[9][10] =
  {"chair","dairy","boss","circus","fly","dog","church","clue","dish"};
  for(i = 0; i < 9; i++)
  {
  ps = (5) ;printf("%s: %s/n",wc[i],ps); /*输出单词及其复数形式*/
  free(ps); /*释放空间*/
  }
  system("pause");
 }

试题三(共 15 分)

  阅读以下说明和C程序,将应填入 n 处的字句写在答题纸的对应栏内。[说明说明]说明说明下面的程序用 Dole Rob算法生成N阶(N为奇数)魔方阵 (各行、列、对角线数字2之和相等)。

  该算法的过程为:从1开始,按如下方法依次插入各自然数,直到N 为止:
  a. 在第一行的正中插入 1
  b. 新位置应当处于最近插入位置的右上方,若该位置已超出方阵的上边界,则新位置取应选列的最下一个位置;若超出右边界,则新位置取应选行的最左一个位置;
  c. 若最近插入的元素是N的整数倍,则选同列的下一行位置为新位置。

例如,3阶魔方阵如下所示:
8
   1   6
3
  5   7
4
   9   2

很不错,小时候的2.3年级的 假期作业上就做过,基本上就是一个小学题………..

 [C程序程序]
#include   
#include  
#define SIZE  50  
main( ) 
 {    int row, col, n, value;     
      int a[SIZE+1][SIZE+1];     /*
不使用下标为 0的元素*/  
     printf("
请输入要输出魔方阵的阶数 n(奇数, <%d):n=", SIZE);  
     scanf("%d",&n);    
     if (!(n % 2)||n < 1 ||   (1)  ) { 
        printf("
输入数据有误!/n");      exit(0); 
     } 
     row = 1;      col = (n+1)/2;      value = 1;  
     while(value <=   (2)  )  {  
              a[row][col] = value;  
              /*
计算下一位置*/ 
              if(value%n != 0){   
                   row--;    (3)  ;   
                   if(row < 1) row = n;  
                   if(col > n)   (4)  ;  
              }  
              else  row++;  
              value =   (5)  ;  
       } 
       printf("/n%d
阶魔方阵如下所示:/n/n",n);  
       for(row = 1; row <= n; row++){  
           for(col = 1; col <= n; col++)  
               printf("]",a[row][col]);  
           printf("/n");  
       }  

试题四(共 15 分) 

  阅读以下说明和C函数,将应填入 n 处的字句写在答题纸的对应栏内。 

[说明说明]  

     计算机在处理算术表达式时,首先将其转换 为后缀表达式。例如,表达式“46+5*(120-37)”的后缀表达式形式为 “46 5 120 37 - * +” 
    
计算后缀表达式时,从左至右扫描后缀表达式:若遇到运算对象,则压入栈中;遇到运算符,则从栈中弹出相关运算对象进行计算,并将运算结果压入栈中,重复以上过程,直到后缀表达式扫描结束。例如,后缀表达式 “46 5 120 37 - * +”的计算过程为
      a.
依次将46512037 压入栈中; 
  b. 遇到 “-”,取出37120,计算 120–37,得 83,将其压入栈中; 
      c.
遇到 “*”,取出835,计算5*83,得 415,将其压入栈中; 
      d.
遇到 “+”,取出41546,计算46+415,得 461,将其压入栈中; 
      e.
表达式结束,则计算过程完成。 
     
函数computing(char expr[],int *result)的功能是基于栈计算后缀形式的表达式(以串形式存入字符数组 expr)的值,并通过参数result 返回该值。函数的返回值为-1/0分别表示表达式有/无错误。假设表达式中仅包含数字、空格和算术运算符号,其中所有项均以空格分隔,且运算符仅包含加(“+”)、减 (“-”)、乘 (“*”)、除(“/”) 

      函数computing中所用栈的基本操作的函数原型说明如下: 
  void InitStack (STACK *s):初始化栈。 
  void Push(STACK *s, int e): 将一个整数压栈,栈中元素数目增 1 
  void Pop(STACK *s):栈顶元素出栈,栈中元素数目减 1 
      int Top(STACK s)
:返回非空栈的栈顶元素值,栈中元素数目不变。 
      int IsEmpty(STACK s)
:若s是空栈,则返回 1否则返回 0 

 [C函数函数]
int computing(char expr[], int *result)  
 {   
   STACK s;   int tnum, a,b;   char *ptr; 
   InitStack (&s); 
    ptr = expr;                            /*
字符指针指向后缀表达式串的第一个字符*/ 
    while (*ptr!='/0') { 
       if (*ptr==' ') {        /*
当前字符是空格*/ 
             (1)  ;            /*
字符指针指向下一字符*/ 
           continue; 
          } 
          else 

if (isdigit(*ptr)) { 
             /*
当前字符是数字,则将该数字开始的数字串转换为数值
*/ 
               tnum =   (2)  ;      
             while (*ptr>=’0’ && *ptr <=’9’) { 
               tnum = tnum * 10 +   (3)  ; 
               ptr++; 
              } 
             Push(  (4)  ); 
        }  
        else  /*
当前字符是运算符或其他符号
*/ 
           if (*ptr=='+'||*ptr=='-'||*ptr =='*'||*ptr =='/'){ 
              if (!IsEmpty(s)) { 
                       a = Top(s); Pop(&s);  /*
取运算符的第二个运算数
*/ 
                       if (!IsEmpty(s)) {  
                             b = Top(s); Pop(&s); /*
取运算符的第一个运算数
*/ 
                       } 
                       else   return -1; 
              } 
              else  return -1; 
              switch (*ptr) {  
                      case '+': Push(&s,b+a);  break ; 
                   case '-': Push(&s,b-a);  break ; 
                      case '*': Push(&s,b*a);  break ; 
                      case '/': Push(&s,b/a);  break ; 
              } 
           } 
           else   
              return -1; 
      ptr++;       /*
字符指针指向下一字符
*/ 
     } /* while */ 
     if (IsEmpty(s))   return -1; 
     else { 
              (5)   = Top(s);  Pop(&s);   /*
取运算结果
*/ 
             if (!IsEmpty(s))  return -1; 
             return 0;  
         } 

试题五试题五(共 15 分)  

  阅读下列说明、图和C++代码,将应填入 n 处的字句写在答题纸的对应栏内。 

[说明]  

  已知对某载客车辆 (Car)进行类建模,如图5-1所示,其中类 Engine表示发动机引擎,类 Wheel表示车轮,类 Body表示车身,类 Driver表示司机,类 Passenger表示客。                                                                                  

5-1 类图  

做完这个题,我基本上明白了什么叫照猫画虎………..  .

 [C++代码[C++代码] ] 
 [C++[C++
代码代码]]  
const int   (1)   = 7;         //
定义最多载客数 
const int MAX_WHEELS = 5;         //
定义最多轮胎数 

class Body{       //此处代码省略  };       //车身类 
class Passenger{  //
此处代码省略  };       //乘客类 
class Wheel{      //
此处代码省略  };      //车轮类 

class Driver{ //司机类 
public: 
      string name;  //
表示第几路公交车司机 
      Driver(string driverName):name(  (2)  ){}; //
构造函数 
}; 

class Engine{ //引擎类 
public: 
      string engineNo; //
引擎编号 
      Engine(string engineNo){  (3)  ->engineNo = engineNo; } //
构造函数 
}; 

试题六(共 15 分)

阅读以下应用说明以及 Visual Basic程序代码,将应填入 n 处的字句写在答题纸的对应栏内。 

对于VB 选择了很潇洒的方式——不理他,不看他,不惹他….

[应用说明

  某应用程序可选择打开用户指定的文本文件,将其内容显示在指定的文本框内供用户编辑,并将编辑后的结果保存在用户指定的文件中。运行时的窗口如图6-1 所示,其中有六个标签、一个驱动器列表框、一个目录列表框、一个文件列表框、一个文件类型组合框、一个文件编辑文本框、一个文件名文本框以及两个命令按钮。

6-1 

该程序的开发要求如下:
  (1)通过驱动器列表框         Drive1)、目录列表框        Dir1)和文件列表框        File1), 选择文件。 
      
2)文件类型组合框         Cmb_type)设置为下拉式列表框,其中有三个供选项,分别为所有文件 (*.*)”文本文件 (*.txt)”可执行文件 (*.exe)”。在文件列表框中列出的文件类型会 自动与文件类型组合框中选择的文件类型相匹配。 
      
3)在文件列表框 中单击一个文件名时,该文件名会显示在文件名文本框  Txt_filename)中。 
      
4)在文件列表框中双击一个文件名时,若是文本文件,则在文件编辑文本框 Txt_file)中显示该文件的内容并可进行编辑;若不是文本文件,则弹出一个对话框,提示请选择文本文件 ” 
      
5)对于编辑后的文本文件,可在文件名文本框(Txt_filename)中输入新的文 件名,并单击命令按钮 Cmd_save)进行保存。 
[Visual Basic
程序代码程序代码]
                
程序代码程序代码
Private Sub Form_Load() 
     Cmb_type.AddItem "
所有文件 (*.*)" 
     Cmb_type.AddItem "
文本文件 (*.txt)" 

class Car{ //汽车类 
protected: 
    Engine * engine;    Driver * driver;          Body body; 
     Wheel * wheels[MAX_WHEELS];         Passenger * passengers[MAX_PASSENGERS]; 
public: 
    Car(Driver *driver){  //
构造函数 
         this->driver = driver; 
         engine = new Engine("TX6536
型号引擎"); 
         for (int index = 0; index < MAX_WHEELS; index++){ 
              wheels[index] = new Wheel(); 
         } 
         for (int index = 0; index < MAX_PASSENGERS; index++){ 
              passengers[index] = NULL; 
         } 
    } 
    virtual ~Car(){ //
析构函数 
         for (int index=0; index < MAX_WHEELS; index++) 
              delete wheels[index]; 
         delete   (4)  ; 
    } 
    int getPassengerNumber(){ //
获取车上乘客数量 
         //
此处代码省略 
    } 
    void getOnPassenger(Passenger * aPassenger ){ //
乘客上车 
         //
此处代码省略 
    } 
    void run(){  //
开车 
         if(driver == NULL){ cout << "
司机尚未上车 !";          return; } 
         //
此处代码省略 
    } 
}; 

void main(){ 
    Driver driver("
第五路公交车司机");   
     Car car(  (5)  ); 
     Passenger passengers[MAX_PASSENGERS]; 
    for (int index = 0 ; index < MAX_PASSENGERS; index ++)  //
乘客上车处理 
         car.getOnPassenger(&passengers[index]); 
    car.run(); 

Cmb_type.AddItem "可执行文件 (*.exe
     Cmb_type.ListIndex = 0 
     File1.Pattern = "*.*":  Txt_filename.Text = "" 
      Txt_file.Text = "" 
End Sub 
Private Sub Dir1_Change() 
     File1.Path =   (1)   
End Sub 
Private Sub Drive1_Change() 
   Dir1.Path = Drive1.Drive 
End Sub 

Private Sub Cmb_type_click () 
    Select Case Cmb_type.  (2)   
        Case 0 
            File1.Pattern = "*.*" 
        Case 1 
            File1.Pattern = "*.txt" 
        Case 2 
            File1.Pattern = "*.exe" 
    End Select 
End Sub 
Private Sub Cmd_save_Click () 
   usrFile = GetFileName()        ‘
函数GetFileName获得要保存的文件名 
   Open usrFile For Output As #1  ‘
定义 usrFile1号输出文件 
   Print #1, Txt_file.Text        ‘
输出到 1号文件 
   Close #1 
End Sub 
Private Sub File1_DblClick () 
   If right(File1.FileName, 3) <>    (3)   Then 
          MsgBox "
请选择文本文件
          Exit Sub 
   End If 
   usrFile = GetFileName()   ‘
函数GetFileName获得要打开的文件名 
   Open usrFile For Input As #1 ‘
定义 usrFile1号输入文件 
   Txt_file.Text = "" 
   Do While   (4)   EOF (1) 
      Line Input #1, fContext  ‘
1号文件读入一行 
      Txt_file.Text = Txt_file.Text +   (5)   + vbCrLf 
   Loop 
   Close #1 
End Sub 
  ‘
其他代码略 

试题七(共 15 分)

  阅读下列说明、图和Java代码,将应填入 n 处的字句写在答题纸的对应栏内。 

[说明

 已知对某载客车辆 (Car)进行类建模,如图7-1所示,其中类 Engine表示发动机引擎,类 Wheel表示车轮,类 Body表示车身,类 Driver表示司机,类 Passenger表示乘客。                                                                            

7-1 类图

[Java 代码Java 代码]
 Java Java
代码代码
class Body{       //
此处代码省略    }; //车身类 
class Passenger{  //
此处代码省略    }; //乘客类 
class Wheel{      //
此处代码省略    }; //车轮类 

class Driver{ //司机类 
      public String name;  //
表示第几路公交车司机 
      public Driver(String driverName){name = driverName;} //
构造函数 
}; 

class Engine{ //引擎类 
      public  String engineNo; //
引擎编号 
      public Engine(String engineNo){  this.engineNo = engineNo; } //
构造函数 
}; 

public class Car{ //汽车类 
      static final int   (1)   = 7;  //
定义最多载客数 
      static final int MAX_WHEELS = 5;      //
定义最多轮胎数 
      protected Engine  engine;    
      protected Driver  driver;    
      protected Body body = new Body(); 
      protected Wheel[] wheels;           

protected Passenger[] passengers; 
    public Car(Driver driver){  //
构造函数 
           (2)  .driver = driver; 
         engine = new Engine("TX6536
型号引擎"); 
         wheels = new Wheel[MAX_WHEELS]; 
         passengers = new Passenger[MAX_PASSENGERS]; 
         for (int index = 0; index < MAX_WHEELS; index++){ 
              wheels[index] = new Wheel(); 
         } 
         for (int index = 0; index < MAX_PASSENGERS; index++){ 
              passengers[index] = null; 
         } 
    } 

    int getPassengerNumber(){ //获取车上乘客数量 
         //
此处代码省略 
    } 
    void getOnPassenger(Passenger  aPassenger ){ //
乘客上车 
         //
此处代码省略 
    } 
    void run(){  //
开车 
         if(  (3)  ){      System.out.println("
司机尚未上车 !"); return;} 
         //
此处代码省略 
    } 
    public static void main(String args[]){ 
         Driver driver = new Driver("
第五路公交车司机");  
         Car car = new Car(  (4)  ); 
         for (int index = 0 ; index < MAX_PASSENGERS; index ++) 
              car.getOnPassenger(  (5)   Passenger()); 
         car.run(); 
    } 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值