1、计算机二级(C)上机考试 12 及答案解析(总分:-3.00,做题时间:120 分钟)1.填空题 请补充函数 fun(),该函数的功能是:按0到9统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组 num 中。注意:不能使用字符串库函数。 例如:输入“x=112385713.456+0.909*bc”,结果为:13,32,52,71,92。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include #define N 1000 void fun(char *tt,int nu
2、m) int i,j; int bb10; char *p=tt; for(i=0;i=0 p+; for(i=1,j=0;i_2.改错题 下列给定程序中函数 fun()的功能是计算正整数 num 的各位上的数字之平方和。 例如:输入352,则输出应该是 38;若输入 328,则输出应该是 77。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include long fun(long num) /*found*/ long k=1; do k+=(num%10)*(num%10); num/=
3、10; /*found*/ while(num) return (k); main() long n; clrscr(); printf(“/Please enter a number:“); scanf(“%ld“, printf(“/n%ld/n“,fun(n); (分数:-1.00)_3.编程题 请编一个函数 void fun(int ttMN, int ppN), tt 指向一个 M 行 N 列的二维数组,求出二维数组每列中最大元素,并依次放入 pp 所指的一维数组中。二维数组中的数已在主函数中给出。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函
4、数 fun 的花括号中填入所编写的若干语句。 试题程序: #include #include #define M 3 #define N 4 void fun(int ttMN,int ppN) main() int tMN=68, 32, 54, 12,14, 24, 88, 58,42, 22, 44, 56; int pN,i,j,k; clrscr(); printf(“The riginal data is:/n“); for(i=0;i_计算机二级(C)上机考试 12 答案解析(总分:-3.00,做题时间:120 分钟)1.填空题 请补充函数 fun(),该函数的功能是:按0到9统
5、计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组 num 中。注意:不能使用字符串库函数。 例如:输入“x=112385713.456+0.909*bc”,结果为:13,32,52,71,92。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun()的横线上填入所编写的若干表达式或语句。 试题程序: #include #define N 1000 void fun(char *tt,int num) int i,j; int bb10; char *p=tt; for(i=0;i=0 p+; for(i=1,j=0;i_正确答案:(【1】*
6、p 【2】bb*p-0+ 【3】numj=bbi )解析:填空 1:通过移动指针 p,指向字符串 tt 中的各个字符,当指针 p 所指的字符为/0时,即指向字符串 tt 的最后一个字符,while 循环结束。填空 2:将字符串中的数字字符0到9的个数都保存在数组bb10中。*p-0实现将字符0的个数保存在 bb0中,将字符1的个数保存在 bb1中,依此类推,直到将字符9的个数保存在 bb9中。填空 3:由于奇数数字字符的个数存于 bb1、bb3、bb5、bb7、bb9中,所以 for 循环的目的是将这些元素分别赋给 num0、num1、num2、num3、num4。2.改错题 下列给定程序中函
7、数 fun()的功能是计算正整数 num 的各位上的数字之平方和。 例如:输入352,则输出应该是 38;若输入 328,则输出应该是 77。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include #include long fun(long num) /*found*/ long k=1; do k+=(num%10)*(num%10); num/=10; /*found*/ while(num) return (k); main() long n; clrscr(); printf(“/Please
8、enter a number:“); scanf(“%ld“, printf(“/n%ld/n“,fun(n); (分数:-1.00)_正确答案:((1)错误:long k=1; 正确:long k=0; (2)错误:while(num) 正确:while(num); )解析:错误 1:k 用来存放各位数字的平方和,初值应为 0。 错误 2:do-while 语句的语法,while()后加分号。 3.编程题 请编一个函数 void fun(int ttMN, int ppN), tt 指向一个 M 行 N 列的二维数组,求出二维数组每列中最大元素,并依次放入 pp 所指的一维数组中。二维数组中
9、的数已在主函数中给出。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #include #include #define M 3 #define N 4 void fun(int ttMN,int ppN) main() int tMN=68, 32, 54, 12,14, 24, 88, 58,42, 22, 44, 56; int pN,i,j,k; clrscr(); printf(“The riginal data is:/n“); for(i=0;i_正确答案:(void fun(int ttMN,int ppN) int i,j,max; for(j=0;jmax) /*如果各列中的其他元素比最大值还大, 则将这个更大的元素看做当前该列中最大的元素*/ max=ttij; ppj=max; /*将各列的最大值依次放入 pp 数组中*/ )解析:本题中函数的功能是求出二维数组中每列的最大元素。首先,假设各列中的第一个元素最大,然后利用行标值的移动来依次取得各列中其他元素的值,并与假设的最大值进行比较,如果遇到更大的,则把这个更大的元素看做当前该列中最大的元素,继续与该列中其他元素比较。