2008年程序员考试真题(下午题)
2008-05-27 21:53

虽然试题很简单,但也很容易粗心哦!!!

试题一 (共 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中有元素:2,5,6,7,9;数组B中有元素:2,3,4,7;则数组C中将有元素:2,2,3,4,5,6,7,7,9。

[流程图]

试题二 (共 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

[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. 依次将46、5、120、37 压入栈中;
  b. 遇到 “-”,取出37、120,计算 120–37,得 83,将其压入栈中;
      c. 遇到 “*”,取出83、5,计算5*83,得 415,将其压入栈中;
      d. 遇到 “+”,取出415、46,计算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;  
         }
}

从下列3道试题 (试题五至试题七)中任选 1道解答。如果解答的试题数超过 1道,则题号小的 1道解答有效。

试题五试题五(共 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; } //构造函数
};

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();
}

试题六(共 15 分)

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

[应用说明]

  某应用程序可选择打开用户指定的文本文件,将其内容显示在指定的文本框内供用户编辑,并将编辑后的结果保存在用户指定的文件中。运行时的窗口如图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)"

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 ‘定义 usrFile为1号输出文件
   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 ‘定义 usrFile为1号输入文件
   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();
    }

2008年软考初级程序员试题(下午题)相关推荐

  1. 软考初级程序员易错题:在统一建模语言 (UML)中,( )展现了 一组对象以及它们之间的关系, 给出了系统的静态设计视图或静态进程视图,描述了( )中所建立的事物 实例的静态快照。

    在统一建模语言 (UML)中,( )展现了 一组对象以及它们之间的关系, 给出了系统的静态设计视图或静态进程视图,描述了( )中所建立的事物 实例的静态快照. 知识点: 统一建模语言 (UML) 问题 ...

  2. 软考初级程序员下午题题库

    前言 本篇文章包含2005年到2022年,软考初级程序员下午真题,针对个别的题会做一些知识点讲解.答案有错误请评论,我一定会看!每天更新几题,2023.4.9–??祝考试顺利. 2005年下午题 答案 ...

  3. 软考初级程序员有什么参考的书籍,主要考什么?

    软考初级程序员的参考书籍是官方教材--清华大学出版的<程序员教程>,复习的时候买这一本就好了. 主要考哪些知识点可以考试大纲里面的说明,考的其实都是一些基础的计算机知识. 既然是程序员,那 ...

  4. 2023年软考初级程序员

    一.考试科目: 程序员考两科,每科满分75分,45分及格. 科目一选择题:计算机硬软件基础知识,整体来说选题题部分是比较简单的. 科目二主观题:程序设计,下午题为6道大题,满分75分,45分及格.前4 ...

  5. 计算机软考初级程序员考试范围

    初级程序员考试:考试科目1:计算机硬软件基础知识 1. 计算机科学基础 1.1 数制及其转换 二进制.十进制和十六进制等常用数制及其相互转换 1.2 数据的表示 数的表示(原码.反码.补码表示,整数和 ...

  6. 计算机软考初级程序员教程,2013年计算机软考程序员教程

    流程控制语句(分支语句和循环语句) 程序体验: public class Test5 { /** * @param args * 分支语句的测试 * 1路 if * 2路 if else * N路 s ...

  7. 软考初级程序员上午单选题(20)

    36.Windows系统的任务栏不可能出现在屏幕的______. A.左边 B.右边 C.上边 D.中间 37.下列关于"快捷方式"的叙述中,不正确的是______. A.可以使用 ...

  8. java弦截法,国家计算机软考高级程序员历年真题1996

    1996年高级程序员级上午试题 试题1 从供选择的答案中,选出应填入下面叙述中_?_内的最确切的解答,把相应编号写在答卷的对应栏内. 一棵二叉排序树可顺序存放在一组物理上相邻的存储区中, 每个节点及其 ...

  9. 软考初级程序员—计算机基础试题与解析(待补充)

    文件的物理结构不包括() A.连续结构 B.索引结构 C.分区结构 D.多个物理块的索引结构 答案:C 常见的文件物理结构有以下几种: 1.顺序结构又称连续结构.这是一种最简单的物理结构,它把逻辑上连 ...

最新文章

  1. 人工智能的“天罗地网”
  2. python2和python3同时存在如何使用pip
  3. ImageMagick convert
  4. 《Gpu Gems》《Gpu Pro》《Gpu Zen》资源收集
  5. php 实现两变量值对换,php两个变量的值交换的方法
  6. python像素处理_Python+OpenCV图像处理(五)—— 像素运算
  7. HDOJ 1753 明朝A+B
  8. 【原】android【手机】屏幕适配解决方案,完美适配适配hdpi,xhdpi,xxhdpi的做法。...
  9. MediaStreamTrackAudioSourceNode
  10. 01背包、完全背包、多重背包问题的C++实现及路径记录
  11. 结构型模式概述(Structural Pattern)
  12. oracle中没有修改权限,oracle 修改listener.ora 没有权限怎么办
  13. 郝斌老师c语言笔记 TXT,郝斌老师c语言笔记
  14. Java类和对象 详解(一)
  15. 第2篇:Python 基础语法
  16. 称重传感器(体脂体重模块)应用及特点
  17. 微信公众平台小程序开发教程
  18. rn源码ios_携程开源RN开发框架CRN
  19. word小技巧--怎么去掉Word文档封面页码的方法
  20. POJ2187-最远点对-旋转卡壳(怎么开心怎么读)

热门文章

  1. 逍遥花主、神蚕九变、玉蚌仙珠三部武侠小说
  2. 计算机桌面无法右键,电脑中右击桌面没反应怎么办?无法打开电脑桌面右键菜单如何解决...
  3. 锤子ROM那些欠缺考虑的微创新们
  4. 2019网络与信息安全专项赛题解
  5. Flutter Dart 报错 '_InternalLinkedHashMapdynamic, dynamic' is not a subtype of t
  6. root下安卓7以上添加系统信任证书
  7. linux进行端口跟踪,(五)洞悉linux下的Netfilteriptables:如何理解连接跟踪机制?【上】...
  8. 将虚拟机映射到本地硬盘
  9. Hyper-v系列---【windows系统如何开启Hyper-v?】
  10. 诗词格律[6] 词的格律