c语言|C语言-数组平均值与排序

c语言|C语言-数组平均值与排序


①目标
输入一个正数数组 , 求平均值 ,
并根据平均值重新排序 ,
大于平均值的数前置 ,
小于等于平均值的值后置 。

②命令行
#include< stdio.h>
调用输入输出函数库
【c语言|C语言-数组平均值与排序】#include<stdlib.h>
调用文件函数库
#define N 10
宏定义 , 简单理解为N=10
~
③定义函数
double fun (double *x)
/*定义的fun函数有3个功能 , 平均值、前置和后置*/
{
int ij;double savy[N
;
/*定义临时数组y[N
用于储存重新排序后的数组元素*/
s=0;
for(i=0;i<N;i++) s=s+x[i
;
/*累加 , 为平均值做准备*/
av=s/N;
/*求平均值 , 还有一种方法是av=av+x[i
/N*/
for(i=j=0;i<N;i++)
if(x[i
>av)
{y[j++
=x[i
;x[i
=-1;
/*筛选出大于平均值的数 , 放入y[j++
中 , 配合i++j也++ 。 并把大于平均值的数重新赋值为-1或者其他负数 , 区分其他小于等于平均值的正数*/
for(i=0;i<N;i++)
if(x[i
!=-1)
y[j++
=x[i
;
/*筛选出不等于-1的数 , 即小于等于平均值的数 , 再排在y[j++
的后面 。
至于此处筛选小于等于平均值 , 为什么要用-1替换?而不直接用x[i
<=av?我也不知道 , 试了一下结果没变 , 猜测可能是为了规避重复 , 希望有大神解答*/
for(i=0;i<N;i++)
x[i
=y[i
;
/*再用重新排序的y[i
替换x[i
即完成了x[i
的排序 。 */
return av;
/*令fun(x)函数的结果为平均值av*/

~
④主函数(调用)
void main()
{
int i;double x[N
;
for(i=0;i<N;i++)
{x[i
=rand()%50;printf(\"%4.0f\"x[i
);
/*输入x[i
的元素为0到49的随机数 , 4.0表示用空格间隔*/
printf(\"\\");
printf(\"\The average is:%f\\"fun(x));
/*输出平均值*/
printf(\"\The result :\\"fun(x));
/*这里可以不要输出项fun(x)理解输出固定字符串The result:*/
for(i=0;i<N;i++)
printf(\"%4.0f\"x[i
);
/*输出重新排序后的x[i
*/
printf(\"\\");