问题 填空题

阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。
[说明1]
L为一个带头结点的循环链表。函数LinkList deletenode(LinkList L,int c)的功能是删除L中数据域data的值大于C的所有结点,并由这些结点组建成一个新的带头结点的循环链表,其头指针作为函数的返回值。
[C函数1]
LinkList deletenode(LinkList L,int c)
LinkList Lc,P,pre;
pre=L;
p= (1) ;
Lc=(LinkList)malloc(sizeof(Listnode));
Lc->next=Lc;
while(P!=L)
if(p->data>C)
(2) ;
(3) ;
Lc->next=p;
p=pre->next;

else
pre=p;
p=pre->next;

return Lc;

[说明2]
递归函数dec_to_k_2(int n,int k)的功能是将十进制正整数n转换成[*]进制数,并打印。
[C函数2]
dec to k 2(int n,int k)
if(n!=O)
dec to k 2( (4) ,k);
printf("%d", (5) );

答案

参考答案:pre->next或L->next (2) pre->neXt=p->next (3) p->next=Lc->next
(4) n/k (5) n%k

解析:
函数1是考察链表的删除和插入的操作。(1)空所在语句是对指针P赋初值,应填“pre->next”或“L->next”,通过下面的程序可以判断指针pre所指的结点是指针p所指结点前驱结点。(2)、(3)空所在的语句块是处理当指针p所指的结点是一个大于C的结点,则将该结点从链表L中删除,再将它插入到链表Lc中。分别填“pre->next=p->next”和“p->next=-Lc->next” 。
函数2是一个递归函数,采用除k取余法。最开始得到余数作为k进制数的最低位,最后得到的余数作为k进制数的最高位。用递归法求解时,先将n/k转换成k进制,再输出n%k。因此(4)填“n/k”,(5)填“n%k”。

多项选择题
单项选择题