1、二级 C 语言机试-161 及答案解析(总分:100.00,做题时间:90 分钟)一、填空题(总题数:1,分数:30.00)在给定程序中,函数 fun 的功能是:将形参 std 所指结构体数组中年龄最大者的数据作为函数值返回,并在 main 函数中输出。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的 BLANK1.C 中。不得增行或删行,也不得更改程序的结构。文件 BLANK1.C 内容如下:#includestdio.htypedef structchar name10;int age;STD;STD fun(STD std,int n
2、)STD max;int i;/*found*/max= (1) ;for(i=1;in;i+)/*found*/if(max.age (2) )max=stdi;return max;void main( )STD std5=“aaa“,17,“bbb“,16,“ccc“,18,“ddd“,17,“eee“,15;STD max;max=fun(std,5);printf(“The result/n“);/*found*/printf(“Name:%s,Age:%d/n“, (3) ,max.age);(分数:30.00)填空项 1:_填空项 1:_填空项 1:_二、改错题(总题数:1,分数
3、:30.00)1.程序 MODI1.C 中函数 fun 和 funx 的功能是:用二分法求方程 2x3-4x2+3x-6=0 的一个根,并要求绝对误差不超过 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,d
4、ouble 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 main( )double m,n,root;printf(“Enter m n:/n“);scanf(“%1f%1f“, max=0; for(i=1;it;i+)if(sismax)max=i;*k=max; )解析:解析 形参指针 s 指向数组 a,形参 t 是数组的长度,指针 k 带回数组最大元素的下标。函数 fun中定义了一个变量 max,用来存
5、放最大元素的下标,smax就是 s 数组的最大元素。程序采用的算法是:首先将第一个元素的下标 0 赋值给 max,再通过 i 循环,将 s 数组中剩余的所有元素与 smax比较,如果比 smax大,则对 max 赋值为 i,确保变量 max 始终存放最大元素的下标。循环结束后,将 max 赋值给*k,通过 k 带回最大元素的下标。归纳总结 本套试题的程序填空和程序设计题考查的是找最大值和最小值的算法。此类题目经常在数据类型上发生一些变化,例如求链表结点的最大值,在结构体数组中求结构体变量某个成员列表的最大值,在整型数组中找最大值。数据结构会有一定的变化,但是求解算法比较简单。通常是引入一个变量 max,将需要比较的第一个数赋给它,然后再通过循环,将 max 和后面的数依次进行比较,若比 max 大,则对max 重新赋值。常用程序段如下:max=a0;for(i=1;in;i+)if(maxai)max=ai;同理,可求数据的最小值。如果是结构体数组,那么除了注意算法正确外,还要注意结构体变量的引用方法。如果是求链表结点的最大值,则需要注意链表的遍历方法。