Как поменять местами в матрице строку и столбец номера которых К, M - C (СИ)
Формулировка задачи:
Как поменять местами в матрице строку и столбец номера которых К, M
матрица квадратная
Решение задачи: «Как поменять местами в матрице строку и столбец номера которых К, M»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main() { unsigned N, i, k; int *p, *q, *r, temp = 1; puts("Enter matrix size > 1:"); while(1 != scanf("%u", &N) || N < 2){ fprintf(stderr, "Incorrect data entry!Try again.\n"); getchar(); } p = malloc(N * N * sizeof*p); if(!p){ fprintf(stderr, "Error allocate memory!"); exit(1); } for(i = 0, q = p; i < N * N; i++){ if(i && i % N == 0) putchar('\n'); printf("%3d", *q++ = temp++); } putchar('\n'); printf("Enter number row and column >= 0 and < %u:\n", N); while(1 != scanf("%u", &k) || (k >= N || k < 0)){ fprintf(stderr, "Incorrect data entry!Try again.\n"); getchar(); } for(i = 0, q = p + k * N, r = p + k; i < N; i++){ temp = *q; *q++ = *r; *r = temp; r += N; } for(i = 0, q = p; i < N * N; i++){ if(i && i % N == 0) putchar('\n'); printf("%3d", *q++); } putchar('\n'); return 0; }
Объяснение кода листинга программы
В этом коде:
- Объявлены переменные:
N
- размер матрицы (целое число);i
- счётчик для прохода по матрице (целое число);k
- номер строки и столбца (целое число);p
- указатель на начало матрицы (int*);q
- указатель на текущую строку (int*);r
- указатель на текущий столбец (int*);temp
- временная переменная для обмена значениями (int).
- Выводится приглашение для ввода размера матрицы и после получения корректного ввода - выводится приглашение для ввода номера строки и столбца.
- Матрица заполняется последовательно слева направо, сверху вниз значениями от 1 до N*N.
- После получения номера строки и столбца, значения в этой строке и столбце меняются местами.
- Выводится приглашение для ввода матрицы и после получения ввода - выводится сама матрица.
- Программа завершается возвратом 0. Пояснение к коду:
- В цикле
for
сi = 0
иq = p
перебираются все элементы матрицы, начиная с 0. - Если
i
- это номер строки (делится на N без остатка), то выводится символ новой строки\n
. - В
printf
выводится значение*q
увеличенное на 1 (относительно начала матрицы) иq
увеличивается наN
(чтобы перейти к следующей строке). - В цикле
for
сi = 0
иq = p + k * N
перебираются все элементы выбранной строки и столбца. - Значение
temp
устанавливается в*q
(чтобы сохранить значение для обратного обмена). - Значение
*q
заменяется на значение*r
(чтобы поменять местами со следующим элементом). - Значение
*r
устанавливается вtemp
(чтобы восстановить значение после обмена). r
увеличивается наN
(чтобы перейти к следующему столбцу).- В цикле
for
сi = 0
иq = p
перебираются все элементы матрицы, начиная с 0. - Если
i
- это номер строки (делится на N без остатка), то выводится символ новой строки\n
. - В
printf
выводится значение*q
увеличенное на 1 (относительно начала матрицы) иq
увеличивается наN
(чтобы перейти к следующей строке).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д