Программирование >>  Дополнительные возможности наследования 

1 ... 53 54 55 [ 56 ] 57 58 59 ... 265


значения переменных 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;



1 ... 53 54 55 [ 56 ] 57 58 59 ... 265

© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика