2006年上半年程序员下午试题

考试总分:8分

考试类型:模拟试题

作答时间:60分钟

已答人数:967

试卷答案:有

试卷介绍: 2006年上半年程序员下午试题

开始答题

试卷预览

  • 1. 试题五(共15分)阅读以下应用说明以及用VisualBasic开发过程中所编写的程序代码,将应填入__(n)__处的字句写在答题纸的对应栏内。[应用说明]某应用程序在运行过程中的一个界面如下图所示:在“供选课程”列表框(名为Listl)中选择某个课程后,再单击“>*按钮(名称为cmdSelect),就能将该课程复制到“所选课程”列表框(名称为List2)中(但要注意不要出现重复项);如果单击“>>”按钮(名称为cmdSelAll),就能将全部供选课程名复制到列表框List2中(注意应先删除List2中的已选项);如果在“所选课程”列表框中选中某个课程,再单击“=0Then‘如果List2中有选中的项List2.Removeltem___(4)___‘则删除所选的项EndIfEndSubPrivateSubCmdDelAll_Click().___(5)___EndSub[15分]

    A(1)___‘在List2中增添List1中所选的项EndSubPrivateSubCmdSelAll_Click()List2.Clear‘先删除List2中的已有项Fori=0To___

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

    C(3)___‘将该项增添到List2中NextiEndSubPrivateSubCmdDelete_Click()IfList2.ListIndex>=0Then‘如果List2中有选中的项List2.Removeltem___

    D(4)___‘则删除所选的项EndIfEndSubPrivateSubCmdDelAll_Click().___

    E(5)___EndSub[15分]

  • 2. 试题七(共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)'定义窗体的坐标系统EndSubPrivateSubCmdStart_Click()x=0MMC.DeviceType="WaveAudio"'设置多媒体设备类型MMC.FileName="两只蝴蝶.way"'确定声音文件名MMC.Command="Open"'打开多媒体设备MNC.Command="Play"'启动声音的播放Timerl.Enabled=TrueEndSub'打开定时器PrivateSubTimerl_Timer()Ifx>20Thenx=x-20'蝴蝶飞到右边界后再回到左边界Imagel.Left=x'动态调整蝴蝶框的位置Imagel.Top=__(3)__Image2.Left=xImage2.Top=__(4)__x=x+0.1'确定蝴蝶下一步飞行位置EndSubPrivateSubCmdStop_Click()__(5)__Imagel.Left=0'蝴蝶位置初始化Imagel.Top=2Image2.Left=0Image2.Top=3MMC.Command="Stop"'停止播放MMC.Command="Close"'关闭多媒体设备EndSub[15分]

    A(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__

    B(2)__'声明全局变量PrivateSubForm_Load()Scale(0,0)-(20,6)'定义窗体的坐标系统EndSubPrivateSubCmdStart_Click()x=0MMC.DeviceType="WaveAudio"'设置多媒体设备类型MMC.FileName="两只蝴蝶.way"'确定声音文件名MMC.Command="Open"'打开多媒体设备MNC.Command="Play"'启动声音的播放Timerl.Enabled=TrueEndSub'打开定时器PrivateSubTimerl_Timer()Ifx>20Thenx=x-20'蝴蝶飞到右边界后再回到左边界Imagel.Left=x'动态调整蝴蝶框的位置Imagel.Top=__

    C(3)__Image2.Left=xImage2.Top=__

    D(4)__x=x+0.1'确定蝴蝶下一步飞行位置EndSubPrivateSubCmdStop_Click()__

    E(5)__Imagel.Left=0'蝴蝶位置初始化Imagel.Top=2Image2.Left=0Image2.Top=3MMC.Command="Stop"'停止播放MMC.Command="Close"'关闭多媒体设备EndSub[15分]

  • 3. 试题六(共15分)阅读以下说明和C++代码,将解答写在答题纸的对应栏内。[说明]已知类SubClass的getSum方法返回其父类成员与类SubClass成员j的和,类SuperClass中的getSum为纯虚拟函数‘程序中的第23行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第15行且尚未执行第15行的语句时成员变量j的值,最后给出程序运行后的输出结果。[C++代码]行号代码O1#include02usingnamespacestd;03classSuperClass{04private:05inti;06public:07SuperClass(){i=5;}08virtualihtgetValueO{returni;}09virtualintgetSum()=0;lO};11classSubClass:publicSuperClass{12intj;13public:14SubClass(intj):j(0){15___(1)___=j;//用参数j的值更新数据成员16};17intgetValue(){returnj;}18intgetSum(){19return___(2)___getValue()+j;20}21};22voidmain(void){23SuperClasss=newSubClass(-3);24coutgetValue()getSum()<<endl;26deletes;27}[15分]

    A(1)___=j;//用参数j的值更新数据成员16};17intgetValue(){returnj;}18intgetSum(){19return___

    B(2)___getValue()+j;20}21};22voidmain(void){23SuperClasss=newSubClass(-3);24coutgetValue()getSum()<<endl;26deletes;27}[15分]

  • 4. 试题八(共15分)阅读以下说明和Java代码,将解答写在答题纸的对应栏内。[说明]已知类SubClass的getSum方法返回其父类成员i与类SubClass成员j的和;类SuperClass中的getSum为抽象函数,程序中的第14行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,当程序运行到第22行且尚未执行第22行语句时成员变量i的值,最后给出程序运行后的输出结果。[Java代码]行号代码01publicclassUainJava{02publicstaticvoidmain(String[]args){03SuperClasss=newSubClass();04System.out.println(s.getValue());05System.out.println(S.getSum());06}07}08abstractclassSuperClass{09privateinti;10publicSuperClass(){i=5;}11publicintgetValue(){12returni;13}14publicfinalabstractintgetSum();15}16classSubClassextendsSuperClass{17intj;18publicSubClass(){19this(-3);20}21publicSubClass(intj){22___(1)___.j=j;23}24publicintgetValue(){returnj;}25publicintgetSum(){26return___(2)___.getValue()+j;27}28}[15分]

    A(1)___.j=j;23}24publicintgetValue(){returnj;}25publicintgetSum(){26return___

    B(2)___.getValue()+j;27}28}[15分]

  • 5. 试题一(共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分]

    A(1)矩阵A第i行第j列的元素A(i,j)被复制到矩阵B中的哪个位置?

    B(2)A(i,j)后来又被复制到矩阵C中的哪个位置?

    C(3)填补流程图1-2中的空缺。[15分]

  • 6. 试题二(共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(numO){d=m%10;m=__(3)__;result=result+(__(4)__)*mul;mul=__(5)__;}returnresult;}[15分]

    A(1)__)/*若num不大于0或num的位数大于4,则返回-1*/return-1;mul=1;__

    B(2)__;while(m>O){d=m%10;m=__

    C(3)__;result=result+(__

    D(4)__)*mul;mul=__

    E(5)__;}returnresult;}[15分]

  • 7. 试题三(共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;}[15分]

    A(1)__;/*初始化临时工作栈s_bak*//*将栈*s中所有比para_ch更接近栈顶的元素暂时存放在临时工作栈s_bsk中*/while(!IsEmpty(*s)){ch=___

    B(2)___;/*取栈顶元素:/Pop(S);if(Ch=para_ch){tag=TRUE:break;}___

    C(3)___;}/*将暂存于1临时工作栈s_bak中的元素存回栈*s*/while(___

    D(4)___){Ch=Top(s_bak);___

    E(5)___;Push(s,ch);}returntag;}[15分]

  • 8. 试题四(共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语言函数]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<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*/returnmincost;}[15分]

    A(1)计划1的总费用:25*20+15*30+30*32+35*25+30*35=3835(元)

    B(2)计划2的总费用:40*20+15*4.5+30*32+50*25+15*5.5+15*35=3685(元)

    C(3)计划3的总费用:70*20+45*4.5+30*8+65*25+30*5.5=3632.5(元)

    D(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<acc_req[i]){/*当前生产计划不能满足需求*/tag=1;break;}/*if*/cost_Produce+=___(2)___;/*计算当前生成计划的总零件价格*//*计算当前生成计划下的零件保管费*/cost_Keep+=(___(3)___)*data[i].Keeping_fee;}/*for*/if(___(4)___)/*若当前生产计划不可行,则继续读取下一计划*/continue;if(___

    E(5)___){/*记录成本更小的生产计划*/mincost=cost_Produce+cost_Keep;for(i=1;i<=DAYS;i++)B_s[i]=P_num[i];}/*if*/}/*while*/returnmincost;}[15分]

相关试卷
相关题库