#include <stdlib.h>
#include <stdio.h>
#define N 10 //定义串长(#define 定义一个标识符来表示一个常量。其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了。)
double fun(double *x)//fun这个函数的返回值是一个函数指针,这个函数指针指向“包含一个double类型的参数,并且返回值是double类型的函数”
{int i, j; double av, y[N];//用double定义平均值(double是双精度浮点型,表示数据时会精准一点)
av=0;
/**********found**********/
for(i=0; i<N; i++) av +=x[i]/N;//这个循环来求平均值(av=x[0]/N+x[1]/N+...+x[N-1]/N),i<N时就一直循环
for(i=j=0; i<N; i++)
if(x[i]<av){
/**********found**********/
y[j]=x[i]; x[i]=-1; j++;}//如果x[i]小于平均值就将x[i]存储在y数组中,变量i是循环变量,变量j记录数组y的下标变化,下一次执行if内部语句时,y数组的下标应为下一个位置,所以这为j加1。
i=0;
while(i<N)
{if(x[i]!= -1) y[j++]=x[i];
/**********found**********/
i++;//i为while循环的循环变量,第一次进入while的时候i为0,判断第一个元素x[0]是否是-1,第二次进入的时候判断第二个元素x[1]是否是-1,直到i=N退出循环,故第三处是变量i自增。
}
for(i=0; i<N; i++)x[i] = y[i];
return av;
}
main()
{int i; double x[N];
for(i=0; i<N; i++){x[i]=rand()%50; printf("%4.0f ",x[i]);}
printf("\n");
printf("\nThe average is: %f\n",fun(x));
printf("\nThe result :\n",fun(x));
for(i=0; i<N; i++) printf("%5.0f ",x[i]);
printf("\n");
}
函数fun的功能是计算形参x所指数组中N个数的平均值(规定所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平均值的数据移至x所指数组的后部。
最新推荐文章于 2024-05-29 16:19:04 发布