1、国家二级 C语言机试(操作题)模拟试卷 372及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:将 NxN矩阵主对角线元素中的值与反向对角线对应位置上元素中的值进行交换。例如,若 N=3,有下列矩阵: 1 2 3 交换后为: 3 2 1 4 5 6 4 5 6 7 8 9 9 8 7 请在程序的下划线处填入正确的 内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #define N 4 3 *found* 4 void fun(int_1_,
2、int n) 5 int i, s; 6 *found* 7 for( _2_; i+) 8 s=tii; 9 tii=tin-i-1; 10 *found* 11 tin-1-i=_3_; 12 13 14 main() 15 int tN=21, 12, 13, 24, 25, 16, 47, 38, 29, 11, 32, 54, 42, 21,33, 10, i, j; 16 printf( nThe original array: n); 17 for(i=0; i N; i+) 18 for(j=0; j N; j+)printf( d, tij); 19 printf( n);
3、20 21 fun(t, N); 22 printf( nThe result is: n); 23 for(2=0; i N; i+) 24 for(j=0; j N; j+) printf( d, tij); 25 printf( n); 26 27 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:通过某种方式实现两个变量值的交换,规定不允许增加语句和表达式。例如变量 a中的值原为 8, b中的值原为 3,程序运行后 a中的值为 3, b中的值为 8。 请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 1
4、#include stdio h 2 int fun(int *x, int y) 3 4 int t; 5 *found* 6 t=x; x=y; 7 *found* 8 return(y); 9 10 main() 11 int a=3, b=8; 12 printf( d d n, a, b); 13 b=fun( a, b); 14 printf( d d n, a, b); 15 三、程序设计题 3 学生的记录由学号和成绩组成, N名学生的数据已在主函数中放入结构体数组 s中,请编写函数 fun,它的功能是:函数返回指定学号的学生数据,指定的学号在主函数中输入。若没找到指定学号,在结
5、 构体变量中给学号置空串,给成绩置 -1,作为函数值返回。 (用于字符串比较的函数是 strcmp)。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio h 2 #include string h 3 #define N 16 4 typedef struct 5 char num10; 6 int s; 7 STREC; 8 STREC fun(STREC *a, char *b) 9 10 11 12 main() 13 STREC sN=GA005, 85, GA
6、003, 76, GA002, 69, A004,85, GA001, 91, GA007, 72, GA008, 64, GA006, 87,GA015, 85, GA013, 91, GA012, 64, GA014, 91, GA011,77, GA017, 64, (GA018, 64, GA016, 72; 14 STREC h; 15 char m10; 16 int i; FILE *out; 17 printf(The original data: n); 18 for(2=0; i N; i+) 19 if(i 4=0) printf( n); 20 printf( s 3d
7、, si num, si s); 21 22 printf( n nEnter the number: ); gets(m); 23 h=fun(s, m); 24 printf(The data: ); 25 printf( n s 4d n, h num, h s); 26 printf( n); 27 out=fopen(out dat, w); 28 h=funs, GA013; 29 fprintf(out, 4d n, h num, h s); 30 fclose(out); 31 国家二级 C语言机试(操作题)模拟试卷 372答案与解析 一、程序填空题 1 【正确答案】 (1)t
8、N (2)i=0; i n (3)s 【试题解析】 第一空:在主函数中 fun函数的调用形式是 “fun(t, N); ”, t是二维数组名,故 fun函数的第一个参数为指针,因此第一空处应为 “tN”。第二空: fun函数的第二个参数 n指明了矩阵的大小为 n,对角线元素与反向对角线元素有 n个,故循环有 n次,因此变量 i从 0开始,到 n-1结束,因此第一 空处应为“i=0; i n”。第三空:循环体内部是对角线元素与反向对角线元素的交换,“s=tii; ”s保存了对角元素 tii,因此第三处应填 “s”。 二、程序修改题 2 【正确答案】 (1)t=*x; *x=v; (2)retur
9、n(t); 【试题解析】 (1)根据 fun中 x变量的定义, x为指针型变量,所以第一个错误标识下的 “t=x; x=y;”改为 “t=-*x; *x=y; ”。 (2)交换之后 t中存放原来 x的值, x存放原来 y的值,这里应该是返回原来 x的值,所以第二个标识下的 “return(y); ”应该改为 “return(t); ”或者 “return t; ”。 三、程序设计题 3 【正确答案】 1 STREC c; 2 int i; 3 c num0= 0; *置初始空串 * 4 c s=-1; *置成绩为 -1* 5 for(i=0; i N; i+) 6 if(strcmp(ai num, b)=0) *判断学号是否相等 * 7 strcpy(c num, ai num); *相等,则对学号进行赋值 * 8 c s=ai s; *相等,则对成绩进行赋值 * 9 break; *退出循环体 * 10 11 return c; *返回结构体变量 * 【试题解析】 该程序功能是函数返回指定学号的学生数据,指定的学号在主函数中输入。解题思路是在循环过程中,使用 if判断表达式,将输入的学号与所有的学号进行比较,如果找到该学号,将其赋值到指定变量,否则将空格赋值到指定变量,表明没有查找到该学号。