1、二级 C语言-66 及答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.N个有序整数数列已放在一维数组中,给定的下列程序中,函数 fun()的功能是:利用折半查找法查找整数 m在数组中的位置。若找到,则返回其下标值;反之,则返回“Not be found!”。折半查找法的基本算法是:每次查找前先确定数组中待确定的范围:low 和 high(lowhigh),然后把 m与中间位置(mid)中元素的值进行比较。如果 m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中,直到 low
2、high,查找结束。注意 部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的横线上填入所编写的若干表达式或语句。试题源程序#include stdio.h#define N 10int fun(int a,int m)int low=0, high=N-1, mid;while(low=high)mid=U U /U /U;if(mamid)high=U U /U /U;eiseif(mamid)low=mid+1;elsereturn(mid);U U /U /U(-1);main()int i, aN=(-3, 4, 7, 9, 13, 24, 67,
3、89, 100, 180), k, m;printf(“a数组中的数据如下: “);for(i=0; iN; i+);printf(“%d“, ai);printf(“Enter m: “);scanf(“%d“, m);k=fun(a, m);if(k=0)printf(“m=%d, index=%d/n“, m, k);elseprintf(“Not be found/n“);(分数:30.00)填空项 1:_二、B改错题/B(总题数:1,分数:30.00)2.程序 MODI1.C中函数 fun和 funx的功能是:用二分法求方程 2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过
4、 0.001。例如,若给 m输入-100,给 n输入 90,则函数求得的一个根值为 2.000。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。文件 MODI1.C内容如下:#includestdio.h#includemath.hdouble funx(double x)return(2*x*x*x-4*x*x+3*x-6);double fun(double m,double n)/*found*/int r;r=(m+n)/2;/*found*/while(fabs(n-m)0.001)if(funx(r)*funx(n)0
5、) m=r;else n=r;r=(m+n)/2;return r;void mainU /Udouble m,n,root;printf(“Enter m n:/n“);scanf(“%1f%1f“, fun ( i+) printf(“%4.1f/n“, s.si); /*输出各科成绩*/ printf(“/nave=%7.3f/n“,s.ave); /*输出平均分*/ (分数:40.00)_二级 C语言-66 答案解析(总分:100.00,做题时间:90 分钟)一、B填空题/B(总题数:1,分数:30.00)1.N个有序整数数列已放在一维数组中,给定的下列程序中,函数 fun()的功能是
6、:利用折半查找法查找整数 m在数组中的位置。若找到,则返回其下标值;反之,则返回“Not be found!”。折半查找法的基本算法是:每次查找前先确定数组中待确定的范围:low 和 high(lowhigh),然后把 m与中间位置(mid)中元素的值进行比较。如果 m的值大于中间位置元素中的值,则下一次的查找范围放在中间位置之后的元素中;反之,下次查找范围落在中间位置之前的元素中,直到 lowhigh,查找结束。注意 部分源程序给出如下。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的横线上填入所编写的若干表达式或语句。试题源程序#include stdio.h#defin
7、e N 10int fun(int a,int m)int low=0, high=N-1, mid;while(low=high)mid=U U /U /U;if(mamid)high=U U /U /U;eiseif(mamid)low=mid+1;elsereturn(mid);U U /U /U(-1);main()int i, aN=(-3, 4, 7, 9, 13, 24, 67, 89, 100, 180), k, m;printf(“a数组中的数据如下: “);for(i=0; iN; i+);printf(“%d“, ai);printf(“Enter m: “);scanf
8、(“%d“, m);k=fun(a, m);if(k=0)printf(“m=%d, index=%d/n“, m, k);elseprintf(“Not be found/n“);(分数:30.00)填空项 1:_ (正确答案:1 (low+high)/2 2 mid-1 3 return)解析:解析 填空 1:根据题目的意思,这里应该是确定折半查找的中间位置,所以很明显应该填(low+high)/2。注意,这个式子返回的是整型数据,即如果分子为 7,则结果为 3。 填空 2:根据题目的意思,中间的元素值大时应该选择前半段进行下次查找,所以应该把 mid前一位的下标赋值给 high。 填空
9、3:由算法可以看出,这里应该是所有转换完毕仍然没有找到满足条件的地方,即应该返回-1,所以使用关键字“remm”。二、B改错题/B(总题数:1,分数:30.00)2.程序 MODI1.C中函数 fun和 funx的功能是:用二分法求方程 2x3-4x2+3x-6=0的一个根,并要求绝对误差不超过 0.001。例如,若给 m输入-100,给 n输入 90,则函数求得的一个根值为 2.000。请改正程序中的错误,使程序能输出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。文件 MODI1.C内容如下:#includestdio.h#includemath.hdoub
10、le funx(double x)return(2*x*x*x-4*x*x+3*x-6);double fun(double m,double n)/*found*/int r;r=(m+n)/2;/*found*/while(fabs(n-m)0.001)if(funx(r)*funx(n)0) m=r;else n=r;r=(m+n)/2;return r;void mainU /Udouble m,n,root;printf(“Enter m n:/n“);scanf(“%1f%1f“, fun ( i+) printf(“%4.1f/n“, s.si); /*输出各科成绩*/ prin
11、tf(“/nave=%7.3f/n“,s.ave); /*输出平均分*/ (分数:40.00)_正确答案:(void fun(STREC *p) int i; p-ave=0.0; for(i=0;iN;i+) p-ave=p-ave+p-si; /*求各门成绩的总和*/ p-ave=p-ave/N; /*求平均分*/ )解析:解析 本题考查自己定义形参的相关知识点,程序流程是这样的,在 fun()函数中求出平均分后,返回到主函数时平均分也要带回,所以只能定义一个指针类型的形参 STREC *p,此时,引用成员的方式可以是用指向运算符即 p-ave 和 p-si,当然,也可用(*p).ave 和(*p).si。