Объясните код нахождения максимального элемента матрицы - 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);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д