1、国家二级 C+机试(操作题)模拟试卷 201及答案与解析 一、基本操作题 1 程序通过定义学生结构体变量,存储了学生的学号、姓名和三门课的成绩。所有学生数据均以二进制方式输出到文件中。函数 fun的功能是重写形参 filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据。其他学生的数据不变。 请在程序的中括号处填入正确的内容并把中括号删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! 试题 程序: #include #define N 5 typedef struct student long sno;
2、 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(&n, sizeof(STU), 1,【 3】 ); fclose(fp); main() STU tN=(1 0001, “MaChao“, 91, 92, 77, 10002, “CaoKai“, 75, 60,88, 10003, “LiSi“, 85
3、, 70, 78, 100 04, “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 orig
4、inal data: n n“); for(j=0; j #include #include void fun(char a) int b26, i, n, max; for(i=0; i=a&ai=A&ai bi) max=i; printf(“出现次数最多的字符是: c n“, max+a); main() char a200; printf(“请输入一个待统计的字符串: “); scanf(“ s“, a); fun(a); 三、综合应用题 3 下列程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN, int m),该函数的功能是使数组右上半三角元素中的值
5、乘以 m。 例如,若m的值为 2, a数组中的值为: 则返回主程序后 a数组中的值应为:注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include#include#include#include#define N 5void fun(int aN, int m)main() int aNN, m, i, j; FILE*out; print; f(“*The array* n“), for(i=0; i 国家二级 C+机试(操作题)模拟试卷 201答案与解析 一、基本操 作题 1 【
6、正确答案】 (1)filename(2)fp(3)fp 【试题解析】 填空 1:本空是对文本文件的打开, filename所指的文件中的最后数据要进行重写,因此首先是要打开,因而本空填写 filename。 填空 2: fseek功能是重定位流上的文件指针。用法: int fseek(FILE*stream,long offset, int fromwhere);本空应该填写 fp。 填空 3:因为题目中要对所有学生数据均以二进制方式输出到文件中,因此本空填写 fp。 知识点讲解: 函数名: fseek 功能:重定位流上的文件指针。 用法: int fseek(FlLE*stream, lon
7、g offset, int fromwhere)。 描述:函数设置文件指针 stream的位置。如果执行成功, stream将指向以fromwhere为基准 (从文件的哪里开始偏移 )、偏移 offset个字节的位置。正数表示正向偏移,负数表示负向偏移。如果执行失败 (比如 offset超过文件自身大小 ),则不改变 stream指向的位置。 返回值:成功,返回 0;否则返回非 0值。 二、简单应用题 2 【正确答案】 (1)bi =0; (2)bai一 a+; (3)if(bmaxbi) 【试题解析】 要统计字符串中每个字符在这个字符串中出现的次数,可以设数组b中存放每个字符出现的次数 b0
8、存放字符 a的次数, b1存放字符 b的次数 。统计之前为数组 b各元素赋初值为 0。然后依次取出字符串的每个字符进行判断,使对应数组 b加 1。 max初始值为 0,与数组 b中的每个元素进行比较,如果小于,就把下标进行交换。 (1)数组 a存放的是字符串 ,数组 b为整型数组存放的是每个字符的个数,应将数组 b每个元素初始化为 0。 (2)小写字母的 ASCII码减去 a的 ASCII即为相应字母的下标值,相应下标值的数组元素的值增加 1。 (3)最大值小于被比较数时,把被比较数的下标值赋给 max, max中存放的总是当前最大值。 三、综合应用题 3 【正确答案】 void fun(int aN, int m) int i, j; for(j=0; jN; j+) for(i=0; i=j; i+) aij=aij*m; *右上半三角元素中的值乘以 m* 【试题解析】 本程序实现将矩阵中右上半三角元素中的值乘以 m,使用循环语句遍历数组元素,第 1个循环用于控制行坐标,第 2个循环用于控制列下标。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1