Объясните код нахождения максимального элемента матрицы - 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;
}

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

  1. Объявлены переменные:
    • i, j - счетчики
    • mas - динамический массив (массив указателей на массив int)
    • max - переменная для хранения максимального элемента
  2. Выделена динамическая память под массив указателей на массив int и под сам массив int:
    • mas = (int*) malloc(N sizeof(int*));
    • mas[i] = (int) malloc(N sizeof(int));
  3. Происходит ввод матрицы размера N на N:
    • for (i=0;i<N;i++)
    • for(j=0;j<N;j++)
    • scanf(%d,&mas[i][j]);
  4. Выводится введенная матрица:
    • for (i=0;i<N;i++)
    • for(j=0;j<N;j++)
    • printf(%4d, mas[i][j]);
  5. Максимальному элементу присваивается значение последнего элемента 2-й строки:
    • max = mas[1][N-1];
  6. Происходит поиск максимального элемента в матрице, начиная с последней строки:
    • for(i=0;i<N;i++)
    • for(j=N-i;j<N;j++)
    • if(mas[i][j]>max)
    • max = mas[i][j];
  7. Выводится найденный максимум:
    • printf(The maximum element of the matrix by secondary diagonal=%i\n,max);
  8. Освобождается динамическая память:
    • free(mas[i]);
    • free(mas);

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


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

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

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