Введение
В этом практическом занятии (лабораторной работе) мы научимся писать программу на языке C, которая находит наибольшее число среди набора чисел, введенных пользователем. Это фундаментальное программирование упражнение, которое учит несколько важных концепций:
- Получение входных данных от пользователя
- Работа с циклами
- Сравнение значений
- Отслеживание максимального значения на каждой итерации
Алгоритм, который мы будем реализовывать, прост: мы спросим у пользователя, сколько чисел он хочет ввести, а затем пройдем по каждому введенному числу. По мере обработки каждого числа мы сравним его с текущим наибольшим числом, которое мы нашли до этого, и при необходимости обновим переменную "наибольшее".
К концу этого практического занятия (лабораторной работы) вы создадите программу, которая может обрабатывать любое количество входных данных и надежно определять наибольшее значение среди них.
Создание файла программы
Начнем с создания нового файла на языке C для нашей программы. В WebIDE мы создадим файл с именем main.c в директории проекта.
Перейдите в директорию проекта в панели терминала:
cd ~/projectТеперь в WebIDE нажмите кнопку "New File" в панели проводника слева или щелкните правой кнопкой мыши в панели проводника и выберите "New File".
Назовите файл
main.cи нажмите Enter.Давайте начнем с добавления базовой структуры нашей программы на языке C в только что созданный файл:
#include <stdio.h> int main() { // We will add our code here return 0; }Сохраните файл, нажав Ctrl+S или выбрав "File > Save" из меню.
Эта структура включает:
- Директива
#include <stdio.h>, которая подключает стандартную библиотеку ввода-вывода (Standard Input/Output library), необходимую для функций, таких какprintf()иscanf() - Функция
main(), которая является точкой входа в любую программу на языке C - Инструкция
return 0;, которая указывает на успешное выполнение нашей программы
Заголовочный файл stdio.h предоставляет функции для операций ввода и вывода. Функция main() - это место, где начинается выполнение нашей программы, а return 0; сигнализирует операционной системе о том, что наша программа завершилась без ошибок.
Обработка пользовательского ввода
Далее нам нужно настроить нашу программу для взаимодействия с пользователем. Нам нужно:
- Объявить переменные для хранения наших данных
- Запросить у пользователя количество элементов
- Настроить процесс получения первого числа
Обновим наш код в файле 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;
}
Понять, что мы добавили:
Объявление переменных:
int n: Целочисленная переменная для хранения количества чисел, которые пользователь хочет ввестиfloat big: Переменная с плавающей точкой для хранения наибольшего найденного числа
Пользовательский ввод количества элементов:
- Мы используем
printf()для вывода запроса на ввод количества элементов - Мы используем
scanf("%d", &n)для чтения целого числа от пользователя и сохранения его в переменнойn - Символ
&передn- это оператор "адрес", который сообщаетscanf(), где сохранить введенное значение
- Мы используем
Валидация ввода:
- Мы проверяем, ввел ли пользователь положительное число
- Если нет, мы выводим сообщение об ошибке и завершаем программу с кодом возврата 1 (что означает ошибку)
Ввод первого числа:
- Мы запрашиваем у пользователя ввести первое число
- Мы сохраняем это первое число в переменной
big, так как на данном этапе это единственное (и, следовательно, наибольшее) число, которое у нас есть
При запуске этого кода программа запросит количество элементов, а затем первое число, но пока не сделает ничего с этой информацией. На следующем шаге мы добавим логику для обработки всех чисел и нахождения наибольшего из них.
Поиск наибольшего числа
Теперь мы реализуем основную логику нашей программы - поиск наибольшего числа среди введенных. Мы будем использовать цикл for для:
- Перебора оставшихся чисел (от второго до n-го)
- Сравнения каждого числа с текущим наибольшим значением
- Обновления наибольшего значения, если мы найдем большее число
Обновите файл 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", ¤t);
// 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;
}
Понять новый код, который мы добавили:
Цикл For:
- Мы начинаем с
i = 2, потому что уже обработали первый элемент - Продолжаем, пока не обработаем
nэлементов - На каждой итерации увеличиваем
iна 1
- Мы начинаем с
Обработка каждого числа:
- Мы объявляем новую переменную
currentдля хранения каждого введенного числа - Запрашиваем у пользователя ввести текущий элемент
- Считываем ввод с помощью
scanf()
- Мы объявляем новую переменную
Поиск максимума:
- Мы сравниваем текущий ввод
currentс текущим наибольшим значениемbig - Если
currentбольше, обновляемbigдля хранения этого нового наибольшего значения - Если нет, оставляем
bigбез изменений и переходим к следующему вводу
- Мы сравниваем текущий ввод
Вывод результата:
- После обработки всех вводов выводим найденное наибольшее число
- Спецификатор формата
%.2fвыводит число с плавающей точкой с двумя знаками после запятой
Эта реализация следует распространенному шаблону для поиска максимального значения в последовательности:
- Инициализируем максимум первым значением
- Перебираем оставшиеся значения
- Обновляем максимум, когда находим большее значение
- В конце переменная содержит наибольшее значение из последовательности
Компиляция и тестирование программы
Теперь, когда мы написали нашу полноценную программу на языке C, нам нужно скомпилировать и запустить ее, чтобы убедиться, что она работает правильно.
Чтобы скомпилировать программу, выполните следующую команду в терминале:
gcc ~/project/main.c -o ~/project/mainЭта команда вызывает GNU C Compiler (gcc) для компиляции нашего исходного файла
main.cи создания исполняемого файла с именемmain. Флаг-oуказывает имя выходного файла.Если в вашем коде нет ошибок, команда выполнится без вывода каких-либо сообщений. Это означает, что ваша программа успешно скомпилирована.
Если вы видите какие-либо сообщения об ошибках, внимательно прочитайте их, чтобы понять, что пошло не так. Среди распространенных ошибок:
- Отсутствие точек с запятой (
;) - Несовпадение фигурных скобок (
{и}) - Неправильные имена или типы переменных
- Отсутствие или неправильные инструкции
include
- Отсутствие точек с запятой (
После успешной компиляции программы запустите ее с помощью команды:
~/project/mainПротестируйте свою программу с разными входными данными. Вот пример тестового случая:
Ввод:
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Попробуйте еще один тестовый случай с отрицательными числами:
Ввод:
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Также протестируйте программу с одним числом:
Ввод:
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, которая находит наибольшее число среди набора чисел, предоставленных пользователем. Проверим, что мы достигли:
Понимание проблемы: Мы определили необходимость обработки набора чисел и определения, какое из них наибольшее.
Структура программы: Мы создали хорошо структурированную программу на языке C с правильными инструкциями
include, объявлениями переменных и логическим потоком выполнения.Обработка пользовательского ввода: Мы реализовали код для получения ввода от пользователей, включая валидацию, чтобы обеспечить корректность данных.
Реализация алгоритма: Мы использовали простой, но эффективный алгоритм для нахождения максимального значения:
- Инициализация с первым значением
- Сравнение каждого последующего значения с текущим максимумом
- Обновление максимума, когда найдено большее значение
Тестирование и выполнение: Мы скомпилировали нашу программу и протестировали ее с различными входными данными, чтобы убедиться, что она работает правильно.
Это практическое занятие демонстрирует фундаментальные концепции программирования, которые ценны во многих контекстах:
- Последовательное выполнение
- Условные операторы
- Конструкции циклов
- Отслеживание переменных
- Операции ввода/вывода
Полный код
Вот полный код, который мы разработали в этом практическом занятии:
#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", ¤t);
// 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 и алгоритмическое мышление. Эти концепции являются основой для более продвинутых тем программирования и методов решения проблем.



