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

  • 4
  • 0
  • 约8.7千字
  • 约 21页
  • 2021-08-24 发布于北京
  • 举报

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

2011下半年程序员考试真题及答案-下午卷 试题一 【说明】 以下流程图用于检查数组A[1:n]中的@素是否为自然数1?n的一个排列(含有1?n各数)。若是,则输出OK,否则输出所缺的自然数及其个数m。 为检查A[1:n]中是否含有k,只要判断P(k)=(A(l)-k)*(A(2)-k)*...*(A(n)-k)是否等于0即可。 【流程图】 阅读说明和流程图,填补流程图中的空缺(1)?(5)。 (1) 0 (2) 1 (3) P*(A(i)-k) (4) P=0 (5) m+1 本题考查算法设计和描述的基本能力。 从流程图看出,首先需要对m赋初值,然后对k=l,2,...,n循环,检查数组A中是否含k。为此,在该循环中,需要嵌套内循环来计算P(k)。然后判断计算结果P的值是否等于0,来决定数组A中是否含k,并采取相应的动作。 为了对i循环计算累乘的P(k),需要先在P中送初值1。因此(2)处应填1,并在(3 )处填写P*(A(i)-k)进行累乘。 内循环结束后,(4)处应判断P=0是否成立。P=0表示数组A中含k,否则表示数组A中缺k。因此,(4)处应填写P=0。 如果数组A中缺k,则缺数计数m应增1。因此,(5)处应填m+1,而m的初值应送0,从而(1)处应填0。 k循环结束后,应根据m的值决定输出结果。m=0表示数组A中包含全部自然数1至n,即数组A的元素就是1?n的一个排列;m不等于0表示数组A中短缺其中m个自然数。 . 本题的算法可应用于判断标准数独的答案是否正确。例如,9阶(9*9)标准数独解答所得的结果应在每行、每列、每个3*3宫内都包含1?9,并不重复,即都是1?9的一个排列。靠人工检查稍有麻烦,尤其是16阶标准数独解答结果的人工检查更令人烦恼,这个算法则提供了一种处理思路。 试题二 【说明】 下面是一个待修改的C程序,其应该完成的功能是:对于输入的一个整数mim,计算其位数k,然后将其各位数字按逆序转换为字符串保存并输出。若mim为负整数,则输出字符串应有前缀“-”。例如,将该程序修改正确后,运行时若输入“14251”,则输出 “15241”;若输入 “-6319870”,则输出 “-0789136”。 下面给出的C程序代码中有五处错误,请指出错误代码所在的行号并给出修改正确后的完整代码行。 【C程序代码】 阅读说明和C程序代码,解答问题。 本题考査C程序员査找错误和排除错误的基本能力。 程序中的错误主要分为语法错误和语义错误两类。 语法错误是指语言结构上的错误,例如,是否引用了未定义的变量,表达式中缺少操作数等等。语义错误是指语言结构含义不正确或程序的运算逻辑有错误,这类错误可能在编译阶段发现(静态语义),也可能推迟到运行阶段才暴露。例如,表达式中运算符 号不能处理所引用的运算对象,无穷循环等。 考生需要非常熟悉C语言的基本语法,从而通过走查源代码来发现语法错误。查找语义错误则需要充分理解程序的逻辑,也就是整个程序的结构和每条语句所起的作用。 前2行为预处理命令行,对于最常使用的include命令,考生应该非常熟悉,以便检查程序中对常用函数的调用是否正确。本程序中前两行无错误。 显然,接下来的四行分别为main函数的首部,函数体的开始符号“{”、变量定义语句和空白行,这里也没有错误。 第7行为格式化输入函数scanf的调用语句,这是比较容易出错的地方,常见的错误是格式控制串与输入表列中的变量不匹配,或者是丢失变量前的取地址运算符号“”,该行的错误即在这里。 第8行至第12行用于计算所输入整数的位数并用k来计算(记录),这几行代码应作为一个整体来理解。程序中首先将num的值备份至t,并对k赋值,然后通过循环对t进行辗转除以10的运算,使t每次都丢掉其个位数,即t的位数逐渐减少(t每减少1位,k就增加1),直到t的值为0时为止,此时k的值即为mim的位数。第9行的循环条件错误导致了无穷循环(t等于0时也继续循环),由于t的初值也可能是负数,因此应将其中的“t=0”改为“t!=0”。 第14行没有错误。 第15行的错误很明显,也很常见,即将“=”误用为“==”,从而改变其所在语句的语义,其中的“pstr=0”则将pstr的值重置为0,使pstr所记录的字符串存储空间首地址信息丢失,此后针对pstr[]的运算都会出错。 第17行至第21行用于处理num为负数时输出字符串应包含前缀-的要求,这几行没有错误。 第22行至第25行用于从mum得到其逆置的数字字符串,其错误在第23行,属于逻辑错误。num%10的运算结果为mim的个位数字,而pstr[]中要存储的是数字字符(即ASCII值),因此应将num%10的运算结果加上字符‘0’(或字符‘0,的ASCII码值48)。 第26行用于设置字符串结束标志

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档