算法存在问题,但自己没找出来
#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;
}