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