问答题 给定程序MODI1.C中,fun函数的功能是:在任意给定的N个正整数中,从左到右依次逐个取三个数作为一组,按值大小找出该组数的中值,用该中值替换与该组数对应的原三个数中的中间位置的数。处理后原数列中首尾2个数不变。处理后数列在主函数中输出。 例如,有10个正整数如下: 初始数列为:6 5 7 23 18 5 8 21 45 38 第1组数为:6 5 7中值为:6替换后的数列为: 6 6 7 23 18 5 8 21 45 38 第2组数为:5 7 23中值为:7替换后的数列为:6 6 7 23 18 5 8 21 45 38 第3组数为:7 23 18中值为:18替换后的数列为:6 6 7 18 18 5 8 21 45 38 第4组数为:23 18 5中值为:18替换后的数列为:6 6 7 18 18 5 8 2l 45 38 第5组数为:18 5 8中值为:8替换后的数列为:6 6 7 18 18 18 8 21 45 38 第6组数为:5 8 21中值为:8替换后的数列为:6 6 7 18 18 8 8 21 45 38 第7组数为:8 21 45中值为:21替换后的数列为:6 6 7 18 18 8 8 21 45 38 第8组数为:2l 45 38中值为:38替换后的数列为:6 6 7 18 18 8 8 21 38 38 最终结果为:6 6 7 18 18 8 8 21 38 38 请改正程序中指定部位的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include < stdio.h > #define N 1 0 int findmid(int a,int b,int c) {int t; t=(a >b)?(b >c?b:(a >c?c:a)):((a >c)?a:((b >c)?c:b)); /*********found*********/ return b; } void fun(int x[]) {int i,a,b,c,t[N]; /*********found*********/ for(i=0;i < N;i++)t[i]=x[i] for(i=0;i < N一2;i++) {a=t[i];b=t[i+1];c=t[i+2]; /*********found*********/ t[i+1]=findmid(a,b,c); } } main() {int i,x[N]={6,5,7,2 3,18,5,8,21,4 5,38); for(i=0;i < N;i++) printf("%d",x[i]); printf("/n"); fun(x); for(i=0;i < N;i++) printf("%d",x[i]); printf("/n"); }
【正确答案】正确答案:(1)retum t; (2)for(i=0;i < N;i++)t[i]=x[i]; (3)x[i+1] =findmid(a,b,c);
【答案解析】解析:(1)函数findmid的功能是找到a、b、c三个数中的中间数,并存放在变量t中,因此应返回t。 (2)语法错误,句末缺少分号。 (3)本程序是对数组x进行操作,数组t只是用来暂时存放数组x中的元素,因此此处应为x[i+1] = findmid(a,b,c)。