У меня возникла проблема на сайте (https://www.learn-c.org/en / While_loops) был сосредоточен на обучении основам языка C. Когда я должен был решить эту проблему, я подумал, что это легко, и сразу придумал ответ. Однако оказалось, что это было неправильно.

Это был мой подход. Он дал такой результат: 7 5 9 5 6

#include <stdio.h>

int main() {
int array[] = {1, 7, 4, 5, 9, 3, 5, 11, 6, 3, 4};
int i = 0;

while (i < 10) {
    i++;
    if(array[i]<5||array[i]>10)
        continue;

    printf("%d\n", array[i]);

}

return 0;
}

И это было решением. который дал этот результат: 7 5 9 5

#include <stdio.h>

int main() {
int array[] = {1, 7, 4, 5, 9, 3, 5, 11, 6, 3, 4};
int i = 0;

while (i < 10) {
    if(array[i] < 5){
        i++;
        continue;
    }

    if(array[i] > 10){
        break;
    }

    printf("%d\n", array[i]);
    i++;
}

return 0;
}

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

Предоставленный вывод решения: 7 5 9 5

Результат моего решения: 7 5 9 5 6

0
Omorio 14 Янв 2019 в 00:24

2 ответа

Лучший ответ

Первое отличие: после ввода вы увеличиваете i на единицу: строка 8 (i++). Итак, вы начинаете со второго значения в массиве; это не имеет никакого значения в выводе, но это большая разница.

Во-вторых, break выполняет именно то, что требовалось в упражнении: если значение больше десяти, вы не должны его выводить и останавливать цикл. Разрыв выходит из окружающего его цикла и тем самым выполняет требование. Разрыв выходит из внешнего цикла и продолжается следующей строкой после цикла (возврат 0), поэтому даже если условие в цикле while будет (i <1000), вывод для кода с разрывом будет таким же. В представленном случае цикл while выполняется 8 раз, потому что 11 находится в индексе 8 в цикле, но в целом разрыв не имеет ничего общего с количеством раз выполнения цикла, он зависит только от условия, которое необходимо быть истинным (если оператор), чтобы выполнить его.

И в-третьих: вас просят использовать два оператора if, в то время как вы используете только один, который проверяет два условия.

И, в-четвертых, вы изменили код, который был предоставлен, код включал i++ после printf, которого нет в вашем коде.

3
Tanja Bayer 14 Янв 2019 в 06:26

Разница в операторе break.

В вашем коде цикл продолжает выполняться до тех пор, пока не будет выполнено условие i < 10 (эффективно перебирая числа 1, 7, 4, 5, 9, 3, 5, 11, 6, 3 и пропуская последнее). В этом коде будут напечатаны числа от 5 до 9 из ранее упомянутых чисел.

В коде ответов цикл ОСТАНАВЛИВАЕТСЯ при выполнении условия прерывания, то есть при достижении числа 11. Если бы так продолжалось, то ответы были бы такими же.

0
imricardoramos 13 Янв 2019 в 22:08