1、国家二级( C语言)机试模拟试卷 342及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:将自然数 1 10以及它们的平方根写到名为myfile3 txt的文本文件中,然后再顺序读出显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include int fun(char *fname) FILE *fp; int i,n; float x; if(fp=fopen(fname, “w“)=NULL) retu
2、rn 0; for(i=1;i #include #define N 5 #define M 81 /*found*/ fun(char (*sq)N) int i; char *sp; sp=sq0; for(i=0;i #define N 8 typedef struct char num10; double s; STREC; double fun(STREC*a, STREC*b, int*n) main() STREC sN=”GA05”, 85, ”G03”, 76, ”GA02”, 69, ”GA04”, 85, ”GA01”, 91, ”GA07”, 72, ”GA08”, 6
3、4, ”GA06”, 87; STREC hN, t; FILE*out; int i, j, n; double ave; ave=fun(s, h, 【试题解析】 ( 1)第一个错误标识下 fun函数的定义根据题目要求,返回最长的字符串,原题的 “fun(char (*sq)N)”的定义没有指定返回值,所以 “fun(char (*sq)N)”应该改为 “char *fun(char (*sq)M)”,指定返回值为字符串。 ( 2) fun函数中定义 sp指针首先指向第一个串,用来存放最长的那个串,然后在循环中 sp指向的串与 sq指向的其他串长度进行比较,如果 sp指向的串长度小于sq指
4、向的串,则 sq的值替换 sp指向的串,这样保证 sp指向的还是最大的串,所以返回最长的串应将 “return sq;”改为 “return sp;”。 三、程序设计题( 40分) 3 【正确答案】 int i; double ave=0.0; *n=0; for(i=0; iN; i+)ave=ave+ai.s; ave /=N; /* 计算平均值 */ for(i=0; iN; i+) if(ai.save) /* 把低于平均值的记录存放到 b所指的数组中 */ b*n=ai; (*n)+; /* 人数加 1 */ 【试题解析】 ( 1)首先,通过循环求 总分,然后求得平均分。 ( 2)在循环中,进行平均分与每个成绩进行比较,并将满足条件的数据存入数组及对其进行累加。