Объясните код нахождения максимального элемента матрицы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Объясните пожалуйста этот код. Желательно детально
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 3
  4. int main()
  5. {
  6. int i,j;//счетсчики
  7. int **mas,max;//статический массив и мах
  8. printf("Vvedite elementi matrici \n");
  9. mas=(int**)malloc(N*sizeof(int*));
  10. for(i=0;i<N;i++)
  11. mas[i]=(int*)malloc(N*sizeof(int));
  12. for (i=0;i<N;i++)
  13. {
  14. for(j=0;j<N;j++)
  15. {
  16. scanf("%d",&mas[i][j]);
  17. }
  18. }
  19. printf("Vvedite matricu razmera N\n");
  20. for (i=0;i<N;i++)
  21. {
  22. for(j=0;j<N;j++)
  23. {
  24. printf("%4d", mas[i][j]);// минимальная ширина поля
  25. }
  26. printf("\n");
  27. }
  28. max=mas[1][N-1];
  29. for(i=0;i<N;i++)
  30. {
  31. for(j=N-i;j<N;j++)
  32. {
  33. if(mas[i][j]>max)
  34. max=mas[i][j];
  35. }
  36. }
  37. printf("The maximum element of the matrix by secondary diagonal=%i\n",max);
  38. free(mas[i]);
  39. free(mas);
  40. return 0;
  41. }

Решение задачи: «Объясните код нахождения максимального элемента матрицы»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 3
  4. int main()
  5. {
  6. int i,j;//счетсчики
  7. int **mas,max;//статический массив и мах
  8. printf("Vvedite elementi matrici \n");
  9. mas=(int**)malloc(N*sizeof(int*));// выделяется динамическая старинным сишным способом, под массив int указалетей(число строк). получается массив указателей
  10. for(i=0;i<N;i++)
  11. mas[i]=(int*)malloc(N*sizeof(int));// а тут выделяется динамическая память под строки в массиве int, на которые указывают вышестоящие указатели. проще говоря у тебя есть массив *int и матрица int. все это делается для удобства написания mas[i][j]
  12. for (i=0;i<N;i++)
  13. {
  14. for(j=0;j<N;j++)
  15. {
  16. scanf("%d",&mas[i][j]);// ввод матрицы размера N на N
  17. }
  18. }
  19. printf("Vvedite matricu razmera N\n");
  20. for (i=0;i<N;i++)
  21. {
  22. for(j=0;j<N;j++)
  23. {
  24. printf("%4d", mas[i][j]);// вывод вывод матрицы которую только что ввел
  25. }
  26. printf("\n");// переход на новую строку
  27. }
  28. max=mas[1][N-1]; // максимум присваивается последнему элементу 2й строки.    
  29. for(i=0;i<N;i++)
  30. {
  31. for(j=N-i;j<N;j++)// при i=0 цикл пропускается. разумно сразу i=1 написать. на одну итерацию меньше
  32. {
  33. if(mas[i][j]>max)
  34. max=mas[i][j];    // ищем какой-то максимум в массиве
  35. }
  36. }
  37. printf("The maximum element of the matrix by secondary diagonal=%i\n",max);//выводим максимум
  38. free(mas[i]);// освобождаем место от динамической матрицы
  39. free(mas);
  40. return 0;
  41. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы