用起泡法排列好顺序后如何删除最大值和最小值

来源:百度知道 编辑:UC知道 时间:2024/07/06 15:21:24
知道用起泡法排列数组的顺序,但要删除数组的最大值和最小值,并求最后的平均值。程序该如何改呢? 大家帮帮忙!
char array[];
{ int i,p,q;
float s;
chart t;
for(i=0;i<8;i++)
if (array[i]>array[i+1])
{
t=array[i];
array[i]=array[i+1]
}

for(q=1;q<i-1;q++) //计算平均值
{ 在此部分中删除array数组的最大值和最小值并求其平均值
}
return
}
三楼的,我就是不会删啊,用什么语句么?
四楼的,我想到了这个想法了,用for huo if 循环的话,最后一个可以不要用N-1就行了,第一个怎么删掉呢

我就不明白,如果你只是要求去除最大值和最小值后的平均值,为什么一定要删除最大和最小值呢?
在计算平均值时不将数组首和尾的值计算在内不就可以了?循环条件即下标i值从=1开始到<n-1结束,然后再除以n-2个不就可以了!这样就相当于最小和最大的数组中的第0个和第n-1个根本没有计算在内。
如果是要输出排序并删除最大最小值后的数组元素,同样可以采用上述的方法,只是改变循环变量的值从第二个元素开始到n-1个为止依次输出就好了。
举个例子说明一下;
#include "stdio.h"
#define N 8
void main(){
float av=0;
int sum=0;
int a[N]={1,2,3,4,5,6,7,8};
for(int i=1;i<N-1;i++){
sum+=a[i];
printf("%4d",a[i]);//用于输出去除首尾元素后的各元素的值,但是实际上并没有去除,这里只是“查看”
}
printf("\n\n去除最小和最大值后的平均值为:%f\n\n",sum/(float)(N-2));//输出去除最大和最小值后的平均值
}

如果是非得要将数值从数组中剔除,可以将第二个开始的元素都依次向前一个移动一个到第n-2个为止。但只是为了查看排序并去除首尾元素后数组的值的话,还是感觉根本没有必要非得删除他们。
同样举一个小例子如下:
#include "stdio.h"
#define N 8
void main(){
float av=0;
int sum=0;
int a[N]={1,2,3,4,5,6,7,8};
for(int i=1;i<N-1;i++)
a[i-1]=a[i];//此处的循环用于将数组中的元素从第二个到倒数第二个都向前移动一个位置,从而使得原来数组中的打头的元素被第二个覆盖,第