Г. Шилдт - С#4.0 Полное руководство (1160795), страница 25
Текст из файла (страница 25)
Глава В. Управляющие операторы 133 Наибольший множитель: 50 Наименыяий множитель: 2 Благодаря применению двух переменных управления циклом удается выявить наименьший и наибольший множители числа в одном цикле гог. В частности, управляющая переменная 1 служит для выявления наименьшего множителя. Первоначально ее значение устанавливается равным 2 и затем инкрементируется до тех пор, пока не превысит половину значения переменной пцш. А управляющая переменная 3 служит для выявления наибольшего множителя. Ее значение первоначально устанавливается равным половине значения переменной пцт и затем декрементируется до тех пор, пока не станет меньше 2. Цикл продолжает выполняться до тех пор, пока обе переменные, 1 и 3, не достигнут своих конечных значений.
По завершении цикла оба множителя оказываются выявленными. Условное выражение Условным выражением, управляющим циклом Гог, может быть любое действитслыюе выражение, дающее результат типа Ьоо1. В ного нс обязатслыю должна входить переменная управления циклом. В следующем примере программы управление циклом гог осуществляется с помощью значения переменной с)опе. Условием выполнения цикла может служить любое выражение типа Ьоо1.
цягпч зувсеш; с1аяя ГогОешо ягаг1с яо10 Маьп() ( 1пс т, 3; Ьоо1 попе = Га1яе; ГОГ(1=0, 3=100) !СОПЕ) 1++, 3--) ( 11(1*1 >= 3) Сопе = ггце; Сопяо1е.иг1сеоьпе("1, ) Ниже приведен результат выполнения этой программы. 1,3: О)ОО 1, 3: 1 99 1, 3: 2 98 1,3:397 1, 3: 4 96 5 95 б 94 3: 7 93 1, 3: 8 92 9 91 1, 3: 10 90 В данном примере цикл 1ог повторяется до тех пор, пока значение переменной попе типа не окажется истинным (Ьгце). Истинное значение переменной с)опе устанавливается в цикле, когда квадрат значения переменной 1 оказывается больше или равным значению переменной 3Ь 134 Часть (. Язык С() Отсутствующие части цикла Ряд интересных разновидностей цикла гог получается в том случае, если оставить пустыми отдельные части определения цикла.
В СЗ допускается оставлять пустыми любые или же все части инициализации, условия и итерации в операторе цикла гог. В качестве примера рассмотрим такую программу. // Отдельные части цикла Гог могут оставаться пустыыи. цз1пд Зувсещ; с1авв Ещрсу ( зсагьс чоьо Маьп () ( гпг Гог(1 = 01 1 < 10; ) ( Сопво1е.нггсевьпе("Проход У" + 1); 1+ю // инкрементировать переменную управления циклом ) ) ) В данном примере итерационное выражение в определении цикла гог оказывается пустым, т.е. оно вообще отсутствует. Вместо этого переменная 1, управляющая циклом, инкрементируется в теле самого цикла.
Это означает, что всякий раз, когда цикл повторяется, значение переменной 1 проверяется на равенство числу 10, но никаких других действий при этом не происходит. А поскольку переменная 1 инкрементируется в теле цикла, то сам цикл выполняется обычным образом, выводя приведенный ниже результат. Проход УО Проход У1 Проход У2 Проход УЗ Проход У4 Проход У5 Проход Уб Проход У7 Проход Уз Проход Уэ В следующем примере программы из определения цикла гог исключена инициализирующая часть. // Исключить еще одну часть из определения цикла Гог. цз1пч Бувгею; с1аяв Еюрсу2 ( всасьс чо1г) Маьп() ( ьпс 1~ = 01 // исключить инициализацию из определения цикла Гог(1 1 < 101 ) ( Сопво1е .Иг1геььпе (" Проход У" + 1) 1 Глава Б.
Управ)в(юв(ие операторы 135 1++! // инкрементировать переменную управления циклом В данном примере переменная 1 инициализируется перед началом цикла, а не в самом цикле Тог. Как правило, переменная управления циклом инициализируется в цикле Тот. Выведение инициализирующей части за пределы цикла обычно делается лишь в том случае, если первоначальное значение данной переменной получается в результате сложного процесса, который нецелесообразно вводить в операторе цикла Тот.
Бесконечный цикл Если оставить пустым выражение условия в операторе цикла Гог, то получится бесконечный цикл, т.е. такой цикл, который никогда не заканчивается. В качестве примера в следующем фрагменте кода показано, каким образом в С№ обычно создается бесконечный цикл. Тот(;;) // цикл, намеренно сделанный бесконечным Зтот цикл будет выполняться бесконечно.
Несмотря на то что бесконечные циклы требуются для решения некоторых задач программирования, например при разработке командных процессоров операционных систем, большинство так называемых "бесконечных" циклов на самом деле представляет собой циклы со специальными требованиями к завершению.
(Подробнее об этом — в разделе "Применение оператора )згеа)ь для выхода из цикла" далее в этой главе.) Циклы без тела В С№ допускается оставлять пустым тело цикла Гог или любого другого цикла, поскольку пусл(ой опярап)ор с точки зрения синтаксиса этого языка считается действительным. Циклы без тела нередко оказываются полезными. Например, в следующей программе цикл без тела служит для получения суммы чисел от 1 до 5. Тело цикла может быть пустым. ця1пч зувгеы) с1аяя Кюрпуз ( яеаС1с чоьа Мата() ( 1пс 11 1пг яцю = 0; получить сумму чисел от 1 до 5 Гог(1 = 1/ 1 <= 5/ вцю ь= 1++); Сопяо1е.игтяестпе("Сумма равна " ь яцы) Выполнение этой программы дает следующий результат.
Сумма равна 15 136 Часть (. Язык С(г Обратите внимание на то, что процесс суммирования выполняется полностью в операторе цикла гог, и для этого тело цикла не требуется. В этом цикле особое внимание обращает на себя итерационное выражение. Подобные операторы не должны вас смущать. Они часто встречаются в программах, профессионально написанных на СФ, и становятся вполне понятными, если разобрать их по частям. Дословно приведенный выше'оператор означает следующее: сложить со значением переменной яц)п результат суммирования значений переменных яцт и 1, а затем инкрементировать значение переменной 1.
Следовательно, данный оператор равнозначен следующей последовательности операторов. яци = яци + Объявление управляющих переменных в цикле йог Нередко переменная, управляющая циклом гог, требуетсл только для выполнения самого цикла и нигде больше не используется. В таком случае управляющую переменную можно объявить в инициализирующей части оператора цикла гог. Например, в приведенной ниже программе вычисляется сумма и факториал чисел от 1 до 5, а переменная 1, управляющая циклом 1ог, объявляется в этом цикле. Объявить переменную управления циклом в самом цикле Еог. ця1пд зуягеач с1аяя Гогчаг ( ягагьс чоьб наьп () ( гпс яцв = 0) ьпс Гася = 1; /У вычислить факториал чисел от 1 до 5 Гог(ьпс 1 = 1; г <= 5) 1ь+) ( яцв += 1) // Переменная 1 действует в цикле.
Гасо *= 1; ) Л здесь переменная 1 недоступна. Сопяо1е.нгьсеььпе("Сумма равна " + яци); Сопяо1е.игьсеъьпе("Факториал равен " + Гасо) Объявляя переменную в цикле 1ог, не следует забывать о том, что область действия этой переменной ограничивается пределами оператора цикла гог. Зто означает, что за пределами цикла действие данной переменной прекращается. Так, в приведенном выше примере переменная 1 оказывается недоступной за пределами цикла 1ог. Для того чтобы использовать переменную управления циклом в каком-нибудь другом месте программы, ее нельзя объявлять в цикле гог.
Прежде чем переходить к чтению следующего материала, поэкспериментируйте с собственными разновидностями оператора цикла гог. В ходе эксперимента вы непременно обнаружите замечательные свойства этого оператора цикла. Глава В. Управляющие операторы 137 Оператор цикла мМ1е Еще одним оператором цикла в С№ является оператор ы))11е. Ниже приведена общая форма этого оператора: нь11е (условие) оператор; где оператор — это единственный оператор или же блок операторов, а условие означает конкретное условие управления циклом и может быть любым логическим выражением.
В этом цикле оператор выполняется до тех пор, пока условие истинно. Как только условие становится ложным, управление программой передается строке кода, следующей непосредственно после цикла. Ниже приведен простой пример программы, в которой цикл ып11е используется для вычисления порядка величины целого числа. №№ Вычислить порядок величины целого числа.
ца1пч Зуапевг с1ааа ХЛ11аоево ( асасьс чоМ мага() ( ьпг пцв) апп вач) пцв = 435679) вач = Ог сопао1е.аг1сеь1пе("число: " ь пцв)) на11е(пцв > О) ( вач++; пцв = пцв № 10; сопао1е.иг1сеыпе("порядок величины: " + вач) Выполнение этой программы дает следующий результат. Число: 435679 Порядок ааличины: 6 Приведенный выше цикл ы))11е действует следующим образом. Сначала проверяется значение переменной пцв. Если оно больше нуля, то переменная вар, выполняющая роль счетчика порядка величины, инкрементируется, а значение переменной пшп делится на 10.
Цикл повторяется до тех пор, пока значение переменной пцв остается больше нуля. Как только оно окажется равным нулю, цикл завершается, а в переменцой ваЧ остается порядок величины первоначального числового значения. Как и в цикле год, в цикле ы)г№1е проверяется условное выражение, указываемое в самом начале цикла. Это означает, что код в теле цикла может вообще не выполняться, а также избавляет от необходимости выполнять отдельную проверку перед самим циклом. Данное свойство цикла ып№1е демонстрируется в следующем примере программы, где вычисляются целые степени числа 2 от 0 до 9. 138 4асть (. Язык С(№ Вычислить целые степени числа 2.
ця1пд буясеи) с1аяя Ронег ( ягас1с чо1о Ма1п() ( 1пс е) ьпг геяц1г) бог(1пг 1=0; 1 < 10; 1++) ( геяц1С = 1) е нь11е(е > 0) ( геяц1г *= 2: Сопяо1е.игьсевьпе("2 в степени " ~ 1 т " равно " т геяо1Г) 1 ) ) ) Результат выполнения этой программы приведен ниже. Обратите внимание на то, что цикл ы)711е выполняется только в том случае, если значение переменной е больше нуля. А когда оно равно нулю, как это имеет место на первом шаге цикла бог, цикл и)711е пропускается. Оператор цикла бо-и№111е Третьим оператором цикла в С№ является оператор с(о-ы)711е.