1、全国计算机二级 C 语言上机试题 38+2015 年及答案解析(总分:30.00,做题时间:90 分钟)1.函数 fun 的功能是:把形参 a 所指数组中的奇数按原顺序依次存放到 a0、a1、a2、中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若 a 所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后 a 所指数组中的数据为:9、1、3、5、7,返回值为 5。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #d
2、efine N 9 int fun(int a, int n) int i,j; j = 0; for (i=0; i /*found*/ if (ai%2=_1_) /*found*/ aj = ai; _2_; /*found*/ return _3_; main() int bN=9,1,4,2,3,6,5,8,7, i, n; printf(“/nThe original data :/n“); for (i=0; iprintf(“/n“); n = fun(b, N); printf(“/nThe number of odd : %d /n“, n); printf(“/nThe
3、odd number :/n“); for (i=0; iprintf(“/n“); (分数:10.00)_2.给定程序 MODI1.C 中函数 fun 的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。 例如,若给 num1 和 num2 分别输入 49 和 21,则输出的最大公约数为 7;若给 num1 和 num2 分别输入 27 和81,则输出的最大公约数为 27。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include int fun(int a,int b) int r,t; if(
4、a /*found*/ t=a; b=a; a=t; r=a%b; while(r!=0) a=b; b=r; r=a%b; /*found*/ return(a); main() int num1, num2,a; printf(“Input num1 num2: “); scanf(“%d%d“, printf(“num1= %d num2= %d/n/n“,num1,num2); a=fun(num1,num2); printf(“The maximun common divisor is %d/n/n“,a); (分数:10.00)_3.假定输入的字符串中只包含字母和*号。请编写函数
5、fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用 C 语言提供的字符串函数。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内容应当是:ABCDEFG。 注意: 部分源程序在文件 PROG1.C 中。请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include void fun( char *a ) main() char s81; printf(“Enter a string:/n“);gets(s); fun( s ); printf(“The string after dele
6、ted:/n“);puts(s); NONO(); (分数:10.00)_全国计算机二级 C 语言上机试题 38+2015 年答案解析(总分:30.00,做题时间:90 分钟)1.函数 fun 的功能是:把形参 a 所指数组中的奇数按原顺序依次存放到 a0、a1、a2、中,把偶数从数组中删除,奇数个数通过函数值返回。例如:若 a 所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后 a 所指数组中的数据为:9、1、3、5、7,返回值为 5。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。不得
7、增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 9 int fun(int a, int n) int i,j; j = 0; for (i=0; i /*found*/ if (ai%2=_1_) /*found*/ aj = ai; _2_; /*found*/ return _3_; main() int bN=9,1,4,2,3,6,5,8,7, i, n; printf(“/nThe original data :/n“); for (i=0; iprintf(“/n“); n = fun(b, N); printf(“/nThe number
8、 of odd : %d /n“, n); printf(“/nThe odd number :/n“); for (i=0; iprintf(“/n“); (分数:10.00)_正确答案:(第一处:判断 ai是否是奇数,若是,则仍保留在原数组中 aj,所以应填:1。 第二处:数组 a 中的元素位置由 j 来控制,每增加一个元素,则 j 加 1,所以应填:j+。 第三处:返回删除偶数后 a 所指数组中数据的元素 j,所以应填:j。)解析:2.给定程序 MODI1.C 中函数 fun 的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。 例如,若给 num1 和 num2 分别输入 49
9、 和 21,则输出的最大公约数为 7;若给 num1 和 num2 分别输入 27 和81,则输出的最大公约数为 27。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include int fun(int a,int b) int r,t; if(a /*found*/ t=a; b=a; a=t; r=a%b; while(r!=0) a=b; b=r; r=a%b; /*found*/ return(a); main() int num1, num2,a; printf(“Input num1 num2:
10、 “); scanf(“%d%d“, printf(“num1= %d num2= %d/n/n“,num1,num2); a=fun(num1,num2); printf(“The maximun common divisor is %d/n/n“,a); (分数:10.00)_正确答案:(第一处:交换值的次序有问题,所以应改为:t=a;a=b;b=t;。 第二处:返回值错误,应改为:return(b);。)解析:3.假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是:删除字符串中所有的*号。在编写函数时,不得使用 C 语言提供的字符串函数。 例如,字符串中的内容为:*A*B
11、C*DEF*G*,删除后,字符串中的内容应当是:ABCDEFG。 注意: 部分源程序在文件 PROG1.C 中。请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include void fun( char *a ) main() char s81; printf(“Enter a string:/n“);gets(s); fun( s ); printf(“The string after deleted:/n“);puts(s); NONO(); (分数:10.00)_正确答案:(void fun( char *a ) int j =0 ; char *p=a; while(*p) if(*p != *) aj+=*p ; p+ ; aj=0; )解析: