1、国家二级 C语言机试(操作题)模拟试卷 284及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #inclucte stdio h void fun(char*s, int a, double f) *found* 【 1】 fp; char ch; fp=fopen(“filel txt“, “w“); fprintf(
2、fp, “ s d f n“, s, a, f); fclose(fp); fp=fopen(“filel txt“, “r“); printf(“ nThe result: n n“); ch=fgetc(fp); *found* while(!feof(【 2】 ) *found* putchar(【 3】 ); ch=fgetc(fp); ) putchar( n); fclose(fP); main() char a10=“Hello!“; int b=12345; double c=98 76; fun(a, b, c); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:从
3、 P所指字符串中找出 ASCII码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。 例如,调用 fun函数之前给字 符串输入 “ABCDeFGH”,调用后字符串中的内容应为“eABCDFGH”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h void fun(char*P) char max, *q; int i=0; max=Pi; while(pi!=0) if(max Pi) max=Pi; *found* q=P+i i+; *found* whil
4、e(q P) *q=*(q一 1); q-; P0=max; void main() char str80; printf(“Enter a string: “); getS(str), printf(“ nThe original string: “); puts(str); fun(str); printf(“ nThe string after moving: “); puts(str); printf(“ n n“); 三、程序设计题 3 已知学生的记录由学号和学习成绩构成, N名学生的数据已存入 a结构体数组中。请编写函数 fun,该函数的功能是:找出成绩最低的学生记录,通过形参返回
5、主函数 (规定只有一个最低分 )。已给出函数的首部,请完成该函数。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中 填入你编写的若干语句。 试题程序: 1 #include stdio h 2 #include string h 3 #include conio h 4 #inclucle stdlib h 5 #define N 10 6 typedef struct ss 7 char num10; 8 int s; 9 STU; 10 fun(STU a, STU*S) 11 12 13 14 void main()
6、 15 16 FILE*wf; 17 STU aN=(“A01“, 81, “A02“, 89), “A03“, 66, “A04“, 87),“A05“, 77), “A06“, 90, “A07“, 79), “A08“, 61), “A09“, 80,“A10“, 71, m; 18 int i; 19 system(“CLS“); 20 printf(“*The original data* n“); 21 for(i=0; i N; i+) 22 printf(“No= S Mark= d n“, a i num, ai s); 23 fun(a, m); 24 printf(“*T
7、HE RESULT* n“); 25 printf(“The lowest: S, d n“, m num, m s); 26 * 27 wf=fopen(“out dat“, “W“); 28 fprintf(wf, “ s, d“, m num, m s); 29 fclose(wf); 30 * 国家二级 C语言机试 (操作题)模拟试卷 284答案与解析 一、程序填空题 1 【正确答案】 (1)FILE* (2)fp (3)ch 【试题解析】 填空 1:由语句 fopen(“filel txt“, “r“)可知, fp应该是文件类型指针,因此本空应该填写 FILE*。 填空 2: feo
8、f函数只能对文件类型数据进行操作,因此本空应填写 fp。 填空 3: putchar()代表输入一个字符,从 ch=fgetc(fp)可以看出本题应该填写 ch。 二、程序修改题 2 【正确答案】 (1)q=p+i; (2)while(q p) 【试题解析】 解答本题需要三个步骤,首先找到字符串中 ASCII码值最大的字符并保存;然后将该字符复制,并将该字符前面的字符串顺次后移;最后将ASCII码值最大的字符赋给字符串的第一个字符。要找到 ASCII码值最大的字符可以通过定义一个字符变量 max,该字符变量初始时等于字符串的第一个字符,若字符串的下一个字符大于 max,则将下一个字符赋给 ma
9、x,如此循环到字符尾,即可得到 ASCII码值最大的字符,同时令指针 q指向最大字符。此后对最大字符前面的子串顺次后移,可采用 while语句实现。 三、程序设计题 3 【正确答案】 fun(STU a, STU *s) int i ; *s=a0; *先认为第 1个值最小 * for(i=0; i N; i+) *如果在循环的过程中再发现比第 1个值更小的则赋给 *s* if(s s ai s) *s=ai; 【试题解析】 找出结构体数组元素中的最小值。先认为第 1个值最小,即*s=a0;,如果在循环的过程中发现比第 1个值更小的,就将指针 s指向该元素,直到找到最小元素。另外,本题还涉及结构体中的指向运算符。