首页 > 解决方案 > 矩阵中的算术平均值

问题描述

您好,我的代码有问题。我需要再计算 2 个选项:

我写了下面的代码,但我不知道如何计算这两个选项。任何帮助都会很高兴看到。谢谢!

double arithmetic(int *arr, int n);

int main() {
    int n, sum = 0, **A, *arr, l;
    printf("Enter size of matrix: ");
    scanf("%d", &n);
    A = (int **)malloc(sizeof(int *) * n);
    arr = (int *)malloc(sizeof(int *) * n);
    if (!A) 
       printf("Error");

    for (int i = 0; i < n; i++) {
        A[i] = (int *)malloc(sizeof(int) * n);
        if (!A[i])
            printf("Error");
    }
    printf("Give numbers by lines:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &A[i][j]);
        }
    }

    printf("Give the line and column to count: ");
    scanf("%d", &l);
    for (int i = 0; i < n; i++) {
        arr[i] = A[l][i];
    }
    printf("Arithmetic average in line %d, is %.2f\n", l, arithmetic(arr, n));

    for (int i = 0; i < n; i++) {
        arr[i] = A[i][l];
    }
    printf("Arithmetic average in column %d, is %.2f\n", l, arithmetic(arr, n));

    for (int i = 0; i < n; i++) {
        arr[i] = A[i][i];
    }
    printf("Arithmetic average on main diagonal, is %.2f\n", arithmetic(arr, n));
}

double arithmetic(int *arr, int n) {
    double sum = 0;
    for (int i = 0; i < n; i++) {
        if (arr[i] > 0)
            sum = sum + arr[i];
    }
    double result = sum / n;
    return result;
}

标签: c

解决方案


代码中有一些问题:

  • 的分配大小arr不正确:应该arr = (int *)malloc(sizeof(int) * n);注意,这个中间数组不是必需的。

  • 您应该在分配错误时退出程序。

  • 为什么只计算正数?

这是修改后的版本:

#include <stdio.h>
#include <stdlib.h>

int main() {
    double sum;
    int n, sum = 0, l;
    int **A;

    printf("Enter matrix size: ");
    if (scanf("%d", &n) != 1)
        return 1;
    A = calloc(sizeof(*A), n);
    if (!A) {
       fprintf(stderr, "Allocation error\n");
       return 1;
    }
    for (int i = 0; i < n; i++) {
        A[i] = calloc(sizeof(int), n);
        if (!A[i]) {
            fprintf(stderr, "Allocation error\n");
            return 1;
        }
    }
    printf("Give numbers by lines:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &A[i][j]);
        }
    }

    printf("Give the line and column to count: ");
    scanf("%d", &l);
    sum = 0;
    for (int i = 0; i < n; i++) {
        sum += A[l][i];
    }
    printf("Arithmetic average in line %d, is %.2f\n", l, sum / n);

    sum = 0;
    for (int i = 0; i < n; i++) {
        sum += A[i][l];
    }
    printf("Arithmetic average in column %d, is %.2f\n", l, sum / n);

    sum = 0;
    for (int i = 0; i < n; i++) {
        sum += A[i][i];
    }
    printf("Arithmetic average on main diagonal, is %.2f\n", sum / n);

    sum = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j++) {
            sum += A[i][j];
        }
    }
    printf("Arithmetic average under main diagonal, is %.2f\n",
           sum / (n * (n - 1) / 2));

    sum = 0;
    for (int i = 0; i < n; i++) {
        sum += A[i][n - i - 1];
    }
    printf("Arithmetic average on second diagonal, is %.2f\n", sum / n);
    return 0;
}

推荐阅读