1、国家二级 C语言机试(操作题)模拟试卷 706及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #include stdlib h 3 void fun(char *, int a, doubl
2、e f) 4 5 *found* 6 _1_fp; 7 char str100, str1100, str2100; 8 int a1; double f1; 9 fp=fopen(”file1 txt, w); 10 fprintf(fp, s d f n, s, a, f); 11 *found* 12 _2_; 13 fp=fopen(filel txt, r); 14 *found* 15 fscanf(_3_, s s s, str, str1, str2), 16 fclose(fp), 17 a1=atoi(str1); 18 f1=atof(str2); 19 printf(
3、nTheresult: n n s d f n, str, a1, f1); 20 21 main() 22 char a10=Hello!; int b=12345; 23 double c=98 76; 24 fun(a, b, c); 25 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:对 N名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也 不得更改程序的结构 !
4、1 #include stdio h 2 #include stdlib h 3 #include string h 4 #define N 10 5 typedef struct S S 6 char num10; 7 int s; 8 STU; 9 STU *fun(STU a, int m) 10 STU bN, *t; 11 int i, j, k; 12 *found* 13 t=(STU *)calloc(sizeof(STU), m) 14 for(i=0; i N; i+)bi=ai; 15 for(k=0; k m; k+) 16 for(i=j=0; i N; i+) 17
5、 if(bi s bJ s)j=i, 18 *found* 19 t(k)=b(j); 20 bj s=0; 21 22 return t; 23 24 outresult(STU a, FILE *pf 25 int i; 26 for(i=0;i n;i+) 27 fprintf(pf, No= s Mark= d n, ai num, ai s); 28 fprintf(pf, n n); 29 30 main() 31 STU aN=A01, 81, A02”, 89, A03, 66, A04, 87,A05, 77, A06, 90, A07, 79, A08, 61, A09,
6、80, A10,71; 32 STU *pOrder; 33 int i, m; 34 printf( The Original data * n“); 35 outresult(a, stdout); 36 printf( nGive the number of the students who have better score: ), 37 scarlf( d, 44 printf(The top: n); 45 for(i=0; i m; i+) 46 printf( s d n, pOrderi num, pOrderi s); 47 free(pOrder); 48 三、程序设计题
7、 3 请编写函数 fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数己按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio h 2 #define N 80 3 int fun(int a, int n) 4 5 6
8、 7 main() 8 int aN=2, 2, 2, 3, 4, 4, 5, 6, 6, 6, 6, 7, 7, 8, 9, 9, 10, 10, 10,10, i, n=20; void NONO(); 9 printf(The original data: n); 10 for(i=0; i n; i+)printf( 3d, ai); 11 n=fun(a, n); 12 printf( n nThe data after deleted: n); 13 for(i=0; i n; i+)printf( 3d, ai); printf( n n); 14 NONO(); 15 16 v
9、oid NONO() 17 *请在此函数内打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。 * 18 FILE *rf, *wf; int aN, n, i, j; 19 rf=fopen(in dat, r); 20 wf=fopen(out dat, w); 21 for(i=0; i 5; i+) 22 fscanf(rf, d, n); 23 for(j=0 ; j n; j+)fscanf(rf, d, aj); 24 n=fun(a, n); 25 for(j=0; j n; j+) fprintf(wf, 4d, aj); 26 fprintf(wf, n); 27
10、 28 fclose(rf); fclose(wf); 29 国家二级 C语言机试(操作题)模拟试卷 706答案与解析 一、程序填空题 1 【正确答案】 (1)FILE* (2)fclose(fp) (3)fp 【试题解析】 本题中函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 第一空: “fp=fopen(file1 txt“, “w“); ”可知 fp是文件型指针,故第一空处fp的定义应为 “FILE*”。 第二空:第二处的后面一句是 “fp=
11、fopen(file1 txt“, r); ”再次打开file1 txt,因此,在第二次打开 file1 txt之前必须将文件关闭,故第二处是关闭文件,即 “fclose(fp)”。 第三空: fscanf的调用形式是: fscanf(fp,格式字符串,输入列表 ),因此,第三空处应为 “fp”,从文件中读出字符串、整数、浮点数。 二、程序修改 题 2 【正确答案】 (1)t=(STU*)calloc(sizeof(STU), m); (2)tk=bj; 【试题解析】 本题中函数的功能是按学习成绩从高到低的顺序找出前 m(m10)名学生。利用循环结构实现对定义的结构体中的成绩域进行排序。 (1
12、)题干中要求结构体 STU类型的 m个学生放在动态分配的连续存储区中,“t=(STU*)calloc(sizeof(STU), m)”语句没有使用分号 “; ”结束,因此,需要在语句结尾处加分号。 calloc函数是 C语言的动态分配函数,分配存储空 间。 (2)第二个标识下是将 b数组拷贝到 t数组,在 C语言中,数组元素的访问使用中括号 “”而不是圆括弧 “()”,因此,第二标识下应改成 “tk=bj; ”。 三、程序设计题 3 【正确答案】 1 int i, t, j=0, p=a; 2 t=p0; 设置临时变量 t初值指向第一数组值 3 for(i=0; i =n; i+) 4 if(
13、t=pi) 当临时变量与数组中的某个值相同则跳出,比较下一个元素 5 ; 6 else 如果临时变量与数组 中值不同,则对临时变量重新赋值 7 aj=t; 8 t=pi; 9 j+; 10 if(i =n) aj=t; 11 return j; 【试题解析】 该程序功能是删去一维数组中所有相同的数,使之只剩一个。解题思路是,首先在函数中定义临时变量指向每一个元素,然后在循环过程中将临时值和其他元素进行比较,如果相同,那么跳过相同字符。 (1)首先,设置一个临时变量,初值设置为一维数组的第一个元素。 (2)然后,依次将数组的元素与临时变量比较,如果 相同,则继续取数组下一个元素与临时变量比较:如果不同,则将临时变量的值赋值到数组的第一个元素,同时将此与临时变量不同的数组元素赋值给临时变量。 (3)循环执行,直到所有的数据处理完毕。