|
Программирование >> Дополнительные возможности наследования
значения переменных minusOne и minusTwo суммируются и записываются в answer; значение п уменьшается на единицу. 3. Как только п достигнет нуля, возвращается значение переменной answer. Следуя описанному алгоритму, можно воспроизвести на листе бумаги ход выполнения профаммы. Для нахождения, к примеру, пяти первых членов последовательности на первом шаге записываем 1, 1,2, Остается определить еще два члена ряда. Следующий член будет равен (2+1=3), а для вьмисления искомого члена теперь нужно сложить значения только что полученного члена и предьщущего - числа 2 и 3, в результате чего получаем 5. В сущности, на каждом шаге мы смещаемся на один член вправо и уменьшаем количество искомых значений. Особое внимание следует уделить выражению условия продолжения цикла for, записанному как п. Это одна из особенностей синтаксиса языка С++. По-другому это выражение можно представить в виде п =0. Поскольку в С++ число О соответствует значению false, при достижении переменной п нуля условие продолжения цикла не будет выполняться. Исходя из сказанного, описание цикла может быть переписано в виде for (п-=3; п!=0; п--) Подобная запись значительно облегчит его восприятие. С другой стороны, первоначальный вариант профаммы иллюстрирует общепринятую для С++ форму записи условия, поэтому не стоит умышленно ее избегать. Скомпилируйте и запустите полученную профамму. Сравните время, затрачиваемое на вычисление 25-го числа рекурсивным (см. занятие 5) и циклическим методами. Несомненно, рекурсивный вариант профаммы более компактный, однако многократный вызов функции, использующийся в любом рекурсивном алгоритме, заметно снижает его быстродействие. Поэтому использование цикла более приемлемо с точки зрения скорости выполнения. Кроме того, благодаря оптимизации арифметических операций в большинстве современных микропроцессоров превосходство нерекурсивных алгоритмов в скорости становится все более очевидным. Испытывая профамму, не вводите слишком большие номера членов ряда Фибоначчи. Значения членов ряда возрастают довольно быстро и ввод большого порядкового номера может привести к переполнению регистра памяти. Оператор switch На занятии 4 вы познакомились с операторами if и if/else. Однако в некоторых ситуациях применение оператора if может привести к возникновению конструкций с большим числом вложений, значительно усложняющих как написание, так и восприятие профаммы. Для решения этой проблемы в языке С++ предусмотрен оператор switch. Основным его отличием от оператора if является то, что он позволяет проверять сразу несколько условий, в результате чего ветвление профаммы организуется более эффективно. Синтаксис оператора switch следующий: switch (выражение) { case ПервоеЗначение: оператор] break; case ВтороеЗначение: оператор; break; case Значение М; оператор; break; default: оператор; В скобках за оператором switch может использоваться любое выражение, корректное с точки зрения синтаксиса языка. Вместо идентификатора оператор допускается использование любого оператора или выражения, а также последовательности операторов или выражений, результатом вьшолнения которых является целочисленное значение (или значение, которое может бьпъ однозначно приведено к целочисленному типу). Поэтому использова-ние логических операций или выражений сравнения здесь не допускается. switch Синтаксис использования оператора -.аП с следующий: switch {выражение) case ПервоеЗначение: выражение; case ВтороеЗначение: выражение; case 3Ha4eHHe N: выражение; default: выражение; Оператор switch позволяет осуществлять ветвление профаммы по результатам выражения, возвращающего несколько возможных значений. Значение, возвращенное выражением, заданным в скобках оператора switch, сравнивается со значениями, указанными за операторами case, и в случае совпадения значений выполняется выражение в строке соответствующего оператора i Будут выполняться все строки программы после выбранного оператора (..:=.... до тех пор, пока не закончится тело блока оператора switch или не повстречается оператор : - ак. Если ни одно из значений операторов < .is> не совпадет с возвращенным значением, то выполняются строки программы, стоящие после оператора сгли .:, в случае же отсутствия этого оператора в теле блока sw: ci управление будет передано следующей за этим блоком строке профаммы. Пример 1: switch <choice) case 0: case 1; case 2: default: cout << Zero! endl; :: break cout One! endl; break cout:w Two! endl; break- cout Default! endl; Пример 2: switch: (choice):: { case 0 case 1 case 2 : cout Less than 3! - endl;: Dreak; case 3: cout Equals 3! endl; break; default: oout Qreater than 3! endl; ::}......W:-.....:iiiS::.;:< При отсутствии оператора break после оператора или выражения, следующего за case, будет выполняться выражение очередного блока case. В больщинстве случаев такая ситуация возникает, когда оператор break пропущен по ошибке. Поэтому, если break опускается умышленно, рекомендуем вставлять в соответствующую строку комментарий. Пример использования оператора switch приведен в листинге 7.16. Лисшинг 7.1В. Нрпрльзрванив рпврашрра switch 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Листинг 7.16. Использование оператора switch flinclude <iostream,h> int main() { unsigned short int number; cout << Enter a number between 1 and 5: ; cin >> number; switch (number) case 0; cout << Too small, sorry! ; break; case 5: cout Good job!\ n ; fall through case 4: cout Nice Pick!\ n ; fall through case 3: cout Excellent!\ n ; fall through case 2: cout Masterful!\ n ; fall through case 1: cout Incredible!\ n ; break; default: cout Too large!\ n ; break; cout \ n\ n ; return 0;
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |