1、国家二级( C语言)机试模拟试卷 361及答案与解析 一、程序填空题( 30分) 1 程序通过定义学生结构体变量,存储了学生的学号、姓名和 3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数 fun的功能是重写形参 filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #define N 5 typedef struct student long s
2、no; char name10; float score3; STU; void fun(char *filename, STU n) FILE *fp; /*found*/ fp = fopen(【 1】 , “rb+“); /*found*/ fseek(【 2】 , -(long)sizeof(STU), SEEK_END); /*found*/ fwrite( fclose(fp); main() STU tN= 10001,“MaChao“, 91, 92, 77, 10002, “CaoKai“, 75, 60, 88,10003,“LiSi“, 85, 70, 78, 10004
3、, “FangFang“, 90, 82, 87,10005,“ZhangSan“, 95, 80, 88; STU n=10006,“ZhaoSi“, 55, 70, 68, ssN; int i,j; FILE *fp; fp = fopen(“student.dat“, “wb“); fwrite(t, sizeof(STU), N, fp); fclose(fp); fp = fopen(“student.dat“, “rb“); fread(ss, sizeof(STU), N, fp); fclose(fp); printf(“nThe original data :nn“); f
4、or (j=0; j #include #include fun (char *p) int i,t; char c80; /*found*/ For (i=0,t=0; pi; i+) if(!isspace(*(p+i) ct+=pi; /*found*/ ct=“0 strcpy(p,c); main() char c,s80; int i=0; printf(“Input a string:“); c=getchar(); while(c!=#) si=c;i+;c=getchar(); si=0; fun(s); puts(s); 三、程序设计题( 40分) 3 请编一个函数 tim
5、(char*s),函数的功能是把 s所指字符串中的内容逆置。 例如:字符串中原有的字符串为: abcdefg,则调用该函数后,串中的内容为:gfedcba。 注意:部分源程序存在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include #define N 81 fun (char *s) NONO() /* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ int i ; char aN ; FILE *rf, *wf ; rf = fopen(“in.dat“,“r“); wf = fopen(“out.dat“,“w“); for(i = 0 ; i =0; j-)bi+=sj; strcpy(s, b); 【试题解析 】 进入 fun函数,根据前面的分析: 首先求得字符串的长度,然后通过循环进行字符交换。要注意的是,如果字符串长度是奇数,则最中间的元素在逆置前后的位置是没有改变的。