Задать вопрос
@moneymakerXA

Как получить результат функции в main при работе с матрицами?

Всем доброго времени суток, мне нужно написать функцию суммы элементов главной диагонали матрицы. Программа полностью работает за одним исключением, у меня не получается вынести код в отдельную функцию. Возможно ошибка в параметрах которые я передаю в функцию, или в самом вызове функции

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

int sum (int n, int matrix[n][n]) {
    int sum = 0;
    for (int j = 0; j < n; ++j){
        for (int i = 0; i < n; ++i){
            if (j == i){
                sum += matrix[j][i];
            }
        }
    }
    return sum;
}

int main ()
{
    int n, i, j;
    int sum_of = 0;
    printf("n \n");
    scanf("%d",&n);
    int matrix[n][n];

    srand(time(0));
    for (i = 0; i < n; i++){
        for (j = 0; j < n; j++){
            matrix[i][j] = rand()%10;
        }
    }

    for (i = 0; i < n; i++){
        for (j = 0; j < n; j++){
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    sum_of = sum(matrix[][]);

    printf("%d", sum_of);

    return 0;
}
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой Комментировать
Ответ пользователя CityCat4 К ответам на вопрос (4)
CityCat4
@CityCat4 Куратор тега C
Дома с переломом ноги
Программа полностью работает

Сумнительно.

Вот так:
printf("n \n");
    scanf("%d",&n);
    int matrix[n][n];

делать нельзя. Статический массив строится в момент компиляции, поэтому его размерность должна быть задана - странно, что у Вас компилятор замечания не выдал - или просто проигнорили?

Выделение памяти нужно делать таким образом:
int *matrix;

matrix = calloc( n * n, 1);

после чего matrix - указатель на int и всю программу соответственно нужно переделать под адресную арифметику (подозреваю, что задание было на изучение адресной арифметики :) )

По-хорошему, результат calloc нужно проверить - выделилась ли память и перед завершением программы сделать
free(matrix);
Ответ написан