Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Цикл с предусловием while




Циклы

Циклом называется последовательность действий, повторяемая несколько раз. Количество шагов (проходов) цикла зависит от некоторого условия, истинность которого проверяется перед исполнением тела цикла (цикл с предусловием) или после его исполнения (цикл с постусловием).

 

Очень часто условие представляет собой простую проверку, попадает ли в заданный диапазон счетчик цикла. Например, цикл нужно выполнить строго 10 раз, тогда счетчик будет изменяться от 1 до 10. Или нужно пробежаться по всем студентам в списке: в этом случае на каждом шаге цикла счетчик будет равен порядковому номеру студента. Для удобства работы с подобными алгоритмами во многих языках программирования (Си не исключение) реализован третий вид цикла - цикл с параметром.

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

 

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

Синтаксис цикла с предусловием в С++:

while ( условие )

оператор;

Обратите внимание, что условие обязано стоять в скобках, так же, как для оператора if. Если операторов тела цикла несколько, нужно ставить их в операторные скобки {...}.

Цикл while выполняется до тех пор, пока истинно (не равно нулю) условие. Таким образом, в следующем фрагменте:

 

int a=0;

while ( a<10 ) a++; // цикл №1

while ( a>10 ) a--; // цикл №2

while ( a<10 ) a=0; // цикл №3

цикл №1 выполнится 10 раз, цикл №2 ни одного раза, а цикл №3 будет выполняться бесконечное количество раз.

Бесконечным или вечным циклом (зацикливанием) называется цикл, число шагов которого не ограничивается условием.

В случае цикла с предусловием зацикливание может выглядеть так:

while ( 1 ) оператор;

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

Естественно, в этом случае нужно предусмотреть выход внутри тела цикла:

 

#include <stdio.h>

 

void main ( void ) {

int x, count=0;

printf ( "Вводите целые числа, а я буду считать четные \n " );

printf ( "Выход - по вводу нуля \n " );

while ( 1 ) { // используем вечный цикл

scanf ( "%i", &x );

if ( x%2==0 ) count++;

if ( x==0 ) break; // выходим из цикла

}

printf ( "Вы ввели %i четных чисел \n ", count );

}

Ту же задачу можно решить более изящным образом - без зацикливания:

 

#include <stdio.h>

 

void main ( void ) {

int x=1, count=0;

printf ( "Вводите целые числа, а я буду считать четные \n " );

printf ( "Выход - по вводу нуля \n " );

while ( x!=0 ) {

scanf ( "%i", &x );

if ( x%2==0 ) count++;

}

printf ( "Вы ввели %i четных чисел \n ", count );

}

Решим еще одну арифметическую задачу, где используем цикл с предусловием, а заодно вспомним про константы.

 

#include <stdio.h>

 

void main ( void ) {

const float INCH2CM=2.54;

float inch, cm;

printf ( "Переводим длину в дюймах в сантиметры \n " );

printf ( "Выход - по вводу отрицательного числа \n " );

printf ( "Введите длину в дюймах: " );

scanf ( "%f", &inch );

while ( inch>=0 ) {

cm = inch*INCH2CM;

printf ( "Вы ввели %7.3f. Это будет %7.3f см. \n ", inch, cm );

printf ( "Введите длину в дюймах: " );

scanf ( "%f", &inch );

}

}

У нас получилось дублирование фрагмента:

 

printf ( "Введите длину в дюймах: " );

scanf ( "%f", &inch );

Но без него никак не обойтись, поскольку отрицательное число нам обрабатывать нельзя:

 

// а вдруг первое же введенное число - отрицательное?

// этот вариант не подойдет!

float inch=0, cm;

while ( inch>=0 ) {

printf ( "Введите длину в дюймах: " );

scanf ( "%f", &inch );

cm = inch*INCH2CM; // работаем и с отрицательной длиной!

printf ( "Вы ввели %7.3f. Это будет %7.3f см. \n ", inch, cm );

}




Поделиться с друзьями:


Дата добавления: 2015-06-25; Просмотров: 347; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.02 сек.