C语言编写一个程序,将序列中大于平均值的元素向前放置,将小于平均值的数字向后放置。序列输入、序列输出、序列平均和序列重排分别由四个子功能实现。(序列的长度由用户通过键盘输入)
时间: 2024-03-26 16:34:22 浏览: 120
c语言数据输入输出、赋值、顺序结构程序设计
好的,以下是代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
void input(int* arr, int len) {
printf("请输入序列:\n");
for (int i = 0; i < len; i++) {
scanf("%d", &arr[i]);
}
}
void output(int* arr, int len) {
printf("序列重排后的结果为:\n");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}
void avg(int* arr, int len, float* average) {
float sum = 0;
for (int i = 0; i < len; i++) {
sum += arr[i];
}
*average = sum / len;
printf("序列的平均值为:%.2f\n", *average);
}
void reorder(int* arr, int len, float average) {
int* temp = (int*)malloc(sizeof(int) * len);
int left = 0, right = len - 1;
for (int i = 0; i < len; i++) {
if (arr[i] > average) {
temp[left] = arr[i];
left++;
} else if (arr[i] < average) {
temp[right] = arr[i];
right--;
}
}
for (int i = left; i <= right; i++) {
temp[i] = (int)average;
}
for (int i = 0; i < len; i++) {
arr[i] = temp[i];
}
free(temp);
}
int main() {
int len;
printf("请输入序列的长度:\n");
scanf("%d", &len);
int* arr = (int*)malloc(sizeof(int) * len);
input(arr, len);
float average;
avg(arr, len, &average);
reorder(arr, len, average);
output(arr, len);
free(arr);
return 0;
}
```
程序的思路如下:
1. 通过 `input` 函数输入序列;
2. 通过 `avg` 函数计算序列的平均值;
3. 通过 `reorder` 函数将序列中大于平均值的元素向前放置,将小于平均值的数字向后放置,平均值放在中间;
4. 通过 `output` 函数输出重排后的序列。
注意,本程序中使用了动态分配内存的方法来存储序列,避免了在编译时需要知道序列长度的限制。同时,重排后的序列中,平均值可能并不在原序列中,因此需要将平均值转换为整数类型。
阅读全文