Нахождение самого большого диагонального элемента квадратной матрицы - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь найти макс.диагональный элемент квадратной матрицы (в качестве примера рассмотрим матрицу 2x2; предположим, n = 2).

Моя логика основана на сравнении [i][i] с [i + 1][i + 1] (первым элементом диагонали).матрица по сравнению со следующим диагональным элементом).

Пример ввода:

2

1 2 3 4

Пример вывода:

Сначала мы распечатываем полную матрицу :

1 2

3 4

Затем распечатываем только диагональные элементы:

Диагональные элементы: 1 4

Макс.элемент диагональной матрицы: 4206628 - это то, где я не уверен, почему это портит.Максимальный диагональный элемент в этом случае должен составлять 4.

#include <stdio.h>

int main()
{

int i, j, n, max = 0;

scanf("%d", &n);

int MAT[n][n];

for (i = 0; i < n; i++){
    for (j = 0; j < n; j++){
        scanf("%d", &MAT[i][j]);
    }
}

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

for (i = 0; i < n; i++){

    printf("%d\t", MAT[i][i]);
    printf("\n");


    if (MAT[i][i] > MAT[i + 1][i + 1]){
        max = MAT[i][i];
    }   else max = MAT[i + 1][i + 1];

}

printf("\nMax. diagonal matrix element: %d", max);

return 0;
}

1 Ответ

0 голосов
/ 18 декабря 2018

Проблема, похоже, исходит от else max = MAT[i + 1][i + 1].Так как MAT[i + 1][i + 1] не всегда определяется (представьте, когда i = 1, вы выходите за пределы длины массива), случайное значение считывается из памяти.Чтобы решить эту проблему, вы должны изменить условие, при котором вы меняете значение max.

if (MAT[i][i] > max) // replacing max when the current value is bigger
{
    max = MAT[i][i];
}
// else not necessary

Использование этого фрагмента не будет работать, если массив был заполнен отрицательным числом, поскольку maxинициализируется в 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...