[计算机类试卷]2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc
《[计算机类试卷]2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc》由会员分享,可在线阅读,更多相关《[计算机类试卷]2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc(17页珍藏版)》请在麦多课文档分享上搜索。
1、2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析 1 阅读以下说明和流程图,回答问题 1至问题 3。 说明 信息处理过程中经常需要将图片或汉字点阵做旋转处理。一个矩阵以顺时针方向旋转 90后可以形成另一个矩阵,如下图所示: 流程图 2-1描述了对 n*n矩阵的某种处理。流程图 2-2是将矩阵 A顺时针旋转 90形成矩阵 B的具体算法。 1 请写出以下 3*3单位矩阵沿顺时针方向旋转 90后所形成的矩阵。 2 如果以下 3*3矩阵沿顺时针方向旋转 90后所形成的矩阵就是原来的 矩阵:其中 ,位于 *处的元素需要考生填写 请完整地写出该矩阵。 3 在上述流程图 2
2、-1和图 2-2的算法中, (1)矩阵 A第 i行第 j列的元素 A(i,j)被复制到矩阵 B中的哪个位置 ? (2)A(i,j)后来又被复制到矩阵 C中的哪个位置 ? (3)填补流程图 2-2中的空缺。 4 阅读以下说明和 C语言函数。 说明 函数 change(int num)的功能是对四位以内 (含四位 )的十进制正整数 num进行如下的变换:将 num的每一位数字重复一次,并返回变换结果。例如,若 num=5234,则函数的返回值为 55223344,其变换过程可描述为: (4*10+4)*1+(3*10+3)*100+(2*10+2)*10000+(5*10+5)*1000000=5
3、5223344 C语言函数 long change(int num) ind, m=num; long result mul; if (num =0|(1) /*若 num不大于 0或 num的位数大于 4,则返回 -1*/ retum-1; mul=1; (2) while(m 0) d=m%10; m=(3); result=result+( (4) ) *mul; mul=(5); return result; 5 阅读以下说明和 c语言函数。 说明 函数 bool Del_elem(STACK*s,char para_ch)的功能是:删除栈 *s中与 para ch之值相等且最接近栈顶
4、的元素 (字符 ),若栈中不存在该元素,则函数返回 FALSE,否则返回 TRUE。其中, STACK是栈的 类型名。 函数 Del_elem实现上述功能的方法是:利用栈的基本操作,先将栈 *s中所有比 para_ch之值更接近栈顶的元素暂时存放在临时工作栈 s_bak中,使得与 para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与 Para ch之值相等的元素,最后再将 s bak中的元素依次存回栈 *s。 在函数 Del_elem中必须使用栈的基本操作进行栈上的运算,实现栈的基本操作的函数原型说明如下: void InkStack(STACK*S):初始化栈。 voi
5、d Push(STACK*S, char e):将一个字符压栈,栈中元素数目增 1。 void Pop(STACK*S):栈顶元素出栈,栈中元素数目减 1。 char Top(STACKS):返回非空栈的栈顶元素值,栈中元素数目不变。 bool IsEmpty(STACK S):若 S是空栈,则返回 TRUE;否则返回 FALSE。 bool类型定义如下: typedef enumFALSE=0,TRUE=1)bool; C语言函数 bool Del_elem(STACK*s,char para_ch) STACK s_bgk; /*定义临时工作栈 s_bak, */ char ch; boo
6、l tag=FALSE; (1) /*初始化临时工作栈 s_bak*/ /*,将栈 *s中所有比 para_ch更接近栈顶的元素暂时存放在临时工作栈 s bak中 */ while(!IsEmpty(*s) ch=(2); /*取栈顶元素 */ Pop(s); if(ch para_ch) tag=TRUE; break; (3); /*将暂存于临时工作栈 s_bak中的元素存回栈 *s*/ while(4) ch=Top(s_bak); (5) Push(s, ch) return tag; 6 阅读以下说明和 C语言函数。 说明 某工厂 A负责为某大型企业 B加工零件,A每天必须为 B提供
7、一定数量的零件。由于某种客观原因, 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
8、*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所示的数据 (data0不用 ),说明如下: datai Qty_req: int型,
9、表示第 i天的零件需求量。 datai.Price: double型 , 表示第 i天生产的零件单价 (元 ) datai.Keeping_fee: double型 , 表示第 i天保管单个零件的费用 (元 ) C语言函数 intB_sDAYS+1; /*记录成本最小的生产计划,B_s0不用, DAYS定义为天数 */ double find_a_plan(FILE *int) iht P_nmDAYS+1,acc_reqDAYS+1; int i,tag = 0,acc_qty = 0; double mincost = 1.0e20,cost_Produce,cost_Keep; for(
10、i = 1;i = DAYS; i+) /*第 i天时的累计零件需求量存入 acc rcqi */ acc_qty += datai.Qty_req; acc_reqi = acc qty; while (!feof(int) for(i = 1; i = DAYS; i+ )/*读入一个生产计划,第 i天的产量存入P_numi*/ if (!feof(inf) fseantinf,“%d“, tag = 0; cost_Produce = 0; cost_Keep = 0; for(i = 1,(1);i = DAYS; i+) /*考查当前的生产计划 */ acc qty += P_num
11、i; /* acc_qty 计录到第 i天时的累计零件生产量 */ if (acc_qty acc_reqi) /*当前生产计划不能满足需求 */ tag = 1; break; /*if*/ cost_Produce +=(2); /*计算当前生产计划的总需件价格 */ cost_Keep += (3) * datai,Keeping_fee; /*for*/ if(4) /* 若当前生产计划不可行,则继续读取下一计划 */ continue; if(5) /*记录成本更小的生产计划 */ mincost = costProduce + cost_Keep; for(i = 1; i =DA
12、YS; i+) B_si = P numi; /*if*/ /*while*/ return mincost; 7 阅读以下应用说明以及用 Visual Basic开发过程中所编写的程序代码。 应用说明 某应用程序在运行过程中的一个界面如下图所示: 在 “供选课程 ”列表框 (名为 Listl)中选择某个课程后,再单击 “, ”按钮 (名称为 cmdSelect),就能将该课程复制到 “所选课程 ”列表框 (名称为 List2)中 (但要注意不要出现重复项 ):如果单击 “ ”按钮 (名称为 cmdSelAll),就能将全部供选课程名复制到列表框 List2中 (注意应先删除 List2中的已
13、选项 );如果在 “所选课程 ”列表框中选中某个课程,再单击 “ ”按钮 (名称为 emdDelete),就会从 List2中删除该课程 (未选课程时应不做处理 );如果单击 “ ”按钮 (名称为 cmdDelAll),就会从 List2中删除所有已选课程。 Vsual Basic 程序代码 Private Sub CmdSelect_Cliek() For i = O To List2.ListCount - 1 If Listl.Text = List2.List(i) Then Exit Sub 不要重复选择 Next i List2.Addltem (1) 在List2中增添 List
14、1中所选的项 End Sub Private Sub CrndSelAll_Click() List2.Clear 先删除 List2中的已有项 For i = 0 To (2) 对 List1中所有各项做循环处理 List2.Addltem (3) 将该项增添到 List2中 Next i End Sub Private Sub CmdDelete_Cliek() If List2.Listlndex = O Then 如果 List2中 有选中的项 , List2.Removeltem (4) 则删除所选的项 End If End Sub Private Sub CmdDelAll_Cli
15、ek() (5) End Sub 8 阅读以下应用说明以及用 Visual Basic开发过程中进行的属性设置和所编写的程序代码。 应用说明 启动某应用程序后,其运行窗口左边会出现两只蝴蝶,下边有 “启动 ”和 “停止 ”两个按钮。单击 “启动 ”按钮后,伴随 “两只蝴蝶 ”音乐,两只蝴蝶会分别沿两条互绞的曲线,从左至右翩翩飞行 (见下图 ),而且飞出窗口右边后又会再从 窗口左边飞入。单击 “停止 ”按钮时,两只蝴蝶停止飞行,回到初始状态,音乐也同时停止。再单击 “启动 ”按钮时,蝴蝶重新开始伴音飞行。在开发该应用时,两只蝴蝶用两个图像框来表示,分别命名为 Imagel和 Image2,其 P
16、icture属性分别设置为各个蝴蝶的图像文件名,其 stretch属性都应设置为 (1) ,使图像能自动改变大小以适应图像框。再在窗体中建立 “启动 ”按钮 (名为 CmdStart)和 “停止 ”按钮 (名为 CmdStop)。 蝴蝶所飞行的路线分别用正弦和余弦曲线描述。为此,首先需要用 Scal方法对窗体定义坐 标系统。设左上角坐标为 (0,0),右下角坐标为 (20, 6)。蝴蝶 1的飞行曲线设为: y1=2+sinx,蝴蝶 2的飞行曲线设为: y2=2+cosx。蝴蝶飞行的位置坐标 (x, y)确定了蝴蝶图像框的位置 (Left属性值和 Top属性值 )。 设置一个定时器 (名为tim
17、erl),其定时时间间隔为 0.1秒,所以其 Interval属性值应设置为 100。每隔 0.1秒需要对两个图像框的位置进行一次调整。初始时,该定时器的 Enabled属性应设为 False(关闭状态 )。 为使该应用程序运行时能播放声音文件,在开发时应利用菜单 “工 程 部件 ”,选择加载组件 “Microsoft Multimedia Control 6.0”,并在窗体中设置多媒体控件 (设命名为 MMC)。由于不需要用户控制,其 Visible属性可设置为False(不可见 )。右击该控件,可选择该控件中各按钮的属性,应注意选择 “播放 ”有效、 “停止 ”有效。 “两只蝴蝶 ”的音乐
18、文件应提前准备好,并通过某种音频处理程序将其转换成 WAV格式,存放在开发该应用的当前目录中。 Dim (2) 声明全局变量 Private Sub Form_Load() Scale(0, 0)-(20, 6) 定义窗体的坐标系统 End Sub Private Sub CmdStart_Click() x=0 MMC.DevkeType=WaveAudio 设置多媒体设备类型 MMC.FileName=两只蝴蝶 .wav 确定声音文件名 MMC Cornmand=Open 打开多媒体设备 MMC Command=P1ay 启动声音的播放 Timer1.Enabled=True 打开定时器
19、End Sub Private Sub Timer1_Timer() Ifx 20 Thenx=x-20 蝴蝶飞到右边界后再回到左边界 Image1.Left=x 动态调整蝴蝶框的位置 Imagel.Top= (3) Image2.Len=x lmage2.Top= (4) x=x+0.1 确定蝴蝶下一步飞行位置 End Sub Private Sub CmdStop_Click() (5) Image1.Left=0 蝴蝶位置初始化 Image1 Top=2 Image2 Left=0 Imagc2.Top=3 MMlC.Command=Stop 停止播放 MMC Command=Ciosc
20、 关闭多媒体设备 End Sub 9 阅读以下说明和 C+代码。 说明 已知类 SubClass的 getSum方法返回其父类成员与类 SubClass成员 j的和,类 SuperClass中的 getSum为纯虚拟函数。程序中的第 23行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,分析程序运行到第 15行且尚未执行第 15行的语句时成员变量 j的值,最后给出程序运行后的输出结果。 C+代码 10 阅读以下说明和 Java代码。 说明 已知类 SubClass的 getSum方法返回其父类成员 i与类 SubClass成员 i的和,类 SuperClass中的 getSu
21、m为抽象函数,程序中的第 14行有错误,请修改该错误并给出修改后的完整结果,然后完善程序中的空缺,当程序运行到第 22行且尚未执行第 22行语句时成员变量 i的值,最后给出程序运行后的输出结果。 Java代码 2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷答案与解析 1 【正确答案】 【试题解析】 信息处理过程中经常需要将图片点阵或汉字点阵做旋转处理。这种方法可 以简化为对 n*n矩阵的旋转处理。其中, n应该是一个变量,运行时由该程序模块外部导入具体的值。编程技术的一个基本要点就是对通用的情况找出规律,再按规律进行处理。 试题中给出了 “按顺时针方向旋转 90”的例子
22、。在这种场合,用案例说明比叙述定义更为简单。人们也不难在案例的基础上推广理解。 对于问题 1,人们不难获得另一个案例: 对于问题2,根据按顺时针方向旋转 90保持矩阵不变,可以逐步推断出一些元素的值: 对于问题 3,矩阵A按顺时针方向旋转 90得到矩阵 B,矩阵 B按顺时针方向旋转 90得到矩阵 C。 矩阵 A的 第 1行复制到矩阵 B的第 n列。 矩阵 A的第 2行复制到矩阵 B的第 n-1列。 矩阵 A的第 3行复制到矩阵 B的第 n-2列。 按照上述规律,矩阵 A的第 i行应复制到矩阵 B的第 n-i+1列。 A(i,j)是矩阵 A的第 i行第 j列的元素,它应复制到矩阵 B的第 n-i
23、+1列中,第 j行元素。即 A(i,j)B(j , n-i+1)。 矩阵 B的第 1行复制到矩阵 C的第 n列。 矩阵 B的第 2行复制到矩阵 C的第 n-1列。 按照上述规律,矩阵 B的第 j行应复制到矩阵 C的第 n-j+1列。 B(j, n-i+1)是矩阵 B的第 j行第 n-i+1列的元素,它应复 制到矩阵 C的第 n-j+1列中,第 n-i+l行元素。即B(j,n-i+1)C(n -i+l, n-j+1)。 反之,矩阵 B的第 1列来自矩阵 A的第 n行。 矩阵B的第 2列来自矩阵 A的第 n-1行。 按照上述规律,矩阵 B的第 j列来自矩阵 A的第 n-j+1行。 B(i,j)是矩
24、阵 B的第 j列中第 i行元素,它来自矩阵 A的第 n-j+1行中第 i列的元素,即 B(i,j)A(n -j+1, i)。 另一种更理性的方法是:在导出按顺时针方向旋转 90的变换 A(i,j)B(j,n -i+1) 后,就能通过推导再导出其他多次变换。可以将上述 变换写成: A(x,y)B(u,v) 从而, B(j,n-i+1)可以直接变换到 C(n-i+l, n-j+1)。而且,可以直接导出 A(n-j+1),i)B(i,j) 。 2 【正确答案】 3 【正确答案】 (1)B(j,n-i+1),或矩阵 B的第 j行第 n-i+1列 (2)C(n-i+l, n-j+1),或矩阵 C的第 n
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
2000 积分 0人已下载
下载 | 加入VIP,交流精品资源 |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 试卷 2006 上半年 软件 水平 考试 初级 程序员 下午 应用技术 试题 答案 解析 DOC

链接地址:http://www.mydoc123.com/p-492585.html