Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 26
Текст из файла (страница 26)
1ярггве Га1яек Гасгог = зт Глава 5. Управлвюэ(нв операторы 127 1б(ляргвше) Сопяо1е.нгйгеьбпе(ппш + " — простое число."); е1яе Сопяо1е.нгггеьгпе( "Наибольший множитель числа " + ппш т " равен " 4 бассог!) Ниже приведен результат выполнения этой программы. 2 — простое число 3 — простое число Наибольший множитель 5 — простое число Наибольший множитель 7 — простое число Наибольший множитель Наибольший множитель Наибольший множитель 11 — простое число Наибольший множитель 13 — простое число Наибольший множитель Наибольший множитель Наибольший множитель 17 — простое число Наибольший множитель 19 — простое число числа 4 равен 2 числа б равен 3 8 равен 4 9 равен 3 10 равен 5 числа числа числа числа 12 равен б 14 равен 7 15 равен 5 1б равен 8 числа числа числа числа 18 равен 9 Некоторые разновидности оператора цикла йо~ Применение нескольких переменных управления циклом В операторе цикла гог разрешается использовать две или более переменных для управления циклом.
В этом случае операторы инициализации и инкремента каждой переменной разделяются запятой. Рассмотрим следующий пример программы; // Использовать запятые в операторе цикла бог. пагод эуясеаи с1аяя Соева ( ягаггс чогб Маги() ( впг 1, бог(1 О, 3=10; г < 37 14+, 3 †) Сопао1е.нг1геьгпе("1 и 3: " + 1 + " " + 3)7 Оператор цикла бог относится к самым универсальным операторам языка С(т, поскольку он допускает самые разные варианты своего применения. Некоторые разновидности оператор цикла бог рассматриваются ниже.
128 Часть ). Язык С№ Выполнение этой программы дает следующий результат: т и 1: 0 10 1и): 19 1и): 2 З 1и): 37 ).и1: 46 В данном примере запятыми разделяются два оператора инициализации и еще два итерационных выражения. Когда цикл начинается, инициализируются обе переменные, т и 1. Всякий раз, когда цикл повторяется, переменная 1 инкрементируется, а переменная 1 декрементируется. Применение нескольких переменных управления циклом нередко оказывается удобным, упрощая некоторые алгоритмы. Теоретически в операторе цикла 1от может присутствовать любое количество операторов инициализации и итерации, но на практике цикл получается слишком громоздким, если применяется более двух подобных операторов.
Ниже приведен практический пример применения нескольких переменных управления циклом в операторе бог. В этом примере программы используются две переменные управления одним циклом Вот для выявления наибольшего и наименьшего множителя целого числа (в данном случае — 100). Обратите особое внимание на условие окончания цикла. Оно опирается на обе переменные управления циклом.
// использовать запятые в операторе цикла тот лля // выявления наименьшего и наибольшего множителя числа. пз1пч зузтепи с1авз Сопппа ( втаттс вотб Ма1п() ( тпт 1, 17 тпт зва11езт, 1атчевт) тпт пцпп пшп 100) зва11езт = 1атчезт = 17 Ест(т=2, )=ппв/27 (т <= пцв/2) з (1 >= 2)т 1ь+, 1--) ( 1Е ( (зва11евт 1) з ( (ппв % 1) О) ) вва11евт 11((1атдевт == 1) я ((пцв ъ 1) == О)) 1атдевт = 1) Сопзо1е.ыт1те11пе("Наибольший множитель: 1атчезт)т Сопзо1е.нт1тетвпе("Наименьший множитель: зва11евт); Глава 5. Упрввввюо(вв операторы 129 Ниже приведен результат выполнения этой программы.
Наибольший множитель: 50 Наименьший множитель: 2 Благодаря применению двух переменных управления циклом удается выявить наименьший и наибольший множители числа в одном цикле Гог. В частности, управляющая переменная 1 служит для выявления наименьшего множителя. Первоначально ее значение устанавливается равным 2 и затем инкрементируется до тех пор, пока не превысит половину значения переменной пиш. А управляющая переменная 3 служит для выявления наибольшего множителя.
Ее значение первоначально устанавливается равным половине значения переменной ппш и затем декрементируется до тех пор, пока не станет меньше 2. Цикл продолжает выполняться до тех пор, пока обе переменные, 1 и 3, не достигнут своих конечных значений. По завершении цикла оба множителя оказываются выявленными. Условное выражение Условным выражением, управляющим циклом Гог, может быть любое действительное выражение, дающее результат типа )тоо1. В него не обязательно должна входить пере, менная управления циклом. В следующем примере программы управление циклом Гог осуществляется с помощью значения переменной бопе.
// В качестве условия выполнения никла может служить // любое выражение типа Ьоо1. ввгпч Яувгешт с1авв ГогОешо ( воагьс чбьб Ма1п() ( 1пс 1, 37 Ьоо1 бове = Га1ве; Гог(1=0, 3=1001 1бопе; 1+я, 3 †) ( 1г(1*1 >= 7) боле = Сгоет сопво1е.хгвтеьгпе("1, 3: " + 1 + " " + 3)7 ) ) Ниже приведен результат выполнения этой программы.
0 100 1,3:199 1,3:298 1,3:397 4 95 5 95 1, 3. "694 7 93 8 92 130 Часть (. Язык СФ 9 91 10 90 В данном примере цикл 1ог повторяется до тех пор, пока значение переменной с(опе типа не окажется истинным (Сгце). Истинное значение переменной г(опе устанавливается в цикле, когда квадрат значения переменной 1 оказывается больше или равным значению переменной 11 Отсутствующие части цикла Ряд интересных разновидностей цикла Иог получается в том случае, если оставить пустыми отдельные части определения цикла. В С(т допускается оставлять пустыми любые или же все части инициализации, условия и итерации в операторе цикла сот.
В качестве примера рассмотрим такую программу: // Отдельные части цикла кот могут оставаться пустыми. цв1пд Зувкеан с1авв карсу ( вкакас тост( Махп() ( )пс 1; Гог(1 = О) ). < 10) ) ( Сопво1е.икькевьпе("Проход т" + 1)) 1++) // инкрементировать переменную управления циклом ) ! В данном примере итерационное выражение в определении цикла 5ог оказывается пустым, т.е. оно вообще отсутствует. Вместо этого переменная 1, управляющая циклом, инкрементируется в теле самого цикла.
Это означает, что всякий раз, когда цикл повторяется, значение переменной 1 проверяется на равенство числу 10, но никаких других действий при этом не происходит. А поскольку переменная 1 инкрементируется в теле цикла, то сам цикл выполняется обычным образом, выводя приведенный ниже результат. Прохол И'0 Проход ))1 Проход В2 Проход жз Проход ИМ Проход У5 Проход И'б прохол вт Проход И'8 Проход И'9 В следующем примере программы из определения цикла Иог исключена инициализирующая часть.
// Исключить еще одну часть ив определения цикла Гог. цвхпч Бувкеан с1авв Еюрку2 ( вкаС1с чо1т( Ма1п() ( Глава 5. Упраеллющие операторы 131 ьпс 1( ь = От // исключить инициализацию из определения цикла Гог(т 1 < 10) ) ( Сопво1е.нгьсе(ьпе("Проход Л'" + 1); 1++) // инкрементировать переменную управления циклом ) ) В данном примере переменная х инициализируется перед началом цикла, а не в самом цикле гог. Кдк правило, переменная управления циклом инициализируется в цикле гог. Выведение инициализирующей части за пределы цикла обычно делается лишь в том случае, если первоначальное значение данной переменной получается в результате сложного процесса, который нецелесообразно вводить в операторе цикла гог. Бесконечный цикл Если оставить пустым выражение условия в операторе цикла год, то получится бесконечный цикл, т.е. такой цикл, который никогда не заканчивается.
В качестве примера в следующем фрагменте кода показано, каким образом в С№ обычно создается бесконечный цикл: Гог()т) // цикл, намеренно сделанный бесконечным ( //... Этот цикл будет выполняться бесконечно. Несмотря на то что бесконечные циклы требуются для решения некоторых задач программирования, например при разработке командных процессоров операционных систем, большинство так называемых "бесконечных" циклов на самом деле представляют собой циклы со специальными требованиями к завершению. (Подробнее об этом — в разделе "Применение оператора )тгеа)< для выхода из цикла" далее в этой главе.) циклы без тела В С№ допускается пустым тело цикла лог или любого другого цикла, поскольку )густой оператор с точки зрения синтаксиса этого языка считается действительным.
Циклы без тела нередко оказываются полезными. Например, в следующей программе цикл без тела служит для получения суммы чисел от 1 до 5. // тело цикла может быть пустым. цвьпд Зувдеют с1авв Еюрвуз ( ввавьс чохи Маьп() ( ьпс т.т 1пс вцю = От // получить сумму чисел от 1 до 5 Гог(1 = 1( 1 < 5; вцю += 1++)и Сопво1е.нгьхетапе("Сумма равна " + вшв)т ) ) 132 Часть (, Язык С№ Выполнение этой программы дает следующий результат: Суима равна 15 Обратите внимание на то, что процесс суммирования выполняется полностью в операторе цикла 5ог, и для этого тело цикла не требуется. В этом цикле особое внимание обращает на себя итерационное выражение.
аци += 1++ Подобные операторы не должны вас смущать. Они часто встречаются в программах, профессионально написанных на С№, и становятся вполне понятными, если разобрать их по частям. Дословно приведенный выше оператор означает следующее: сложить со значением переменной эцю результат суммирования значений переменных ацю и г, а затем инкрементировать значение переменной г. Следовательно, данный оператор равнозначен следующей последовательности операторов: ацю = аша ь 1) 1ь+т Объявление управляющих переменных в цикле Гох Нередко переменная, управляющая циклом 5ог, требуется только для выполнения самого цикла и нигде больше не используется.