怎样用c语言任意输入几个数去掉最大值和最小值求平均值

怎样用c语言任意输入几个数去掉最大值和最小值求平均值... 怎样用c语言任意输入几个数去掉最大值和最小值求平均值 展开
 我来答
自我编程
2019-04-18 · 科技优质答主
自我编程
采纳数:1481 获赞数:4283

向TA提问 私信TA
展开全部

单纯判断最大值最小值求平均很容易。

但题目要求输入任意个数,也就是不能预设数组大小。

如果不考虑数字存储,只是单纯判断最大最小然后求平均,可以定义变量sum来累加输入的值,然后有max和min变量记录最大值和最小值,最后sum减去max和min求平均就可以了。

但是如果想要同时把输入的数字保存到数组中。那么需要动态申请内存。

我下面代码按照最后一种情况写。

代码功能说明:

连续输入任意个数字空格分割,回车确认。(注意:数字空格回车以外的键,按了也没用,也不支持退格键删除)。

在动态存储数字到数组的同时,使用max和min指针记录最大值和最小值对应数组的内存地址。

#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;
    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];
    printf("去除最大值和最小值后的平均值为:%f\n",sum*1.0/(len-2));
    return 0;
}
听不清啊
高粉答主

2019-04-18 · 说的都是干货,快来关注
知道顶级答主
回答量:7.8万
采纳率:89%
帮助的人:1.9亿
展开全部

#include<stdio.h>
int main()
{ int n,x,max=-99999999,min=9999999,s=0,i;
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {scanf("%d",&x);
   s+=x;
   if(x>max)max=x;
   if(x<min)min=x;
  }
  printf("%.2f\n",(s-max-min)/(n-2.0));
  return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式