关于#c语言#的问题:并通过 scanf 输入数组中每个元素的值,打印该数组的最大值、最小值、平均值和排序结果

要求定义一个函数实现对任意长度数组的排序的操作, 并计算最大值、最小值、平 均值。 在主程序中,定义一个数组,并通过 scanf 输入数组中每个元素的值,调用 该函数后,打印该数组的最大值、最小值、平均值和排序结果

用malloc动态申请内存,如果超出,再用realloc扩容。C语言运行结果:

img

代码:

#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;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632