程序员历年答案分析2005---2011年全部详细答案(10)
时间:2025-04-19
时间:2025-04-19
的计算,也就是0与1进行异或运算,所以(5)空的值为1.
●试题二
【试题答案】(1)m!=n (2)return m 或return n (3)i<8 (4)k*10 (5)p++或p=p+1
【考查知识点】本题考查的是算法设计及C语言程序的编写。
【解析】函数2.1通过m和n连续相减,获得两者的最大公约数。所以,(1)空要填循环终
止条件,即连续相减到m=n时,得到最大公约数,所以此空应填“m!=n”。(2)空要填函数
返回值,即最大公约数,此时m=n时,所以此空填return m或return n均可。
函数2.2要完成逐个字符的十进制整数转化,其中变量i用来保存字符的个数;变量k是十
进制整数的中间值和最终结果,*p是一个初始只想字符串首地址的指针。该函数通过一个
while循环来完成。结束的条件有两个:一是到达字符串的结尾符“0”;二是超出题中要求
8位时,停止循环,所以(3)空应填“i<8”。由于是逐个字符的处理,故(5)空应填“p++”。
最后让我们来看(4)空,在生成十进制整数过程中,经过分析,我们发现,先生成的十进
制数字放在高位上,后生成的放在低位上,故每次都需要将前一个数字左移一位,即需要将
该位数字乘以10,所以(4)空应填k*10。
●试题三
【试题答案】(1)p=root->rch(2)pre=root(3)p->lch(4)pre(5)pre->lch
【考查知识点】本题考查的是数据结构二叉树及其程序编写。
【解析】由题意的,如果root指向二叉树的根结点,那么就找出该结点的右子树上的“最
左下”节点*p;经分析发现,root指向的就是根节点,接着判断root指向的是否为空,然
后要找到根结点的右子树,所以(1)空填“p=root->rch”。
然后继续判断根结点的右子树是否为空,如果是返回NULL,反之对指针pre赋初值,
他将保存指向p指针的父节点的指针,完成“从树中删除以*p为根的子树”这一操作。显
然,此时pre的初值为root,即(2)空填“pre=root”。
接下来要做的就是寻找子树,直到左子树为空停止,如不为空,则p指向的结点作为父
节点,即pre=p,p重新指向左子树,所以(3)空填“p->lch”。
寻找“最左下”节点过程结束后,进行删除工作,即如果root右子树根处无左子树,
那么它本身就是“最左下”点,此时需要对它进行删除,也就是说pre仍指向root,故(4)
空填“pre”。
最后让我们来看(5)空,当右子树根有左子树时,要将“最左下”节点为根的子树删
除,即只需要将“最左下”节点的父节点pre的左子树lch指向NULL即可,所以(5)空应
填“pre->lch”。
●试题四
【试题答案】(1)j=0(2)k<R(3)i+t(4)c==R(5)j++
【考查知识点】本题考查的是经典算法即程序编写。
【解析】根据题干的叙述,该函数要完成的功能是:N*N的座位中,在部分座位已被出售的
前提下,找出一个R*R的空座位的方阵。找到则函数返回值为1,并计算该方针左上角元素
的行号和列号;反之,函数返回值为0。
该函数由两个循环结构来实现。对于外层for循环,完成排查找,它的功能是对第0
排到第N-R+1排进行查找,其中,变量N为排数,变量R为要查找的方阵的排数,很明
显,在N-R+1排之后是不可能找到R*R的方阵的。内层while循环,完成列查找,它
的功能是从第0列到N-R+1列进行查找,所以(1)空应该给循环变量j赋初值0,即
“j=0”。
Fro(k=0;__(2)__&&a[i][j+k]==0;k++);/*查找第2排连续的R个空座位*/
接下来的for循环,它的功能是在第i排查找是否存在连续的R座位,因此,循环继