n = (5) ; /*与反序数求和*/
} /*end of while*/
printf ("%id\n",n);
system("pause"); return 0;
}
参考答案
(1) m%10,或其等价表示 (2) k-1-i
(3) !isPalm(n),或 isPalm(n)!=1,或 isPalm(n)= =0 (4) a (5) n+a
[分析]
本题考查 C 程序设计的基本能力。
函数 isPalm(long m)的功能是判断 m 是否为回文数,其方法是先将 m 的各位数字依次取出转换为对应的
数字字符保存在数组 str 中,然后再判断 str 中的字符序列是否对称。代码如下:
while (m>0) { /*从个位数开始逐个取出 m 的各位数字并存入字符数组 str*/
str[k++] = m % 10 + '0';
m=m/10;
}
因此,空(1)处应填入“m%10",将数 m 的个位数字取出。以上 while 循环结束时,k 的值即为 m 取初始
值时的位数。
若需判断 str[0]、str[1]、…、str[k-1]中的 k 个数字字符序列是否对称,则应依次比较 str[0]与 str[k-
1]、str[1]与 str[k-2]、…str[k/2-1]与 str[k2+1]是否相等,若都相等,则是回文数;若其中有一处不等,则
不是回文数。代码如下:
for(i=0; i<k/2; i++)
if ( str[i] !=str[ (2) ] ) return 0;
因此,空(2)处应填入“k-1-i”。
根据题目描述,从最初输入的数开始,直到得到一个回文数时结束,因此对于数 n,调用函数 is
Palm(n),根据返回值确定 n 是否为一个回文数,空(3)处应填入“!isPalm(n)”。
为了求一个数 t 的反序数,可从其个位数字开始,依次取出其各位数字并进行组合。下面以 t=345 举例
说明通过整除取余“%”、整除“/”取出各位数字并组合出 543 的过程。
初始时:a=0 t=345
下一步:345%10=>5 a*10+5=>a=5 t/10=345/10=>t=34
下一步:34%10=>4 a*10+4=>a=54 t/10=34/10=>t=3
下一步:3%10=>3 a*10+3=>a=543 t/10=3/10=>t=0
因此,可知空(4)处应填入“a”。
最后数 n 与其反序数 a 相加得到新的数,继续产生回文数的过程。空(5)处应填入“n+a”。
试题三
阅读以下说明和 C 函数,将应填入 (n) 处的字句写在对应栏内。
【说明】
已知某二叉树的非叶子结点都有两个孩子结点,现将该二叉树存储在结构数组 Ht 中。结点结构及数组
Ht 的定义如下:
#define MAXLEAFNUM 30
struct node{
char ch; /*当前结点表示的字符,对于非叶子结点,此域不用*/
char *pstr; /*当前结点的编码指针,非叶子结点不用*/
int parent; /*当前结点的父结点,为 0 时表示无父结点*/
int lchild,rchild;
/*当前结点的左、右孩子结点,为 0 时表示无对应的孩子结点*/