点击打开链接 推荐网页 qsort函数的用法与解析
#include<cstdio>
#include<stdlib.h>
int cmp(const void *a,const void *b)
{
return *(double *)a>*(double *)b?1:-1;
//return *(float *)a>*(float *)b?1:-1; 不可行。
//return (*(int *)a-*(int *)b);不可行。
}
int main()
{
int n,i;
double a[110],aver;
//double a[100],aver;一样
while(scanf("%d",&n)!=EOF)
{
aver=0;
for(i=0;i<n;i++)
{
scanf("%lf",&a[i]);
aver+=a[i];
}
qsort(a,n,sizeof(a[0]),cmp);
aver=(aver-a[0]-a[n-1])/(n-2);
printf("%.2lf\n",aver); //写成 %.2d \n就过不了
}
return 0;
}
因为qsort函数中的参数cmp(也可以取另外名字,反正就是最后一个参数)一定要是int cmp(const void *a,const void *b)这样定义的(系统指定我也没办法).而void*类型是不能直接转换的,所以先(int*)a的意思是将void* a转为int *a,而*((int*)a)则是取a的值,相当于int* a后的*a.