1、二级 C 语言-363 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.函数 fun 的功能是进行字母转换。若形参 ch 中是小写英文字母,则转换成对应的大写英文字母:若 ch中是大写英文字母,则转换成对应的小写英文字母;若是其他字符,则保持不变,并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includectype.h char fun(char ch) /*found*/ if
2、(ch=“a“) 1(ch=“z“) return(ch-“a“+“A“); if(isupper(ch) /*found*/ return ch+“a“- 2; /*found*/ return 3; main() char c1,c2; printf(“/nThe result:/n“); c1=“w“;c2=fun(c1); printf(“c1=%c c2=%c“,c1,c2); c1=“w“;c2=fun(c1); printf(“c1=%c c2=%c“,c1,c2); c1=“8“;c2=fun(c1); printf(“c1=%c c2=%c“,c1,c2); (分数:30.0
3、0)二、程序改错题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:给一维数组 a 输入任意 4 个整数,并按如下的规律输出。例如,输入 1、2、3、4,程序运行后输出以下方阵: 4 1 2 3 3 4 1 2 2 3 4 1 1 2 3 4 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #define M 4 /*found*/ void fun(int a) int i,j,k,m; printf(“Enter 4 number:“); for(i=0
4、;iM;i+) scanf(“%d“, printf(“/n/nThe result:/n/n“); for(i=M;=i0;i-) k=aM-1; for(j=M-1;j0;j-) /*found*/ aj=aj+1; a0=k; for(m=0;mM;m+) printf(“%d“,am); printf(“/n“); void main() int aM; fun(a); printf(“/n/n“); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.请编写一个函数 fun,它的功能是:计算并输出给定整数 n 的所有因子(不包括 1 与自身)之和。规定 n的值不大于
5、 1000。 例如,若主函数从键盘给 n 输入的值为 856,则输出为 sum=763。 注意:部分源程序给出如下。 请勿改动 main 函数和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includestdio.h int fun(int n) main() int n,sum; printf(“Input n:“); scanf(“%d“, sum=fun(n); printf(“sum=%d/n“,sum); (分数:40.00)_二级 C 语言-363 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30
6、.00)1.函数 fun 的功能是进行字母转换。若形参 ch 中是小写英文字母,则转换成对应的大写英文字母:若 ch中是大写英文字母,则转换成对应的小写英文字母;若是其他字符,则保持不变,并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的内容,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includectype.h char fun(char ch) /*found*/ if(ch=“a“) 1(ch=“z“) return(ch-“a“+“A“); if(isupper(ch) /*fo
7、und*/ return ch+“a“- 2; /*found*/ return 3; main() char c1,c2; printf(“/nThe result:/n“); c1=“w“;c2=fun(c1); printf(“c1=%c c2=%c“,c1,c2); c1=“w“;c2=fun(c1); printf(“c1=%c c2=%c“,c1,c2); c1=“8“;c2=fun(c1); printf(“c1=%c c2=%c“,c1,c2); (分数:30.00)解析:(1) printf(“Enter 4 number:“); for(i=0;iM;i+) scanf(“
8、%d“, printf(“/n/nThe result:/n/n“); for(i=M;=i0;i-) k=aM-1; for(j=M-1;j0;j-) /*found*/ aj=aj+1; a0=k; for(m=0;mM;m+) printf(“%d“,am); printf(“/n“); void main() int aM; fun(a); printf(“/n/n“); (分数:30.00)解析:(1)void fun(int *a) (2)aj=aj-1; 解析 (1)由函数的调用形式可知,函数 fun 的形参变量应为指针类型。 (2)每次循环都将最后一个元素取出,使前面的元素向后
9、移动一位,因此为 aj=aj-1;。三、程序设计题(总题数:1,分数:40.00)3.请编写一个函数 fun,它的功能是:计算并输出给定整数 n 的所有因子(不包括 1 与自身)之和。规定 n的值不大于 1000。 例如,若主函数从键盘给 n 输入的值为 856,则输出为 sum=763。 注意:部分源程序给出如下。 请勿改动 main 函数和其他函数中的任何内容,仅在函数 fun 的花括号中填入所编写的若干语句。 试题程序: #includestdio.h int fun(int n) main() int n,sum; printf(“Input n:“); scanf(“%d“, sum=fun(n); printf(“sum=%d/n“,sum); (分数:40.00)_正确答案:()解析:int fun(int n) int s=0,i; for(i=2;i=n-1;i+) /*将 n 减 1 累加*/ if(n%i=0) s+=i; return s; 解析 本程序的实现步骤为:首先遍历从 2n-1 的所有整数;然后用条件语句找出能被 n 整除的所有整数,并累加求和;最后返回值。