1、国家二级 C语言机试(操作题)模拟试卷 397及答案与解析 一、程序填空题 1 函数 fun的功能是:把形参 a所指数组中的偶数按原顺序依次存放到 a0、a1、 a2、 中,把奇数从数组中删除,偶数个数通过函数值返回。例如: 若 a所指数组中的数据最初排列为: 9、 1、 4、 2、 3、 6、 5、 8、 7,删除奇数后a所指数组中的数据为: 4、 2、 6、 8,返回值为 4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #
2、define N 9 3 int fun(int a, int n) 4 int i, j; 5 j=0; 6 for(2=0; i n; i+) 7 *found* 8 if(_1_=0) 9 *found* 10 _2_ =ai; j+; 11 12 *found* 13 return _3_; 14 15 main() 16 int bN=9, 1, 4, 2, 3, 6, 5, 8, 7, i, n; 17 printf( nThe original data: n); 18 for(i=0; i N; i+) printf( 4d, bi); 19 printf( n); 20 n=
3、fun(b, N); 21 printf( nThe number of even: d n, n); 22 printf( nThe even: n); 23 for(2=0; i n; i+)printf( 4d, bi); 24 printf( n); 25 二、程序修改题 2 给定程序 MODI1 C中函数 fun的功能是:计算函数 (x, y, z)=(x+y) (x-y)+(z+y) (z-y)的值。其中 x和 y的值不等, z和 Y的值不等。例如,当 x的值为9、 y的值为 11、 z的值为 15时,函数值为 -3 50。 请改正程序中的错 误,使它能得出正确结果。 注意:不要改
4、动 main函数,不得增行或删行,也不得更改程序的结构。 1 #include stdio h 2 #include math h 3 #include stdlib h 4 *found* 5 #define FU(m, n) (m n) 6 float fun(float a, float b, float c) 7 float value ; 8 value=FU(a+b, a-b)+FU(c+b, c-b); 9 *found* 10 Return(Value); 11 12 main() 13 float x, y, z, sum; 14 printf(Input x y z: );
5、 15 scanf( f f f, x, y, 17 if(x=y y=z)printf(Data error! n); exit(0); 18 sum=fun(x, y, z); 19 printf(The result is: 5 2f n, sum); 20 三、程序设计题 3 函数 fun的功能是:将 S所指字符串中除了下标为偶数、同时 ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在 t所指的数组中。 例如,若 S所指字符串中的内容为: ABCDEFGl23456,其中字符 A的 ASCII码值为奇数,因此应当删除;其中字符 B的 ASCII码值为偶数,
6、但在数 组中的下标为奇数,因此也应当删除;而字符 2的 ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后 t所指的数组中的内容应是:246 。 注意:部分源程序存在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio h 2 #include string h 3 void fun(char *s, char t) 4 5 6 main() 7 8 char s100, t100; 9 void NONO(); 10 printf(“ nPlease ent
7、er stringS: ); scanf( s, s); 11 fun(s, t); 12 printf( nThe result is: s n, t); 13 NONO(); 14 void NONO() 15 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * 16 char s100, t100; 17 FILE *rf, *wf; 18 int i; 19 rf=fopen(in dat, r); 20 wf=fopen(out dat, w); 21 for(i=0; i 10; i+) 22 fscanf(rf, s, s); 23 fun(s, t); 24 f
8、printf(wf, s n, t); 25 26 fclose(rf); 27 fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 397答案与解析 一、程序填空题 1 【正确答案】 (1)ai 2 (2)aj (3)j 【试题解析】 函数 fun的功能是把形参 a所指数组中的偶数按原顺序依次存放到a,把奇数从数组中删除。 第一空:由 “_2_ =ai; j+; ”是将偶数元素保存起来并且计数变量加 1,可知 i记录了偶数元素的个数,第一空处是判断 ai是否是偶数,因此第一空处应为“ai 2”。 第二空: a所指数组中的偶数按原顺序依次存放到 a0、 a1、 a2 , j初始化为
9、 0, aj就可以将偶数元素存放在 a中,故第二空处应为 “aj”。 第三空: fun函数的返回值是偶数个数,故第三空处应为 “i”。 二、程序修改题 2 【正确答案】 (1)#define Fu(m, n) (m) (n) (2)return (value); 【试题解析】 (1)函数 fun两次调用宏 FU来计算 “value=FU (a+b, a-b)+FU(c+b, c-b);”。检查宏的定义是否正确,可以用实参代入宏进行展开: (a+b a-b),由此看到, “FU(a+b, a-b)”进行的计算 不是 “(a+b) (a-b)”,而是 “(a+ba-b)”,因为 “ ”的优先级高于
10、 “+”或 “-”,所以要使用括号限定计算优先顺序。所以将 “#deftne FU(m, n)(m n)”改为 “#define FU(m, n)(m) (n)”。 (2)第二个标识下返回语句的关键字有误。所以,第二个标识下“Return(value); ”应该改为 “return (value): ”, C语言中没有 “Return”这个关键字。 三、程序设计题 3 【正确答案】 1 int i, j=0; 2 for(i=0; i strlen(s); i+=2) 3 if(si 2=0)tj+=si; 4 tj= 0; 【试题解析】 (1)判断一个字符串中的某一字符下标 i是否为偶数,可用 “i2=0”来判断;也可以从下标 0开始,每次增 2。判断字符中的 ASCII码值是否为偶数,则可用 “si 2=0”来判定。 (2)对串 s中下标为偶数的字符进行考查,满足ASCII码值是偶数条件的字符就顺序放在新串 s中,否则就不存放。 (3)所有字符处理完后,记得在新串 s的末尾加上结束符 “ 0”。