填空题 阅读以下函数说明和C语言函数,将应填入{{U}} (n) {{/U}}处的字句写在对应栏内。
[说明]
该程序从正文文件test.txt中读入一批整数,并将它们按照递增的顺序存放在一个链表中。其中,函数struct Link*insertChain(struct Link*head,structLink*k)用来寻找结点k在链表head中的插入位置,并插入该结点。
[C程序]
#include <stdio.h>
#include <stdlib.h>
struct Link
{ int number;
struct Link *next;
}
struct Link *insertChain(struct Link *head,struct Link *k);
VOid main()
{ struct Link *ptr, *head;
FILE *fd;
int hum;
if((fd=fopen("test.txt","r"))==NULL)
{print("Cannot open this file!/n");
return;
}
head=NULL;
while(fscanf(fd,"%d",hum)==1)
{ ptr={{U}} (1) {{/U}};
if(!ptr) return;
ptr->number=hum;
ptr->next=NULL;
head=insertChain(head,ptr);
}
{{U}} (2) {{/U}};
return;
}
struct Link *insertChain(struct Link *head,struct Link *k)
{ struct Link *ptr,*u;
ptr=head;
while(ptr && k && k->number>ptr->number)
{ u=ptr; {{U}}(3) {{/U}} }
if(ptr == head) head=k;
else {{U}}(4) {{/U}};
{{U}}(5) {{/U}};
return head;
}
  • 1、
【正确答案】 1、{{*HTML*}}(struct Link*)malloc(sizeof (struct Link)) (2) fclose(fd)    
【答案解析】
(3) ptr=ptr->next或ptr=u->next
(4) u->next=k (5) k->next=ptr
[解析]
本题采用文件的输入方式,其主要思路:①打开文件;②从文件读入一个整数,动态申请一个结点;③将结点插入到以head为头指针的链表中;④反复执行②和③直到文件结束;⑤关闭文件。
通过上述分析,不难得到(1)为申请结点,应该填“(struct Link*)malloc(sizeof(structLink))”;(2)为关闭文件,即fclose(fd)。在插入结点时,让u指向插入结点ptr之前,因此(3)为u的下一个结点,填“ptr=ptr->next”或“ptr=u->next”。插入结点时分为在头结点插入和u之后插入两种情况。(4)为在u之后插入的情况,应该填“u->next=k”,(5)填“k->next=ptr”。