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