1、国家二级 C语言机试(操作题)模拟试卷 289及答案与解析 一、程序填空题 1 下列给定程序中,函数 fun的功能是:计算 NN矩阵的主对角线元素和反向对角线元素之和,并作为函数值返回。要求先累加主对角线元素中的值,再累加反向对角线元素中的值。 例如,若 N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9 首先累加 1、 5、 9,然后累加 3、 5、 7,函数返回值为 30。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得 增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #define N 4
2、 fun(int tN, int n) int i, sum; *found* 【 1】 ; for(i=0; i n; i+) *found* sum+=【 2】 ; for(i=0; i n; i+) *found* sum+=tini一 【 3】 ; return sum; main() int i, j, tIN=21, 2, 13, 24, 25, 16, 47, 38, 29, 11, 32, 54, 42, 21,3, 10; printf(“ nfhe original clata: n“); for(i=0; i N; i+) for(j=0; j N; j+) printf
3、(“ 4d“, tij); printf(“ n“); printf(“The result is: d“, fun(t, N); 二、程序修改题 2 下列给定程序中,函数 fun的功能是:先将 s所指字符串中的字符按逆序存放到t所指字符串中,然后把 s所指串中的字符按正序连接到 t所指串之后。 例如,当 s所指的字符串为 “ABCDE”时, t所指的字符串应为 “EDCBAABCDE”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #inc
4、lude stdio h #include string h void fun(char*s, char*t) *found* int i; s1=strlen(s); for(i=0; i s1; i+) *found* ti=ss1一 i; for(i=0; i =S1; i+) ts1+i=si; t2*s1= 0; void main() char s100, t100; system(“CLS“); printf(“ n Please enter string s: “); scanf(“ s“, s); fun(s, t); printf(“The result is: s n“,
5、 t)7 三、程序设计题 3 请编写函数 fun,其功能是:将一组得分中,去掉一个最高分和一个最低分,然后求平均值,并通过函数返回。函数形参 a指向存放得分的数组,形参 n中存放得分个数 (n 2)。 例如,若输入 9 9 8 5 7 6 8 5 9 3 9 5 8 9 7 8 8 6 8 4十个得分,则输出结果为: 8 687500。 注意:部分源程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序: #include stdio h void NONO(); double fun(double a, int
6、n) main() double b10, r; int i; printf(“输入 10个分数放入 b数组中: “); for(i=0; i 10; i+) scanf(“ lf“, &bi); printf(“输入的 10个分数是: “); for(i=0; i 10; i+) printf(“ 4 1lf“, bi); printf(“ n“); r=fun(b, 10); printf(“去掉最高分和最低分后的平均分: f n“, r); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp, *wf; int i,
7、 j ; double b10, r; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 10; i+) for(j=0; j 10; j+) fscanf(fp, “ lf“, bj); r=fun(b, 10); fprintf(wf, “ f n“, r); fclose(fp); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 289答案与解析 一、程序填空题 1 【正确答案】 (1)sum=0 (2)tii (3)1 【试题解析】 填空 1:变量 sum用来储存 “和 ”结果,所以将其初始化为
8、0。 填空 2:从题目中可以了解到,主对角线元素的行和列下标是相同的,所以应填入tii。 填空 3:对于反向对角线元素的行和列的下标,它们的关系是相加和为 n一 1,所以应填入 1。 二、程序修改题 2 【正确答案】 (1)int i, sl; (2)ti=ssli一 1; 【试题解析】 (1)变量 sl没有定义。 (2)该循环实现将 s串中的字符逆序存入 t串中, ti对应 s串中的 ssli一 1。 三、程序设计题 3 【正确答案】 double fun(double a, int n) double sum=0, max, min; int i; max=min=a0; for(i=0; i n; i+) sum=sum+ai; if(max ai)max=ai; if(min ai)min=ai; sum=summaxmin; return(sum (n一 2); 【试题解析】 设定三个变量 sum存放合值, max存放最大值, min存放最小值。 max和 min都赋为数组中第一个元素的值。利用循环将数组中元素累加到sum中,并找出最大值和最小值, sum值减去最大值和最小值。函数返回 sum除以元素个数一 2得平均值。