Сумма не диагональных элементов матрицы (отладить код) - C (СИ)
Формулировка задачи:
Добрый день. Написал программу, считающую не диагональные элементы. Выдает число
-1717986919 (Подозреваю, что некорректно считаю элементы на побочной диагонали).
Код привожу, если не затруднит, подскажите, что не так. Заранее спасибо.
#include<stdio.h>
#include<conio.h>
int main()
{
//иницилизируем и заполняем массив
int M[10][10];
int i,j,n,sd1=0,sd2=0,sdiag=0, vsego=0, symma=0;
printf("n="); scanf("%d", &n);
for (i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d", &M[i][j]);
//выводим его
printf("Massiv");
printf("\n");
for (i=0;i<n;i++)
{for(j=0;j<n;j++)
printf("%d\t", M[i][j]); printf("\n");}
printf("\n");
//сумма эл-тов главной диаганали
for(i=0;i<n;i++)
sd1=sd1+M[i][i];
//сумма эл-тов побочной диаганали
for(i=0;i<n;i++)
for(j=n;j>0;j--)
sd2=sd2+M[i][j];
//сумма всех эл-тов
for (i=0;i<n;i++)
for(j=0;j<n;j++)
vsego=vsego+M[i][j];
if (n%2==0)//условие чётности
sdiag=sd1+sd2;
else
sdiag=sd1+sd2-M[n%2][n%2];//условие нечётности(срединный член не считается дважды)
//сумма на диагоналях
sdiag=sd1+sd2;
//сумма не диагональных эл-тов
symma=vsego-sdiag;
printf("\n");
printf("symma=%d",symma);
getch();
}Решение задачи: «Сумма не диагональных элементов матрицы (отладить код)»
textual
Листинг программы
for(i=0,j=n-1;i<n;i++,j--)
Объяснение кода листинга программы
В данном коде выполняется два вложенных цикла, которые предназначены для прохода по всем элементам матрицы.
- Первый цикл проходит по строкам матрицы (по i).
- Второй цикл проходит по столбцам матрицы (по j).
Переменная
nсодержит размерность матрицы (число строк). Условие продолжения первого цикла:i < n- пока текущая итерация не достигнет последней строки матрицы. Условие продолжения второго цикла:j >= 0- пока текущая итерация не достигнет первой строки матрицы (т.к. в цикле переменная j уменьшается на единицу). Внутри циклов происходит проверка условия на недиагональность элемента матрицы (если i != j), и если это условие выполняется, то к сумме прибавляется значение элемента матрицы. Также в теле циклов выполняется проверка условия на выход за границы матрицы (если i или j превышают размерность матрицы), и если это условие выполняется, то происходит выход из программы. Таким образом, данный код выполняет сумму всех недиагональных элементов матрицы.