上半年软考程序员下午真题及答案word.docx

上传人:b****6 文档编号:5734879 上传时间:2022-12-31 格式:DOCX 页数:12 大小:117.53KB
下载 相关 举报
上半年软考程序员下午真题及答案word.docx_第1页
第1页 / 共12页
上半年软考程序员下午真题及答案word.docx_第2页
第2页 / 共12页
上半年软考程序员下午真题及答案word.docx_第3页
第3页 / 共12页
上半年软考程序员下午真题及答案word.docx_第4页
第4页 / 共12页
上半年软考程序员下午真题及答案word.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

上半年软考程序员下午真题及答案word.docx

《上半年软考程序员下午真题及答案word.docx》由会员分享,可在线阅读,更多相关《上半年软考程序员下午真题及答案word.docx(12页珍藏版)》请在冰豆网上搜索。

上半年软考程序员下午真题及答案word.docx

上半年软考程序员下午真题及答案word

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

  试题一至试题三是必答题

  试题一(共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分)

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

[说明]

  函数chanse(intnum)的功能是对四位以内(含四位)的十进制正整数num进行如下的变换:

将num的每一位数字重复一次,并返回变换结果。

例如,若num=5234,则函数的返回值为55223344,其变换过程可描述为:

   (4*10+4)*1+(3*10+3)*100+(2*10+2)*10000+(5*10+5)*1000000=55223344

[C语言函数]

  longchange(intnum)

  {

   intd,m=num;

   longresult,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)__;

   }

   returnresult;

  }

  试题三(共15分)

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

[说明]

  函数boolDel_elem(STACK*S,charpara_ch)的功能是:

删除栈*s中与para_ch之值相等且最接近栈顶的元素(字符),若栈中不存在该元素,则函数返回FALSE,否则返回TRUE。

其中,STACK是栈的类型名。

  函数Del_lem实现上述功能的方法是c利用栈的基本操作,先将栈*s中所有比parlch之值更接近栈顶的元素暂时存放在临时工作栈s_bak中,使得与para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与para_ch之值相等的元素,最后再将s_bak中的元素依次存回栈*s。

  在函数Del_elem中必须使用栈的基本操作进行栈上的运算,实现栈的基本操作的

  函数原型说明如下;

  voidInitStack(STACK*S):

初始化栈。

  voidPush(STACK*S,chare):

将一个字符压栈,栈中元素数目增1。

  voidPop(STACK*S);栈顶元素出栈,栈中元素数目减1。

  charTop(STACKS):

返回非空栈的栈顶元素值,栈中元素数目不变。

  boolIsEmpty(STACKS);若S是空栈,则返回TRUE:

否则返回FALSE。

  bool类型定义如下:

  typedefenum{FALSE=0,TRUE=1}bool;

[C语言函数]

  boolDel_elem(STACK*S,charpara_ch)

  {

   STACKs_bak;  /*定义临时工作栈s_bak*/

   charCh;

   booltag=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);

   }

   returntag;

  } 

 

 

  从下列的2道试题(试题四至试题五)中任选1道解答。

如果解答的试题数超过1道,则题号小的1道解答有效。

  试题四(共15分)

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

[说明]

  某工厂A负责为某大型企业B加工零件,A每天必须为B提供一定数量的零件。

由于某种客观原因,A每天生产的零件的单价都不相同。

若A某天生产的零件数多于B需要的数目,则多余的零件可以放到第二天及以后再使用,但需要收取每个零件的保管费(产品单价之外附加的费用),每个零件在不同日期收取的保管费也不相同。

  例如,在5天的生产中,B要求的零件需求量及A核算出的零件单价和保管费用如表1所示:

 

  注:

(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语言函数]

  intB_s[DAYS+1];    /*扫记录成本最小的生产计划,ls[0]不用,DAYS定义为天数*/

  doublefind_a_plan(FILE*inf)

  {intPnum[DAYS+1],acc_req[DAYS+1]:

   inti,tag=0,acc_qty=0;

   doublemincost=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

      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*/

   returnmincost;

  }

  试题五(共15分)

  阅读以下应用说明以及用VisualBasic开发过程中所编写的程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内。

[应用说明]

  某应用程序在运行过程中的一个界面如下图所示:

 

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

如果单击“<<”按钮(名称为cmdDelAll),就会从List2中删除所有已选课程。

[VisualBasic程序代码]

  PrivateSubCmdSelect_Click()

   Fori=0TOList2.ListCount-1

    IfList1.Text=Lsit2.List(i)ThenExitSub‘不要重复选择

   Nexti

   List2.Addltem___

(1)___    ‘在List2中增添List1中所选的项

  EndSub

  PrivateSubCmdSelAll_Click()

   List2.Clear          ‘先删除List2中的已有项

   Fori=0To___

(2)___     ‘对List1中所有各项做循环处理

    List2.Addltem___(3)___   ‘将该项增添到List2中

   Nexti

  EndSub

  PrivateSubCmdDelete_Click()

   IfList2.ListIndex>=0Then    ‘如果List2中有选中的项

    List2.Removeltem___(4)___   ‘则删除所选的项

   EndIf

  EndSub

  PrivateSubCmdDelAll_Click().

   ___(5)___

  EndSub

 

 

  从下列的3道试题(试题六至试题八)中任选1道解答。

如果解答的试题数超过1道,则题号小的1道解答有效。

  试题六(共15分)

  阅读以下说明和C++代码,将解答写在答题纸的对应栏内。

[说明]

  已知类SubClass的getSum方法返回其父类成员与类SubClass成员j的和,类SuperClass中的getSum为纯虚拟函数‘程序中的第23行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第15行且尚未执行第15行的语句时成员变量j的值,最后给出程序运行后的输出结果。

[C++代码]

  行号  代码

   O1 #include

   02 usingnamespacestd;

   03 classSuperClass{

   04  private:

   05  inti;

   06 public:

   07  SuperClass(){i=5;}

   08  virtualihtgetValueO{returni;}

   09  virtualintgetSum()=0;

   lO };

   11 classSubClass:

publicSuperClass{

   12 intj;

   13 public:

   14  SubClass(intj):

j(0){

   15   ___

(1)___=j;   //用参数j的值更新数据成员

   16  };

   17  intgetValue(){returnj;}

   18  intgetSum(){

   19   return___

(2)___getValue()+j;

   20  }

   21 };

   22 voidmain(void){

   23  SuperClasss=newSubClass(-3);

   24  cout<getValue()<<"";

   25  cout<getSum()<

   26  deletes;

   27 }

  试题七(共15分)

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

[应用说明]

  启动某应用程序后,其运行窗口左边会出现两只蝴蝶,下边有“启动”和“停止’两个按钮。

单击“启动”按钮后,伴随“两只蝴蝶”音乐,两只蝴蝶会分别沿两条互绞的曲线,自左至右翩翩飞行(见下图),而且飞出窗口右边后又会再从窗口左边飞入。

  单击“停止”按钮时,两只蝴蝶停止飞行,回到初始状态,音乐也同时停止。

再单击“启动”按钮时,蝴蝶重新开始伴音飞行。

  在开发该应用时,两只蝴蝶用两个图像框来表示,分别命名为Imagel和Image2,其Picture属性分别设置为各个蝴蝶的图像文件名,其stretch属性都应设置为__

(1)__,使图像能自动改变大小以适应图像框。

再在窗体中建立“启动”按钮(名为CmdStart)和“停止”按钮(名为CmdStop)。

  蝴蝶所飞行的路线分别用正弦和余弦曲线描述。

为此,首先需要用Scal方法对窗体定义坐标系统。

设左上角坐标为(0,0),右下角坐标为(20,6)。

蝴蝶1的飞行曲线设为;yl=2+sinx,蝴蝶2的飞行曲线设为:

y2=2+cosx。

蝴蝶飞行的位置坐标(x,y)确定了蝴蝶图像框的位置(Left属性值和Top属性值)。

  设置一个定时器(名为timerl),其定时时间间隔为0.1秒,所以其Interval属性值应设置为100。

每隔 0.1秒需要对两个图像框的位置进行一次调整。

初始时,该定时器的Enabled属性应设为False(关闭状态)。

  为使该应用程序运行时能播放声音文件,在开发时应利用菜单“工程-部件”,选择加载组件“MicrosoftMultimediaControl6.0”,并在窗体中设置多媒体控件(设命名为MC)。

由于不需要用户控制,其Visible属性可设置为False(不可见)。

右击该控件,可选择该控件中各按钮的属性,应注意选择“播放”有效、“停止”有效。

“两只蝴蝶”的音乐文件应提前准备好,并通过某种音频处理程序将其转换成WAV格式,存放在开发该应用的当前目录中。

 

[VisualBasic程序代码]

  Dim__

(2)__           '声明全局变量

  PrivateSubForm_Load()

   Scale(0,0)-(20,6)       '定义窗体的坐标系统

  EndSub

  PrivateSubCmdStart_Click()

   x=0

   MMC.DeviceType="WaveAudio"  '设置多媒体设备类型

   MMC.FileName="两只蝴蝶.way"  '确定声音文件名

   MMC.Command="Open"      '打开多媒体设备

   MNC.Command="Play"      '启动声音的播放

   Timerl.Enabled=True

  EndSub              '打开定时器

  PrivateSubTimerl_Timer()

   Ifx>20Thenx=x-20   '蝴蝶飞到右边界后再回到左边界

   Imagel.Left=x         '动态调整蝴蝶框的位置

   Imagel.Top=__(3)__

   Image2.Left=x

   Image2.Top=__(4)__

   x=x+0.1           '确定蝴蝶下一步飞行位置

  EndSub

  PrivateSubCmdStop_Click()

   __(5)__

   Imagel.Left=0         '蝴蝶位置初始化

   Imagel.Top=2

   Image2.Left=0

   Image2.Top=3

   MMC.Command="Stop"      '停止播放

   MMC.Command="Close"      '关闭多媒体设备

  EndSub

  试题八(共15分)

  阅读以下说明和Java代码,将解答写在答题纸的对应栏内。

[说明]

  已知类SubClass的getSum方法返回其父类成员i与类SubClass成员j的和;类SuperClass中的getSum为抽象函数,程序中的第14行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,当程序运行到第22行且尚未执行第22行语句时成员变量i的值,最后给出程序运行后的输出结果。

[Java代码]

  行号 代码

   01 publicclassUainJava{

   02  publicstaticvoidmain(String[]args){

   03   SuperClasss=newSubClass();

   04   System.out.println(s.getValue());

   05   System.out.println(S.getSum());

   06  }

   07 }

   08 abstractclassSuperClass{

   09  privateinti;

   10  publicSuperClass(){i=5;}

   11  publicintgetValue(){

   12   returni;

   13  }

   14  publicfinalabstractintgetSum();

   15 }

   16 classSubClassextendsSuperClass{

   17  intj;

   18  publicSubClass(){

   19   this(-3);

   20  }

   21  publicSubClass(intj){

   22   ___

(1)___.j=j;

   23  }

   24  publicintgetValue(){returnj;}

   25  publicintgetSum(){

   26   return___

(2)___.getValue()+j;

   27  }

   28 }

 

 

  参考答案

  试题一

[问题1]

  001

  010

  100

[问题2]

  aba

  bcb

  aba

[问题3]

 

(1)B(j,n-i+1)

 

(2)C(n-i+1,n-j+1)

 (3)A(n-j+1,i)

  试题二

 

(1)num/10000>0

 

(2)result=0

 (3)m/10

 (4)d*10+d

 (5)mul*100

  试题三

 

(1)InitStack(&s_bak)

 

(2)Top(*s)

 (3)Push(&s_bak,ch)

 (4)!

IsEmpty(s_bak)

 (5)Pop(&s_bak)

  试题四

 

(1)acc_qty=0

 

(2)P_num[i]*data[i].Price

 (3)acc_qty-acc_req[i]

 (4)tag

 (5)cost_Produce+cost_Keep

  试题五

 

(1)List1.Text

 

(2)List1.ListCount-1

 (3)List1.List(i)

 (4)List2.ListIndex

 (5)List2.Clear

  试题六

 

(1)this->j

 

(2)SuperClass

  错误更正结果:

SuperClass*s=newSubClass(-3)

  变量j的值:

0

  运行结果:

-32

  试题七

 

(1)True

 

(2)xAsSingle

 (3)2+Sin(x)

 (4)2+Cos(x)

 (5)Timer1.Enabled=False

  试题八

 

(1)this

 

(2)super

 错误更正结果:

publicabstractintgetSum()

 变量i的值:

5

 运行结果:

-3

       2

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 工学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1