请问第13题到底应该怎么做

这里面的第13题的答案怎么写有会的可以帮我一下忙吗这里非常感谢了3个小题都要用指针写

img

没有10.7的程序,12->>rain.c?是写的什么

#13
#include <stdio.h>
#define ROWS 3
#define COLS 5

void enter_numbers(double arr[][COLS], int rows);
void calculate_average(double arr[][COLS], int rows);
double calculate_total_average(double arr[][COLS], int rows);
double max_value(double arr[][COLS], int rows);

int main(void)
{
    double numbers[ROWS][COLS];
    enter_numbers(numbers, ROWS);
    calculate_average(numbers, ROWS);
    double total_average = calculate_total_average(numbers, ROWS);
    double max = max_value(numbers, ROWS);

    printf("The maximum value is: %.2f\n", max);
    printf("The total average is: %.2f\n", total_average);

    return 0;
}

void enter_numbers(double arr[][COLS], int rows)
{
    for (int i = 0; i < rows; i++)
    {
        printf("Enter 5 numbers for row %d: ", i + 1);
        for (int j = 0; j < COLS; j++)
        {
            scanf("%lf", &arr[i][j]);
        }
    }
}

void calculate_average(double arr[][COLS], int rows)
{
    for (int i = 0; i < rows; i++)
    {
        double sum = 0.0;
        for (int j = 0; j < COLS; j++)
        {
            sum += arr[i][j];
        }
        double average = sum / COLS;
        printf("The average for row %d is: %.2f\n", i + 1, average);
    }
}

double calculate_total_average(double arr[][COLS], int rows)
{
    double total_sum = 0.0;
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            total_sum += arr[i][j];
        }
    }
    double total_average = total_sum / (ROWS * COLS);
    return total_average;
}

double max_value(double arr[][COLS], int rows)
{
    double max = arr[0][0];
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            if (arr[i][j] > max)
            {
                max = arr[i][j];
            }
        }
    }
    return max;
}

14.
#include <stdio.h>

void enter_numbers(int rows, int cols, double arr[rows][cols]);
void calculate_average(int rows, int cols, double arr[rows][cols]);
double calculate_total_average(int rows, int cols, double arr[rows][cols]);
double max_value(int rows, int cols, double arr[rows][cols]);

int main(void)
{
    int rows = 3;
    int cols = 5;
    double numbers[rows][cols];
    enter_numbers(rows, cols, numbers);
    calculate_average(rows, cols, numbers);
    double total_average = calculate_total_average(rows, cols, numbers);
    double max = max_value(rows, cols, numbers);

    printf("The maximum value is: %.2f\n", max);
    printf("The total average is: %.2f\n", total_average);

    return 0;
}

void enter_numbers(int rows, int cols, double arr[rows][cols])
{
    for (int i = 0; i < rows; i++)
    {
        printf("Enter 5 numbers for row %d: ", i + 1);
        for (int j = 0; j < cols; j++)
        {
            scanf("%lf", &arr[i][j]);
        }
    }
}

void calculate_average(int rows, int cols, double arr[rows][cols])
{
    for (int i = 0; i < rows; i++)
    {
        double sum = 0.0;
        for (int j = 0; j < cols; j++)
        {
            sum += arr[i][j];
        }
        double average = sum / cols;
        printf("The average for row %d is: %.2f\n", i + 1, average);
    }
}

double calculate_total_average(int rows, int cols, double arr[rows][cols])
{
    double total_sum = 0.0;
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            total_sum += arr[i][j];
        }
    }
    double total_average = total_sum / (rows * cols);
    return total_average;
}

double max_value(int rows, int cols, double arr[rows][cols])
{
    double max = arr[0][0];
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            if (arr[i][j] > max)
            {
                max = arr[i][j];
            }
        }
    }
    return max;
}


供参考:

#include <stdio.h>
#define ROWS 3 // 定义行数为3
#define COLS 5 // 定义列数为5

// 函数原型
double average(double arr[], int n);                // 计算一维数组的平均值
double total_average(double arr[][COLS], int rows); // 计算二维数组的平均值
double max(double arr[][COLS], int rows);           // 找出二维数组中的最大值
void show_data(double arr[][COLS], int rows);       // 显示二维数组的数据

int main(void)
{
    double data[ROWS][COLS]; // 声明一个3x5的二维数组

    printf("请输入3组数,每组数包含5个double类型的数:\n");

    // 循环输入数据到二维数组中
    for (int i = 0; i < ROWS; i++)
    {
        printf("请输入第%d组数:\n", i + 1);
        for (int j = 0; j < COLS; j++)
        {
            scanf("%lf", &data[i][j]);
        }
    }

    // 显示输入的数据
    printf("你输入的数据是:\n");
    show_data(data, ROWS);

    // 计算并显示每组数据的平均值
    printf("每组数据的平均值是:\n");
    for (int i = 0; i < ROWS; i++)
    {
        printf("第%d组数据的平均值是:%f\n", i + 1, average(data[i], COLS));
    }

    // 计算并显示所有数据的平均值
    printf("所有数据的平均值是:%f\n", total_average(data, ROWS));

    // 找出并显示所有数据中的最大值
    printf("所有数据中的最大值是:%f\n", max(data, ROWS));

    return 0;
}

// 计算一维数组的平均值
double average(double arr[], int n)
{
    double sum = 0.0; 
    for (int i = 0; i < n; i++)
    {
        sum += arr[i]; 
    }
    return sum / n; 
}

// 计算二维数组的平均值
double total_average(double arr[][COLS], int rows)
{
    double sum = 0.0; 
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            sum += arr[i][j]; 
        }
    }
    return sum / (rows * COLS); 
}

// 找出二维数组中的最大值
double max(double arr[][COLS], int rows)
{
    double max = arr[0][0];        // 假设第一个元素是最大值
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            if (arr[i][j] > max)  // 如果当前元素大于最大值
            {
                max = arr[i][j];  // 更新最大值
            }
        }
    }
    return max; 
}

// 显示二维数组的数据
void show_data(double arr[][COLS], int rows)
{
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < COLS; j++)
        {
            printf("%f ", arr[i][j]); // 打印当前元素
        }
        printf("\n"); 
    }
}

解决这个问题的思路:
1、声明一个3×5的数组来存储输入的数据。
2、编写函数 inputData() 来提示用户输入数据,并把数据存储到数组中。
3、编写函数 calculateAverage() 来计算一维数组的平均值,该函数需要传入一维数组和其元素的数量作为参数,并返回平均值。
4、编写函数 calculateAllAverage() 来计算所有数据的平均值,该函数需要传入整个3×5数组作为参数,并返回平均值。
5、编写函数 findMax() 来找出15个数据中的最大值,该函数需要传入整个3×5数组作为参数,并返回最大值。
最后在主函数中调用以上的函数,并打印结果。
源码如下:


#include <stdio.h>

// 声明3×5数组,存储用户输入的数据
double data[3][5];

// 函数:输入数据到数组中
void inputData(double arr[][5], int row, int col) {
    for (int i = 0; i < row; i++) {
        printf("请输入第%d组数据(5个double类型):", i+1);
        for (int j = 0; j < col; j++) {
            scanf("%lf", &arr[i][j]);
        }
    }
}

// 函数:计算一维数组的平均值
double calculateAverage(double arr[], int length) {
    double sum = 0;
    for (int i = 0; i < length; i++) {
        sum += arr[i];
    }
    return sum / length;
}

// 函数:计算所有数据的平均值
double calculateAllAverage(double arr[][5], int row, int col) {
    double sum = 0;
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            sum += arr[i][j];
        }
    }
    return sum / (row * col);
}

// 函数:找出数组中的最大值
double findMax(double arr[][5], int row, int col) {
    double max = arr[0][0];
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++) {
            if (arr[i][j] > max) {
                max = arr[i][j];
            }
        }
    }
    return max;
}

int main() {
    // 输入数据
    inputData(data, 3, 5);

    // 计算每组数据的平均值
    double avg[3];
    for (int i = 0; i < 3; i++) {
        avg[i] = calculateAverage(data[i], 5);
        printf("第%d组数据的平均值为:%.2f\n", i+1, avg[i]);
    }

    // 计算所有数据的平均值
    double allAvg = calculateAllAverage(data, 3, 5);
    printf("所有数据的平均值为:%.2f\n", allAvg);

    // 找出最大值
    double max = findMax(data, 3, 5);
    printf("最大值为:%.2f\n", max);

    return 0;
}

代码实现


#include <stdio.h>

#define ROWS 3
#define COLS 5

void input(double arr[][COLS], int rows);
double avg(const double arr[], int n);
double avg_all(const double arr[][COLS], int rows);
double max(const double arr[][COLS], int rows);
void print_results(double arr[][COLS], int rows);

int main(void) {
    double arr[ROWS][COLS];
    input(arr, ROWS);
    print_results(arr, ROWS);
    return 0;
}

void input(double arr[][COLS], int rows) {
    for (int i = 0; i < rows; i++) {
        printf("请输入第%d组数据:\n", i + 1);
        for (int j = 0; j < COLS; j++) {
            scanf("%lf", &arr[i][j]);
        }
    }
}

double avg(const double arr[], int n) {
    double sum = 0.0;
    for (int i = 0; i < n; i++) {
        sum += arr[i];
    }
    return sum / n;
}

double avg_all(const double arr[][COLS], int rows) {
    double sum = 0.0;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < COLS; j++) {
            sum += arr[i][j];
        }
    }
    return sum / (rows * COLS);
}

double max(const double arr[][COLS], int rows) {
    double max_val = arr[0][0];
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < COLS; j++) {
            if (arr[i][j] > max_val) {
                max_val = arr[i][j];
            }
        }
    }
    return max_val;
}

void print_results(double arr[][COLS], int rows) {
    printf("每组数据的平均值:\n");
    for (int i = 0; i < rows; i++) {
        printf("第%d组数据的平均值为%.2f\n", i + 1, avg(arr[i], COLS));
    }
    printf("所有数据的平均值为%.2f\n", avg_all(arr, rows));
    printf("最大值为%.2f\n", max(arr, rows));
}

运行结果


请输入第1组数据:
1.0 2.0 3.0 4.0 5.0
请输入第2组数据:
6.0 7.0 8.0 9.0 10.0
请输入第3组数据:
11.0 12.0 13.0 14.0 15.0
每组数据的平均值:
第1组数据的平均值为3.002组数据的平均值为8.003组数据的平均值为13.00
所有数据的平均值为8.00
最大值为15.00

以下是使用C语言指针实现的程序,实现了要求的5个任务,每个任务都使用了单独的函数:

#include <stdio.h>

void input_data(double (*arr)[5], int num_sets);
double* calc_average(double arr[5]);
double calc_all_average(double (*arr)[5], int num_sets);
double find_max(double (*arr)[5], int num_sets);
void print_results(double* arr1, double* arr2, double* arr3, double all_avg, double max);

int main(void) {
    double data[3][5];
    input_data(data, 3);

    double* avg1 = calc_average(data[0]);
    double* avg2 = calc_average(data[1]);
    double* avg3 = calc_average(data[2]);

    double all_avg = calc_all_average(data, 3);
    double max = find_max(data, 3);

    print_results(avg1, avg2, avg3, all_avg, max);

    return 0;
}

void input_data(double (*arr)[5], int num_sets) {
    for (int i = 0; i < num_sets; i++) {
        printf("Enter set %d of 5 numbers:\n", i + 1);
        for (int j = 0; j < 5; j++) {
            scanf("%lf", &arr[i][j]);
        }
    }
}

double* calc_average(double arr[5]) {
    static double avg[1];
    double sum = 0.0;
    for (int i = 0; i < 5; i++) {
        sum += arr[i];
    }
    *avg = sum / 5.0;
    return avg;
}

double calc_all_average(double (*arr)[5], int num_sets) {
    double sum = 0.0;
    for (int i = 0; i < num_sets; i++) {
        for (int j = 0; j < 5; j++) {
            sum += arr[i][j];
        }
    }
    return sum / (num_sets * 5.0);
}

double find_max(double (*arr)[5], int num_sets) {
    double max = arr[0][0];
    for (int i = 0; i < num_sets; i++) {
        for (int j = 0; j < 5; j++) {
            if (arr[i][j] > max) {
                max = arr[i][j];
            }
        }
    }
    return max;
}

void print_results(double* arr1, double* arr2, double* arr3, double all_avg, double max) {
    printf("\nAverage of set 1: %.2f\n", *arr1);
    printf("Average of set 2:%.2f\n", *arr2);
    printf("Average of set 3: %.2f\n", *arr3);
    printf("Average of all data: %.2f\n", all_avg);
    printf("Max value: %.2f\n", max);
}

在 main 函数中,首先声明一个 3x5 的二维数组 data,然后调用 input_data 函数来提示用户输入数据并将其存储到数组中。

接下来,分别调用 calc_average 函数计算每组数据的平均值,该函数接受一个一维数组作为参数,并返回一个指向静态数组的指针,该静态数组中包含一个元素,即计算出的平均值。我们使用静态数组是因为该数组需要在函数调用结束后继续存在并被访问。

然后,调用 calc_all_average 函数来计算所有数据的平均值,该函数接受一个指向二维数组的指针和数组的行数作为参数,并返回所有数据的平均值。

最后,调用 find_max 函数来找出所有数据中的最大值,该函数接受一个指向二维数组的指针和数组的行数作为参数,并返回最大值。

最后,调用 print_results 函数打印每组数据的平均值、所有数据的平均值和最大值。

在实现函数时,我们使用了传统C处理数组的方式,即使用指针来访问数组元素。在函数参数中,我们使用指向二维数组的指针和数组的行数来表示二维数组。

注意,在 calc_average 函数中,我们使用了一个静态数组来存储计算出的平均值,并返回指向该数组的指针。这是因为该数组需要在函数调用结束后继续存在并被访问,如果使用局部变量则会出现问题。

另外,我们使用了 static 关键字来声明静态数组。这意味着该数组只会被分配一次,即使在多次调用 calc_average 函数时也只会有一个静态数组存在。