1、二级 C 语言-398 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:计算下式前 n 项的和,并作为函数值返回。 (分数:30.00)二、程序修改题(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:判断一个整数是否为素数,若是素数返回 1,否则返回 0。 在 main 函数中,若 fun 返回 1 输出 YES,若 fun 返回 0 输出 NO!。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #
2、includestctlib.h #includeconio.h #includestdio.h int fun(int m) int k=2; while(k=m else return 0; void main() int n; system(“CLS“); printf(“/nplease enter n:“); scanf(“%d“, if(fun(n)printf(“YES/n“); else printf(“NO!/n“); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:找出一维整型数组元素中最大的值及其所在的下标,并通过形参传
3、回。数组元素中的值已在主函数中赋予。 主函数中 x 是数组名,n 是 x 中的数据个数,max 存放最大值,index 存放最大值所在元素的下标。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includetime.h #includestdlib.h #includestdio.h void fun(int a,int n,int*max,int*d) void main() int i,x20,max,index,n=10; stand(unsigned)time(NULL); for(i=
4、0;i=n;i+) xi=rand()%50; printf(“%4d“,xi); /*输出一个随机数组*/ printf(“/n“); fun(x,n, printf(“Nax=%5d,Index=%4d/n“,max,index); (分数:40.00)_二级 C 语言-398 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:计算下式前 n 项的和,并作为函数值返回。 (分数:30.00)解析:(1)1 (2)2*i (3)(-1) 解析 填空 1:由 fun 函数整体结构可以看出 k 的作用是赋值,
5、并累加各项前边的正负号,由于第一项是正的,因此赋给 k 的值为 1。 填空 2:此空下一行的表达式 k*(2*i-1)*(2*i+1)/(t*t)累加的通项,k 为正负号,由题目中的公式可知t=2*i。 填空 3:由于通项前边的正负号每次都要发生变化,因此 k=k*(-1)。二、程序修改题(总题数:1,分数:30.00)2.下列给定程序中函数 fun 的功能是:判断一个整数是否为素数,若是素数返回 1,否则返回 0。 在 main 函数中,若 fun 返回 1 输出 YES,若 fun 返回 0 输出 NO!。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增
6、行或删行,也不得更改程序的结构! 试题程序: #includestctlib.h #includeconio.h #includestdio.h int fun(int m) int k=2; while(k=m else return 0; void main() int n; system(“CLS“); printf(“/nplease enter n:“); scanf(“%d“, if(fun(n)printf(“YES/n“); else printf(“NO!/n“); (分数:30.00)解析:(1)k+; (2)if(m=k) 解析 函数 fun 的功能是判断 m 是否为素数
7、:m 从 2 开始作为除数,并对 m 取余,若不存在一个数使得余数为0,则 m 为素数,程序的错误在于 if(m=k)语句中的逻辑表达式写成了赋值语句。三、程序设计题(总题数:1,分数:40.00)3.请编写函数 fun,其功能是:找出一维整型数组元素中最大的值及其所在的下标,并通过形参传回。数组元素中的值已在主函数中赋予。 主函数中 x 是数组名,n 是 x 中的数据个数,max 存放最大值,index 存放最大值所在元素的下标。 注意:部分源程序给出如下。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 试题程序: #includeti
8、me.h #includestdlib.h #includestdio.h void fun(int a,int n,int*max,int*d) void main() int i,x20,max,index,n=10; stand(unsigned)time(NULL); for(i=0;i=n;i+) xi=rand()%50; printf(“%4d“,xi); /*输出一个随机数组*/ printf(“/n“); fun(x,n, printf(“Nax=%5d,Index=%4d/n“,max,index); (分数:40.00)_正确答案:()解析:void fun(int a,int n,int*max,int*d) int i; *max=a0; *d=0; for(i=1;in;i+) /*将最大的元素放入指针 max 所指的单元,最大元素的下标放入指针 d 所指的单元*/ if(*maxai) *max=ai;*d=i;) 解析 查找最大值及其下标需要定义两个变量,该程序直接使用形参 max 和 d,由于它们都是指针变量,所以在引用它所指向的变量时要对它进行指针运算。循环语句用来遍历数组元素,条件语句用来判断该数组元素是否最大。