1、国家二级 C语言机试(操作题)模拟试卷 702及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:有 NN矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为 0。例如,若 N=3,有下列矩阵: 1 2 3 4 5 6 7 8 9 计算结果为 1 0 0 6 5 0 10 14 9 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生 文件夹下的 BLANK1 C中。 不得增行或删行,也不得更改程序的结构 ! 1 #include stdio h 2 #define N 4 3 *found* 4 voi
2、d fun(int(*t) _1_) 5 int i, j; 6 for(i=1; i N; i+) 7 for(j=0; j i; j+) 8 9 *found* 10 _2_=tij+tji; 11 *found* 12 _3_ =0; 13 14 15 16 main() 17 int tN=21, 12, 13, 24, 25, 16, 47, 38, 29, 11, 32, 54, 42, 21,33, 10i, j; 18 printf( nThe originalarray: n), 19 for(i=0; i N; i+) 20 for(j=0; j N; j+)printf(
3、 2d, tij); 21 printf( n), 22 23 fun(t); 24 printf( nThe result is: n); 25 for(i=0; i N; i+) 26 for(j=0; j N; j+) printf( 2d, tij); 27 printf( n); 28 29 二、程序修改题 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 c, y, z, sum; 14 print
5、f(Input x y z: ); 15 scanf( f f f, x, y, z); 16 printf(x= f, y= f, z= f n, x, y, z); 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,它的功能是:将字符串中的前导, -号全部删除,中间和尾部的 *号不删除。例如,字符串中的内容为:*A*BC*DEF*G*,删 除后,字
6、符串中的内容应当是:A*BC*DEF*G*。在编写函数时,不得使用 C语言提供的字符串函数。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 1 #include stdio h 2 void fun(char *a) 3 4 5 main() 6 char s81; 7 void NONO(), 8 printf(Enter a string: n); gets(d); 9 fun(s); 10 printf(The string, after deleted: n); puts(s); 11 NO
7、NO(); 12 13 void NONO() 14 *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * 15 FILE *in, *out ; 16 int i; char s81; 17 in=fopen(in dat, r); 18 out=fopen(out dat, w); 19 for(i=0; i 10; i+) 20 fscanf(in, s, s); 21 fun(s); 22 fprintf(out, s n, s); 23 24 fclose(in); 25 fclose(out); 国家二级 C语言机试(操作题)模拟试卷 702答案与解析 一、程序填空题
8、 1 【正确答案】 (1)N (2)tij (3)tji 【试题解析】 函数 fun的功能是将对称元素相加并将结果存放在左下三角元素中,右上三角元素置为 0,操作顺序是将对称元素相加存放在左下三角元素中,然后将右上三角元素置 0。 第一空:在主函数中 fun函数的调用形式是 “fun(t); ”, t是数组名,故 fun函数的参数是指针,因此,第一空处应为 “N”。第二空: “_2_=tij+ji; ”是将对称元素相加存放在左下三角元素中,左下三角元素可表示为 tij,故第二空处应为 “tij”。第三空: “_3_=0; ”是将右上三角元素 置 0,右上三角元素可表示为 tji,故第三空为 “
9、tji”。 二、程序修改题 2 【正确答案】 (1)#define FU(m, n)(m) (n) (2)return (value); 【试题解析】 本题中函数的功能是计算题干中给出的公式值。本题的解题过程是利用了定义的宏 FU,实现了函数中给出的公式的求值。 (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+b a-b)”,因为 “ ”的优先级高于 “+”或 “-
10、”,所以,要使用括号限定计算优先顺序。所以将“#defineFU(m, n)(m n)”改为 “#define FU(m, n)(m) (n)”。 (2)第二个标识下返回语句的关键字有误。所以,第二个标识下“Return(value); ”应该改为 “return(value); ”, C语言中没有 “Return”这个关键字。 三、程序设计题 3 【正确答案】 1 int j=0; 2 char *p=a; 3 while(*p=*)p+; 4 while(p) 5 aj+=*p; 6 p+; 7 aj= 0; 【试题解析】 该程序功能是将字符串中的前导 “*”号全部删除,中间和尾部的 “*”号不删除。本题的解题过程首先确定由串起始位置开始的第一个非 “*”进行判断,将不是 “*”的字符拷贝到字符串。 (1)首先,使用一个指针 p指向串的起始位置,然后对指针 p指向的字符进行判断,并且如果是 “*”,那么跳过该字符 ,这样确定了由头开始的第一个非 “*”的位置。 (2)然后,在循环过程中将第一个非 “*”字符起始到串尾的字符拷贝到字符串 a。 (3)最后,在新生成的字符串尾加 0。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1