1、国家二级 C语言机试(操作题)模拟试卷 362及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:利用指针数组对形参 ss所指字符串数组中的字符串按由长到短的顺序排序,并输出排序结果。 ss所指字符串数组中共有 N个字符串,且串长小于 M。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #include string h 3 #define N 5 4 #define M 8 5 void fun(char(*ss
2、)M) 6 char *psN, *tp; int i, j, k; 7 for(i=0; i N; i+)psi=ssi; 8 for(i=0; i N-1; i+) 9 *found* 10 k= _1_; 11 for(j=i+1; j N; j+) 12 *found* 13 if(strlen(psk ) strlen(_2_)k=j; 14 *found* 15 tp=psi; psi=psk; psk=_3_; 16 17 printf( nThe string after sorting by length: n n); 18 for(i=0; i N; i+)puts(psi
3、); 19 20 main() 21 char chNM=red, green, blue, yellow, black; 22 int i; 23 printf( nThe original string n n); 24 for(i=0; i N; i+)puts(chi); printf( n); 25 fun(ch); 二、程序修改题 2 给定程序 MODI1 C是建立一个带头结点的单向链表,并用随机函数为各结点数据域赋值。函数 fun的作用是求出单向链表结点 (不包括头结点 )数据域中的最大值,并且 作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。 注意:
4、不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #include stdlib h 3 typedef struct aa 4 int data; 5 struct aa *next; 6 NODE; 7 int fun(NODE *h) 8 int max=-1; 9 NODE *p; 10 *found* 11 p=h; 12 while(p) 13 if(p- data max) 14 max=p- data; 15 *found* 16 p=h- next; 17 18 return max; 19 20 outresult(
5、int s, FILE *pf) 21 fprintf(pf, nThe max in link: d n, s); 22 NODE *creatlink(int n, int m) 23 NODE *h, *p, *s; 24 int i; 25 h=p=(NODE*)malloc(sizeof(NODE);h- data=9999; 26 for(i=1; i =n; i+) 27 s=(NODE *)malloc(sizeof(NODE); 28 s- data=rand() m; s- next=p- next; 29 p- next=s; p=p- next; 30 31 p- ne
6、xt=NULL; 32 return h; 33 34 outlink(NODE *h, FILE *pf) 35 NODE *p; 36 p=h- next; 37 fprintf(pf, nTHE LIST: n n HEAD); 38 while(p) 39 fprintf(pf, - d, p- data); p=p- next; 40 fprintf(pf, n); 41 42 main() 43 NODE *head; int m; 44 head=creatlink(12, 100); 45 outlink(head, stdout); 46 m=fun(head); 47 pr
7、intf( nTHE RESULT: n); outresult(m, stdout); 48 三、程序设计题 3 已知学生的记录由学号和学习成绩构成, N名学生的数据已存入结构体数组 a中。请编写函数 fun,函数的功能是:找出成绩最高的学生记录,通过形参指针传回主函数 (规定只有一个最高分 )。已给出函数的首部,请完成该函数。 注意:部分源程序存在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio h 2 #include string h 3 #define N 10 4 typed
8、ef struct ss 5 char num10; int s; STU; 6 fun(STU a, STU *s) 7 8 9 10 main() 11 STU aN=(A01, 81, A02, 89, A03, 66, A04, 87,(A05, 77, A06, 90, A07, 79, A08, 61, A09, 80, A10,71, m; 12 int i; 13 printf(*The original data * n); 14 for(i=0; i N; i+)printf(No= s Mark= d n, ai num, ai s); 15 fun(a, m); 16
9、printf (* THE RESULT * n); 17 printf(The top: s, d n, m num, m s); 18 NONO(); 19 20 NONO() 21 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * 22 FILE *rf, *wf; 23 STU a N, m; 24 int i; 25 rf=fopen(in dat, r); 26 wf=fopen(out dat, w); 27 for(i=0 ; i 10; i+) fscanf(rf, s d, ai num, ai s); 28 fun(a, 6 *s=aj; 【试题解析】 该程序功能是求最高分数的学生。本题是关于求解结构体中某些成员的最大值,首先将第一个值设定为最大值,并在循环中将其他所有值与该值进行比较,求得最大值。然后将最大值与所有值进行比较,求得所有的最大值。