领先的免费Web技术教程,涵盖HTML到ASP.NET

网站首页 > 知识剖析 正文

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

nixiaole 2025-01-20 15:38:44 知识剖析 22 ℃


①目标

输入一个正数数组,求平均值

并根据平均值重新排序

大于平均值的数前置,

小于等于平均值的值后置。

②命令行

#include< stdio.h>

调用输入输出函数库

#include<stdlib.h>

调用文件函数库

#define N 10

宏定义,简单理解为N=10

~

③定义函数

double fun (double *x)

/*定义的fun函数有3个功能,平均值、前置和后置*/

{

int i,j;double s,av,y[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("\n");

printf("\nThe average is:%f\n",fun(x));

/*输出平均值*/

printf("\nThe result :\n",fun(x));

/*这里可以不要输出项fun(x),理解输出固定字符串The result:*/

for(i=0;i<N;i++)

printf("%4.0f",x[i]);

/*输出重新排序后的x[i]*/

printf("\n");

}

最近发表
标签列表