填空题 请补充函数proc(),该函数的功能是建立一个带头结点的单向链表并输出到文件“out.dat”和屏幕上,各结点的值为对应的下标,链表的结点数及输出的文件名作为参数传入。
注意:部分源程序给出如下。
请勿改动main()函数和其他函数中的任何内容,仅在函数proc()的横线上填入所编写的若干表达式或语句。
试题程序:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct ss
{
int data;
struct ss * next;
}NODE;
void proc(int n,char*filename)
{
NODE*h,*p,*s;
FILE*pf;
int i;
h=p=(NODE*)malloc(sizeof(NODE));
h->data=0;
for(i=1;i<n;i++)
{
s=(NODE*)malloc(sizeof(NODE));
s->data= 1;
2;
p= 3;
}
p->next=NULL;
if((pf=fopen(filename,"w"))==NULL)
{
printf("Can not open out98.dat!");
exit(0);
}
p=h;
fprintf(pf,"/n***THE LIST***/n");
printf("/n***THE LIST***/n");
while(p)
{
fprintf(pf,"%3d",p->data);
printf("%3d",p->data);
if(p->next!=NULL)
{
fprintf(pf,"->");
printf("->");
}
p=p->next;
}
fprintf(pf,"/n");
printf("/n");
fclose(pf);
p=h;
while(p)
{
s=p;
p=p->next;
free(s);
}
}
void main()
{
char*filename="out.dat";
int n;
system("CLS");
printf("/nInput n:");
scanf("%d",&n);
proc(n,filename);}
【正确答案】
【答案解析】i p->next=s p->next[解析] s->data指向节点s的值,其下标为i,题目中要求各结点的值为对应的下标,因此,第一处填“i”。函数的功能是建立一个带头结点的单向链表,因此每生成一个结点,上一个结点的next指针指向该结点。由程序可知,指针p一直都指向上一个结点,因此,第二处填“p->next=s”。每生成一个结点,p指向下一个结点,因此,第三处填“p->next”。