1、二级 C 语言机试-254 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)请补充 main()函数,该函数的功能是:把一个二维字符数组每行字符串中最大的字符复制到字符数组 s中。例如,如果 arr3=“hoih“, “yufui“, “xgf“,则 str=“oyx“。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容。试题程序:#includestdlib.h#includestdio.hvoid main()int i=0;char *arr3=“hoih“, “yufui“, “xgf“; char *p;char
2、str8;system(“CLS“);(1) ;for(i=0; i3; i+)stri= *pi;while(* pi)if (stri*pi)stri=*pi;(2) ;(3) ;printf(“new string/n“);puts(str);(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、改错题(总题数:1,分数:30.00)1.下列给定程序中,函数 proc()的功能是:先从键盘上输入一个 3 行 3 列的矩阵的各个元素的值,然后输出主对角线元素之积。请修改函数 proc()中的错误,使它能得出正确的结果。注意:不要改动 main()函数,不得增行或删行,也不得更改
3、程序的结构。试题程序:#includestdio.hvoid proc()int arr33, mul;int i, j;mul=1;printf(“please input an 3*3 array: /n“);for(i=0; i3; i+)/*found*for(i=0; j3; j+)scanf(“%d“, arrij);for(i=0; i3; i+)/*found*mul=mul*arrij;printf(“Mul=%d/n“, mul);void main()proc();(分数:30.00)填空项 1:_三、编程题(总题数:1,分数:40.00)2.请编写一个函数 unsign
4、ed proc(unsigned u),u 是一个大于 10 的无符号整数,若 u 是 n(5n2)位的整数,则函数求出 u 的后 n-1 位的数作为函数值返回。例如,u 值为 1234,则函数返回 234;若 u 值为 234,则函数返回 34。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 proc 的花括号中填入所编写的若干语句。试题程序:#includestdlib.h#includeconio.h)#includestdio.hunsigned proc(unsigned u)void main()unsigned x;system(“CLS“);
5、printf(“Enter a unsigned integer number: “);scanf(“%u“, x);printf(“The original data is:%u/n“, x);if(x10)printf(“Data error!“);elseprintf(“The result: %/kn“, proc(x);(分数:40.00)_二级 C 语言机试-254 答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)请补充 main()函数,该函数的功能是:把一个二维字符数组每行字符串中最大的字符复制到字符数组 s中。例如,如果 arr3
6、=“hoih“, “yufui“, “xgf“,则 str=“oyx“。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容。试题程序:#includestdlib.h#includestdio.hvoid main()int i=0;char *arr3=“hoih“, “yufui“, “xgf“; char *p;char str8;system(“CLS“);(1) ;for(i=0; i3; i+)stri= *pi;while(* pi)if (stri*pi)stri=*pi;(2) ;(3) ;printf(“new string/n“);puts(str)
7、;(分数:30.00)填空项 1:_ (正确答案:p=arr)解析:填空项 1:_ (正确答案:pi+)解析:填空项 1:_ (正确答案:stri=/0)解析:解析 由程序可知,变量 p 指向的二维数组的首地址,因此1处填 p=arr;要找出二维数组中每一行的最大字符,就要检查每一行的每一个字符,因此2处填 pi+;最后要为得到的结果字符串加上结束符,因此3处填 stri=/0。二、改错题(总题数:1,分数:30.00)1.下列给定程序中,函数 proc()的功能是:先从键盘上输入一个 3 行 3 列的矩阵的各个元素的值,然后输出主对角线元素之积。请修改函数 proc()中的错误,使它能得出正
8、确的结果。注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。试题程序:#includestdio.hvoid proc()int arr33, mul;int i, j;mul=1;printf(“please input an 3*3 array: /n“);for(i=0; i3; i+)/*found*for(i=0; j3; j+)scanf(“%d“, arrij);for(i=0; i3; i+)/*found*mul=mul*arrij;printf(“Mul=%d/n“, mul);void main()proc();(分数:30.00)填空项 1:_ (
9、正确答案:(1)错误:for(i=0; j3; j+) 正确:for(j=0; j3; j+)(2)错误:mul=mul*arrij; 正确:mul=mul*arrii;)解析:解析 由函数 proc 可知,变量 i,j 分别表示二维数组的行和列,从键盘输入二维数组的元素是按行输入的。因此 for(i=0; j3; j+)应改为 for(j=0; ja; j+);二维数组主对角线上元素的两个下标是相等的,因此 mul=mul*arrij;应改为 mul=mul*arrii。三、编程题(总题数:1,分数:40.00)2.请编写一个函数 unsigned proc(unsigned u),u 是一
10、个大于 10 的无符号整数,若 u 是 n(5n2)位的整数,则函数求出 u 的后 n-1 位的数作为函数值返回。例如,u 值为 1234,则函数返回 234;若 u 值为 234,则函数返回 34。注意:部分源程序已给出。请勿改动主函数 main 和其他函数中的任何内容,仅在函数 proc 的花括号中填入所编写的若干语句。试题程序:#includestdlib.h#includeconio.h)#includestdio.hunsigned proc(unsigned u)void main()unsigned x;system(“CLS“);printf(“Enter a unsigned
11、 integer number: “);scanf(“%u“, x);printf(“The original data is:%u/n“, x);if(x10)printf(“Data error!“);elseprintf(“The result: %/kn“, proc(x);(分数:40.00)_正确答案:(unsigned proc(unsigned u)if(u=10000) /此时 w 为 5 位,则返回其后的 4 位return u% 10000;if(u=1000) /此时 w 为 4 位,则此时返回其后的 3 位return u%1000;if(u=100) /此时 w 为 3 位,则返回其后的 2 位return u%100;if(u=10) /此时 w 为 2 位,则返回其后的 1 位return u%10;)解析:解析 要返回无符号整数的后 n-1 位,首先要判断无符号整数的位数,然后通过求余来实现。