问题 填空题

阅读以下函数说明和C语言函数,将应填入 (n) 处的字句写在对应栏内。
[说明]
该程序从正文文件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= (1) ;
if(!ptr) return;
ptr->number=hum;
ptr->next=NULL;
head=insertChain(head,ptr);

(2) ;
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; (3)
if(ptr == head) head=k;
else (4) ;
(5) ;
return head;

答案

参考答案:(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”。

选择题
多项选择题