M102

02-程序修改题 软件154 范金瑞 471浏览

所属年份:2011.9

给定程序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 21 45 38

第5组数为:18 5 8 中值为:8 替换后的数列为:6 6 7 18 18 8 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组数为:21 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   10
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,23,18,5,8,21,45,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)return  t;    
(2)for(i=0;i

【解题思路】
(1)函数findmid的功能是找到a、b、c三个数中的中间数,并存放在变量t中,因此应返回t。
(2)语法错误,句末缺少分号。
(3)本程序是对数组x进行操作,数组t只是用来暂时存放数组x中的元素,因此此处应为x[i+1]=findmid(a,b,c)。