#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
struct data //定义一个结构体
{
int num; //数值
int d_value; //与平均值的差值
}s[16];
void prt() //输出函数
{
int i;
for(i=0;i<16;i++)
{
printf("%2d ",s[i].num);
}
printf("\n");
}
void sort(int flag) //排序函数,flag为0时,按输入的数值排序, flag为1时,按与平均值的差值排序
{
int i,j;
struct data temp;
for(i=0;i<15;i++)
{
for(j=0;j<15-i;j++)
{
if(flag==0)
{
if(s[j].num>s[j+1].num)
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
else if(flag==1)
{
if(s[j].d_value>s[j+1].d_value)
{
temp=s[j];
s[j]=s[j+1];
s[j+1]=temp;
}
}
}
}
}
int main()
{
srand((unsigned)time(0));
int i,avg,n,sum=0;
for(i=0;i<16;i++)//输入数据
{
n=rand()%90+10;//为简便, 随机生成数据
s[i].num=n;
sum+=s[i].num;
}
printf("\n排序前: ");
prt();
sort(0); //按数值排序
printf("\n排序后: ");
prt();
avg=sum/16; //求平均值
printf("\n平均值: %d",avg);
for(i=0;i<16;i++) //求得每个数与平均值的差值放入对应位置
{
s[i].d_value=abs(s[i].num-avg); //要取绝对值
}
sort(1); //按与平均值的差值排序,
printf("\n\n最接近的四个数为: ");
for(i=0;i<4;i++) //与平均值的差值越小就是越接近平均值的数,也就是在数组的越前面
{
printf("%2d ",s[i].num);
}
return 0;
}来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考