要求定义一个函数实现对任意长度数组的排序的操作, 并计算最大值、最小值、平 均值。 在主程序中,定义一个数组,并通过 scanf 输入数组中每个元素的值,调用 该函数后,打印该数组的最大值、最小值、平均值和排序结果
用malloc动态申请内存,如果超出,再用realloc扩容。C语言运行结果:
代码:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
void bubbleSort(double* a, int n)
{
int i, j;
double t;
//冒泡排序
for (i = 0; i < n - 1; i++)
{
for (j = 0; j < n - 1 - i; j++)
{
if (a[j] > a[j + 1]) //从小到大排序,排序完成后,a[0]就是最小值,a[n-1]就是最大值
{
t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
}
}
}
//计算数据的总和
t = 0;
for (i = 0; i < n; i++)
t += a[i];
printf("最大值:%g\n", a[n - 1]);
printf("最小值:%g\n", a[0]);
printf("平均值:%g\n", t / n);//输出平均值
printf("排序结果:\n");
for (i = 0; i < n; i++)
printf("%g ", a[i]);
}
int main()
{
int n = 0;
char ch;
int size = 1000;
double* p = (double*)malloc(sizeof(double) * size);
printf("请输入一组数据,以回车结束:\n");
while (1)
{
scanf("%lf", &p[n]);
n++;
if (n == size)
{
size += 1000;
p = (double*)realloc(p, sizeof(double) * size);//扩容
}
ch = getchar();
if (ch == '\n')
break;
}
bubbleSort(p, n); //调用函数
//释放内存
free(p);
p = 0;
return 0;
}
望采纳!!点击该回答右侧的“采纳”按钮即可采纳!!
我直接给出代码
#include <stdio.h>
#define N 10 // 定义数组的最大长度
// 函数声明
void sort(int arr[], int len); // 对数组进行排序
int max(int arr[], int len); // 计算数组的最大值
int min(int arr[], int len); // 计算数组的最小值
float avg(int arr[], int len); // 计算数组的平均值
int main()
{
int arr[N]; // 定义数组
int i; // 循环计数器
printf("输入数组中的 %d 个数:\n", N);
for (i = 0; i < N; i++)
{
scanf("%d", &arr[i]); // 输入数组中的每个元素
}
Copy code
sort(arr, N); // 对数组进行排序
printf("数组的最大值为 %d\n", max(arr, N)); // 打印数组的最大值
printf("数组的最小值为 %d\n", min(arr, N)); // 打印数组的最小值
printf("数组的平均值为 %.2f\n", avg(arr, N)); // 打印数组的平均值
printf("排序后的数组为:\n");
for (i = 0; i < N; i++)
{
printf("%d ", arr[i]); // 打印排序后的数组
}
printf("\n");
return 0;
}
// 对数组进行排序
void sort(int arr[], int len)
{
int i, j; // 循环计
数器
int temp; // 临时变量
// 使用冒泡排序算法进行排序
for (i = 0; i < len - 1; i++)
{
for (j = 0; j < len - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
// 交换两个数的值
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
// 计算数组的最大值
int max(int arr[], int len)
{
int i; // 循环计数器
int max = arr[0]; // 定义最大值并初始化为数组的第一个元素
// 遍历数组求最大值
for (i = 1; i < len; i++)
{
if (arr[i] > max)
{
max = arr[i];
}
}
return max;
}
// 计算数组的最小值
int min(int arr[], int len)
{
int i; // 循环计数器
int min = arr[0]; // 定义最小值并初始化为数组的第一个元素
// 遍历数组求最小值
for (i = 1; i < len; i++)
{
if (arr[i] < min)
{
min = arr[i];
}
}
return min;
}
// 计算数组的平均值
float avg(int arr[], int len)
{
int i; // 循环计数器
int sum = 0; // 定义总和并初始化为0
// 遍历数组求和
for (i = 0; i < len; i++)
{
sum += arr[i];
}
// 计算平均值
float avg = (float)sum / len;
return avg;
}
代码实现如下,望采纳
void sort(int a[], int n) {
// 冒泡排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (a[j] > a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
int main() {
int a[10];
int n = 10;
// 输入数组
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
}
sort(a, n);
// 计算最大值、最小值和平均值
int max = a[n - 1];
int min = a[0];
float sum = 0;
for (int i = 0; i < n; i++) {
sum += a[i];
}
float avg = sum / n;
// 打印结果
printf("最大值:%d\n", max);
printf("最小值:%d\n", min);
printf("平均值:%f\n", avg);
printf("排序后的数组:");
for (int i = 0; i < n; i++) {
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!