Найти наибольшее число среди N чисел

CBeginner
Практиковаться сейчас

Введение

В этом практическом занятии (лабораторной работе) мы научимся писать программу на языке C, которая находит наибольшее число среди набора чисел, введенных пользователем. Это фундаментальное программирование упражнение, которое учит несколько важных концепций:

  • Получение входных данных от пользователя
  • Работа с циклами
  • Сравнение значений
  • Отслеживание максимального значения на каждой итерации

Алгоритм, который мы будем реализовывать, прост: мы спросим у пользователя, сколько чисел он хочет ввести, а затем пройдем по каждому введенному числу. По мере обработки каждого числа мы сравним его с текущим наибольшим числом, которое мы нашли до этого, и при необходимости обновим переменную "наибольшее".

К концу этого практического занятия (лабораторной работы) вы создадите программу, которая может обрабатывать любое количество входных данных и надежно определять наибольшее значение среди них.

Создание файла программы

Начнем с создания нового файла на языке C для нашей программы. В WebIDE мы создадим файл с именем main.c в директории проекта.

  1. Перейдите в директорию проекта в панели терминала:

    cd ~/project
    
  2. Теперь в WebIDE нажмите кнопку "New File" в панели проводника слева или щелкните правой кнопкой мыши в панели проводника и выберите "New File".

  3. Назовите файл main.c и нажмите Enter.

  4. Давайте начнем с добавления базовой структуры нашей программы на языке C в только что созданный файл:

    #include <stdio.h>
    
    int main() {
        // We will add our code here
    
        return 0;
    }
    
  5. Сохраните файл, нажав Ctrl+S или выбрав "File > Save" из меню.

Эта структура включает:

  • Директива #include <stdio.h>, которая подключает стандартную библиотеку ввода-вывода (Standard Input/Output library), необходимую для функций, таких как printf() и scanf()
  • Функция main(), которая является точкой входа в любую программу на языке C
  • Инструкция return 0;, которая указывает на успешное выполнение нашей программы

Заголовочный файл stdio.h предоставляет функции для операций ввода и вывода. Функция main() - это место, где начинается выполнение нашей программы, а return 0; сигнализирует операционной системе о том, что наша программа завершилась без ошибок.

Обработка пользовательского ввода

Далее нам нужно настроить нашу программу для взаимодействия с пользователем. Нам нужно:

  1. Объявить переменные для хранения наших данных
  2. Запросить у пользователя количество элементов
  3. Настроить процесс получения первого числа

Обновим наш код в файле main.c:

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    return 0;
}

Понять, что мы добавили:

  1. Объявление переменных:

    • int n: Целочисленная переменная для хранения количества чисел, которые пользователь хочет ввести
    • float big: Переменная с плавающей точкой для хранения наибольшего найденного числа
  2. Пользовательский ввод количества элементов:

    • Мы используем printf() для вывода запроса на ввод количества элементов
    • Мы используем scanf("%d", &n) для чтения целого числа от пользователя и сохранения его в переменной n
    • Символ & перед n - это оператор "адрес", который сообщает scanf(), где сохранить введенное значение
  3. Валидация ввода:

    • Мы проверяем, ввел ли пользователь положительное число
    • Если нет, мы выводим сообщение об ошибке и завершаем программу с кодом возврата 1 (что означает ошибку)
  4. Ввод первого числа:

    • Мы запрашиваем у пользователя ввести первое число
    • Мы сохраняем это первое число в переменной big, так как на данном этапе это единственное (и, следовательно, наибольшее) число, которое у нас есть

При запуске этого кода программа запросит количество элементов, а затем первое число, но пока не сделает ничего с этой информацией. На следующем шаге мы добавим логику для обработки всех чисел и нахождения наибольшего из них.

Поиск наибольшего числа

Теперь мы реализуем основную логику нашей программы - поиск наибольшего числа среди введенных. Мы будем использовать цикл for для:

  1. Перебора оставшихся чисел (от второго до n-го)
  2. Сравнения каждого числа с текущим наибольшим значением
  3. Обновления наибольшего значения, если мы найдем большее число

Обновите файл main.c следующим кодом:

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    // Process remaining numbers using a loop
    for (int i = 2; i <= n; i++) {
        float current;  // Variable to store the current number

        // Prompt for the current number
        printf("Enter element %d: ", i);
        scanf("%f", &current);

        // Compare with the current largest
        if (current > big) {
            big = current;  // Update 'big' if current number is larger
        }
    }

    // Display the result
    printf("The largest of the %d numbers is %.2f\n", n, big);

    return 0;
}

Понять новый код, который мы добавили:

  1. Цикл For:

    • Мы начинаем с i = 2, потому что уже обработали первый элемент
    • Продолжаем, пока не обработаем n элементов
    • На каждой итерации увеличиваем i на 1
  2. Обработка каждого числа:

    • Мы объявляем новую переменную current для хранения каждого введенного числа
    • Запрашиваем у пользователя ввести текущий элемент
    • Считываем ввод с помощью scanf()
  3. Поиск максимума:

    • Мы сравниваем текущий ввод current с текущим наибольшим значением big
    • Если current больше, обновляем big для хранения этого нового наибольшего значения
    • Если нет, оставляем big без изменений и переходим к следующему вводу
  4. Вывод результата:

    • После обработки всех вводов выводим найденное наибольшее число
    • Спецификатор формата %.2f выводит число с плавающей точкой с двумя знаками после запятой

Эта реализация следует распространенному шаблону для поиска максимального значения в последовательности:

  1. Инициализируем максимум первым значением
  2. Перебираем оставшиеся значения
  3. Обновляем максимум, когда находим большее значение
  4. В конце переменная содержит наибольшее значение из последовательности

Компиляция и тестирование программы

Теперь, когда мы написали нашу полноценную программу на языке C, нам нужно скомпилировать и запустить ее, чтобы убедиться, что она работает правильно.

  1. Чтобы скомпилировать программу, выполните следующую команду в терминале:

    gcc ~/project/main.c -o ~/project/main
    

    Эта команда вызывает GNU C Compiler (gcc) для компиляции нашего исходного файла main.c и создания исполняемого файла с именем main. Флаг -o указывает имя выходного файла.

  2. Если в вашем коде нет ошибок, команда выполнится без вывода каких-либо сообщений. Это означает, что ваша программа успешно скомпилирована.

  3. Если вы видите какие-либо сообщения об ошибках, внимательно прочитайте их, чтобы понять, что пошло не так. Среди распространенных ошибок:

    • Отсутствие точек с запятой (;)
    • Несовпадение фигурных скобок ({ и })
    • Неправильные имена или типы переменных
    • Отсутствие или неправильные инструкции include
  4. После успешной компиляции программы запустите ее с помощью команды:

    ~/project/main
    
  5. Протестируйте свою программу с разными входными данными. Вот пример тестового случая:

    Ввод:

    Enter the number of elements you wish to find the greatest element of: 5
    Enter 5 numbers:
    Enter element 1: 12.5
    Enter element 2: 9.7
    Enter element 3: 25.8
    Enter element 4: 15.2
    Enter element 5: 4.9
    

    Ожидаемый вывод:

    The largest of the 5 numbers is 25.80
    
  6. Попробуйте еще один тестовый случай с отрицательными числами:

    Ввод:

    Enter the number of elements you wish to find the greatest element of: 3
    Enter 3 numbers:
    Enter element 1: -10.5
    Enter element 2: -2.3
    Enter element 3: -15.7
    

    Ожидаемый вывод:

    The largest of the 3 numbers is -2.30
    
  7. Также протестируйте программу с одним числом:

    Ввод:

    Enter the number of elements you wish to find the greatest element of: 1
    Enter 1 numbers:
    Enter element 1: 42.0
    

    Ожидаемый вывод:

    The largest of the 1 numbers is 42.00
    

Если ваша программа выдает ожидаемые результаты для этих тестовых случаев, поздравляем! Вы успешно реализовали программу для нахождения наибольшего числа среди N введенных чисел.

Процесс компиляции и тестирования является важной частью разработки программного обеспечения. Он позволяет проверить, что ваш код работает как ожидается, и помочь вам выявить и исправить любые ошибки или проблемы.

Резюме

В этом практическом занятии мы успешно реализовали программу на языке C, которая находит наибольшее число среди набора чисел, предоставленных пользователем. Проверим, что мы достигли:

  1. Понимание проблемы: Мы определили необходимость обработки набора чисел и определения, какое из них наибольшее.

  2. Структура программы: Мы создали хорошо структурированную программу на языке C с правильными инструкциями include, объявлениями переменных и логическим потоком выполнения.

  3. Обработка пользовательского ввода: Мы реализовали код для получения ввода от пользователей, включая валидацию, чтобы обеспечить корректность данных.

  4. Реализация алгоритма: Мы использовали простой, но эффективный алгоритм для нахождения максимального значения:

    • Инициализация с первым значением
    • Сравнение каждого последующего значения с текущим максимумом
    • Обновление максимума, когда найдено большее значение
  5. Тестирование и выполнение: Мы скомпилировали нашу программу и протестировали ее с различными входными данными, чтобы убедиться, что она работает правильно.

Это практическое занятие демонстрирует фундаментальные концепции программирования, которые ценны во многих контекстах:

  • Последовательное выполнение
  • Условные операторы
  • Конструкции циклов
  • Отслеживание переменных
  • Операции ввода/вывода

Полный код

Вот полный код, который мы разработали в этом практическом занятии:

#include <stdio.h>

int main() {
    // Declare variables
    int n;          // To store the number of elements
    float big;      // To store the largest number found

    // Prompt the user for the number of elements
    printf("Enter the number of elements you wish to find the greatest element of: ");
    scanf("%d", &n);

    // Check if the input is valid
    if (n <= 0) {
        printf("Please enter a positive number of elements.\n");
        return 1;  // Exit with error code
    }

    // Prompt for the first number and initialize 'big' with it
    printf("Enter %d numbers:\n", n);
    printf("Enter element 1: ");
    scanf("%f", &big);

    // Process remaining numbers using a loop
    for (int i = 2; i <= n; i++) {
        float current;  // Variable to store the current number

        // Prompt for the current number
        printf("Enter element %d: ", i);
        scanf("%f", &current);

        // Compare with the current largest
        if (current > big) {
            big = current;  // Update 'big' if current number is larger
        }
    }

    // Display the result
    printf("The largest of the %d numbers is %.2f\n", n, big);

    return 0;
}

Вы можете расширить эту программу различными способами:

  • Найти как наибольшее, так и наименьшее числа
  • Вычислить среднее арифметическое всех чисел
  • Отсортировать числа в порядке возрастания или убывания
  • Обрабатывать более сложные структуры данных, такие как массивы

Мы надеемся, что это практическое занятие помогло вам понять основы программирования на языке C и алгоритмическое мышление. Эти концепции являются основой для более продвинутых тем программирования и методов решения проблем.