一、填空题:给定程序中,函数fun的功能是:计算出带有头结点的单向链表中各结点数据域中值之和作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
#include
#include
#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___;
/**********found**********/
p=p->___2___;
}
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___));
}
SLIST *creatlist(int a[])
{SLIST *h,*p,*q; int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0; 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"); } }解题答案: /**********第一空**********/ s+= p->data; /**********第二空**********/ p=p->next; /**********第三空**********/ printf("\nsum=%d\n", fun(head)); ****************************************** 例如,当s所指字符串中的内容为:"abcdabfab",t1所指子串中的内容为: "ab",t2所指子串中的内容为:"99"时, 结果在w所指的数组中的内容应为: "99cd99f99"。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include void fun (char *s, char *t1, char *t2 , char *w) { char *p , *r, *a; strcpy(w, s); while (*w) {p = w; r = t1; /************found************/ while (r) if (*r == *p) {r++; p++;} else break; if (*r == '\0') {a = w; r = t2; while (*r){ /************found************/ *a = *r; a++; r++ } w += strlen(t2); } else w++; } } main() { char s[100], t1[100], t2[100], w[100]; printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring t1:"); scanf("%s", t1); printf("\nPlease enter substring t2:"); scanf("%s", t2); if (strlen(t1)==strlen(t2)) { fun(s, t1, t2, w); printf("\nThe result is : %s\n", w); } else printf("Error : strlen(t1) != strlen(t2)\n"); } 解题答案: /************found************/ while(*r) /************found************/ *a=*r; a++; r++; ****************************************** 注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #include #include void fun(char *s, char t[]) { } main() { char s[100], t[100]; void NONO (); printf("\nPlease enter string S:"); scanf("%s", s); fun(s, t); printf("\nThe result is: %s\n", t); NONO(); } void NONO () {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ char s[100], t[100] ; FILE *rf, *wf ; int i ; rf = fopen("in.dat","r"); wf = fopen("out.dat","w"); for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%s", s); fun(s, t); fprintf(wf, "%s\n", t); } fclose(rf); fclose(wf); } 参考答案: void fun(char *s, char t[]) { int i, j = 0 ; for(i = 1 ; i < strlen(s); i+=2) t[j++] = s[i] ; t[j] = 0 ; }
二、改错题:给定程序MODI1.C中函数fun的功能是:将s所指字符串中出现的与t1所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。
三、程序题:函数fun的功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。 例如,当s所指字符串中的内容为:"ABCDEFGHIJK", 在t所指数组中的内容应是:"BDFHJ"。