В квадратной матрице заменить элементы главной и побочной диагонали единицами.Язык Си.

#include <stdio.h>
#include <locale.h>
const int M = 2; // число строк
const int N = 2; // число столбцов
main()
{
setlocale(LC_ALL, "rus");
int i, j, k=0, A[M][N];
for ( i = 0; i < M; i ++ ) // цикл по строкам
for ( j = 0; j < N; j ++ ) // цикл по столбцам строки
{
printf ("A[%d][%d]=", i, j); // подсказка для ввода
scanf ("%d", & A[i][j]); // ввод A[i][j]
}
printf("Матрица A\n");
for ( i = 0; i < M; i ++ ) { // цикл по строкам
for ( j = 0; j < N; j ++ ) // вывод одной строки (в цикле)
A
printf ( "%4d", A[i][j] ); // 4 символа на число
printf("\n"); // переход на другую строку
}
}
Как мне записать проверку если столбец и строка ровны, то элемент равен единице и такое же условие для побочной диагонали?
9 ответов

if(i==j || i==N-j-1) заменяем


Зачем такие сложности? У квадратной матрицы, количество строк и столбцов одинаково.
for(int i=0; i<N; i++) {A[i][i] = 1; A[N-i-1][N-i-1] = 1;}
И всех делов.


for ( i = 0; i < M; i ++ ) { // цикл по строкам
for ( j = 0; j < N; j ++ ) // вывод одной строки (в цикле)
if(i==j || i==N-j-1)
{
A[i][j]=1;
}
printf ( "%4d", A[i][j] ); // 4 символа на число
printf("\n"); // переход на другую строку
Что я не так делаю?


i < M
j < N
Бред.. матрица квадратная..=> N = M..


Poma][a, вы о чем?


Посмотрите на свои циклы. У Вас есть N и M.. Зачем? Матрица квадратная => N = M (так должно быть, а как у Вас - я не знаю).. => выбрасываем M И приводить отрывок кода, без инициализации.. и спрашивать при этом где косяк.. не правильно.. (ИМХО)


Что я не так делаю?
Откуда я знаю? Я не компилятор ) А вообще лучше по отдельности по диагоналям пройтись чем цикл по всем элементам гонять:
for(int i=0;i<m;i++) a[i,i]=1;
for(int i=m-1,j=0;i>=0;i--) a[i,j++]=1;


Виталий, в пост #3 код (с) Smitt&Wesson делает это за один цикл, а не за два...


Что не так работает?Даже по j прошелся - не работает.