一、程序填空题
在此程序中,函数fun的功能是将带头结点的单向链表逆置,即若原链表中从头至尾结点数据域依次为2,4,6,8,10,逆置后,从头至尾结点数据域依次为10,8,6,4,2。
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct node {
int data;
struct node *next;
} NODE;
void fun(NODE *h)
{ NODE *p, *q, *r;
/**********found**********/
p = h->__1__;
/**********found**********/
if (p==__2__) return;
q = p->next;
p->next = NULL;
while (q)
{ r = q->next; q->next = p;
/**********found**********/
p = q;
q = __3__;
}
h->next = p;
}
NODE *creatlist(int a[])
{ NODE *h,*p,*q; int i;
h = (NODE *)malloc(sizeof(NODE));
h->next = NULL;
for(i=0; i<N; i++)
{ q=(NODE *)malloc(sizeof(NODE));
q->data=a[i];
q->next = NULL;
if (h->next == NULL) h->next = p = q;
else { p->next = q; p = q; }
}
return h;
}
void outlist(NODE *h)
{ NODE *p;
p = h->next;
if (p==NULL) printf("The list is NULL!\n");
else
{ printf("\nHead ");
do
{ printf("->%d", p->data); p=p->next; }
while(p!=NULL);
printf("->End\n");
}
}
void main()
{ NODE *head;
int a[N]={2,4,6,8,10};
head=creatlist(a);
printf("\nThe original list:\n");
outlist(head);
fun(head);
printf("\nThe list after inverting :\n");
outlist(head);
}
答案:(1) next (2) NULL (3) r
二、程序修改题
在此程序中,函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <stdio.h>
#define N 80
int fun(char *s,char *t)
{ int n;
char *p, *r;
n=0;
/*************found**************/
*r=t;
while ( *s )
{
p = s;
while ( *r )
{
if ( *r == *p )
{
r++;
p++;
}
else
break;
if ( *r == '\0' )
n++;
}
/*************found**************/
____1___;
s++;
}
return n;
}
void main()
{char a[N],b[N]; int m;
printf("\nPlease enter string a: ");
gets(a);
printf("\nPlease enter substring b: ");
gets(b);
m=fun(a,b);
printf("\nThe result is :m=%d\n",m);
}
答案:(1) r=t; (2) r=t;
三、程序设计题
编写函数fun,该函数的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并组成一个新的字符串。
例如,若字符串数组中的M个字符串为{“AAAA”,”BBBBBBB”,”CC”}则合并后字符串内容应该是”AAAABBBBBBBCC”。
#include <stdio.h>
#include <conio.h>
#define M 3
#define N 20
void fun(char a[M][N],char *b)
{
}
void main()
{
FILE *wf;
char w[M][N]={"AAAA", "BBBBBBB", "CC"},i;
char a[100]={ " ##############################"};
printf("The string:\n ");
for(i=0;i<M;i++)
puts(w[i]);
printf("\n ");
fun(w,a);
printf("The A string:\n ");
printf("%s ",a);
printf("\n\n ");
/******************************/
wf=fopen("out.dat","w");
fprintf(wf,"%s",a);
fclose(wf);
/*****************************/
}
答案:
int i,j,k=0;
for(i=0;i<M;i++) /*将字符串数组中的M个字符串,按顺序存入一个新的字符串*/
for(j=0;a[i][j]!='\0';j++)
b[k++]=a[i][j];
b[k]='\0'; /*在字符串最后加上结束标志符*/