1、二级 C 语言-290 (1)及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.从键盘输入一组无符号整数并保存在数组 arrN中,以整数 0 结束输入,即第 N+1 个数是 0,要求这些数的最大位数不超过 4 位,其元素的个数通过变量 num 传入函数 proc()。请补充函数 proc(),其功能是:从数组 arr 中找出个位和十位的数字之和大于 5 的所有无符号整数,结果保存在数组 yy 中,其个数由函数 proc 返回。 例如,当 arr8=13,1,205,252,2,333,4444,21时实际输入时,数与数之间用 Enter 键
2、分开,bb4=252,333,4444。 注意:部分源程序给出如下。 请勿改动函数 main()和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #define M 1000 int proc(int arr, int bb, int num) int i, m=0; int g, s; for(i=0; inum; i+) g= 1; s=arri/10%10; if(g+s)5) 2; return 3; void main() int arrM; int yyM; int num=0, m=0, i=0; p
3、rintf(“Input number:/n“); do scanf(“%u“, while(arrnum+!=0); m=proc(arr, yy, num); printf(“/nyy=“); for(i=0; im; i+) printf(“%u“, yyi); (分数:30.00)二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:判断一个整数 m 是否是素数,若是返回 1,否则返回 0。在main()函数中,若 proc()返回 1,则输出 YES,若 proc()返回 0,则输出 NO! 请修改程序中的错误,使它能得出正确的结果。 注意:不
4、要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程序: #includestdlib.h #includeconio.h #includestdio.h int proc(int m) int k=2; while(k=m else return 0; void main() int n; system(“CLS“); printf(“/nPlease enter n: “); scanf(“%d“, if(proc(n) printf(“YES/n“); else printf(“NO!/n“); (分数:40.00)_三、程序设计题(总题数:1,分数:30.00)3.
5、请编写函数 proc(),该函数的功能是:计算并输出 (分数:30.00)_二级 C 语言-290 (1)答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.从键盘输入一组无符号整数并保存在数组 arrN中,以整数 0 结束输入,即第 N+1 个数是 0,要求这些数的最大位数不超过 4 位,其元素的个数通过变量 num 传入函数 proc()。请补充函数 proc(),其功能是:从数组 arr 中找出个位和十位的数字之和大于 5 的所有无符号整数,结果保存在数组 yy 中,其个数由函数 proc 返回。 例如,当 arr8=13,1,205,2
6、52,2,333,4444,21时实际输入时,数与数之间用 Enter 键分开,bb4=252,333,4444。 注意:部分源程序给出如下。 请勿改动函数 main()和其他函数中的任何内容,仅在函数 proc()的横线上填入所编写的若干表达式或语句。 试题程序: #includestdio.h #define M 1000 int proc(int arr, int bb, int num) int i, m=0; int g, s; for(i=0; inum; i+) g= 1; s=arri/10%10; if(g+s)5) 2; return 3; void main() int
7、arrM; int yyM; int num=0, m=0, i=0; printf(“Input number:/n“); do scanf(“%u“, while(arrnum+!=0); m=proc(arr, yy, num); printf(“/nyy=“); for(i=0; im; i+) printf(“%u“, yyi); (分数:30.00)解析:arri%10 bbm+=arri m解析 将一个整数对 10 取余,则得到该整数的个位数,将一个整数除以 10 再对 10 取余,则得到该整数的十位数。由程序可以看出,变量 s 保存了整数的十位数,所以应该将整数的个位数保存在变
8、量 g 中;根据题意,当整数的个位与十位的数字之和大于 5 时,则将该整数保存到数组 bb 中;变量 m 记录了满足条件的无符号整数的个数,题目要求将满足条件的无符号整数的个数由proc()函数返回,所以函数返回 m。二、程序改错题(总题数:1,分数:40.00)2.下列给定程序中,函数 proc()的功能是:判断一个整数 m 是否是素数,若是返回 1,否则返回 0。在main()函数中,若 proc()返回 1,则输出 YES,若 proc()返回 0,则输出 NO! 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动 main()函数,不得增行或删行,也不得更改程序的结构。 试题程
9、序: #includestdlib.h #includeconio.h #includestdio.h int proc(int m) int k=2; while(k=m else return 0; void main() int n; system(“CLS“); printf(“/nPlease enter n: “); scanf(“%d“, if(proc(n) printf(“YES/n“); else printf(“NO!/n“); (分数:40.00)_正确答案:()解析:(1)错误:k+ 正确:k+; (2)错误:if(m=k) 正确:if(m=k) 解析 根据 C 语言
10、的语法规则,每一条语句都要以分号结束,因此 k+后要加上分号。而在 if 语句中,而不是把 k 的值赋给 m,因此把 m=k 改为 m=k。三、程序设计题(总题数:1,分数:30.00)3.请编写函数 proc(),该函数的功能是:计算并输出 (分数:30.00)_正确答案:()解析:double proc(int n) int i; double S=0.0, S1=0.0; for(i=1; i=n; i+) S1=S1+pow(i, 0.5); /求每一项 S=S+S1; /按公式求出 S return S; 解析 在本程序中,用 S1 来表示题中每个小括号内的值,第 1 项相当于有 1 个 10.5,第 2 项相当于第 1 项的值加上 20.5,第 3 项相当于第 2 项的值加上 30.5,依此类推。函数 pow(x,y)的功能是求出 x 的 y 次方,程序中用 S 来表示总和值,每循环一次加 1 次 S1 的值,即加 1 项。