Объясните код нахождения максимального элемента матрицы - C (СИ)
Формулировка задачи:
Объясните пожалуйста этот код.
Желательно детально
#include <stdio.h>
#include <stdlib.h>
#define N 3
int main()
{
int i,j;//счетсчики
int **mas,max;//статический массив и мах
printf("Vvedite elementi matrici \n");
mas=(int**)malloc(N*sizeof(int*));
for(i=0;i<N;i++)
mas[i]=(int*)malloc(N*sizeof(int));
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&mas[i][j]);
}
}
printf("Vvedite matricu razmera N\n");
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%4d", mas[i][j]);// минимальная ширина поля
}
printf("\n");
}
max=mas[1][N-1];
for(i=0;i<N;i++)
{
for(j=N-i;j<N;j++)
{
if(mas[i][j]>max)
max=mas[i][j];
}
}
printf("The maximum element of the matrix by secondary diagonal=%i\n",max);
free(mas[i]);
free(mas);
return 0;
}Решение задачи: «Объясните код нахождения максимального элемента матрицы»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#define N 3
int main()
{
int i,j;//счетсчики
int **mas,max;//статический массив и мах
printf("Vvedite elementi matrici \n");
mas=(int**)malloc(N*sizeof(int*));// выделяется динамическая старинным сишным способом, под массив int указалетей(число строк). получается массив указателей
for(i=0;i<N;i++)
mas[i]=(int*)malloc(N*sizeof(int));// а тут выделяется динамическая память под строки в массиве int, на которые указывают вышестоящие указатели. проще говоря у тебя есть массив *int и матрица int. все это делается для удобства написания mas[i][j]
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
scanf("%d",&mas[i][j]);// ввод матрицы размера N на N
}
}
printf("Vvedite matricu razmera N\n");
for (i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("%4d", mas[i][j]);// вывод вывод матрицы которую только что ввел
}
printf("\n");// переход на новую строку
}
max=mas[1][N-1]; // максимум присваивается последнему элементу 2й строки.
for(i=0;i<N;i++)
{
for(j=N-i;j<N;j++)// при i=0 цикл пропускается. разумно сразу i=1 написать. на одну итерацию меньше
{
if(mas[i][j]>max)
max=mas[i][j]; // ищем какой-то максимум в массиве
}
}
printf("The maximum element of the matrix by secondary diagonal=%i\n",max);//выводим максимум
free(mas[i]);// освобождаем место от динамической матрицы
free(mas);
return 0;
}
Объяснение кода листинга программы
- Объявлены переменные:
- i, j - счетчики
- mas - динамический массив (массив указателей на массив int)
- max - переменная для хранения максимального элемента
- Выделена динамическая память под массив указателей на массив int и под сам массив int:
- mas = (int*) malloc(N sizeof(int*));
- mas[i] = (int) malloc(N sizeof(int));
- Происходит ввод матрицы размера N на N:
- for (i=0;i<N;i++)
- for(j=0;j<N;j++)
- scanf(
%d,&mas[i][j]);
- Выводится введенная матрица:
- for (i=0;i<N;i++)
- for(j=0;j<N;j++)
- printf(
%4d, mas[i][j]);
- Максимальному элементу присваивается значение последнего элемента 2-й строки:
- max = mas[1][N-1];
- Происходит поиск максимального элемента в матрице, начиная с последней строки:
- for(i=0;i<N;i++)
- for(j=N-i;j<N;j++)
- if(mas[i][j]>max)
- max = mas[i][j];
- Выводится найденный максимум:
- printf(
The maximum element of the matrix by secondary diagonal=%i\n,max);
- printf(
- Освобождается динамическая память:
- free(mas[i]);
- free(mas);