1、程序员下午试题2006上半年答案真题 120填空题第1题:参考答案:详细解答:第2题:参考答案:详细解答:第3题:参考答案:(1)B(j,n-i+1),或矩阵B的第j行第n-i+1列 (2)C(n-i+l,n-j+1),或矩阵C的第n-i+1行第n-j+1列 (3)A(n-j+1,i)详细解答:第4题:参考答案:num/100000,或num9999,或num=10000,或其等价形式 (2)result=0 (3)m/10,或(m-d)/10,或其等价形式 (4)d*10 +d,或其等价形式 (5)mul*100,或其等价形式详细解答:本题考查简单运算的程序实现。对于这类题目,应将题干部分描
2、述的运算过程理解透彻。 函数change(int num)的功能是对四位以内(含四位)的十进制正整数num的每一位重复一次。显然,num的位数大于4的直接表示是num9999或nam10000,或 num/100000。 从题干部分给出的变换公式看,最后的结果是累加获得的,而且代码中用于保存累加结果的变量是result,该变量的初值应为0。所以空(2)处应填入“result=O”。分析对 5234的变化过程可知,首先取出个位,其次是十位上的数字,以此类推,并且将每次取出的数字d乘以10再加上该数字d,因此空(4)处应填入“d*10 +d” 。显然mul的值以100进行累乘,因此空(5)处填入“
3、mul*100。由于跳出循环的条件为“m=0”,所以结合“d=m%10”可知,空(3)处应填入“m/10”。第5题:参考答案:InitStack(&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
4、(STACK*s,char para_ch)的功能是删除栈*s中与para_ch之值相等且最接近栈顶的元素(字符)。因此,利用栈的基本操作,先将栈*s中所有比para ch之值更接近栈顶的元素暂时存放在临时工作栈s_bak中,使得与para_ch之值相等的元素成为栈顶元素,此时执行出栈操作,即从栈中删除与para_ch之值相等的元素,最后再将s bak中的元素依次存回栈*s。 从初始化栈的函数原型“void lnitStack(STACK*S)”可知,形参是一个指针变量,那么实参应该是对STACK类型的变量取地址,因此空(1)处应填入“initStack(&s bak)”。 根据出栈操作的函数
5、原型“void Pop(STACK*S)”,出栈时栈中元素数目减1但调用环境不能获得栈顶元素,因此需要首先调用函数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)”。同时,通过T
6、op和Pop操作从临时工作栈s bak中取出元素,再用Push操作将该元素压入栈*s中,来实现将暂存于临时工作栈s bak中的元素存回栈*s,因此,空(5)填入“Pop(&s_bak)”。第6题:参考答案:acc_qty=0 (2)P numi*dataiPrice,或其等价形式 (3)acc_qty-acc_reqi,或其等价形式 (4)tag,或tag=1,或tag!=0,或其等价形式 (5)cost_Produce+cost_Keepmincost详细解答:本题考查用C程序求解具有实际应用背景的问题。 对这类问题,一般在描述问题的背景时,会详细说明程序应实现的功能,并通过对示例数据的求解
7、给出程序中对数据的处理过程。阅读这类程序时,应准确理解程序中定义的数据类型及其变量的作用,这是完善程序中空缺位置的关键所在。 从题目中可知,结构体数组data是全局变量,分别用分量Qty_req、Price和 Keeping_fee保存每天的零件需求量、零件的单价及保管费用,也需要注意数组元素data0不使用。 由于每天生产的零件还可以保存起来以后再使用,因此考查零件的生产数量是否满足需求时,需要从累计数量考查。为方便计算,程序中提前计算出累计的零件需求量并按天保存在数组acc_req口中。应注意第i天生产的零件数存在P_numi中。 借助于注释可知i是循环控制变量,同时起计算天数时的序号作用
8、。由代码“acc qty +=P_numi;”及注释可知变量acc_qty保存累计的零件生产量,因此之前必须将acc_qty初始值设为0,因此空(1)处填入“acc qty=0”。由于cost Produce保存的是到第i天时当前生产计划的总零件价格,因此应计算出第i天生产的零件总价格,所以空(2)处填入“P humi。dataiPrice”。显然,到第i天时累计生产的零件数减去累计的需求数就是应保存的零件,所以累计的零件保管费用为“cost_Keep+=(acc_qty-acc_reqi* dataiKeeping_fee;”,即空(3)处填入“ace_qty-ace_reqi”。 另外,从
9、变量tag所起的作用看,它用于标志生产计划是否能满足要求。根据以下代码, if(acc_qtyacc_reqi)/*当前生产计划不能满足需求*/ tag=1; break; /*if*/ 可知当前生产计划不能满足需求时,tag等于1。很明显,空(4)处应填入“tag=1。零件的成本包括生产价格和保管费用两部分,所以空(5)处填入“cost Produce+ cost+Keepmincost”。第7题:参考答案:Listl.Text (2) Listl.ListCount- (3) Listl.List(i) (4) List2.Lisfindex (5) List2.Clear详细解答:本题涉
10、及常用的列表框技术。 列表框常用的属性如下: ListCount 列表框内的数据项个数 List(o),List(1),. 列表框中从上到下各个数据项内容 Text 列表框中当前选中的数据项内容 Listlndex 列表框中当前选中的数据项的序号 列表框常用的方法如下: AddItem 列表框尾部增加一个数据项(参数给出数据项内容) RemoveItem 列表框中删除指定的数据项(参数给出待删的数据项序号) Clear 删除列表框中的全部数据项 本题中有两个列表框List1和List2,以及四个按钮。 按钮“”的功能是将列表框List1中选中的一个数据项复制到列表框List2的尾部。 List
11、1中当前所选的数据项内容是List1.Text。为避免重复,在复制前,应先判断它是否已经位于List2中。List2中,已有的数据项个数为List2.ListCount。各个数据项内容为: List2List(O),List2List(1),因此可以用循环语句来实现这种比较。如果发现重复,则退出该过程(不再复制)。将Listl.Text复制到List2的尾部,可以用如下语句实现: List2Addltem Listl,Text 因此,(1)处应填写Listl.Text。 如果List1中没有选中任何数据项,则上述复制语句自动作为空语句执行。 注意,如果不修改列表框属性“MultiSelect”
12、的默认值(O),用户在列表框中就不能同时选择多个数据项。 按钮“”的功能是将List1中的全部数据项复制到List2中去。为避免重复,在复制前,应全部删除List2中的所有数据项。将List1中的逐个数据项:List1.List(O), ListlList(1),逐个复制到List2中,可以用循环语句来实现。List1中的数据项个数为List1ListCount,因此,循环次数就是List1ListCount。循环变量i从0开始执行循环,直到Listl.ListCount-1。因此(2)处应填写ListlListCount-1。循环体内执行数据项复制,将ListlList(i)增添到List2
13、的尾部: List2Addltem Listl.List(i) 因此,(3)处应填写Listl.List(i)。 按钮“”的功能是将List2中当前选中的数据项删除。由于删除数据项用Removeltem方法实现,其参数为选中数据项的序号值,所以,应该用语句: List2.Removeltem List2.Listlndex 来实现。因此(4)处应填写List2.Listlndex。 如果List2中没有选择任何数据项(此时List2Listlndex=1),则上述语句会出现运 行错误。为避免这种情况发生,可以将上述语句限制在List2Listlndex=O的条件下执行。 按钮“”的功能是删除L
14、ist2中已经有的全部数据项,因此可以采用语句: List2.Clear 来实现。因此,(5)处应填写List2.Clear。第8题:参考答案:this-j (2)SuperClass 错误更正结果:SuperClass*s=new SubClass(-3); 变量i的值:0 运行结果:-3,2详细解答:本题考查的是面向对象程序设计语言C+。 考查的主要知识点为C+程序设计语言中类成员变量的初始化、父类成员方法的调用、对象的构造等。第一空要求用用参数j的值更新数据成员,由于成员变量名也为i因此需要明确地指出需要更新的变量j为类中的成员变量,可以在前面加上一个明确的前缀this来表示,因此(1)
15、处应填写this-j:(2)处要求调用父类的成员方法getValue(),为了和子类中的getValue()相区别,需要加上域前缀,因此(2)处应该填写SuperClass,表明该函数属于类SuperClass;在程序的第23行,由于SuperClass s表明已经定义了一个对象,因此,后面不应该使用new再次分配一个对象,但是后面的程序代码将s作为一个对象指针使用,因此需要将s定义为一个指针,因此更改后结果应为:SuperClass*s= new SubClass(-3);当程序运行到第15行但是还没有执行15行的语句时,成员变量i的值应为构造函数初始化列表中指定的j的初始化值,本题目为0:
16、最后程序的输出为-3和 2,-3为子类中成员变量j的值,而2表示父类中i的值和子类中i的值的和。第9题:参考答案:True (2)x As Single (3)2+sin(x) (4)2+cos(x) (5)Timer1.Enabled=False详细解答:第10题:参考答案:this (2)super 错误更正结果:public abstract int getSum(); 变量i的值:5 运行结果: -3 2详细解答:本题考查的是Java程序设计。 考查的主要知识点为Java程序设计语言中类成员变量的初始化、父类成员方法的调用、对象的构造等。(1)处要求用参数i的值更新数据成员,由于成员变
17、量名也为j因此需要明确地指出需要更新的变量,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