[计算机类试卷]2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc

上传人:testyield361 文档编号:492585 上传时间:2018-11-30 格式:DOC 页数:17 大小:339KB
下载 相关 举报
[计算机类试卷]2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc_第1页
第1页 / 共17页
[计算机类试卷]2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc_第2页
第2页 / 共17页
[计算机类试卷]2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc_第3页
第3页 / 共17页
[计算机类试卷]2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc_第4页
第4页 / 共17页
[计算机类试卷]2006年上半年软件水平考试(初级)程序员下午(应用技术)试题真题试卷及答案与解析.doc_第5页
第5页 / 共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

25、-i+1行第 n-j+1列 (3)A(n-j+1, i) 4 【正确答案】 (1)num/10000 0,或 num 9999,或 num =10000,或其等价形式 (2)result=0 (3)m/10,或 (m-d)/10,或其等价形式 (4)d*10 +d,或其等价形式 (5)mul*100,或其等价形式 【试题解析】 本题考查简单运算的程序实现。对于这类题目,应将题干部分描述的运算过程理解透彻。 函数 change(int num)的功能是对四位以内 (含四位 )的十进制正整数 num的每一位重复一次。显然, num的位数大于 4的直接表示是 num 9999或 nam 10000,

26、或 num/10000 0。 从题干部分给出的变换公式看,最后的结果是累加获得的,而且代码中用于保 存累加结果的变量是 result,该变量的初值应为 0。所以空 (2)处应填入 “result=O”。分析对 5234的变化过程可知,首先取出个位,其次是十位上的数字,以此类推,并且将每次取出的数字 d乘以 10再加上该数字 d,因此空 (4)处应填入 “d*10 +d” 。显然 mul的值以 100进行累乘,因此空 (5)处填入 “mul*100“。由于跳出循环的条件为 “m =0”,所以结合 “d=m%10”可知,空 (3)处应填入 “m/10”。 5 【正确答案】 (1)InitStack

27、(&s_bak) (2)Top(*s) (3)Push(&s_bak,ch) (4)!IsEmpty(s_bak),或 IsEmpty(s_ak)=FALSE (5)Pop(&s_bak) 【试题解析】 本题考查的是 C语言的函数调用和参数传递问题。 C语言采用传值调用方式,即将实际参数的值传递给形式参数,因此,实际参数一般是与形式参数类型相同的变量或表达式。但是,若形式参数为指针,则调用语句中的实参应将一个变量的地址传递给形参。 函数 bool Del_elem(STACK*s,char para_ch)的功能是删除栈 *s中与 para_ch之值相等且最接近栈顶的元素 (字符 )。因此,利

28、用栈的基本操作,先将栈 *s中所有比para ch之值更接近栈顶的元素暂时存放在临时工作栈 s_bak中,使得与 para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与 para_ch之值相等的元素,最后再将 s bak中的元素依次存回栈 *s。 从初始化栈的函数原型 “void lnitStack(STACK*S)”可知,形参是一个指针变量,那么实参应该是对 STACK类型的变量取地址,因此空 (1)处应填入 “initStack(&s bak)”。 根据出栈操作的函数原型 “void Pop(STACK*S)”,出栈时栈中元素数目减 1但调用环境不能获得栈顶元素,因此需

29、要首先调用函数 Top()获取栈顶元素的值,然后调用 Pop()从栈中删除栈顶元素。因此空 (2)应填入 “Top(*s)”。临时工作栈需要保存从栈 *s弹出的元素,因此,参考压栈操作的函数原型 “void Push(STACK*S,chare)”,空 (3)应填入 “Push(&s bak,ch)”。 从栈中取元素时,应首先判断是否为空栈,这是使用栈结构的一项基本常识。参考函数原型 “bool IsEmpty(STACK S)”和 bool类型的定义,空 (4)应填入“!IsEmpty(s_bak)”。同时,通过 Top和 Pop操作从临时工作栈 s bak中取出元素,再用 Push操作将该

30、元素压入栈 *s中,来实现将暂存于临时工作栈 s bak中的元素存回栈 *s,因此,空 (5)填入 “Pop(&s_bak)”。 6 【正确答案】 (1)acc_qty=0 (2)P numi*datai Price,或其等价形式 (3)acc_qty-acc_reqi,或其等价形式 (4)tag,或 tag=1,或 tag!=0,或其等价形式 (5)cost_Produce+cost_Keep mincost 【试题解析】 本题考查用 C程序求解具有实际应用背景的问题。 对这类问题,一般在描述问题的背景时,会详细说明程序应实现的功能,并通过对示例数据的求解给出程序中对数据的处理过程。阅读这类

31、程序时,应准确理解程序中定义的数据类型及其变量的作用,这是完善程序中空缺位置的关键所在。 从题目中可知,结构体数组 data是全局变量,分别用分量 Qty_req、 Price和 Keeping_fee保存每 天的零件需求量、零件的单价及保管费用,也需要注意数组元素 data0不使用。 由于每天生产的零件还可以保存起来以后再使用,因此考查零件的生产数量是否满足需求时,需要从累计数量考查。为方便计算,程序中提前计算出累计的零件需求量并按天保存在数组 acc_req口中。应注意第 i天生产的零件数存在 P_numi中。 借助于注释可知 i是循环控制变量,同时起计算天数时的序号作用。由代码 “acc

32、 qty +=P_numi; ”及注释可知变量 acc_qty保存累计的零件生产量,因此之前必须将 acc_qty初 始值设为 0,因此空 (1)处填入 “acc qty=0”。由于 cost Produce保存的是到第 i天时当前生产计划的总零件价格,因此应计算出第 i天生产的零件总价格,所以空 (2)处填入 “P humi。 datai Price”。显然,到第 i天时累计生产的零件数减去累计的需求数就是应保存的零件,所以累计的零件保管费用为“cost_Keep+=(acc_qty-acc_reqi* datai Keeping_fee; ”,即空 (3)处填入“ace_qty-ace_r

33、eqi”。 另外,从变量 tag所起的作用看,它用于标志生产计划是否能满足要求。根据以下代码, if(acc_qty acc_reqi)/*当前生产计划不能满足需求 */ tag=1; break; /*if*/ 可知当前生产计划不能满足需求时, tag等于 1。很明显,空 (4)处应填入 “tag=1。零件的成本包括生产价格和保管费用两部分,所以空 (5)处填入 “cost Produce+ cost+Keep mincost”。 7 【正确答案】 (1)Listl.Text (2) Listl.ListCount- (3) Listl.List(i) (4) List2.Lisfindex

34、 (5) List2.Clear 【试题解析】 本题涉及常用的列表框技术。 列表框常用的属性如下: ListCount 列表框内的数据项个数 List(o), List(1),. 列表框中从上到下各个数据项内容 Text 列表框中当前选中的数据项内容 Listlndex 列表框中当前选中的数据项的序号 列表框常用的方法如下: AddItem 列表框尾 部增加一个数据项 (参数给出数据项内容 ) RemoveItem 列表框中删除指定的数据项 (参数给出待删的数据项序号 ) Clear 删除列表框中的全部数据项 本题中有两个列表框 List1和 List2,以及四个按钮。 按钮 “ ”的功能是将

35、列表框 List1中选中的一个数据项复制到列表框 List2的尾部。 List1中当前所选的数据项内容是 List1.Text。为避免重复,在复制前,应先判断它是否已经位于 List2中。 List2中,已有的数据项个数为 List2.ListCount。各个数据项内容为: List2 List(O), List2 List(1), ,因此可以用循环语句来实现这种比较。如果发现重复,则退出该过程 (不再复制 )。将 Listl.Text复制到List2的尾部,可以用如下语句实现: List2 Addltem Listl,Text 因此, (1)处应填写 Listl.Text。 如果 List1

36、中没有选中任何数据项,则上述复制语句自动作为空语句执行。 注意,如果不修改列表框属性 “MultiSelect”的默认值 (O),用户在列表框中就不能同时选择多个 数据项。 按钮 “ ”的功能是将 List1中的全部数据项复制到 List2中去。为避免重复,在复制前,应全部删除 List2中的所有数据项。将 List1中的逐个数据项:List1.List(O), Listl List(1), ,逐个复制到 List2中,可以用循环语句来实现。 List1中的数据项个数为 List1 ListCount,因此,循环次数就是List1 ListCount。循环变量 i从 0开始执行循环,直到 Li

37、stl.ListCount-1。因此 (2)处应填写 Listl ListCount-1。循环 体内执行数据项复制,将 Listl List(i)增添到List2的尾部: List2 Addltem Listl.List(i) 因此, (3)处应填写 Listl.List(i)。 按钮 “ ”的功能是将 List2中当前选中的数据项删除。由于删除数据项用Removeltem方法实现,其参数为选中数据项的序号值,所以,应该用语句: List2.Removeltem List2.Listlndex 来实现。因此 (4)处应填写 List2.Listlndex。 如果 List2中没 有选择任何数据

38、项 (此时 List2 Listlndex=1),则上述语句会出现运 行错误。为避免这种情况发生,可以将上述语句限制在 List2 Listlndex =O的条件下执行。 按钮 “ ”的功能是删除 List2中已经有的全部数据项,因此可以采用语句: List2.Clear 来实现。因此, (5)处应填写 List2.Clear。 8 【正确答案】 (1)True (2)x As Single (3)2+sin(x) (4)2+cos(x) (5)Timer1.Enabled=False 【试题解析】 本题涉及两个技术要点。一是利用图像框在窗体中的动态定位实现简单动画,一是利用多媒体控件播放声音

39、文件。 在窗体中,为了便于实现图像框的定位,一般需要先建立自定义的坐标系统。 在主窗体加载过程 (Form Load)中,采用语句: Seal(0, o)-(20, 6) 就为该窗体设置了自己的坐标系统,左上角坐标为(0, 0),右下角坐标为 (20, 6)。 X轴在屏幕上边,从左至右,从 0到 20。 Y轴在屏幕左边,自上而下,从 0到 6。 在该坐标系统中,曲线 y1=2+sin(x)与曲线 y2=2+cos(x)成为互绞的两条曲线。 对曲线上的每一点 (x, y),它与屏幕左边的距离为 x,与屏幕顶端的距离为 y。因此,蝴蝶 1图像框的位置应按: Image1.Leff=x, Image

40、1 ToDF2+sin(x)进行动态调整;蝴蝶2图像框的位置应按: Image2.Leff=x, Image2 Top=2+cos(x)进行动态调整。 初始时,蝴蝶 1的位置应在: Imagel.Leff=O, Imagel.Top=2;蝴蝶 2的位置应在: Image2.Leff=0, Image2.Top=3。 建立两个图像框时,不仅应注意其初始位置 ,还应注意设置其属性: stretch属性应设置成 True,才能使指定图像经过自动缩放后放在该框内。图像框中显示的图像文件由属性 Picture决定。因此,在准备好两个蝴蝶图像文件后,就应记住其存储的文件名和路径,设置图像框的 Pictur

41、e属性时就可以选择相应的路径和文件名。 由于应用需要每隔 0.1秒调整蝴蝶的位置,因此,开发时应设置一个定时器,默认命名为 Timer1。该定时器的 interval属性 (定时的时间间隔 )应设置成 100(以毫秒为单位 ), Enabled属性应设置成 False(初始时定时器处于关闭状态, 待单击 “启动 ”按钮后再打开 )。定时器在开发时可以在窗体内看到,但在运行时看不到。 为了在应用程序运行中播放声音文件,需要使用VB中的多媒体控件。该控件平时不在工具箱中,应在开发时利用菜单 “工程 -部件 ”,选择加载 “Microsoft Multimedia Control 6.0”后,才会在

42、工具箱中出现。 在窗体中设置了多媒体控件后,首先应按题中的要求,将其名称改为 MMC,并将其Visible属性改为 False,使该控件在运行时不可见 (不需要用户控制 )。一个多媒体控件中包括许多按钮,例如 “播放 ”、 “停止 ”、 “暂 停 ”、 “快进 ”、 “倒带 ”、 “录音 ”等。右击该控件,选择 “属性 ”,在弹出的对话框中,再选择 “控件 ”标签,在其中可以为各个按钮设置其有效性和可视性。按本应用要求,可以设置 “播放 ”和 “停止 ”按钮的有效性,使其余各项都处于不选中状态。 在程序代码中,可以通过设置多媒体控件的属性值来使其发挥作用: 多媒体控件的属性 值 含义 Devi

43、ceTyne WaveAudio 该多媒体设备类型能播放 WAV格式声音 AviVideo 该多媒体设备类型能播放 AVI格式视频 FileName * 指定播放的文件名 (包括路径 ) Command OpeI 打开多媒体设备 Play 播放 Record 录制 Stop 停止播放 Pause 暂停播放或暂停后继续播放 Prev 返回当前播放文件的起点 Close 关闭多媒体设备 该应用的程序代码应包括如下 4个过程: 1)主窗口加载过程,其功能为定义自己的坐标系统。 2)“启动 ”按钮执行的过程,用以设置多媒体设备类型,指定所播放的声音文件名,打开多媒体设备,播放声音文件,设置蝴蝶的初始位

44、置,打开定时器。 3)定时器定时执行的过程,每隔 0.1秒对两个蝴蝶图像框的位置进行一次调整。 两只蝴蝶的位置 (x,y1)和 (x,y2)取决于变量 x。初始时, x=0,位于窗口左边。每隔 0.1秒, x增加 0.1。当 x 20,蝴蝶处于窗体右边之外时,执行 x=x-20,蝴蝶将会出现在窗体左边。 4)“停止 ”按钮执行的过程,其功能是:关闭定时器,两只蝴蝶定位在窗口左边初始位置,停止播放声音文件,关闭多媒体设备。 由于单精度实数变量 x在多个过程中使用,可将其放在各过程之外作为全局变量进行声明。 注意,窗体坐标系统的值、蝴蝶飞行曲线、 x值每步增加的值、定时器的时间间隔等都需要在反复调

45、试的基础上逐步调整得到比较合适的值。 在 VB应用程序中播放指定的音频 (或视频 )文件,这种技术很实用,学员应学会并推广应用。 9 【正确答案】 (1)this- j (2)SuperClass 错误更正结果: SuperClass*s=new SubClass(-3); 变量 i的值: 0 运行结果: -3, 2 【试题解析】 本题考查的是面向对象程序设计语言 C+。 考查的主要知识点为 C+程序设计语言中类成员变量的初始化、父类成员方法的调用、对象的构造等。第一空要求用用参数 j的值更新数据成员,由于成员变量名也为 i因此 需要明确地指出需要更新的变量 j为类中的成员变量,可以在前面加上

46、一个明确的前缀 this来表示,因此 (1)处应填写 this- j: (2)处要求调用父类的成员方法 getValue(),为了和子类中的 getValue()相区别,需要加上域前缀,因此 (2)处应该填写 SuperClass ,表明该函数属于类 SuperClass;在程序的第 23行,由于SuperClass s表明已经定义了一个对象,因此,后面不应该使用 new再次分配一个对象,但是后面的程序代码将 s作为一个对象指针使用,因此需要将 s定义为一个指针,因此更改 后结果应为: SuperClass*s= new SubClass(-3);当程序运行到第15行但是还没有执行 15行的语

47、句时,成员变量 i的值应为构造函数初始化列表中指定的 j的初始化值,本题目为 0:最后程序的输出为 -3和 2, -3为子类中成员变量 j的值,而 2表示父类中 i的值和子类中 i的值的和。 10 【正确答案】 (1)this (2)super 错误更正结果: public abstract int getSum(); 变量 i的值: 5 运行结果: -3 2 【试题解析】 本题考查的是 Java程序设计。 考查的主要知识点为 Java程序设计语言中类成员变量的初始化、父类成员方法的调用、对象的构造等。 (1)处要求用参数 i的值更新数据成员,由于成员变量名也为 j因此需要明确地指出需要更新的

48、变量, j为类中的成员变量,可以在前面加上一个明确的前缀 this来表示,因此 (1)处应填写 this; (2)处要求调用父类的成员方法 getValue(),为了和子类中的 getValue()相区别,需要加上域前缀,因此 (2)处应该填写 Super,表明该函数属于类 SuperClass;在程序的第 14行, getSum函数仅仅是一个抽象函数,它将被 SubClass继承并实现,因此,不能够将其定义为final,凡是定义为 final的方法是不允许被子类重新实现的,因此更改后应该将final关键字去掉;当程序运行到第 22行但是还没有执行 22行的语句时,父类的构造函数已经被调用并执行,所以 i的值应该为 5:最后程序的输出为 -3和 2, -3为子类中成员变量, i的值,而 2表示父类中 i的值和子类中 j的值的和。

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

当前位置:首页 > 考试资料 > 职业资格

copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1