Я должен найти два самых маленьких числа без массивов
Таким образом, в основном у меня есть это назначение в C, я должен вводить числа, пока не введу 0, а после того, как я введу 0, я должен напечатать номер 1-й и 2-й минуты из всех этих номеров, и я не могу использовать массивы. Я понял, что мне нужно использовать цикл do-while для ввода, но я не могу понять, как найти два наименьших из них. Я думаю, что это можно сделать с помощью циклов if, но я не знаю, как это сделать, поскольку у меня есть только одна переменная для ввода чисел в нее (int a). И при вводе у меня появляется ошибка при вводе 0, я могу ввести еще один номер до выхода из программы.
#include <stdio.h>
int main() {
int a;
do {
printf("Enter numbers: ");
scanf("%d\n", &a);
//what to do here
}while(a != 0);
2 ответа
Вам нужно добавить 2 переменные, чтобы хранить наименьшие обнаруженные значения. подобно
int smallest = INT_MAX;
int second_smallest = INT_MAX;
Затем в цикле необходимо проверить, меньше ли новое входное значение, чем значения, сохраненные до сих пор. Что-то вроде:
if (a <= smallest)
{
second_smallest = smallest;
smallest = a;
}
else if (a < second_smallest)
{
second_smallest = a;
}
Вы можете использовать две переменные, чтобы делать то, что вам нужно
#include <stdio.h>
#include <limits.h>
int main(void)
{
int a = INT_MAX;
int min_1 = INT_MAX;
int min_2 = INT_MAX;
int valid;
do
{
if (a < min_1)
{
min_2 = min_1;
min_1 = a;
}
else if (a < min_2)
{
min_2 = a;
}
printf("Enter numbers: ");
valid = scanf("%d", &a);
}
while ((a != 0) && (valid == 1));
if (valid == 1)
{
printf("Minimum numbers entered are: %d %d\n", min_1, min_2);
}
else
{
fprintf(stderr, "Error in data input\n");
}
}
Так:
- использование
limits.h
определяет инициализировать минимальные переменные к наибольшему значению дляint
типINT_MAX
, - для каждого цикла вы должны проверить, является ли введенное число минимальным
- Вы должны проверить, что пользовательский ввод действителен: проверить
scanf
возвращаемое значение - Удалить
\n
в строке форматаscanf
,