#c #if-statement #while-loop
Вопрос:
Я занимался проблемами в течение цикла while в c , и я застрял на этой проблеме. Погуглил ответ, чтобы узнать, что мне нужно было сделать, но теперь я не понимаю логики, стоящей за этим, и почему это работает.
Вот в чем проблема:
Последовательность состоит из натуральных чисел и заканчивается на 0. Определите значение второго по величине элемента в последовательности, то есть элемента, который будет самым большим, если вы удалите самый большой элемент из последовательности.
Примеры-> Ввод 1: 4, 4, 2, 3, 0 Выход 1: 4 ; Вход 2: 2 1 0 Выход 2: 1
Это и есть код:
#include <iostream>
using namespace std;
int main() {
int n, max, smax = 0;
cin >> n;
max = n;
while (n != 0) {
cin >> n;
if (n > max) {
smax = max;
max = n;
}
else if (n > smax) {
smax = n;
}
}
cout << smax;
return 0;
}
Итак, из моего понимания max
следует n
, что утверждение «если n > max
» никогда не будет истинным. Если значение для max
сбрасывается с каждым циклом и равно 0, но тогда оно всегда будет истинным, поэтому нет смысла для второго оператора if.
Я уверен, что не понимаю, как работает цикл while, и я хотел бы, чтобы кто-нибудь прояснил это для меня. Заранее спасибо.
Комментарии:
1.
cin >> n
считывает новое значение из stdin вn
. Если оно больше, чем максимальное значение на сегодняшний день, то второе максимальное значение становится старым максимальным значением, а максимальное значение становитсяn
.2.
max
устанавливается на первое считываемое число, а для второго по величине (smax
) устанавливается значение 0. Затем мы делаем цикл до тех пор, пока не будет считан ноль. Каждый раз в цикле мы считываем значение и проверяем, больше ли следующее значение, чем максимальное, а если нет, то мы проверяем, больше ли оно второго по величине (smax
). Если оно превышает максимальное значение, мы заменяем максимальное значение этим новым значением, вторым по величине, на предыдущее максимальное значение. если он только выше второго по величине, мы заменяем только его.
Ответ №1:
В то время как цикл повторяет свое тело до тех пор, пока данное условие не станет ложным. Относительно легко сделать бесконечную ошибку цикла while в коде, например:
int i = 0;
while (i<10){
cout<<"somethingn";
}
Пожалуйста, не забудьте выполнить какую-нибудь операцию, которая разорвет петлю в теле. Это сработало бы:
int i = 0;
while (i<10){
cout<<"somethingn";
i ; //equivalent of i=i 1;
}
Попробуйте сами: https://www.onlinegdb.com/online_c _компилятор
Это должно помочь понять концепцию.
Ваш код на самом деле не имеет для меня никакого смысла. Вы вводите несколько цифр, и он меняет их до тех пор, пока вы не наберете 0, когда он остановится. Он даже не показывает вам максимальное значение, которое вы ввели. Я настоятельно рекомендую изучить что-то более понятное и полезное в C .