2009上半年程序员考试真题及答案-下午卷.docVIP

  • 5
  • 0
  • 约6.73千字
  • 约 16页
  • 2021-08-24 发布于北京
  • 举报

2009上半年程序员考试真题及答案-下午卷.doc

2009上半年程序员考试真题及答案-下午卷 试题一 设x位于区间(0, 1),该流程图的算法要点是逐步累积计算每项的值(作为 T),再逐步累加T值得到所需的结果S。当T值小于10-5时,结束计算。 【流程图】 (1) S (2) x/n (3) T0.00001 (4) S+T (5) n+1—n 本题属于简单的数值计算应用。 人们经常需要近似计算初等函数的值。在计算机内部,近似计算初等函数的值最常用的方法就是将初等函数按幂级数展开,再计算前若干项的和,直到计算误差满足要求为止。 在设计算法时应考虑,对于自变量的大致范围,如何展开级数,使级数收敛的速度比较快,在计算过程中,怎样估计计算的误差是否己经满足要求。 由于初等函数在计算机中需要频繁使用,因此设计髙效率的算法非常重要。这种精益求精的设计是全世界许多专家己经反复探索并实现了的。 对于一般程序员来说,只要求基本的、正确的算法设计,并实现编程就可以了。 本题中,为了计算指数函数e x的值,已经给出了基本的算法,以及计算过程中控制误差终止计算的方法。本题主要的重点是如何设计计算流程,实现级数前若干项的求和,以及判断终止计算的条件。 级数求和通常采用逐项累加的方法。设S为累加的结果,T为动态的项值,那么,S+T—S就能完成各项的累加。 由于本题中T=x n/n!,如果每次都直接计算该项的值,则计算量会很大。这种项的特殊性表明,后一项与前一项有简单的关充分利用前项的计算结果则会大大减少计算量。这是程序员需要掌握的基本技巧。 本题的流程图中,一开始先输入自变量X,接着对一些变量赋初值。变量n与T需要赋初值,对变量S也应赋初值。级数项号n的初值为1,逐次进行累积的T也应有初值1,逐次进行累加的S则应有初值0或级数第1项的值1。从随后的流程看,S应有初值1,本题中(1)处应填S。 项值T的累积公式应是T,所以本题中(2)处应填x/n。 流程图中(3)处为判断计算过程结束的条件,按照题中的要求,当T10-5时计算过程结束,因此,(3)处应填T0.00001。 流程图中(4)处需要累加S,实现S+T---S,因此,(4)处应填S+T。 流程图中(5)处应对级数的项号n进行自增,因此,(5)处应填n+1—n。 试题二 【说明】 C语言常用整型(int)或长整型(long)来说明需要处理的整数,在一般情况下可以满足表示及运算要求,而在某些情况下,需要表示及运算的整数比较大,即使采用更长的整型(例如,longlong类型,某些C系统会提供)也无法正确表示,此时可用一维数组来表示一个整数。 假设下面要处理的大整数均为正数,将其从低位到高位每4位一组进行分组(最后—组可能不足4位),每组作为1个整数存入数组。例如,大整数2543698845679015847 在数组A中的表示如下(特别引入-1表示分组结束): 在上述表示机制下,函数add_large+mimbert(A、B、C)将保存在一维整型数组A和B中的两个大整数进行相加,结果(和数)保存在一维整型数组C中。 【问题1】 【C函数】 (1) 0 (2) A[i]+B[i] + cf,或其等价形式 (3) t/ 10000,或(A[i]+B[i] + cf)/10000,或其等价形式 (4) A[i]=-1,或B[i]-1,或其等价形式 (5) C[i],或其等价形式 本题考査C程序设计基本能力。 用整型数组表示大整数时,一个数组元素可以表示整数的一位,也可以表示多位,为提高存储空间的利用率并提高运算速度,本题中采用一个数组元素表示4位的整数。 在这种表示方式下进行两个大整数的相加运算时,主要考虑进位的处理。 题目中用变量cf来表示进位情况,显然,开始相加前尚未产生进位,所以cf的初始值为0,因此空(1)处应填入0。 由于相加时需要对齐,并且根据程序中c[i] = t % 10000对t的使用,空(2)处应填入A[i]+B[i] + cf。该运算同时产生下一步运算需要使用的进位值cf,因此空(3)处应填入 t /10000 或(A[i]+ B[i] + cf)/10000o 参与相加运算的两个整数位数不一定相同,因此,尚有剩余的那个整数的其余位数应带进位记录下来,程序中设置的临时指针p指向保存这个整数的数组。根据题中设置的标志若数组A表示的整数已经结束,则满足A[i]=-1,否则 满足B[i]=-1,因此考查if语句的逻辑后,空(4)处应填入A[i]=-1,或B[i]-1。 另外,当两个整数相加后产生进位,此时可能需要将此进位结果作为和数来记录,以9999 9999 4567 与5555相加为例说明,和数1 0000 0000 0122 比9999 9999 4567 还要多1位,并且在数组中表示时的分组数也多1个。if语句if

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档