1. 给定程序中,函数FUN的功能是:计算出带有头接点的单向链表中各结点数据域之和作为函数值返回。
#include <stdio.h>
#include <stdlib.h>
#define N 8
typedef struct list
{ int data;
struct list *next;
} SLIST;
SLIST *creatlist(int *);
void outlist(SLIST *);
int fun( SLIST *h)
{ SLIST *p; int s=0;
p=h->next;
while(p)
{
/**********************************found*********************************/
s = p->___1___; data
/**********************************found*********************************/
p=p->___2___; next
}
return s;
}
main( )
{ SLIST *head;
int a[N]={12,87,45,32,91,16,20,48};
head=creatlist(a); outlist(head);
/**********************************found*********************************/
printf("\nsum=%d\n", fun(___3___)); head
}
SLIST *creatlist(int a[ ])
{ SLIST *h,*p,*q; int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0; i<N; i )
{ q=(SLIST *)malloc(sizeof(SLIST));
q->data=a[i]; p->next=q; p=q;
}
p->next=0;
return h;
}
void outlist(SLIST *h)
{ SLIST *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");
}
}
2. 给定程序中,函数FUN的功能是:求出形参SS所指字符串数组中最长字符串的长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中工有M个字符串,且串长<N。
#include <stdio.h>
#include <string.h>
#define M 5
#define N 20
void fun(char (*ss)[N])
{ int i, j, k=0, n, m, len;
for(i=0; i<M; i )
{ len=strlen(ss[i]);
if(i==0) n=len;
if(len>n) {
/**********************************found*********************************/
n=len; k=___1___; i
}
}
for(i=0; i<M; i )
if (i!=k)
{ m=n;
len=strlen(ss[i]);
/**********************************found*********************************/
for(j=___2___; j>=0; j--) len
ss[i][m--]=ss[i][j];
for(j=0; j<n-len; j )
/**********************************found*********************************/
ss[i][j]=____3____; '*'
}
}
main( )
{char s[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};
int i;
printf("\nThe original strings are :\n");
for(i=0; i<M; i ) printf("%s\n",ss[i]);
printf("\n");
fun(ss);
printf("\nThe result:\n");
for(i=0; i<M; i ) printf("%s\n",ss[i]);
}
3. 人员记录由编号和出生年,月,日组成,N名人员的数据已在主函数中存入结构体数组std且编号唯一。函数fun 的功能是;找出指定编号人员的数据,作为函数值返回,有主函数输出,若指定编号不存在,返回数据中的编号为空串。
#include <stdio.h>
#include <string.h>
#define N 8
typedef struct
{ char num[10];
int year,month,day ;
}STU;
/**********************************found*********************************/
___1___fun(STU *std, char *num) STU
{ int i; STU a={"",9999,99,99};
for (i=0; i<N; i )
/**********************************found*********************************/
if( strcmp(____2_____,num)==0 ) std[i].num
/**********************************found*********************************/
return (___3____); std[i]
return a;
}
main( )
{STU std[N]={ {"111111",1984,2,15},{"222222",1983,9,21},{"333333",1984,9,1},
{"444444",1983,7,15},{"555555",1984,9,28},{"666666",1983,11,15},
{"777777",1983,6,22},{"888888",1984,8,19}};
STU p; char n[10]="666666";
p=fun(std,n);
if(p.num[0]==0)
printf("\nNot found !\n");
else
{ printf("\nSucceed !\n ");
printf("%s %d-%d-%d\n",p.num,p.year,p.month,p.day);
}
}
4. 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun 的功能:删除链表中数据域值相同的结点,使之保留一个。
#include <stdio.h>
#include <stdlib.h>
#define N 8
typedef struct list
{ int data;
struct list *next;
} SLIST;
void fun( SLIST *h)
{ SLIST *p, *q;
p=h->next;
if (p!=NULL) { q=p->next;
while(q!=NULL)
{ if (p->data==q->data)
{ p->next=q->next;
/**********************************found*********************************/
free(___1___); q
/**********************************found*********************************/
q=p->___2___; next
}
else
{ p=q;
/**********************************found*********************************/
q=q->___3___; next
}
}
}
}
SLIST *creatlist(int *a)
{ SLIST *h,*p,*q; int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0; i<N; i )
{ q=(SLIST *)malloc(sizeof(SLIST));
q->data=a[i]; p->next=q; p=q;
}
p->next=0;
return h;
}
void outlist(SLIST *h)
{ SLIST *p;
p=h->next;
if (p==NULL) printf("\nThe list is NULL!\n");
else
{ printf("\nHead");
do { printf("->%d",p->data); p=p->next; } while(p!=NULL);
printf("->End\n");
}
}
main( )
{ SLIST *head; int a[N]={1,2,2,3,4,4,4,5};
head=creatlist(a);
printf("\nThe list before deleting :\n"); outlist(head);
fun(head);
printf("\nThe list after deleting :\n"); outlist(head);
5. 函数fun 的功能是进行数字字符转换。若形参ch中是数字字符'0 ~ 9',则'0'转换成'9', '1'转换成'8', '2'转换成'7' … '9'转换成'0';若是其他字符则保持不变;并将转换后的结果作为函数值返回.
#include <stdio.h>
/**********************************found*********************************/
___1___fun(char ch) char
{
/**********************************found*********************************/
if (ch>='0' &&___2____) ch<='9'
/**********************************found*********************************/
return '9'- (ch-___3___); '0'
return ch ;
}
main( )
{ char c1, c2;
printf("\nThe result :\n");
c1='2'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='8'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
c1='a'; c2 = fun(c1);
printf("c1=%c c2=%c\n", c1, c2);
}
6. 给定程序中,函数fun的功能是:对形参ss所指字符串数组中的M字符串按长度由短到长进行排序。SS所指字符串数组中共有M个字符串,且串长<N
#include <stdio.h>
#include <string.h>
#define M 5
#define N 20
void fun(char (*ss)[N])
{ int i, j, k, n[M]; char t[N];
for(i=0; i<M; i ) n[i]=strlen(ss[i]);
for(i=0; i<M-1; i )
{ k=i;
/**********************************found*********************************/
for(j=___1___; j<M; j ) i 1
/**********************************found*********************************/
if(n[k]>n[j]) k=___2___; j
if(k!=i)
{ strcpy(t,ss[i]);
strcpy(ss[i],ss[k]);
/**********************************found*********************************/
strcpy(ss[k],___3___); t
n[k]=n[i];
}
}
}
main( )
{ char s[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};
int i;
printf("\nThe original strings are :\n");
for(i=0; i<M; i ) printf("%s\n",ss[i]);
printf("\n");
fun(ss);
printf("\nThe result :\n");
for(i=0; i<M; i ) printf("%s\n",ss[i]);
}