生成随机数组:创建一个包含10个随机数的数组 计算平均值:计算数组中所有元素的平均值 重新排列数组:将数组重新排列,使得大于平均值的元素排在前面,小于等于平均值的元素排在后面

#include <stdlib.h>
#include <stdio.h>
#define N 10

// 函数功能:计算数组平均值,并重新排列数组元素
double fun(double *x)
{
int i, j;
double s, av, y[N];

// 第一步:计算数组所有元素的和
s=0;
for(i=0; i<N; i++)
s=s+x[i];

// 第二步:计算平均值
av=s/N;

// 第三步:将大于平均值的元素复制到临时数组y中,并在原数组中标记为-1
for(i=j=0; i<N; i++)
if( x[i]>av ){
y[j++]=x[i]; // 将大于平均值的元素存入y数组
x[i]=-1; // 在原数组中标记为-1
}

// 第四步:将小于等于平均值的元素(即不等于-1的元素)追加到y数组末尾
for(i=0; i<N; i++)
if( x[i]!=-1)
y[j++]=x[i];

// 第五步:将重新排列后的y数组复制回原数组x
for(i=0; i<N; i++)
x[i] = y[i];

return av; // 返回平均值
}

void main()
{
int i;
double x[N];

// 初始化数组:生成10个0-49之间的随机整数
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));

// 注意:这里有个错误,应该去掉fun(x)调用
printf("\nThe result :\n"); // 应该是这样
// printf("\nThe result :\n",fun(x)); // 原代码有问题

// 输出重新排列后的数组
for(i=0; i<N; i++)
printf("%5.0f ",x[i]);
printf("\n");
}

我来详细解释这个C语言程序的功能和执行过程。## 程序功能分析

这个程序的主要功能是:

  1. 生成随机数组:创建一个包含10个随机数的数组
  2. 计算平均值:计算数组中所有元素的平均值
  3. 重新排列数组:将数组重新排列,使得大于平均值的元素排在前面,小于等于平均值的元素排在后面

详细执行流程

main函数执行过程:

  1. 初始化数组:生成10个0-49之间的随机整数并打印
  2. 调用fun函数:计算平均值并重新排列数组
  3. 输出结果:显示平均值和重新排列后的数组

fun函数详细分析:

第一阶段 - 计算平均值:

s=0;
for(i=0; i<N; i++)  s=s+x[i];  // 计算总和
av=s/N;                        // 计算平均值

第二阶段 - 提取大于平均值的元素:

for(i=j=0; i<N; i++)
    if( x[i]>av ){
        y[j++]=x[i];    // 将大于平均值的元素存入y数组前部
        x[i]=-1;        // 在原数组中标记为已处理
    }

第三阶段 - 追加小于等于平均值的元素:

for(i=0; i<N; i++)
    if( x[i]!=-1)       // 找到未被标记的元素(即小于等于平均值的元素)
        y[j++]=x[i];    // 追加到y数组末尾

第四阶段 - 复制回原数组:

for(i=0; i<N; i++)
    x[i] = y[i];       // 将重新排列的结果复制回原数组

程序问题

代码中有一个小错误:

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

这行代码会再次调用fun函数,但printf格式字符串中没有占位符,所以返回值被忽略。应该改为:

printf("\nThe result :\n");

运行示例

假设生成的随机数组为:[15, 23, 8, 35, 12, 41, 6, 28, 19, 33]

  1. 计算平均值:(15+23+8+35+12+41+6+28+19+33)/10 = 22.0
  2. 重新排列后:[23, 35, 41, 28, 33, 15, 8, 12, 6, 19]
    • 前5个元素:大于平均值的元素(23, 35, 41, 28, 33)
    • 后5个元素:小于等于平均值的元素(15, 8, 12, 6, 19)

这个程序实现了一种特殊的数组分割算法,将数组分为两部分:大于平均值的元素在前,小于等于平均值的元素在后。

posted @ 2025-08-31 16:07  量子我梦  阅读(16)  评论(0)    收藏  举报