2个回答
展开全部
单纯判断最大值最小值求平均很容易。
但题目要求输入任意个数,也就是不能预设数组大小。
如果不考虑数字存储,只是单纯判断最大最小然后求平均,可以定义变量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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询