Определить второй по величине элемент двумерного массива - C (СИ)
Формулировка задачи:
Доброго дня!
По условию задачи надо определить второй по величине элемент двумерного массива и вывести на экран номера строк и количество данных элементов в этих строках.
вот что получилось:
Проблема в том, что программа иногда выводит максимальный элемент вместо второго по величине...
подскажите где ошибка.
добавить выделенные скобки, то вроде как ошибка появляется реже, но все равно проскакивает
Листинг программы
- int main()
- {
- system ("chcp 1251");
- system ("cls");
- int a[10][10],n,m,i,j;
- printf("введите количество строк от 1 до 10\n");
- scanf("%d",&n);
- while(n<1||n>10)
- {printf("введено неверное значение, пробуй еще\n");
- scanf("%d",&n);
- }
- printf("введите количество элементов в каждой строке от 1 до 10\n");
- scanf("%d",&m);
- while(m<1||m>10)
- {printf("введено неверное значение, пробуй еще\n");
- scanf("%d",&m);
- }
- srand(time(0));
- for(i=0;i<n;i++)
- {
- for(j=0;j<m;j++)
- {
- a[i][j]=rand()%30+1;
- }
- }
- for(i=0;i<n;i++)
- {
- for(j=0;j<m;j++)
- {
- printf("%4d",a[i][j]);
- }
- printf("\n");
- }
- int max=a[0][0],max2=a[0][0];
- for(i=0;i<n;i++)
- {
- for(j=0;j<m;j++)
- {
- if(a[i][j]>max)
- {
- max=a[i][j];
- }
- if(a[i][j]>max2&&a[i][j]<max)
- {
- max2=a[i][j];
- }
- }
- }
- printf("second max element =%d\n",max2);
- int sum[i];
- for(i=0;i<n;i++)
- {
- sum[i]=0;
- for(j=0;j<m;j++)
- {
- if(a[i][j]==max2)
- {sum[i]++;
- }
- }
- if(sum[i]>0) printf("количество вторых по величине элементов %d строки равно %d\n",i+1,sum[i]);
- }
- return 0;
- }
Вроде как если в условии:
Листинг программы
- if( ( a[i][j]>max2 ) && ( a[i][j]<max ) )
- {
- max2=a[i][j];
- }
Решение задачи: «Определить второй по величине элемент двумерного массива»
textual
Листинг программы
- #include <stdio.h>
- #include <stdlib.h>
- #include <stdbool.h>
- #include <time.h>
- #define n 5
- #define m 4
- //вывести на экран второй наибольший элемент массива
- int main()
- {
- bool flag = false;
- int i, j, max, max2, a[n][m];
- srand(time(0));
- for(i = 0; i < n; i++){
- for(j = 0; j < m; j++){
- printf("%3d", a[i][j] = rand() % 150 - 60);
- if(i == 0 && j == 0)
- max = max2 = a[0][0];
- if(!flag){
- if(a[i][j] < max){
- max2 = a[i][j];
- flag = true;
- }
- }
- if(a[i][j] > max){
- max2 = max;
- max = a[i][j];
- }
- if(a[i][j] > max2 && a[i][j] < max)
- max2 = a[i][j];
- }
- }
- printf("\n%d\n", max2);
- return 0;
- }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с C
- Задаем размерность двумерного массива с помощью макросов
- Инициализируем переменные, в том числе флаг, который указывает, найден ли уже второй максимальный элемент
- Заполняем массив случайными числами с помощью функции rand() и операции модуля %
- В цикле находим второй максимальный элемент, сравнивая текущий элемент с уже найденными максимальными значениями
- Выводим на экран второй максимальный элемент массива
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д