В квадратной матрице найти максимум главной диагонали и минимум в побочной - C (СИ)
Формулировка задачи:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a, m[a][a], max, min;
printf("Vvedite kolichestvo strok stolbcov: ");
scanf("%d",&a);
printf("Vvedite matricu: \n");
for(int i=0; i<a;i++) for(int j=0; j<a; j++)
scanf("%d", &m[i][j]);
min=m[0][0];
max=m[0][0];
for(int i=0; i<a;i++) for(int j=0; j<a; j++){
if(i==j)
if(max<m[i][j])
max=m[i][j];
if(i+j==a-1)
if(min>m[i][j])
min=m[i][j];
}
printf("%d %d",max, min);
return 0;
}Решение задачи: «В квадратной матрице найти максимум главной диагонали и минимум в побочной»
textual
Листинг программы
#include <stdio.h> //Библиотека стандартного ввода/вывода
int main(int argc, char *argv[])
{
int N,M; //Переменные для хранения размера матрицы
//Приглашение к вводу размеров матрицы
printf("Введите размеры матрицы: ");
//Ввод размеров матрицы
scanf("%d %d",&N,&M);
//Если размеры введены некорректно, то выход из программы
if((N<2)||(M<2)){
printf("Размеры введены некорректно!\n");
return 0;
}
//Приглашение к вводу матрицы
printf("Введите матрицу:\n");
//Создание динамической матрицы
int matrix[N][M];
//Ввод матрицы в двух вложенных циклах
for(int i=0;i<N;i++) for(int j=0;j<M;j++)
scanf("%d",&matrix[i][j]);
//Объявление и инициализация переменных для хранения
//значений максимума и минимума матрицы
int max = matrix[0][0], min = matrix[0][0];
//Объявление и инициализация переменных для хранения
//номеров строк, содержащих максимум и минимум матрицы
int imax = 0, imin = 0;
//Просмотр всей матрицы в двух вложенных циклах
for(int i=0;i<N;i++) for(int j=0;j<M;j++){
//Если текущий элемент матрицы больше найденного ранее
//максимума, то записываем новый максимум и его строку
if(max < matrix[i][j]) {max = matrix[i][j]; imax = i;}
//Если текущий элемент матрицы меньше найденного ранее
//минимума, то записываем новый минимум и его строку
if(min > matrix[i][j]) {min = matrix[i][j]; imin = i;}
}
//Если номер строки минимума не равен номеру строки
//максимума, то обмениваем значения строк
if(imin != imax){
//Обмен значений двух строк в цикле по всем столбцам
//через дополнительную переменную
for(int j=0;j<M;j++){
int tmp = matrix[imin][j];
matrix[imin][j] = matrix[imax][j];
matrix[imax][j] = tmp;
}
}else{ //В противном случае
//Обнуление всех элементов строки
for(int j=0;j<M;j++) matrix[imin][j] = 0;
}
//Форматированный вывод результата
printf("Результат:\n");
for(int i=0;i<N;i++){//Цикл по строкам матрицы
//Вывод строки матрицы
for(int j=0;j<M;j++) printf("%4d ",matrix[i][j]);
//Переход на новую строку
printf("\n");
}
return 0;
}
Объяснение кода листинга программы
В этом коде выполняются следующие действия:
- Подключение библиотеки стандартного ввода/вывода.
- Определение переменных N и M для хранения размеров матрицы.
- Вывод приглашения к вводу размеров матрицы.
- Ввод размеров матрицы с помощью функции scanf.
- Проверка корректности введенных размеров матрицы. Если они некорректны, программа выводит сообщение об ошибке и завершается.
- Создание динамической матрицы с помощью массива matrix.
- Ввод матрицы в двух вложенных циклах с помощью функции scanf.
- Инициализация переменных max и min для хранения максимального и минимального значений матрицы, а также переменных imax и imin для хранения номеров строк, содержащих эти значения.
- Проход по всей матрице в двух вложенных циклах и обновление max и min, если найдены новые значения.
- Если min и max находятся в разных строках, обмен значений этих строк.
- Если min и max находятся в одной и той же строке, обнуление всех элементов этой строки.
- Форматированный вывод результата с помощью цикла for и функции printf.
- Возврат 0, указывающий на успешное выполнение программы.