В чем разница между этими двумя типами кода? Я не могу сказать, хотя они выводят разные значения - PullRequest
0 голосов
/ 14 января 2019

Я работал над проблемой на сайте (https://www.learn -c.org / ru / 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

Ответы [ 2 ]

0 голосов
/ 14 января 2019

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

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

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

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

0 голосов
/ 14 января 2019

Разница в выражении break.

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

В коде ответов цикл STOPS при выполнении условия разрыва, т. Е. При достижении числа 11. Если бы это продолжалось, то ответы были бы такими же.

...