1、二级 C 语言-191 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),该函数的功能是把数组 num 中的数按从小到大的顺序排列(数组元素个数及值从主函数中输入)。 例如,输入 n=5,num0num4依次为 5 7 2 8 0,结果为 0 2 5 7 8。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h #define M 100 voi
2、d proc(int num, int n) int i, j, t; for(i=0; 1; i+) for(j=0; 2; j+) if(numjnumj+1) t=numj; numj=numj+1; numj+1=t; void main() int i=0, n=0; int numM; system(“CLS“); printf(“/nInput n: /n“); scanf(“%d“, printf(“/nlnput data: /n“); while(in) printf(“num%d=“, i); scanf(“%d“, i+; proc(num, n); printf(“/
3、n*the result*/n“); for(i=0; in; i+) printf(“%4d“, numi); (分数:30.00)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:求整数 x 的 y 次方的低 3 位值。 例如,整数 6 的 5 次方为 7776,此值的低 3 位值为 776。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h long proc(int x, int y, long*p) int i; long t=1
4、; /*found* for(i=1; iy; i+) t=t*x; *p=t; /*found* t=t/1000; return 1; void main() long t, r; int x, y; printf(“/nInput x and y: “); scanf (“%1d%1d“, t=proc(x, y, (分数:40.00)_三、程序设计题(总题数:1,分数:30.00)3.请编写函数 void proc(int x,int pp,int*n),它的功能是:求出能整除 x 且不是偶数的各整数,并按从小到大的顺序放在 pp 所指的数组中,这些除数的个数通过形参 n 返回。 例如
5、,若 x 中的值为 50,则有 3 个数符合要求,它们是 1,5,25。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includeconio.h #includestdio.h #includestdlib.h void proc(int x, int pp, int*n) void main() int x, arr1000, n, i; system(“CLS“); printf(“/nPlease enter an integer number: /n“); scanf(“%d“,
6、proc(x, arr, for(i=0; in; i+) printf(“%d“, arri); printf(“/n“); (分数:30.00)_二级 C 语言-191 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.请补充函数 proc(),该函数的功能是把数组 num 中的数按从小到大的顺序排列(数组元素个数及值从主函数中输入)。 例如,输入 n=5,num0num4依次为 5 7 2 8 0,结果为 0 2 5 7 8。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的横
7、线上填入所编写的若干表达式或语句。 试题程序: #includestdlib.h #includestdio.h #define M 100 void proc(int num, int n) int i, j, t; for(i=0; 1; i+) for(j=0; 2; j+) if(numjnumj+1) t=numj; numj=numj+1; numj+1=t; void main() int i=0, n=0; int numM; system(“CLS“); printf(“/nInput n: /n“); scanf(“%d“, printf(“/nlnput data: /n
8、“); while(in) printf(“num%d=“, i); scanf(“%d“, i+; proc(num, n); printf(“/n*the result*/n“); for(i=0; in; i+) printf(“%4d“, numi); (分数:30.00)解析:in jn-1解析 由函数 proc()可知,该程序选用的是冒泡法来进行排序,变量 i 为循环次数,因此,第一处填“in”;变量 j 用来判断第 j 个元素和第 j+1 个元素顺序是否正确,因此,第二处填“jn-1”。二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:
9、求整数 x 的 y 次方的低 3 位值。 例如,整数 6 的 5 次方为 7776,此值的低 3 位值为 776。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdio.h long proc(int x, int y, long*p) int i; long t=1; /*found* for(i=1; iy; i+) t=t*x; *p=t; /*found* t=t/1000; return 1; void main() long t, r; int x, y; printf(“/nI
10、nput x and y: “); scanf (“%1d%1d“, t=proc(x, y, (分数:40.00)_正确答案:()解析:(1)错误:for(i=1; iy; i+) 正确:for(i=1; i=y; i+) (2)错误:t=t/1000; 正确:t=t%1000; 解析 按照题目中要求求出整数 x 的 y 次方的低 3 位值,整数 x 的 y 次方为 y 个 x 的乘积,因此,“for(i=1; iy; i+)”应改为“for(i=1; i=y; i+)”;要取低 3 位的值,可以用乘积对 1000 取模,因此,“t=t/1000;”应改为“t=t%1000;”。三、程序设计
11、题(总题数:1,分数:30.00)3.请编写函数 void proc(int x,int pp,int*n),它的功能是:求出能整除 x 且不是偶数的各整数,并按从小到大的顺序放在 pp 所指的数组中,这些除数的个数通过形参 n 返回。 例如,若 x 中的值为 50,则有 3 个数符合要求,它们是 1,5,25。 注意:部分源程序给出如下。 请勿改动 main()函数和其他函数中的任何内容,仅在函数 proc()的花括号中填入所编写的若干语句。 试题程序: #includeconio.h #includestdio.h #includestdlib.h void proc(int x, int
12、 pp, int*n) void main() int x, arr1000, n, i; system(“CLS“); printf(“/nPlease enter an integer number: /n“); scanf(“%d“, proc(x, arr, for(i=0; in; i+) printf(“%d“, arri); printf(“/n“); (分数:30.00)_正确答案:()解析:void proc(int x, int pp, int*n) int i, j=0; for(i=1; ix; i=i+2) if(x%i=0) /能整除 x 且不是偶数的各整数 ppj+=i; /放在 pp 所指的数组中 *n=j; /除数的个数通过形参 n 返回 解析 按照题目中要求求出能整除 x 且不是偶数的各整数,可以通过判断小于整数 x 的所有整数能否整除 x。将能整除 x 的所有奇数放入数组 pp 中。最后将符和条件的整数个数通过形参返回到主函数当中。