输入16个2位正整数,首先按升序排序,然后计算出平均数,最后输出与平均数最接近的四个数字。

输入16个2位正整数,首先按升序排序,然后计算出平均数,最后输出与平均数最接近的四个数字。请问这题如何用C语言代码写?

#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;
}

来自:求助得到的回答
温馨提示:答案为网友推荐,仅供参考