int data struct node "next; NODE void fun(NODE*h) NODE*p.*g."r. p=h>1: f6und if(p-2_)return q=p->next; p->next=NULL while (q) r=o->next o->next =p: 作*特*found*a刘 p=gq=_3_ hznext-p 、 NODE*creatlist(int NODE*h'p.'q:int i h=(NODE)malloc(sizeofNODE)). h->next=NULL; for(i=0:i<N:i++) =(NODE)malloc(sizeof(NODE)). q->data=a[] g->next=NULL: if (h->next =NULL)h->next =p=q. else p->next=g.p=q: retum h void outlist(NODE h) (NODE*p. p=h->next. if(p-NULL)printfl"The list is NULLIV"); clse 6
- 36 - 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
do {printfp-data):p-p->next. while(p!=NULLY: printf(">Endin") } main( (NODE*head. int a[N]={2.4,6,8,10) head-creatlist(a) printfThe original lis) outlist(head). fun(head); printfnThe list after invertingn) 解题思路: 本题是考察使用链表方法,对链表的结点数据进行降序排列。 第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的nt指针,来定位p的初始位置。所以 应填写:h>nct. 第二处:判衔p指针是否结束,所以应填写:0, 第三处:q指向原q的e指针,所以应填:f。 给定程序MODI.C中函数n的功能是:计算s所指字符中中含有t所指字符中的数目,并作为函数值返回。 请改正函数u中指定部位的错误、使它能得出正确的结果。 注意:不要改动mn函数,不得增行或删行,也不得更改程序的钻构 给定源程序: #include <stdio.h> nclude<stringh #define N 80 int fun(chars,char) char "p,*r. n0. while (*s) (p=s: .37
- 37 - { printf("\nHead "); do { printf("->%d", p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } 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); } 解题思路: 本题是考察使用链表方法,对链表的结点数据进行降序排列。 第一处:使用结构指针 p,来控制链表的结束,p 必须指向 h 结构指针的 next 指针,来定位 p 的初始位置。所以 应填写:h->next。 第二处:判断 p 指针是否结束,所以应填写:0。 第三处:q 指向原 q 的 next 指针,所以应填:r。 *************************************************** 给定程序 MODI1.C 中函数 fun 的功能是: 计算 s 所指字符串中含有 t 所指字符串的数目, 并作为函数值返回。 请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include <stdio.h> #include <string.h> #define N 80 int fun(char *s, char *t) { int n; char *p , *r; n=0; while ( *s ) { p=s;
r=p: whle◆r) i*=*p)(r+p+, else break: s found* i*=0) n++; s++ relum n 1 main() {char a[N].bIN]:int m: printf"nPlease enter stringa:").gets(a). enter substringb:)gets(b) m=fun(a b): printf"nThe result is:m=%d"m); 解思思路: 第一处:程序中子串是由变量1来实现的,再根据下面hc循环体中语句可知,所以应改为: 第二处:是判断相等的条件,所以应改为:逾=0。 请编写函数,函数的功能是:将放在字符中数组中的M个字符中(每中的长度不超过N,按顺序合并组成一个 新的字符串。函数u中给出的语句仅供参考. 例如知,字符申数组中的M个字符申为AAAA BBBBBBB CC 则合并后的字符中的内容应是:AAAABBBBBBBCC。 提示:streat(ab)的功能是将字符串b复制到字符串a的串尾上,成为一个新串. 注意:部分源程序在文件PROG1C中, 请勿改动主函数mn和其它函数中的任何内容,仅在函数的花括号中填入你编写的若干语句. 给定源程序: #define M3 #define N 20 -38
- 38 - /*********found**********/ r=p; while(*r) if(*r==*p) { r++; p++; } else break; /*********found**********/ if(*r= 0) n++; s++; } return n; } 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); } 解题思路: 第一处: 程序中子串是由变量 t 来实现的,再根据下面 while 循环体中语句可知,所以应改为:r=t;。 第二处: 是判断相等的条件,所以应改为:if(*r==0)。 *************************************************** 请编写函数 fun, 函数的功能是: 将放在字符串数组中的 M 个字符串(每串的长度不超过 N), 按顺序合并组成一个 新的字符串。函数 fun 中给出的语句仅供参考。 例如, 字符串数组中的 M 个字符串为 AAAA BBBBBBB CC 则合并后的字符串的内容应是: AAAABBBBBBBCC。 提示:strcat(a,b)的功能是将字符串 b 复制到字符串 a 的串尾上,成为一个新串。 注意:部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容, 仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include <stdio.h> #define M 3 #define N 20
void fun(char a[M][N]char* 以下代码仅供参考 int i:"b=0. main {char w[MI[N]"AAAA","BBBBBBB","CC.a[100]: int i; print"The string:) for(=0.i<M;++)puts(w[iJ); printf""). fu(w.a), printf("The A string:In"): printn) NONOO. 解题思路: 本题是考察字符串的操作。 使用for循环以及C语言函数sc依次连接起来。 参考答案: #include <stdio.h> define M3 void fun(char aM]N].char*) 以下代码仅供参考 int i:"b=0. for(i=0;i<M;i++) strca(b.) ※※※※※※※※※※※※※※※※※※※※※※※※端 第12套: 给定程序中,函数加的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、 6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。 请在程序的下划线处填入正确的内容并把下划线除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKI.C中, -39
- 39 - void fun(char a[M][N], char *b) { /* 以下代码仅供参考 */ int i; *b=0; } main() { char w[M][N]={"AAAA","BBBBBBB","CC"}, a[100]; int i ; 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"); NONO(); } 解题思路: 本题是考察字符串的操作。 使用 for 循环以及 C 语言函数 strcat 依次连接起来。 参考答案: #include <stdio.h> #define M 3 #define N 20 void fun(char a[M][N], char *b) { /* 以下代码仅供参考 */ int i; *b=0; for(i = 0 ; i < M ; i++) strcat(b, a[i]) ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第 12 套: 给定程序中,函数 fun 的功能是将不带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、 6、8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中
不得增行或删行,也不得更改程序的结构 给定源程序: include<stlib.hP #define N5 typedef int data: struct node "next. NODE /作水客*本率卡水率来f0Und中车体本本*中 _L_·fun(NODE*h) NODE*,F*q, p=h: if(p==NULL) retum NULL: q=p->next; p->next=NULL; while(q) 作车年率中华来中单车f0Und单年年华卡率年年中 r=g->2 q->next=p: p=q t found+/ q=-3 retum p: NODE*creatlist(int) {NODE*h."p.'q:inti h=NULL: for(i=0:i<N:i++) q=(NODE)malloc(sizeofNODE) g->data=alil: q->next=NULL if(h-NULL)h=p=q:
- 40 - 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> #include <stdlib.h> #define N 5 typedef struct node { int data; struct node *next; } NODE; /**********found**********/ _1_ * fun(NODE *h) { NODE *p, *q, *r; p = h; if (p == NULL) return NULL; q = p->next; p->next = NULL; while (q) { /**********found**********/ r = q->_2_; q->next = p; p = q; /**********found**********/ q = _3_ ; } return p; } NODE *creatlist(int a[]) { NODE *h,*p,*q; int i; h=NULL; for(i=0; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h == NULL) h = p = q;