1、国家二级 C语言机试(操作题)模拟试卷 358及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.函数 fun的功能是进行数字字符转换。若形参 ch中是数字字符09,则0转换成9,1啭换成8,2转换成7,9转换成0;若是其他字符则保持不变;并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1C 中。 不得增行或删行,也不得更改程序的结构!1 #includestdioh2 *found*3 _1_ fun(char ch)4 5 *found*6 i
2、f(ch=0 _2_)7 *found*8 return 9-(ch- _3_ );9 return ch;10 11 main()12 char c1,c2;13 printf(nThe result:n);14 c1=2;c2=fun(c1);15 printf(c1=c c2=cn, c1,c2);16 c1=8;c2=fun(c1);17 printf(c1=c c2=cn,c1,c2);18 c1=a;c2=fun(c1);19 printf(c1=c c2=cn,c1,c2);20 (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数
3、fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includemathh3 void fun(int a,int *b,int *c)4 int i,j,d,y;5 for(i=3;i=a2;i=i+2) 6 *found*7 y=1;8 for(j=2;j=sqrt(double)i);j+)9 if(ij=0)y=0;10 if(y=1)11 *found*12 d=a-
4、i;13 for(j=2;j=sqrt(double)d);j+)14 if(dj=0)y=0;15 if(y=1)16 *b=i;*c=d;17 18 19 20 main()21 int a,b,c;22 do23 printf(nInput a:); scanf(d,a);24 while(a2);25 fun(a,b,c);26 printf(nnd=d+dn,a,b,c);27 (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,其功能是:将所有大于 1小于整数 m的非素数存入 xx所指数组中,非素数的个数通过 k传回。 例如,若输入:17,则应输
5、出: 4 6 8 9 10 12 14 15 16。 注意:部分源程序在文件PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。1 #includestdioh2 void fun(int m,int *k,int xx)3 45 6 main()7 8 int m,n,zz100;9 void NONO();10 printf(nPlease enter an integer number between 10 and 100:);11 scanf(d,c2=fun(c1);”,而 c1和 c2是 char变量,可知 fun函数
6、的返回值类型是 char,故第一空处补充返回值类型应为“char”。 第二空:数字字符是“09p”,因此数字字符必须“ch=0”且“ch=9”,故第二空处应为“ch=9”。 第三空:数字字符转换规则是:“0”转换成“9”,“1”转换成“8”,“2”转换成“7,9”转换成“0”,即返回值为“9-(ch-0)”,故第三空处应为“0”。二、程序修改题(总题数:1,分数:2.00)2.给定程序 MODI1C 中函数 fun的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。 请改正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动 main
7、函数,不得增行或删行,也不得更改程序的结构!1 #includestdioh2 #includemathh3 void fun(int a,int *b,int *c)4 int i,j,d,y;5 for(i=3;i=a2;i=i+2) 6 *found*7 y=1;8 for(j=2;j=sqrt(double)i);j+)9 if(ij=0)y=0;10 if(y=1)11 *found*12 d=a-i;13 for(j=2;j=sqrt(double)d);j+)14 if(dj=0)y=0;15 if(y=1)16 *b=i;*c=d;17 18 19 20 main()21 in
8、t a,b,c;22 do23 printf(nInput a:); scanf(d,a);24 while(a2);25 fun(a,b,c);26 printf(nnd=d+dn,a,b,c);27 (分数:2.00)_正确答案:(正确答案:(1)y=1; (2)d=a-i;)解析:解析:函数的功能是为一个偶数查找两个素数,这两个素数之和等于该偶数。 (1)第一标识下“Y=1;”变量 Y没有定义,编译时会提示出错。题中用标志 y区别 i是否是素数,y=1 是素数,y=0 不是素数。第一个标识下当 i是素数时,y 最后的值就是进入循环结构前的初始化值 0,标识该值不是素数,所以“Y=1;”应
9、该改为“y=1;”。 (2)在语句“if(v=1)”中,应该是判断(a-i)是否是素数,即 d应赋值“a-i”而不是“d=a-i;”,所以第二个标识下“d=a-i;”,改为“d=a-i;”。三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,其功能是:将所有大于 1小于整数 m的非素数存入 xx所指数组中,非素数的个数通过 k传回。 例如,若输入:17,则应输出: 4 6 8 9 10 12 14 15 16。 注意:部分源程序在文件PROG1C 中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。1 #includestdio
10、h2 void fun(int m,int *k,int xx)3 45 6 main()7 8 int m,n,zz100;9 void NONO();10 printf(nPlease enter an integer number between 10 and 100:);11 scanf(d, 5 while(ji) 6 (if(ij=0) 如果 i不是素数 7 xxt=i; 8 t+; 9 break; 10 11 j+; 12 *k=t;)解析:解析:(1)根据求素数的方法判断数 i是否为素数。 (2)把不是素数的数留下来,其方法是:如果该数是素数则不处理;如果不是素数则放到数组 xx中,并且把数组的下标加 1,为下一个不是素数的数放在数组中做准备。 (3)返回个数,把 xx数组中已经写入的数的个数返回即可,即把数组 xx的最大下标加 1返回即可。