Прочитайте улучшенную версию этого урока "Циклы с условием while и do-while".
В новой версии:
- Ещё более доступное объяснение
- Дополнительные материалы
- Задачи с автоматической проверкой решения
После долгого перерыва,я снова с вами.
Сегодняшнее занятие будет продолжением занятия номер 7.Циклические конструкции
Сегодня поговорим о еще двух циклических конструкциях.
Как уже говорилось ранее,цикл for используется,когда известно сколько раз надо выполнить тело цикла. А что же делать если количество повторений заранее не известно, а есть только условие которое после которого нужно прекратить выполнять цикл. Для этих целей используют циклические конструкции while и do-while. Остановимся на каждом из них поподробнее.
Цикл while.
Цикл while называют еще циклом с предусловием. Чаще всего он используется когда неизвестно конкретно сколько раз нужно выполнить тело цикла.Вот его синтаксис:
Листинг 9.1
while (условие)
оператор;
Работает эта конструкция следующим образом.
1.Сначала проверяется условие в скобках.
1.1 Если оно истинно, то выполняется тело цикла. (Оператор). И программа снова переходит к проверке условия.
Напомню,что тело цикла всегда состоит из одного оператора. И если нам нужно использовать несколько операторов, то как и в случае с конструкцией if-else или циклом for, применяется составной оператор {...}.
1.2 Если условие ложно, то выполнение циклической конструкции заканчивается и программа выполняется дальше.
Заметим, что цикл может не выполниться ни одного раза,если изначально условие будет ложным.
Например:
Листинг 9.2
while (0)
{ ... }
Цикл do-while.
Цикл do-while называют еще циклом с постусловием. И в этом состоит его основное отличие от цикла while. Сейчас мы разберем его синтаксис, поймем как он работает и увидим как раз в чем разница.Синтаксис:
Листинг 9.3
do //заголовок цикла
{ оператор;} // тело цикла
while (условие); //условие
как видите цикл do-while состоит из 3 частей. Заголовка цикла, тела цикла и условия.
Работает эта конструкция следующим образом.
1)После того как программа встречает ключевое слово do,она понимает, что имеет дело с циклом do-while.
2)выполняется тело цикла.
3) Проверяется условие.
3.1) Если условие истинно,то снова выполняется тело цикла.
3.2) Если условие ложно, то работа циклической конструкции заканчивается и программа выполняется дальше.
Обратите внимание, что при использовании цикла do-while, тело цикла выполнится всегда хотя бы один раз! Это очень важная особенность и иногда её очень удобно использовать.
Прочитайте улучшенную версию этого урока "Операторы управления циклом. Зацикливание.".
В новой версии:
- Ещё более доступное объяснение
- Дополнительные материалы
- Задачи с автоматической проверкой решения
Зацикливание.
Теперь поговорим немного о такой пренеприятнейшей вещи как зацикливание. Зацикливание - это когда программа постоянно выполняет тело цикла и не может из него выйти. Причиной зацикливания всегда является программист. Надо всегда внимательно следить за тем, чтобы работа операторов как-то влияла на условие. Напоследок напишем одну маленькую программку.С использованием циклов do-while и while.
Пусть требуется написать программу которая принимает на входе положительное натуральное число, а на выходе выдает сумму цифр этого числа. При этом, надо запретить пользователю вводить отрицательные числа. (защита от дурака).
Сначала напишем основную часть программы.
Считаем число и посчитаем сумму его цифр.
Листинг 9.4
#include <stdio.h>
int main()
{
int A, sum=0;
printf("Vvedite chislo:");
scanf("%d",&A); //считываем число
while (A>0)
{
sum=sum+A%10;
A= A/10;
}
printf("summa chifr etogo chisla: %d\n", sum);
return(0);
}
Эта программа работает. Теперь добавим в неё так называемую "защиту от дурка". Чтобы пока не введешь правильные данные,программа не будет работать. Для этого используем цикл do-while.И будем повторить ввести ввод до тех пор, пока не будет введено положительное число.
Получим следующий код.
Листинг9.5
#include <stdio.h>
int main()
{
int A, sum=0;
do {
printf("Vvedite chislo:");
scanf("%d",&A); //считываем число
} while(A<=0);
while (A>0){
sum=sum+A%10;
A= A/10;
}
printf("summa chifr etogo chisla: %d\n", sum);
return(0);
}
На этом сегодня всё. Домашнего задания к этому уроку не будет. Так как мне надо разобраться с той кучей вопросов, которые накопились за это время в комментариях.
Задание для практической работы.
- Дано целое число N (вводится с клавиатуры), причем N<30000. По заданному N вывести через пробел все (натуральные, т.е. 0, 1, 2, 3, ... ) степени числа 2, которые меньше N.
- Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон.с шагом dх.
Функция F должна принимать действительное значение, если выражение (Ац^Вц)|(Ац^Сц) не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений a,b,c. Значения a,b,c, Хнач., Хкон., dx ввести с клавиатуры. Пока что не обязательно к выполнению.!
- Дано натуральное число N. Напишите программу которая считает сумму цифр этого числа.
- Дано натуральное число N. Выведите его представление в двоичном виде в обратном порядке.
Если Вам понравился этот урок, расскажите о нем вашим друзьям. В этом Вам могут помочь кнопки основных социальных сетей, расположенные ниже. Вам остается всего лишь кликнуть по любой из них.