200505程序员下午真题

第 1 题

(15分,每空3分)
【说明】
  设8位二进制代码B0B1……B7中的最高位B0为奇偶校验位。对于任何给定的代码B1B2……B7可按下式计算偶校验位:
            B0=B0⊕B1⊕……⊕B7
  其中,“⊕”表示“”异或运算。下面的流程图描述了计算偶校验位的过程。
【流程图】
 


  注:流程图中,循环开始的说明按照“循环变量名:循环初值,循环终值,增量”格式描述。
 

【问题1】
  将流程图中的(1)~(4)处补充完整。
【问题2】
  若按下式计算奇校验位,则上述流程图中的(1)处应填__(5)__。
           B0=B0⊕B1⊕……⊕B7 ⊕1

答案与解析

  • 试题难度:较难
  • 知识点:
  • 试题答案:

    (1) 0
    (2) 1,7,1
    (3) Bi
    (4) B0
    (5) 1

  • 试题解析:

    (1) 0
    (2) 1,7,1
    (3) Bi
    (4) B0
    (5) 1

第 2 题

()(15分,每空3分)
【函数2.1说明】
  函数 int fun1(int m,int n)的功能是:计算并返回正整数m和n的最大公约数。

【函数2.2说明】
  函数long fun2 ( char *str )的功能是:自左至右顺序取出非空字符串 str 中的数字字符形成一个十进制整数(最多8位)。例如:若字符串 str的值为“f3g8d5. ji2e3p12fkp”,则函数返回值为3852312。
 

【函数2.1】
  int fun1(int m,int n)
 {
   while ( __(1)__ ) {
   if (m>n) m=m-n;
   else n=n-m;
  }
  ___(2)___ ;
 }
【函数2.2】
  long fun2 ( char *str )
 {
  int i=0;
  long k=0;
  char *p=str;
  while ( *p !=’\0’ && ___(3)___ ) {
  if ( *p >= ’0’ && *p <= ‘9’ ) {
    k = __(4)__ + *p – ‘0’ ;
    ++i;
   }
   ___(5)___ ;
  }
  return k;
 }

答案与解析

  • 试题难度:较难
  • 知识点:
  • 试题答案:

    函数2.1:
    (1) m ! =n ;
    (2) return m; 或return n;
    函数2.2:
    (3) i<8;
    (4) k*10;
    (5) p++

  • 试题解析:

    函数2.1:
    (1) m ! =n ;
    (2) return m; 或return n;
    函数2.2:
    (3) i<8;
    (4) k*10;
    (5) p++

第 3 题

()15分,每空3分)
【说明】
  一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根为“最左下”结点;否则,从树根的左子树根出发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的“最左下”结点。例如:下图所示的以A为根的二叉树的“最左下”结点为D,以C为根的子二叉树中的“最左下”结点为C。二叉树的结点类型定义如下:
  typedef struct BSTNode {
   int data ;
   struct BSTNode *lch , *rch; //结点的左、右孩子指针
 } *BSTree;

  函数BSTree Find_Del (BSTree root )的功能是:若root指向一棵二茶树的根结点,则找出该结点的右子树上的“最左下”结点 *p,并从树中删除以 *p为根的子树,函数返回被删除子树的根结点指针;若该树根的右子树上不存在“最左下”结点,则返回空指针。
【函数】
  BSTree Find_Del (BSTree root)
 {  BSTree p, pre;
   If ( !root ) return NULL; /* root 指向的二叉树为空树 */
     ___(1)___ ; /* 令p指向根结点的右子树 */
   if ( !p ) return NULL;
     ___(2)___ ; /* 设置 pre 的初值 */
   while ( p -> lch ) { /* 查找“最左下”结点 */
     pre = p ; p = __(3)__ ;
  }
   if ( __(4)__ = = root ) /* root的右子树根为“最左下”结点*/
     pre -> rch =NULL;
   else
     __(5)__ = NULL; /* 删除以“最左下”结点为根的子树*/
   return p;
 }

()15分,每空3分)
【说明】
  一棵非空二叉树中“最左下”结点定义为:若树根的左子树为空,则树根为“最左下”结点;否则,从树根的左子树根出发,沿结点的左孩子分支向下查找,直到某个结点不存在左孩子时为止,该结点即为此二叉树的“最左下”结点。例如:下图所示的以A为根的二叉树的“最左下”结点为D,以C为根的子二叉树中的“最左下”结点为C。二叉树的结点类型定义如下:
  typedef struct BSTNode {
   int data ;
   struct BSTNode *lch , *rch; //结点的左、右孩子指针
 } *BSTree;

  函数BSTree Find_Del (BSTree root )的功能是:若root指向一棵二茶树的根结点,则找出该结点的右子树上的“最左下”结点 *p,并从树中删除以 *p为根的子树,函数返回被删除子树的根结点指针;若该树根的右子树上不存在“最左下”结点,则返回空指针。
【函数】
  BSTree Find_Del (BSTree root)
 {  BSTree p, pre;
   If ( !root ) return NULL; /* root 指向的二叉树为空树 */
     ___(1)___ ; /* 令p指向根结点的右子树 */
   if ( !p ) return NULL;
     ___(2)___ ; /* 设置 pre 的初值 */
   while ( p -> lch ) { /* 查找“最左下”结点 */
     pre = p ; p = __(3)__ ;
  }
   if ( __(4)__ = = root ) /* root的右子树根为“最左下”结点*/
     pre -> rch =NULL;
   else
     __(5)__ = NULL; /* 删除以“最左下”结点为根的子树*/
   return p;
 }

答案与解析

  • 试题难度:较难
  • 知识点:
  • 试题答案:

    (1) p=root->rch
    (2) pre =root
    (3) p->lch
    (4) pre
    (5) pre->lch

  • 试题解析:

    (1) p=root->rch
    (2) pre =root
    (3) p->lch
    (4) pre
    (5) pre->lch

第 4 题

()(15分,每空3分)
【说明】
  假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。下面用二维数组a[N][N]模拟剧场中的座位,a[i][j]等于0表示第i排第j列(0≤I , j≤N-1)的票尚未售出。
  函数int Find ( int a[][N] , int R , int *row , int *col )的功能是:在部分票已售出的情况下,找出剧场中的R*R个空座位,要求这些座位的排列形成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方形左上角的行、列号;若未找到,返回0;
  例如,一个7×7个座位的剧场如下图(a)所示,已售出部分座位的剧场如下图(b)所示,图中阴影部分表示已售出的座位,从图(b)中找出3×3正方形空座位如图(c)中斜线区所示。
 


【函数】
  int Find ( int a[][N] , int R , int *row , int *col )
 {  int i,j,k,c,t; int FOUND = 0;
    for ( i=0 ; !FOUND && i     __(1)__ ;
   while ( j     for ( k=0; ___(2)___ && a[i][j+k] = = 0; k++);/* 查找第i排连续的R个空座位 */
   if ( k >=R ){ /* 查找第i排连续的R个空座位 */
    for ( c=0 ; c < R ; c++ ) { /* 查找其余的R*(R-1)个座位 */
    for ( t = 1 ; t < R ; t++ )
   if (a[ __(3)__ ] [j+c] !=0 ) break;
  if ( t   } /* for */
 if ( ___(4)___ ) FOUND =1;
 } /* if */
  ___(5)___ ;
 } /* while */
 } /* for i */
 if ( FOUND ) {
    *row = i-1 ; *col = j-1; /* 计算正方形区域的左上角坐标*/
   return 1;
   }
 return 0;
 }

()(15分,每空3分)
【说明】
  假设一个剧场有N*N个座位,顾客买票时可以提出任意有效的座号请求。下面用二维数组a[N][N]模拟剧场中的座位,a[i][j]等于0表示第i排第j列(0≤I , j≤N-1)的票尚未售出。
  函数int Find ( int a[][N] , int R , int *row , int *col )的功能是:在部分票已售出的情况下,找出剧场中的R*R个空座位,要求这些座位的排列形成一个正方形。若找到满足要求的一个座位排列,则函数返回1,并算出该正方形左上角的行、列号;若未找到,返回0;
  例如,一个7×7个座位的剧场如下图(a)所示,已售出部分座位的剧场如下图(b)所示,图中阴影部分表示已售出的座位,从图(b)中找出3×3正方形空座位如图(c)中斜线区所示。
 


【函数】
  int Find ( int a[][N] , int R , int *row , int *col )
 {  int i,j,k,c,t; int FOUND = 0;
    for ( i=0 ; !FOUND && i     __(1)__ ;
   while ( j     for ( k=0; ___(2)___ && a[i][j+k] = = 0; k++);/* 查找第i排连续的R个空座位 */
   if ( k >=R ){ /* 查找第i排连续的R个空座位 */
    for ( c=0 ; c < R ; c++ ) { /* 查找其余的R*(R-1)个座位 */
    for ( t = 1 ; t < R ; t++ )
   if (a[ __(3)__ ] [j+c] !=0 ) break;
  if ( t   } /* for */
 if ( ___(4)___ ) FOUND =1;
 } /* if */
  ___(5)___ ;
 } /* while */
 } /* for i */
 if ( FOUND ) {
    *row = i-1 ; *col = j-1; /* 计算正方形区域的左上角坐标*/
   return 1;
   }
 return 0;
 }

答案与解析

  • 试题难度:较难
  • 知识点:
  • 试题答案:

    (1) j = 0
    (2) k(3) i+t
    (4) c==R
    (5) j++

  • 试题解析:

    (1) j = 0
    (2) k(3) i+t
    (4) c==R
    (5) j++

第 5 题

() (15分,每空3分)
【说明】
  甲乙两地之间的铁路线上有二十多个火车站,为方便乘客查询票价,特开发了火车票价格查询程序,其运行窗口如下图所示。乘客只要通过两个下拉列表框分别选择起点与终点站名,再单击“查询”按钮,则票价文本框就会显示相应的票价。
  


  在开发过程中,设选择起点和终点站名的组合框(ComboBox)名分别为ST和SP,显示票价的文本框(TextBox)名为Price,“查询”按钮(CommandButton)名为Query;设ST与SP中的诸列表项完全相同,且都是从甲地开始依次排列,从第i站到第j站的票价存放在二维对称矩阵P的元素P(i,j)中,假设从甲地到第i站行驶的距离存放在d(i)中,火车票价等于其行驶距离乘以C(常数)。
 

【Visual Basic代码】
  Dim p ( 30 , 30 ) As Single ‘通用声明
  Const C=0.2
  Private Sub Form_Load ()
  Dim d ( 30 ) As Single
   __(1)__ = “甲地” ‘在ST组合框中设置首个列表项
  …… ‘在ST和SP中设置其他列表项(若干行语句)
  …… ‘对数组d(i)赋值(若干行语句)
  For i=0 to ST. ___(2)___ -1 ‘对ST中各列表项循环
  For j=0 to SP. ___(2)___ -1 ‘对SP中各列表项循环(这两处填写内容相同)
   P( i, j ) = ___(3)___
  Next j
 Next i
End Sub
  Private Sub query_Click ()
   i = ___(4)___ ‘组合框ST中选择的当前项编号
   j = …… ‘组合框SP中选择的当前项编号(语句略)
   ___(5)___ = str $ ( p ( i , j ) )
End Sub

答案与解析

  • 试题难度:较难
  • 知识点:
  • 试题答案:

    (1) st.List(0)
    (2) ListCount
    (3) abs(d(j)-d(k))*C
    (4) st.ListIndex
    (5) Price.Text

  • 试题解析:

        本题目涉及的控件有组合列表框(ComboBox)、文本框(TextBox)和命令按钮(CommandButton),主要考查组合列表框的常用属性。

第 6 题

()(15分,每空3分)
【说明】

  当用户启动html浏览器并首次打开下面的html文档时,Java Applet小程序在显示面板上显示字符串“Welcome !”;当html页面被其他窗口遮挡后再次显示时,小程序在显示面板上显示“Welcome back !”。
 

【Java代码】
  import javA.awt.*;
  import javA.applet.*;
  public class HelloApplet extends ___(1)___ {
  public void paint ( ___(2)___ ) {
   g.drawstring ( message, 10, 20 );
   message = “welcome back !”;
  }
 public void ____(3)____ () {
   message = “welcome !” ;
 }
 private ___(4)___ message;
}
【html文档】


 
   HTML Test HelloApplet Page
 
 


   Test HelloApplet 小程序

      codebase = “ . ”
    code = “ ___(5)___ ”
    name = “ TestApplet”
    width = ” 400 ”
    height = “ 300 ”
   >
  
 


 

答案与解析

  • 试题难度:较难
  • 知识点:
  • 试题答案:

    (1) Applet
    (2) Graphics g
    (3) init
    (4) String
    (5) HelloApplet.class

  • 试题解析:

    (1) Applet
    (2) Graphics g
    (3) init
    (4) String
    (5) HelloApplet.class

第 7 题

()(15分,每空3分)
【说明】
  某个文本文件中存放了若干个非零数值有效数据,每个数据占一行,最后一行以数字“0”作为结束标志。下面的程序用于计算该文件中这些数据之和,其运行窗口如下: 
 


  用户只要通过驱动器列表框、目录列表框和文件列表框,选择文本文件所在的驱动器、文件夹及相应的文件名,再单击“累计”按钮,就能在“总计”文本框中看到该文本文件中的数据之和。
  在开发过程中,设驱动器列表框名为Drive1,目录列表框名为Dir1,文件列表框名为File1,存放数据的文本文件名为D:\test\vb7\data.txt,“累计”按钮名为sum,“总计”文本框(TextBox)名为text1。
 

【Visual Basic代码】
  Private Sub Drive1_Change ()
   Dir1.Path = ___(1)___ ‘用户选择的驱动器反映到目录列表框中
  End Sub
  Private Sub Dir1_Change ()
   File1.Path = ___(2)___ ‘用户选择的文件夹改变文件列表框内容
  End Sub
  Private Sub sum_Click ()
   Dim ___(3)___ As New FileSystemObject , ____(4)____ As TestStream
‘创建自己的文件系统对象,说明自己的文本流对象
   If Right ( Dir1.Path , 1 ) = “ \ ” Then
   Set myTextFile = fso.OpenTextFile ( Dir1.Path + File1.FileName)
  End If
   Set myTextFile= fso.OpenTextFile ( Dir1.Path + “ \ ” +File1.FileName)
   S = 0
   Do
   D = Val ( myTextFile.ReadRow )
   S = S + d
   Loop While ___(5)___
  Text1.Text = Str$ (S)
 End Sub

答案与解析

  • 试题难度:较难
  • 知识点:
  • 试题答案:

    (1) Drive1.Drive
    (2) Dir1.Path
    (3) fso
    (4) myTextFile
    (5) d <> 0

  • 试题解析:

        这些控件常常在一个窗体中工作,当用户在DriveListBox中选择一个驱动器时,DriveListBox控件就更新显示该驱动器上的目录树,当用户在DirListBox中选择一条路径时,FileListBox控件中的内容为该目录下的文件列表,这些活动自动地触发Change事件。但是,这些活动不能自动完成,需要为Change事件编写代码,通过代码将驱动器列表框Drive属性(指明当前驱动器)赋值给目录列表框的Path属性,将目录列表框的Path属性(指明当前路径)赋值给文件列表框的Path属性,即Dir1.Path=Drive1.Drive,File1.Path=Dir1.Path。
        “Dim”是声明变量的关键字,在过程sum_Click()中,显然是对文件系统对象fso和文本流对象myTextFlie进行声明。
        根据循环控制,空(5)处填写“d<>0”(d不等于0)。
       

第 8 题

()(15分,每空3分)
【说明】
  下面程序的功能是计算并输出某年某月的天数。
 

【C++程序】
  #include < iostream>
  using namespace std;
    ___(1)___ Month ( Jan , Feb , Mar , Apr , May , Jun , Jul , Aug , Sep , Oct , Nov , Dec ) ;
  class Date {
  public:
    Date ( int year , Month m_month ) {
     ___(2)___ = year ;
  if ( m_month < Jan || m_month > Dec ) month = Jan;
  else month = m_month;
  } ;
 ~Date () {} ;
  bool IsLeapYear () {
  return ( ( year % 4 = = 0&&year % 100 != 0 ) || year %400 = = 0);
 };
   int CaculateDays () {
   switch ( ___(3)___ ) {
  case Feb : {
  if ( ___(4)___ ) return 29;
  else return 28;
  }
  case Jan : case Mar : case May : case Jul : case Aug : case : Oct:
  case Dec : return 31;
  case Apr : case Jun : case Sep : case Nov : return 30;
  }
 };
  private :
  int year;
  Month month;
 };
  Void main () {
   Date day ( 2000 ,Feb );
   Cout << day. ___(5)___ ();
 }

答案与解析

  • 试题难度:较难
  • 知识点:
  • 试题答案:

    (1) enum
    (2) this->year
    (3) month
    (4) IsleapYear()
    (5) CaculateDays

  • 试题解析:

    (1) enum
    (2) this->year
    (3) month
    (4) IsleapYear()
    (5) CaculateDays

results matching ""

    No results matching ""