m0_64712782 2022-01-09 21:59 采纳率: 42.9%
浏览 35
已结题

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

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

img

  • 写回答

1条回答 默认 最新

  • 五一编程 2022-01-09 23:27
    关注
    
    #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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月19日
  • 已采纳回答 3月11日
  • 创建了问题 1月9日

悬赏问题

  • ¥15 一道ban了很多东西的pyjail题
  • ¥15 C++识别堆叠物体异常
  • ¥15 微软硬件驱动认证账号申请
  • ¥15 有人知道怎么在R语言里下载Git上的miceco这个包吗
  • ¥15 GPT写作提示指令词
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题
  • ¥15 哪位能做百度地图导航触点播报?
  • ¥15 请问GPT语言模型怎么训练?