КАТЕГОРИИ: Архитектура-(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; Просмотров: 355; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |