1、国家二级 C语言机试(操作题)模拟试卷 234及答案与解析 一、程序填空题 1 程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数 fun的功能是重写形参 filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题 程序: 1 #include stdio h 2 #define N 5 3 typedef struct st
2、udent 4 long sno; 5 char name10; 6 float score3; 7 STU; 8 void fun(char * filename, STU n) 9 FILE * fp; 10 * found* 11 fp=fopen(【 1】 , rb+); 12 * found* 13 fseek(【 2】 , - (long) sizeof (STU), SEEK_END); 14 * found* 15 fwrite( n, sizeof(STU), 1, 【 3】 ); 16 fclose(fp); 17 18 main() 19 STU tN= 10001, N
3、aChao, 91, 92, 77, 10002, CaoKai, 75, 60,88, 10003, LiSi, 85, 70, 78, 10004, FancjFang, 90, 82, 87,10005, ZhangSan, 95, 80, 88; 20 STU n=10006, ZhaoSi, 55, 70, 68, ssN; 21 int i, j ; FILE * fp; 22 fp=fopen(student dat, wb); 23 fwrite(t, sizeof(STU), N, fp); 24 fclose(fp); 25 fp=fopen(student dat, rb
4、); 26 fread(ss, sizeof(STU), N, fp); 27 fclose(fp); 28 printf( nThe origina1 data: n n); 29 for(j=0; j N; j+) 30 printf( nNo: 1d Name: -8s scores: , ssj sno, ssj name); 31 for(i=0; i 3 ; i+) 32 printf( 6 2f, ssj scorei); 33 printf( n); 34 35 fun(student dat, n); 36 printf( nThe data after modif-ing:
5、 n n); 37 fp=fopen(student dat, rb); 38 fread(ss, sizeof(STU), N, fp); 39 fclose(fp); 40 for(j=0; j N; j+) 41 printf( nNo: 1d Name: -8s Scores: , ssj sno, ssj name); 42 for(i=0; i 3 ; i+) 43 printf( 6 2f, ssj scorej); 44 printf( n); 45 46 二、程序修改题 2 下列给定程序中,函数 fun的功能是:将 n个无序整数从小到大排序。 请改正程序中的错误 ,使它能得出
6、正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include conio h 2 #include stdio h 3 #include stcllib h 4 fun(int n, int*a) 5 6 int i, j, p, t; 7 for(j=0; jai) 13 * found* 14 t=i; 15 if(p!=j) 16 t=aj; aj=ap; ap=t; 17 18 19 putarr(int n, int * z) 20 21 int i ; 22 for(i=1; i=n; i+, z+) 23 24 print
7、f( 4d, *z); 25 if(!(i 10)printf( n); 26 27 printf( n); 28 29 void main() 30 31 int aa20=9, 3, 0, 4, 1, 2, 5, 6, 8, 10, 7, n=11; 32 system(CLS); 33 printf ( nBefore sorting d numbers: n, n); 34 putarr(n, aa); 35 fun(n, aa); 36 printf( nAfter sorting d numbers: n, n); 37 putarr(n, aa); 38 三、程序设计题 3 请编
8、写函数 fun,其功能是将形参 s所指字符串放入形参 a所指的字符数组中,使 a中存放同样的字符串。说明:不得使用系统提供的字符串函数。 注意:部分源程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun指定的部位填入所编写的若干语句。 试题程序: 1 #include stdio h 2 #define N 20 3 void NONO(); 4 void fun(char*a, char*s) 5 6 7 8 main() 9 char s1N, *s2=abcdefghijk; 10 fun(s1, s2); 11 printf( s n, s1);
9、 12 printf( s n, s2); 13 NONO(); 14 15 void NONO() 16 ( *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * 17 FILE * fp, *wf; 18 int i; 19 char s1256, s2256; 20 fp=fopen(in dat, r); 21 wf=fopen(out dat, w); 22 for(i=0; i10; i+) 23 fgets(s2, 255, fp); 24 fun(s1, s2); 25 fprintf(wf, s, s1); 26 27 fclose (fp); 28 fclos
10、e(wf); 29 国家二级 C语言机试(操作题)模拟试卷 234答案与解析 一、程序填空题 1 【正确答案】 (1)filename(2)fp(3)fp 【试题解析】 填空 1:本空是对文本文件的打开, filename所指的文件中的最后数据要进行重写,因此首先是要打开。因而本空填写 filename。 填空 2: fseek功能是重定位流上的文件指针。用法: int fseek(FILE * stream,long offset, int from-where);本空应该填写 fp。 填空 3:因为题目中要对所有学生数据均以二进制方式输出到文件中,因此本空填写 fp。 知识点讲解: 函数名
11、: fseek 功能:重定位流上的文件指针。 用法: int fseek(FILE * stream, long offset, int fromwhere)。 描述:函数设置文件指针 stream的位置。如果执行成功, stream将指向以fromwhere为基准 (从文件的哪里开始偏移 )、偏移 offset个字节的位置。正数表示正向偏移,负数表示负向偏移。如果执行失败 (比如 offset超过文件自身大小 ),则不改变 stream指向的位置。 返回值:成功,返回 0;否则返回非 0值。 二、程序修改题 2 【正确答案】 (1)for(i=j+1; in; i+) (2)p=i; 【试题
12、解析】 该程序是对 n个无序数实现从小到大的排序,先找出整数序列的最小项,置于指针第 1个元素的位置;再找出次小项,置于第 2个元素的位置;之后顺次处理后续元素。 (1)数组的长度为 n,所以最后一个元素的下标值为 n-1, i的取值范围应该包括此下标值。 (2)p是中间变量,存放值 较小的元素下标。 三、程序设计题 3 【正确答案】 1 void fun(char*a, char *s) 2 while(*s!= 0) 3 * a=*s; 4 a+; 5 s+; 6 7 *a= 0; 8 【试题解析】 要将 s所指的字符串存入 a所指的字符串中,程序要求不能使用系统提供的字符串函数,本题可以使用循环语句,依次取出 a所指字符串中的元素,将其存入 s所指的字符串中,最后为 s所指的字符串添加结束标识 0。