Условие задачи
Написать функцию, меняющую местами максимальный и минимальный элементы массива A[m][n]. Использовать функцию для матрицы B[4][5], задаваемую с клавиатуры. Распечатать исходную матрицу, а слева — преобразованную.
Решение задачи на языке Си
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
#include <stdio.h> #include <stdlib.h> #include <conio.h> // функция, которая меняет местами максимальный и минимальный элементы в массиве void swapMaxMin(int** A, int m, int n) { // в начале примем, что max и min элемент - это A[0][0] int maxI = 0, maxJ = 0, minI = 0, minJ = 0; // перебираем все элементы цикла и ищем максимальный и минимальный элементы for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { if (A[maxI][maxJ] < A[i][j]) { maxI = i; maxJ = j; } if (A[minI][minJ] > A[i][j]) { minI = i; minJ = j; } } // меняем их местами int tmp = A[maxI][maxJ]; A[maxI][maxJ] = A[minI][minJ]; A[minI][minJ] = tmp; } int main() { // тут будут размеры матрицы int m, n; // читаем m printf("m = "); scanf_s("%d", &m); // читаем n printf("n = "); scanf_s("%d", &n); // указатели на два массива. originalB - исходный массив, swappedB - массив с переставленными max и min элементами int** originalB; int** swappedB; // выделяем память под массивы originalB = (int**)malloc(m*sizeof(int*)); swappedB = (int**)malloc(m*sizeof(int*)); for (int i = 0; i < m; i++) { originalB[i] = (int*)malloc(n*sizeof(int)); swappedB[i] = (int*)malloc(n*sizeof(int)); } // читаем массив из консоли for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) { printf("B[%d][%d] = ", i, j); scanf_s("%d", &originalB[i][j]); // читаем в originalB swappedB[i][j] = originalB[i][j]; // и копируем это значение в swappedB } // меняем местами max и min в swappedB swapMaxMin(swappedB, m, n); // выводим оба массива на экран. новый - слева, исходный - справа for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) printf("%4d", swappedB[i][j]); printf(" "); // интервал между двумя матрицами for (int j = 0; j < n; j++) printf("%4d", originalB[i][j]); printf("\n"); } // освобождаем память из под массивов for (int i = 0; i < m; i++) { free(originalB[i]); free(swappedB[i]); } free(originalB); free(swappedB); // читаем символ с консоли, чтобы она не закрылась сразу после выполнения программы _getch(); return 0; } |
Демонстрация работы программы
Поделиться в соц. сетях: