Заполнение матрицы по определённому правилу - C (СИ)
Формулировка задачи:
Дано число n. Создайте массив размером n×n и заполните его по следующему правилу. На главной диагонали должны быть записаны числа 0. На двух диагоналях, прилегающих к главной, числа 1. На следующих двух диагоналях числа 2, и т.д.
Например n=5
0 1 2 3 4
1 0 1 2 3
2 1 0 1 2
3 2 1 0 1
4 3 2 1 0
Решение задачи: «Заполнение матрицы по определённому правилу»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int n = 0;
int a[100][100];
int i = 0;
int j = 0;
int main() {
scanf("%d", &n);
// обработка
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
a[i][j] = abs(i - j);
}
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
printf ("%d ",a[i][j]);
}
printf ("\n");
}
return 0;
}
Объяснение кода листинга программы
- Программа начинается с объявления переменных:
n- количество заполняемых элементов матрицы (принимается с помощью функцииscanf);a- массив для заполнения (размерностью 100x100);iиj- индексы для обхода матрицы.
- Затем происходит заполнение матрицы по определённому правилу: в каждой ячейке
a[i][j]хранится абсолютное значение разностиiиj. - Далее происходит вывод содержимого матрицы на экран. Для этого используется два вложенных цикла:
- Первый цикл перебирает все строки матрицы (от
i = 0доi = n). - Второй цикл перебирает все столбцы текущей строки (от
j = 0доj = n). В каждой итерации внутреннего цикла в текущую ячейку матрицыa[i][j]записывается значениеabs(i - j).
- Первый цикл перебирает все строки матрицы (от
- После завершения внутренних циклов начинается вывод содержимого матрицы на экран. Для этого используется
printfс форматированием%d, которое выводит значениеa[i][j]в формате десятичного числа, а также символ пробела после каждого значения. После каждой строки матрицы выводится символ перевода строки\n. - В конце программы возвращается 0, что означает успешное выполнение.