去掉最大,小值求平均值求出与剩余数与平均值差的绝对值的最大值

算法存在问题,但自己没找出来

img


#include <stdio.h>
#include <conio.h>
#include <malloc.h>
int main()
{
    int *nums=NULL,*nSave=NULL,i,len=0,n=0,c=0,lc=0,*max,*min,sum=0;
    double avg = 0.0, maxV = 0.0;
    printf("输入任意数字空格分割(输入回车键结束输入,不支持退格删除):\n");
    while(1)
    {
        lc=c;
        c=getch();
        if((c==' ' || c=='\r') && (lc>='0' && lc<='9'))//当前输入字符是空格或者回车且前一个输入的字符是数字,创建内存空间并记录数字
        {
            printf("%c",c);
            if(!nums)
            {
                nums=(int *)malloc(sizeof(int));
                if(!nums)
                {
                    printf("内存申请失败!\n");
                    return 1;
                }
                max=min=&nums[len];
            }
            else
            {
                nSave=(int *)realloc(nums,sizeof(int)*(len+1));
                if(!nSave)
                {
                    printf("内存申请失败!\n");
                    return 1;
                }
                nums=nSave;
                if(*max<n)
                    max=&nums[len];
                if(*min>n)
                    min=&nums[len];
            }
            nums[len]=n;
            n=0;
            len++;
        }
        else if(c>='0' && c<='9')
            printf("%c",c),n=n*10+c-'0';
        if(c=='\r')
        {
            printf("\n");
            break;
        }

    }
    //------打印输入的数组
    printf("输入的数组为:\n");
    for(i=0;i<len;i++)
        printf("%d ",nums[i]);
    printf("\n");
    //------求平均
    for(i=0;i<len;i++)
        if(&nums[i]!=max && &nums[i]!=min)
            sum+=nums[i];

    avg = sum*1.0/(len-2);
    printf("去除最大值和最小值后的平均值为:%f\n",avg);

    for(i=0;i<len;i++)
        if(&nums[i]!=max && &nums[i]!=min)
            if (abs(nums[i] - avg) > maxV)
            {
                maxV = nums[i];
            }
    printf("去除最大值和最小值后的剩余数与平均值差的绝对值的最大值:%f\n",maxV);
    return 0;
}