1、国家二级 C语言机试(操作题)模拟试卷 506及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include #include void fun (char *s, in
2、t a, double f) /* found*/ 【1】fp char str100,strl100,str2100 ; int al; double fl; fp = fopen(“filel.txt“, “w“); fprintf(fp, “%s %d %f/n“, s, a, f); /*found*/ 【2】; fp = fopen(“filel.txt“, “r“); /*found*/ fscanf(【3】, “%s%s%s“, str, strl, str2); fclose (fp); al = atoi(strl); fl = atof(str2); printf(“/nT
3、he result :/n/n%s %d %f/n“, str, al, fl); main () char a10=“Hello!“; int b=12345; double c= 98.76; fun(a,b,c); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fhn的功能是:对 N名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不
4、得更改程序的结构! #include #include #include #define N 10 typedef struct ss char num10; int s; STU; STU *fun(STU a, int m) STU bN, *t; int i,j,k; /*found*/ t=(STU *)calloc(sizeof(STU),m) for(i=0; i bj .s) j=i; /*found*/ t(k)=b(j); bj.s=0; return t; outresult(STU a, FILE *pf) int i; for(i=0; i10) printf (“/n
5、Give the number of the students who have better score: “) ; scanf(“%d“, pOrder=fun(a,m); printf(“* THE RESULT * /n“); printf(“The top :/n“); for(i=0; i_三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,函数的功能是:删去一维数组中所有相同的数,使之只剩一个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如,一维数组中的数据是:2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 1
6、0。 删除后,数组中的内容应该是:2 3 4 5 6 7 8 9 10。 注意:部分源程序在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #define N 80 int fun(int a, int n) main () int a N =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 (); printf(“The original data :/n“); for(i=0; i 5 ; i+) fsc
7、anf(rf, “%d“, for(j = 0 ; j n ; j+) fscanf(rf, “%d“, n = fun (a, n); for(j = 0 ; j n ; j+) fprintf (wf, “%4d“, aj); fprintf(wf, “/n“); f close (rf); f close (wf) ; (分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 506答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐
8、个读入,并调用库函数 atoi和 atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构! #include #include void fun (char *s, int a, double f) /* found*/ 【1】fp char str100,strl100,str2100 ; int al; double fl; fp = fopen(“filel.txt“, “w“); fprintf(fp, “%s
9、%d %f/n“, s, a, f); /*found*/ 【2】; fp = fopen(“filel.txt“, “r“); /*found*/ fscanf(【3】, “%s%s%s“, str, strl, str2); fclose (fp); al = atoi(strl); fl = atof(str2); printf(“/nThe result :/n/n%s %d %f/n“, str, al, fl); main () char a10=“Hello!“; int b=12345; double c= 98.76; fun(a,b,c); (分数:2.00)_正确答案:(
10、正确答案:(1)FILE* (2)fclose(fp)(3)fp)解析:解析:第一空:“fp=fopen(“fileltxt“,“w“);”可知 fp是文件型指针,故第一空处 fp的定义应为“FILE*”。 第二空: 第二处的后面一句是“fp=fopen(“fileltxt“,“r“);”再次打开fileltxt,因此,在第二次打开 fileltxt 之前必须将文件关闭,故第二处是关闭文件,即“fclose(fp)”。 第三空:fscanf 的调用形式是:fscanf(fp,格式字符串,输入列表),因此,第三空处应为“fp”,从文件中读出字符串、整数、浮点数。二、程序修改题(总题数:1,分数:
11、2.00)2.给定程序 MODI1C 中函数 fhn的功能是:对 N名学生的学习成绩,按从高到低的顺序找出前 m(m10)名学生来,并将这些学生数据存放在一个动态分配的连续存储区中,此存储区的首地址作为函数值返回。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! #include #include #include #define N 10 typedef struct ss char num10; int s; STU; STU *fun(STU a, int m) STU bN, *t; int i,j,k;
12、/*found*/ t=(STU *)calloc(sizeof(STU),m) for(i=0; i bj .s) j=i; /*found*/ t(k)=b(j); bj.s=0; return t; outresult(STU a, FILE *pf) int i; for(i=0; i10) printf (“/nGive the number of the students who have better score: “) ; scanf(“%d“, pOrder=fun(a,m); printf(“* THE RESULT * /n“); printf(“The top :/n“
13、); for(i=0; i_正确答案:(正确答案:(1)t=(STU*)calloc(sizeof (STU),m); (2)tk=bj;)解析:解析:(1)题干中要求结构体 STU类型的 m个学生放在动态分配的连续存储区中,“t=(STU*)calloc(sizeof(STU),m)”语句没有使用分号“;”结束,因此,需要在语句结尾处加分号。calloc 函数是 C语言的动态分配函数,分配存储空间。 (2)第二个标识下是将 b数组拷贝到 t数组,在 C语言中,数组元素的访问使用中括号“”而不是圆括弧“()”,因此,第二标识下应改成“tk=bj;”。三、程序设计题(总题数:1,分数:2.00)
14、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。 注意:部分源程序在文件 PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #define N 80 int fun(int a, int n) main () int a N =2, 2,
15、2, 3, 4, 4, 5, 6, 6, 6, 6, 7,7,8,9,9,10,10,10,10,i,n=20; void NONO (); printf(“The original data :/n“); for(i=0; i 5 ; i+) fscanf(rf, “%d“, for(j = 0 ; j n ; j+) fscanf(rf, “%d“, n = fun (a, n); for(j = 0 ; j n ; j+) fprintf (wf, “%4d“, aj); fprintf(wf, “/n“); f close (rf); f close (wf) ; (分数:2.00)_
16、正确答案:(正确答案:int i,t,j=0,*p=a; t=p0; 设置临时变量 t初值指向第 一数组值 for(i=0;i=n;i+) if(t=pi) 当临时变量与数组 中的某个值相同则跳出,比较下一个元素 ; else 如果临时变量与数组中值 不同,则对临时变量重新赋值 aj=t; t=pi; j+; if(i=n) aj=t; return j;)解析:解析:(1)首先,设置一个临时变量,初值设置为一维数组的第一个元素。 (2)然后,依次将数组的元素与临时变量比较,如果相同,则继续取数组下一个元素与临时变量比较;如果不同,则将临时变量的值赋值到数组的第一个元素,同时将此与临时变量不同的数组元素赋值给临时变量。 (3)循环执行,直到所有的数据处理完毕。