本栏目下题库来源于互联网,轻速云承诺对于用户导入平台的题库是严格保密的,不会在此呈现!
轻速云给您提供更好的在线考试系统服务!
2006年上半年程序员下午试题
1、【 简答题
试题一(共15分)
  阅读以下说明和流程图,回答问题1至问题3,将解答填入答题纸的对应栏内。
[说明]
  信息处理过程中经常需要将图片或汉字点阵做旋转处理。一个矩阵以顺时针方向旋转90°后可以形成另一个矩阵,如下图所示: 
      
  流程图1-1描述了对n*n矩阵的某种处理。流程图1-2是将矩阵A顺时针旋转90°形成矩阵B的具体算法。
                  [流程图1-1]                             [流程图1-2] 
      
[问题1](3分)
  请写出以下3*3单位矩阵沿顺时针方向旋转90°后所形成的矩阵。
        
[问题2](3分)
  如果以下3*3矩阵沿顺时针方向旋转90°后所形成的矩阵就是原来的矩阵:
      
   其中,位于*处的元素需要考生填写
  请完整地写出该矩阵。
[问题3](9分)
  在上述流程图1-1和1-2的算法中,
  (1)矩阵A第i行第j列的元素A(i,j)被复制到矩阵B中的哪个位置?
  (2)A(i,j)后来又被复制到矩阵C中的哪个位置?
  (3)填补流程图1-2中的空缺。 [15分]
解析:
[问题1]
  0  0  1
  0  1  0
  1  0  0
[问题2]
  a  b  a
  b  c  b
  a  b  a
[问题3]
 (1) B(j,n-i+1)
 (2) C(n-i+1,n-j+1)
 (3) A(n-j+1,i)
2、【 简答题
试题二(共15分)
  阅读以下说明和C语言函数,将应填入__(n)__处的字句写在答题纸的对应栏内。
[说明]
  函数chanse(int num)的功能是对四位以内(含四位)的十进制正整数num进行如下的变换:将num的每一位数字重复一次,并返回变换结果。例如,若num=5234,则函数的返回值为55223344,其变换过程可描述为:
   (4*10+4)*1 + (3*10+3)*100 + (2*10+2)*10000 + (5*10+5)*1000000 = 55223344
[C语言函数]

  long change (int num)
  {
   int d, m =num;
   long result, mul;
   if (num <= 0 || [__(1)__)   /*若num不大于0或num 的位数大于4,则返回-1*/
    return -1;
   mul = 1;
   __(2)__;
   while (m > O) {
    d = m % 10;
    m = __(3)__;
    result = result + (__(4)__) * mul;
    mul = __(5)__;
   }
   return result;
  } [15分]
解析:
 (1) num/10000 > 0
 (2) result = 0
 (3) m/10
 (4) d * 10 + d
 (5) mul * 100
3、【 简答题
试题三(共15分)
   阅读以下说明和C语言函数,将应填入__(n)__处的字句写在答题纸的对应栏内。
[说明]
  函数bool Del_elem(STACK *S,char para_ch)的功能是:删除栈*s中与para_ch之值相等且最接近栈顶的元素(字符),若栈中不存在该元素,则函数返回FALSE,否则返回TRUE。其中,STACK是栈的类型名。
  函数Del_lem实现上述功能的方法是c利用栈的基本操作,先将栈*s中所有比parlch之值更接近栈顶的元素暂时存放在临时工作栈s_bak中,使得与para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与para_ch之值相等的元素,最后再将s_bak中的元素依次存回栈*s。
  在函数Del_elem中必须使用栈的基本操作进行栈上的运算,实现栈的基本操作的
  函数原型说明如下;
  void InitStack(STACK*S):初始化栈。
  void Push(STACK*S,char e):将一个字符压栈,栈中元素数目增1。
  void Pop(STACK*S);栈顶元素出栈,栈中元素数目减1。
  char Top(STACK S):返回非空栈的栈顶元素值,栈中元素数目不变。
  bool IsEmpty(STACK S);若S是空栈,则返回TRUE:否则返回FALSE。
  bool类型定义如下:
  typedef enum{ FALSE=0,TRUE=1 } bool;
[C语言函数]
  bool Del_elem(STACK *S,char para_ch)
  {
   STACK s_bak;   /*定义临时工作栈s_bak */
   char Ch;
   bool tag=FALSE;
   __(1)__;     /*初始化临时工作栈s_bak*/
   /*将栈*s中所有比para_ch更接近栈顶的元素暂时存放在临时工作栈s_bsk中*/
   while(!IsEmpty(*s)){
    ch=___(2)___; /*取栈顶元素:/
    Pop(S);
    if(Ch=para_ch){
      tag=TRUE:
    break;
    }
    ___(3)___;
   }
   /*将暂存于1临时工作栈s_bak中的元素存回栈*s*/
   while (___(4)___){
    Ch=Top(s_bak);
    ___(5)___;
    Push(s,ch);
   }
   return tag;
   }  [15分]
解析:
 (1) InitStack(&s_bak)
 (2) Top(*s)
 (3) Push(&s_bak,ch)
 (4) !IsEmpty(s_bak)
 (5) Pop(&s_bak)
4、【 简答题
试题四(共15分)
  阅读以下说明和C语言函数,将应填入__(n)__处的字句写在答题纸的对应栏内。
[说明]
  某工厂A负责为某大型企业B加工零件,A每天必须为B提供一定数量的零件。由于某种客观原因,A每天生产的零件的单价都不相同。若A某天生产的零件数多于B需要的数目,则多余的零件可以放到第二天及以后再使用,但需要收取每个零件的保管费 (产品单价之外附加的费用),每个零件在不同日期收取的保管费也不相同。
  例如,在5天的生产中,B要求的零件需求量及A核算出的零件单价和保管费用如表1所示:
     
A可以制订多种生产计划,但费用可能不同。例如,表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个)。
  函数finla_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];    /*扫记录成本最小的生产计划,ls[0]不用,DAYS定义为天数*/
  double find_a_plan(FILE *inf)
  { int P num[DAYS+1],acc_req[DAYS+1]:
   int i,tag=0,acc_qty=0;
   double mincost=1.0e20,costProduce,cost_Keep;
   for (i=1;i<=DAYS;i++){   /*到第i天时的累计零件需求量存入acc_req[i]*/
    accjty += 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=1,___(1)___;i<=DAYS;i++){   /*考察当前的生产计划*/
     acc_qty += P_num[i]);      /*acc_qty计录到第i天时的累计零件生产量*/
     if (acc_qty < acc_req[i]) {  /*当前生产计划不能满足需求*/
      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 mincost;
   } [15分]
解析:
 (1) acc_qty = 0
 (2) P_num[i] * data[i].Price
 (3) acc_qty - acc_req[i]
 (4) tag
 (5) cost_Produce + cost_Keep < mincost
5、【 简答题
试题五(共15分)
  阅读以下应用说明以及用Visual Basic开发过程中所编写的程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[应用说明]
  某应用程序在运行过程中的一个界面如下图所示: 
       
  在“供选课程”列表框(名为Listl)中选择某个课程后,再单击“>*按钮(名称为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 = Lsit2.List(i) Then Exit Sub ‘不要重复选择
   Next i
   List2.Addltem ___(1)___    ‘在List2中增添List1中所选的项
  End Sub
  Private Sub CmdSelAll_Click()
   List2.Clear           ‘先删除List2中的已有项
   For i = 0 To ___(2)___     ‘对List1中所有各项做循环处理
    List2.Addltem ___(3)___    ‘将该项增添到List2中
   Next i
  End Sub
  Private Sub CmdDelete_Click()
   If List2.ListIndex>=0 Then    ‘如果List2中有选中的项
    List2.Removeltem ___(4)___   ‘则删除所选的项
   End If
  End Sub
  Private Sub CmdDelAll_Click() .
   ___(5)___
  End Sub [15分]
解析:
 (1) List1.Text
 (2) List1.ListCount - 1
 (3) List1.List(i)
 (4) List2.ListIndex
 (5) List2.Clear
6、【 简答题
试题六(共15分)
  阅读以下说明和C++代码,将解答写在答题纸的对应栏内。
[说明]
  已知类SubClass的getSum方法返回其父类成员与类SubClass成员j的和,类SuperClass中的getSum为纯虚拟函数‘程序中的第23行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第15行且尚未执行第15行的语句时成员变量j的值,最后给出程序运行后的输出结果。
[C++代码]
  行号  代码
   O1 #include <iostream>
   02 using namespace std;
   03 class SuperClass {
   04  private:
   05  int i;
   06 public:
   07  SuperClass(){ i = 5;}
   08  virtual iht getValueO { return i; }
   09  virtual int getSum()=0;
   lO };
   11 class SubClass:public SuperClass{
   12 int j;
   13 public:
   14  SubClass(int j) :j(0){
   15   ___(1)___ =j;   //用参数j的值更新数据成员
   16  };
   17  int getValue(){return j;}
   18  int getSum(){
   19   return ___(2)___ getValue() + j;
   20  }
   21 };
   22 void main(void) {
   23  SuperClass s = new SubClass(-3);
   24  cout << s->getValue() << " ";
   25  cout << s->getSum() << endl;
   26  delete s;
   27 } [15分]
解析:
 (1) this->j
 (2) SuperClass
  错误更正结果:SuperClass * s = new SubClass(-3)
  变量j的值:0
  运行结果: -3  2
7、【 简答题
试题七(共15分)
  阅读以下应用说明以及用Visual Basic开发过程中进行的属性设置和所编写的程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内。
[应用说明]
  启动某应用程序后,其运行窗口左边会出现两只蝴蝶,下边有“启动”和“停止’两个按钮。单击“启动”按钮后,伴随“两只蝴蝶”音乐,两只蝴蝶会分别沿两条互绞的曲线,自左至右翩翩飞行(见下图),而且飞出窗口右边后又会再从窗口左边飞入。
  单击“停止”按钮时,两只蝴蝶停止飞行,回到初始状态,音乐也同时停止。再单击“启动”按钮时,蝴蝶重新开始伴音飞行。
  在开发该应用时,两只蝴蝶用两个图像框来表示,分别命名为Imagel和Image2,其Picture属性分别设置为各个蝴蝶的图像文件名,其stretch属性都应设置为__(1)__,使图像能自动改变大小以适应图像框。再在窗体中建立“启动”按钮(名为CmdStart)和“停止”按钮(名为CmdStop)。
  蝴蝶所飞行的路线分别用正弦和余弦曲线描述。为此,首先需要用Scal方法对窗体定义坐标系统。设左上角坐标为(0,0),右下角坐标为(20,6)。蝴蝶1的飞行曲线设为;yl=2+sinx,蝴蝶2的飞行曲线设为:y2=2+cos x。蝴蝶飞行的位置坐标(x,y)确定了蝴蝶图像框的位置(Left属性值和Top属性值)。
  设置一个定时器(名为timerl),其定时时间间隔为0.1秒,所以其Interval属性值应设置为100。每隔 0.1秒需要对两个图像框的位置进行一次调整。初始时,该定时器的Enabled属性应设为False(关闭状态)。
  为使该应用程序运行时能播放声音文件,在开发时应利用菜单“工程-部件”,选择加载组件“Microsoft Multimedia Control 6.0”,并在窗体中设置多媒体控件(设命名为MC)。由于不需要用户控制,其Visible属性可设置为False(不可见)。右击该控件,可选择该控件中各按钮的属性,应注意选择“播放”有效、“停止”有效。“两只蝴蝶”的音乐文件应提前准备好,并通过某种音频处理程序将其转换成WAV格式,存放在开发该应用的当前目录中。 
     
[Visual Basic程序代码]
  Dim __(2)__            '声明全局变量
  Private Sub Form_Load()
   Scale (0,0)-(20,6)       '定义窗体的坐标系统
  End Sub
  Private Sub CmdStart_Click()
   x = 0
   MMC.DeviceType = "WaveAudio"   '设置多媒体设备类型
   MMC.FileName = "两只蝴蝶.way"  '确定声音文件名
   MMC.Command = "Open"       '打开多媒体设备
   MNC.Command = "Play"       '启动声音的播放
   Timerl.Enabled= True
  End Sub              '打开定时器
  Private Sub Timerl_Timer()
   If x > 20 Then x = x - 20    '蝴蝶飞到右边界后再回到左边界
   Imagel.Left= x         '动态调整蝴蝶框的位置
   Imagel.Top= __(3)__
   Image2.Left= x
   Image2.Top= __(4)__
   x = x + 0.1           '确定蝴蝶下一步飞行位置
  End Sub
  Private Sub CmdStop_Click()
   __(5)__
   Imagel. Left= 0         '蝴蝶位置初始化
   Imagel. Top= 2
   Image2.Left= 0
   Image2.Top= 3
   MMC. Command= "Stop"       '停止播放
   MMC. Command= "Close"      '关闭多媒体设备
  End Sub [15分]
解析:
 (1) True
 (2) x As Single
 (3) 2 + Sin(x)
 (4) 2 + Cos(x)
 (5) Timer1.Enabled = False
8、【 简答题
试题八(共15分)
  阅读以下说明和Java代码,将解答写在答题纸的对应栏内。
[说明]
  已知类SubClass的getSum方法返回其父类成员i与类SubClass成员j的和;类SuperClass中的getSum为抽象函数,程序中的第14行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,当程序运行到第22行且尚未执行第22行语句时成员变量i的值,最后给出程序运行后的输出结果。
[Java代码]
  行号 代码
   01 public class UainJava{
   02  public static void main(String[]args){
   03   SuperClass s=new SubClass();
   04   System.out.println(s.getValue());
   05   System.out.println(S.getSum());
   06  }
   07 }
   08 abstract class SuperClass{
   09  private int i;
   10  public SuperClass(){i=5;}
   11  public int getValue(){
   12   return i;
   13  }
   14  public final abstract int getSum();
   15 }
   16 class SubClass extends SuperClass{
   17  int j;
   18  public SubClass(){
   19   this(-3);
   20  }
   21  public SubClass(int j){
   22   ___(1)___.j=j;
   23  }
   24  public int getValue(){return j;}
   25  public int getSum(){
   26   return ___(2)___.getValue()+j;
   27  }
   28 } [15分]
解析:
 (1) this
 (2) super
 错误更正结果:public abstract int getSum ()
 变量i的值:5
 运行结果: -3
       2
1
1页,共8个题库
1页,共8个题库
轻速云给您提供更好的在线考试系统服务!
推荐
推荐题库
众多企事业单位的信赖之选
36万+企事业单位的共同选择
查看更多合作案例
众多企事业单位的信赖之选
开始使用轻速云组织培训考试
四步组织一场考试答题,一键搭建企业培训平台
免费使用 免费使用 预约演示
咨询热线
400-886-8169
周一到周日 8:00-22:00
©2023 轻速云 苏ICP备16049646号-1 轻速云科技提供专业的在线考试系统、在线培训系统
联系我们
客服热线客服热线:400-886-8169 | 周一至周日 8:00-22:00
©2023 轻速云 苏ICP备16049646号-1
轻速云科技提供专业的在线考试系统、在线培训系统
在线咨询 400-886-8169