Как поменять местами в матрице строку и столбец номера которых К, 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;
}

Объяснение кода листинга программы

В этом коде:

  1. Объявлены переменные:
    • N - размер матрицы (целое число);
    • i - счётчик для прохода по матрице (целое число);
    • k - номер строки и столбца (целое число);
    • p - указатель на начало матрицы (int*);
    • q - указатель на текущую строку (int*);
    • r - указатель на текущий столбец (int*);
    • temp - временная переменная для обмена значениями (int).
  2. Выводится приглашение для ввода размера матрицы и после получения корректного ввода - выводится приглашение для ввода номера строки и столбца.
  3. Матрица заполняется последовательно слева направо, сверху вниз значениями от 1 до N*N.
  4. После получения номера строки и столбца, значения в этой строке и столбце меняются местами.
  5. Выводится приглашение для ввода матрицы и после получения ввода - выводится сама матрица.
  6. Программа завершается возвратом 0. Пояснение к коду:
  7. В цикле for с i = 0 и q = p перебираются все элементы матрицы, начиная с 0.
  8. Если i - это номер строки (делится на N без остатка), то выводится символ новой строки \n.
  9. В printf выводится значение *q увеличенное на 1 (относительно начала матрицы) и q увеличивается на N (чтобы перейти к следующей строке).
  10. В цикле for с i = 0 и q = p + k * N перебираются все элементы выбранной строки и столбца.
  11. Значение temp устанавливается в *q (чтобы сохранить значение для обратного обмена).
  12. Значение *q заменяется на значение *r (чтобы поменять местами со следующим элементом).
  13. Значение *r устанавливается в temp (чтобы восстановить значение после обмена).
  14. r увеличивается на N (чтобы перейти к следующему столбцу).
  15. В цикле for с i = 0 и q = p перебираются все элементы матрицы, начиная с 0.
  16. Если i - это номер строки (делится на N без остатка), то выводится символ новой строки \n.
  17. В printf выводится значение *q увеличенное на 1 (относительно начала матрицы) и q увеличивается на N (чтобы перейти к следующей строке).

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы