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