Найти два минимальных элемента массива - C (СИ)

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

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

Здравствуйте! Собственно сам вопрос в заголовке. Сделал что-то такое, но не всегда правильно работает:
Листинг программы
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4. int main(){
  5. srand(time(NULL));
  6. int N;
  7. printf("N=");
  8. scanf("%d",&N);
  9. int *tab=(int*)malloc(sizeof(int)*N);
  10. int element;
  11. for(int i=0;i<N;i++){
  12. element=rand()%41;
  13. tab[i]=element;
  14. }
  15. for(int i=0;i<N;i++){
  16. printf("%d",tab[i]);
  17. printf("\n");
  18. }
  19. int minimum1;
  20. int minimum2;
  21.  
  22. minimum2=tab[1];
  23. for(int i=1;i<N;i++){
  24. if(tab[i]<minimum2){
  25. minimum2=tab[i];
  26. }
  27. }
  28. minimum1=tab[0];
  29. for(int i=0;i<N;i++){
  30. if(minimum1<minimum2){
  31. minimum1=tab[i];
  32. }
  33. }
  34. printf("Minimum1 = %d ",minimum1);
  35. printf("\n Minimum2 = %d ",minimum2);
  36. return 0;
  37. }
Скажите, как сделать правильно? Заранее спасибо!

Решение задачи: «Найти два минимальных элемента массива»

textual
Листинг программы
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3. #include <time.h>
  4.  
  5. int main(void){
  6.     srand(time(NULL));
  7.     int N, ind;
  8.     printf("N=");
  9.     scanf("%d",&N);
  10.     int *tab=(int*)malloc(sizeof(int)*N);
  11.     for(int i=0;i<N;i++)
  12.     {
  13.         tab[i]=rand()%41;
  14.     }
  15.  
  16.     for(int i=0;i<N;i++)
  17.     {
  18.         printf("%d",tab[i]);
  19.         printf("\n");
  20.     }
  21.     int minimum1,minimum2;
  22.     minimum1=tab[0];
  23.     for(int i=1;i<N;i++)
  24.         if(tab[i]<minimum1)
  25.         {
  26.             minimum1=tab[i];
  27.             ind=i;
  28.         }
  29.     minimum2=tab[0];
  30.     for(int i=1;i<N;i++)
  31.     {
  32.         if(tab[i]<minimum2 && ind!=i)
  33.         {
  34.             minimum2=tab[i];
  35.         }
  36.     }
  37.  
  38.       printf("Minimum1 = %d ",minimum1);
  39.       printf("\n Minimum2 = %d ",minimum2);
  40.  
  41.    return 0;
  42. }

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

В этом коде:

  1. Сначала программа запрашивает у пользователя количество элементов в массиве (переменная N).
  2. Затем программа генерирует массив случайных целых чисел от 0 до 40 (используя функцию rand() и оператор модуля %).
  3. Далее программа выводит на экран все числа этого массива (используя цикл for и функцию printf()).
  4. Затем программа ищет два минимальных числа в массиве (используя два вложенных цикла for).
  5. Первый минимум запоминается в переменной minimum1, а второй - в переменной minimum2.
  6. Наконец, программа выводит на экран значения minimum1 и minimum2 (используя функцию printf()). Код корректно работает, если в нем не делать ошибок (например, не выделять память под массив или не проверять, что пользователь ввел корректное число при запросе количества элементов).

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


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

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

7   голосов , оценка 3.714 из 5

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

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

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