Сформировать и распечатать квадратную матрицу - C (СИ)
Формулировка задачи:
Сформировать и распечатать квадратную матрицу n*n вида
1 1 1 … 1 1 1
1 2 2 … 2 2 1
1 2 3 … 3 2 1
… … … … … … …
1 2 3 … 3 2 1
1 2 2 … 2 2 1
1 1 1 … 1 1 1
Помогите пожалуйста, буду благодарен.
Решение задачи: «Сформировать и распечатать квадратную матрицу»
textual
Листинг программы
#include<stdio.h> #include<stdlib.h> int main(void) { int **A; int i,j,k,N,val,Half; printf("%s","Enter matrix size:\n"); scanf("%i",&N); if(N%2==0) Half=N/2; else Half=N/2+1; A=malloc(N*sizeof(*A)); for(i=0;i<N;i++) A[i]=malloc(N*sizeof(*A[i])); k=0; for(i=0;i<Half;i++) { for(j=0;j<Half;j++) { if(j>=k) val=k+1; else val=j+1; A[i][j]=val; A[N-i-1][N-j-1]=val; A[N-i-1][j]=val; A[i][N-j-1]=val; } k++; } for(i=0;i<N;i++) { for(j=0;j<N;j++) printf("%i%c",A[i][j],' '); printf("%c",'\n'); } for(i=0;i<N;i++) free(A[i]); free(A); getchar(); return 0; }
Объяснение кода листинга программы
В этом коде:
- Объявлены следующие переменные:
N
- размерность матрицы (количество строк и столбцов);val
- временная переменная для хранения значения элемента матрицы;Half
- количество элементов в половине матрицы (для четного размера матрицы - это половина, для нечетного - это значение на 1 меньше середины);A
- динамический массив, в котором будут храниться адреса строк матрицы.
- Пользователю предлагается ввести размерность матрицы.
- Если размерность матрицы четное число, то значение
Half
вычисляется как половинаN
. Если нечетное, то как значение на 1 меньше серединыN
. - С помощью
malloc
выделяется память под массивA
, а затем в цикле выделяются памяти под каждую строку матрицы. - В цикле заполняются элементы матрицы. Для этого используется четыре вложенных цикла. Внешний цикл формирует строки матрицы, а внутренний - столбцы. При этом в каждой ячейке матрицы записывается значение
val
, которое соответствует номеру строки или столбца (в зависимости от положения ячейки в матрице). - Выполняется печать матрицы с помощью
printf
. - В конце программы освобождается выделенная память и считывается символ конца файла
getchar()
. - Программа завершается с возвращаемым значением 0, что означает успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д