首页

软考 - 初级_程序员

类型:
选择方向:
选择考试:
题型:
为你找到 191 个题目。

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

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

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

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

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


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

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

() (共15分)
  阅读以下说明和Java代码,将解答写在答题纸的对应栏内。
【说明】
  已知类SubClass的getSum方法返回其父类成员i与类SubClass成员j的和,类SuperClass中的getSum为抽象函数,程序中的第14行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,当程序运行到第22行且尚未执行第22行语句时成员变量i的值,最后给出程序运行后的输出结果。
 

【Java 代码】


  阅读以下应用说明以及用Visual Basic开发过程中进行的属性设置和所编写的程序代码,将应填入 (n) 处的字句写在答题纸的对应栏内。
 

【应用说明】
  启动某应用程序后,其运行窗口左边会出现两只蝴蝶,下边有“启动”和“停止”两个按钮。单击“启动”按钮后,伴随“两只蝴蝶”音乐,两只蝴蝶会分别沿两条互绞的曲线,自左至右翩翩飞行(见下图),而且飞出窗口右边后又会再从窗口左边飞入。单击“停止”按钮时,两只蝴蝶停止飞行,回到初始状态,音乐也同时停止。再单击“启动”按钮时,蝴蝶重新开始伴音飞行。
  在开发该应用时,两只蝴蝶用两个图像框来表示,分别命名为Image1和Image2,其Picture属性分别设置为各个蝴蝶的图像文件名,其stretch属性都应设置为 (1),使图像能自动改变大小以适应图像框。再在窗体中建立“启动”按钮(名为CmdStart)和“停止”按钮(名为CmdStop)。
  蝴蝶所飞行的路线分别用正弦和余弦曲线描述。为此,首先需要用Scal方法对窗体定义坐标系统。设左上角坐标为(0,0),右下角坐标为(20,6)。蝴蝶1的飞行曲线设为:y1=2+sin x,蝴蝶2的飞行曲线设为:y2=2+cos x。蝴蝶飞行的位置坐标(x,y)确定了蝴蝶图像框的位置(Left属性值和Top属性值)。
  设置一个定时器(名为timer1),其定时时间间隔为0.1秒,所以其Interval属性值应设置为100。每隔0.1秒需要对两个图像框的位置进行一次调整。初始时,该定时器的Enabled属性应设为False(关闭状态)。
  为使该应用程序运行时能播放声音文件,在开发时应利用菜单“工程-部件”,选择加载组件“Microsoft Multimedia Control 6.0”,并在窗体中设置多媒体控件(设命名为MMC)。由于不需要用户控制,其Visible属性可设置为False(不可见)。右击该控件,可选择该控件中各按钮的属性,应注意选择“播放”有效、“停止”有效。“两只蝴蝶”的音乐文件应提前准备好,并通过某种音频处理程序将其转换成WAV格式,存放在开发该应用的当前目录中。


  【Visual Basic程序代码】
  Dim (2)      ‘声明全局变量
    Private Sub Form_Load()
    Scale(0,0)-(20,6) ‘定义窗体的坐标系统
  End Sub
 
  Private Sub CtndStart_Click()
    X = 0
    MMC.DeviceType = “WaveAudio” ‘设置多媒体设备类型
    MMC.FileName = “两只蝴蝶.wav”    ‘确定声音文件名
    MMC.Command = ”Open”   ‘打开多媒体设备
    MMC.Command = ”Play”    ‘启动声音的播放
    Tirner1.Enabled = True    ‘打开定时器
  End Sub
 
  Private Sub Tirner1_Timer()
    If x>20 Then x = x-20    ‘蝴蝶飞到右边界后再回到左边界
    Image1.Left = x   ‘动态调整蝴蝶框的位置
    Image1.Top  = (3)
    In;age2.Left  =  x
    Image2.Top  =     (4)
    x = x+0.l   ‘确定蝴蝶下一步飞行位置
  End Sub
 
  Private Sub CmdStop_Click()
    (5)   
    Itnage1.Left = 0   ‘蝴蝶位置初始化
    Image1.Top = 2
    Image2.Left = 0
    Image2.Top = 3
    MMC.Command = “Stop”   ‘停止播放
    MMC.Command = “Close″    ‘关闭多媒体设备
  End Sub
 

() (共15分)
  阅读以下说明和C++代码,将解答写在答题纸的对应栏内。
【说明】
  已知类SubClass的getSum方法返回其父类成员i与类SubClass成员j的和,类SuperClass中的getSum为纯虚拟函数。程序中的第23行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第15行且尚未执行第15行的语句时成员变量j的值,最后给出程序运行后的输出结果。
 

【C++ 代码】


  阅读以下应用说明以及用Visual Basic开发过程中所编写的程序代码,将应填入(n)处的字句写在答题纸的对应栏内。
【应用说明】
  某应用程序在运行过程中的一个界面如下图所示:

  在“供选课程”列表框(名为List1)中选择某个课程后,再单击“>”按钮(名称为cmdSelect),就能将该课程复制到“所选课程”列表框(名称为List2)中(但要注意不要出现重复项);如果单击“>>”按钮(名称为cmdSelAll),就能将全部供选课程名复制到列表框List2中(注意应先删除List2中的已选项);如果在“所选课程”列表框中选中某个课程,再单击“<”按钮(名称为cmdDelete),就会从List2中删除该课程(未选课程时应不做处理);如果单击“<<”按钮(名称为cmdDelAll),就会从List2中删除所有已选课程。

【Visual Basic程序代码】
  Private Sub CmdSelect_Click()
    For i = 0 To List2.ListCount - 1
    If List1.Text = List2.List(i)Then Exit Sub ‘不要重复选择
   Next i
    List2.AddItem    (1)      ‘在List2中增添List1中所选的项
  End Sub
    Private Sub CmdSelAll_Click()
    List2.Clear    ‘先删除List2中的己有项
    For i=0 To (2)       ‘对List1中所有各项做循环处理
    List2.Addlte (3)   ‘将该项增添到List2中
   Next i
  End Sub 
  Private Sub CmdDelete_Click()
    If List2.ListIndex >= 0 Then   ‘如果List2中有选中的项
    List2.RemoveItem (4)       ‘则删除所选的项
   End If
  End Sub
  Private Sub CmdDelAll_Click()
    (5)
  End Sub

()(共15分)
  阅读以下说明和C语言函数,将应填入 (n) 处的字旬写在答题纸的对应栏内。
【说明】
  某工厂A负责为某大型企业B加工零件,A每天必须为B提供一定数量的零件。由于某种客观原因,A每天生产的零件的单价都不相同。若A某天生产的零件数多于B需要的数目,则多余的零件可以放到第二天及以后再使用,但需要收取每个零件的保管费(产品单价之外附加的费用),每个零件在不同日期收取的保管费也不相同。
  例如,在5天的生产中,B要求的零件需求量及A核算出的零件单价和保管费用如表l所示:表1

  A可以制订多种生产计划,但费用可能不同。例如,表2所示为生产计划及其费用。
表2

  注:
  (1)计划1的总费用:25*20+15*30+30*32+35*25+30*35=3835(元)
  (2)计划2的总费用:40*20+15*4.5+30*32+50*25+15*5.5+15*35=3685(元)
  (3)计划3的总费用:70*20+45*4.5+30*8+65*25+30*5.5=3632.5(元)
  (4)计划4不可行,虽然第一天和第二天生产的零件总数比需求量多5个,但加上第三天生产的20个零件(共25个),仍不能满足B第三天的需求量(30个)。
函数find_a_plan(FILE *in)的功能是:从文件中读入若干个生产计划,从可行的计划中选出费用最小者,记录该生产计划并返回该最小费用。
  全局结构体数组data[]用于保存表1所示的数据(data[0]不用),说明如下:
  data[i].Qty_req: int型,表示第i天的零件需求量。
  data[i].Price: double型,表示第i天生产的零件单价(元)。
  data[i].Keeping_fee: double型,表示第i天保管单个零件的费用(元)。

【C语言函数】
  int B_s[DAYS+1];/*记录成本最小的生产计划,B_s[0]不用,DAYS定义为天数*/
    double find_a_plan(FILE *inf)
    {int P_num[DAYS+l],acc_req[DAYS+1];
    int i,tag = 0,acc_qty = 0;
  double mincost = 1.0e20,cost_Produce,cost_Keep;
 
  for(i=l;i<=DAYS;i++){/*到第i天时的累计零件需求量存入acc_req[i]*/   acc_qty += data[i].Qty_req;
    acc_req[i] = acc_qty;
  }
 
  while(!feof(inf)){
    for(i=1;i<=DAYS;i++)/*未读入一个生产计划,第i天的产量存入P_num[i]*/
    if(!feof(inf))
  fscanf(inf,"%d″,&P_num[i]);
 
  tag = 0; cost_Produce = 0;cost_Keep = 0;
    for(i = l, (1) ;i<=DAYS;i++){/*考察当前的生产计划*/
    acc_qty +=P_num[i];/* acc_qty计录到第i天时的累计零件生产量*/
  if(acc_qty     tag = 1; break;
  } /*if*/
  cost_Produce +=   (2)  ;/*计算当前生成计划的总零件价格*/
  /*计算当前生成计划下的零件保管费*/
  cost_Keep += (   (3)   ) * data[i].Keeping_fee;
  }/*for*/
  if( (4) )/*若当前生产计划不可行,则继续读取下一计划*/
  continue;
  if(  (5)  )/*记录成本更小的生产计划*/
  mincost =  cost_Produce + cost_Keep;
  for(i = 1; i <= DAYS; i++)
  B_s[i] = P_num[i];
  }/*if*/
  }/*while*/
  return mlncost;
}

上一页

第 2 页