Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Switch (целочисленное выражение)

{

case метка1 : оператор(ы);

case метка2 : оператор(ы);

default : оператор(ы);

}

Встретив ключевое слово switch, программа по значению целочисленного выражения переходит к строке с соответствующей меткой. Так, если целочисленное значение равно 4, то следующим выполняется оператор в строке с меткой case 4. Если целочисленное значение не соответствует ни одной из меток, то программа переходит к строке default. Эта строка не обязательна, если ее опустить, и при этом совпадения с метками не обнаружена, то программа переходит к оператору, следующему за switch.

int dvalue;

cin>>dvalue;

Switch(dvalue)

{

Case 0: // если dvalue равно нулю, то

// ...выполним эту часть программы...

Break; // выход из оператора switch

Case 1: // если dvalue равно 1, то

// ...выполним эту часть программы...

break;

Case 3: // если dvalue равно 3, то

// ...выполним эту часть программы...

break;

default: // во всех других случаях выполнить:

// ... эту часть программы...

}

В этом примере ввод значения переменной dvalue приводит к выбору соответствующего варианта из списка switch. Оператор break прекращает выполнение switch и передаёт управление следующему за ним оператору. Заметим, что отсутствие оператора break не вызовет возражений компилятора, однако в этом случае будут по порядку выполнены все операторы, следующие за этой строкой, если только явно не указано иное. В С++ такое поведение программы определено умышленно, поскольку это упрощает использование нескольких меток. В следующем примере не делаются различия между строчными и прописными буквами, вводимыми с клавиатуры.

char choise;

cin>>choise;

Switch(choise)

{

case ’a’:

case ’A’: cout<< ” abort”;

break;

case ’r’:

case ’R’: cout<< ” report”;

break;

default: cout<< ” That’s not a choise”;

}

Поскольку за меткой case ’a’: отсутствует оператор break, выполнение программы продолжается со следующей строки, с оператора, который расположен сразу после case ‘A’:.

Последний оператор default указывает на отрезок кода, который исполняется во всех остальных случаях, когда значение не соответствует ни одному из значений метки. Оператор default не является обязательным.

Как видим, и оператор switch, и оператор if else позволяют осуществить выбор из списка альтернативных вариантов. Оператор if else более гибок, в частности он позволяет обрабатывать диапазоны значений.

if (age>17 && age<20)

code=0;

else if (age>=20 && age<35)

code=1;

else if (age>=35)

code=2;

Else

code=3;

Оператор switch не предназначен для обработки диапазонов. Кроме того, значение метки должно быть константой, а вариант метки – целым (включая тип char), поэтому switch не будет обрабатывать вещественные числа. Однако, если возможно, используйте оператор switch, так как это более эффективно с точки зрения скорости выполнения и размера программы.

Операторы цикла.

Нередко программа вынуждена выполнять повторяющиеся операции, например, вычисление сумм, произведений или многократный вывод текста на экран. Для этих целей в языке C++ используются операторы цикла.

Оператор for

Следующий листинг показывает, что можно делать с помощью оператора цикла for:

#include <iostream.h>

Void main()

{

Int i; // создаем переменную цикла

for(i=0; i<5; i++)

cout << ”C++ loops\n”; // выполняем до тех пор, пока

// i меньше 5 (i<5), после каждой

// итерации цикла значение переменной i

// увеличивается на единицу (i++)

cout << ” Loops stop\n”;

return;

}

Результат работы программы приведен ниже:

C++ loops

C++ loops

C++ loops

C++ loops

C++ loops

Loops stop

Как видно, оператор for поэтапно выполняет следующие действия.

- Задает начальное значение переменной цикла ( i = 0).

- Проверяет условие выполнения цикла (i<5).

- Выполняет действия внутри тела цикла, если условие истинно. Как только условие становится ложным – цикл прекращается.

- Выполняет операцию над переменной цикла в каждой итерации, в данном случае – это операция инкремента, т.е. увеличения значения переменной на единицу.

Тело цикла может содержать несколько операторов, в этом случае они группируются в блок при помощи фигурных скобок. Так, например, может выглядеть программа, которая суммирует вводимые с клавиатуры числа.

 

#include <iostream.h>

Void main()

{

int aval, sum=0;

for(int i=0; i<5; i++) // можно определить переменную цикла здесь

{

cout << ” input number\n”;

cin<<aval;

sum = sum + aval;

}

cout << ” Sum equal ”<<sum;

}

 

Интересно, что условие выполнения цикла не обязательно должно принимать значение истина/ложь, так как в С целочисленное значение равное 0 эквивалентно логическому ложь, а не равное нулю - истина. Таким образом, если значение выражения станет равным нулю, то выполнение цикла прекратится.

int limit=4;

Int i; // переменную цикла можно определить и вне цикла

for (i=limit; i; i--) // закончить цикл когда i=0

cout<<” i= ” <<i;<<”\n”;

 

В этом примере для изменения переменной цикла используется операция декремента i - -(эквивалентно i = i -1).

Изменение шага цикла

В приведенных примерах переменная цикла уменьшалась или увеличивалась на единицу. Разумеется, для изменения величины переменной цикла можно использовать любые другие значения шага.

// пример: шаг цикла by вводится пользователем

#include <iostream.h>

Void main()

{

cout<<” Enter an integer\n ”

int by;

cin>>by;

cout<<” Step is: ”<<by<<”\n”;

for(int i=0; i<100; i=i+by)

cout << i<<”\n”;

}

Результат действия этой программы:

Enter an integer

Step is: 33

Когда значение iстановится равным 132, выполнение цикла прекращается.

В качестве обновления переменной можно использовать любое действительное (с синтаксической точки зрения) выражение:

i=2*i;

i=i*i+1;

и т.д.

Рассмотренный цикл for является циклом с предусловием, т.е. условие выполнения цикла проверяется перед циклом, и если условие с самого начала является ложным, то программа вообще не выполнит цикла. К такому же типу можно отнести и цикл while.

Цикл while.

Цикл whileнапоминает собой цикл for без частей инициализации и обновления цикла.

while( условие выполнения цикла)

Тело цикла;

Программа проверяет условие, и если оно истинно (или не равно нулю), выполняется оператор(ы), составляющие тело цикла. После этого программа снова возвращается к проверке условия выполнения цикла и так до бесконечности, если программист не позаботится о некоторых действиях, которые смогут оказать влияние на значение условия продолжения цикла.

// этот цикл будет выполняться бесконечно

// пока не будет прерван нажатием Ctrl+C

int i=10;

while(i>0)

{

cout << ” i= ”<<i<<”\n”;

}

// а этот цикл выведет на экран 10 значений переменной i

int i=10;

while(i>0)

{

cout << ” i= ”<<i<<”\n”;

i--;

}

Условие while(i>0) можно заменить на более лаконичное, но менее наглядное: while(i) .

 

А вот как с помощью оператора while можно распечатать строку символов:

int i=0;

char car[20]="abrakadabra";

while(car[i])

{

cout<<car[i];

i++;

}

Выполнение цикла прекратится, как только будет достигнут признак конца строки \0.При этом символы интерпретируются как целые в соответствии со значением их ASCII кода.

Цикл do while

Третьим типом цикла в С++ является цикл do while. Синтаксис цикла выглядит так:

do

Тело цикла

while (условие продолжение цикла); // обратите внимание

// на точку с запятой!

От двух предыдущих он отличается тем, что это цикл с постусловием, т.е. сначала выполняется тело цикла, а затем проверяется условие его выполнения. Таким образом, цикл выполняется хотя бы один раз. Цикл с постусловием используется гораздо реже, чем циклы с предусловием, но иногда цикл do whileимеет смысл.

// в этом примере программа должна получить число до его проверки

#include <iostream.h>

Void main()

{

int n;

cout<<”Enter number in the range 1-10”;

do

{

cin>>n;

}

while(n!=7);

cout<<” 7 is my favorite number.\n”;

}

Операторы break и continue

Операторы break и continue позволяют программе пропустить фрагмент кода. В разделе 2.1.4 приводился пример использования break в операторе switch. Использование его в операторах цикла приводит к такому же эффекту – переходу к оператору, следующему за оператором цикла. Оператор continue используется в циклах и вызывает новую итерацию цикла. В приведенных ниже листингах показан вариант использования обоих операторов.

// в этом примере программа суммирует только четные числа.

// ноль – признак окончания ввода

#include <iostream.h>

Void main()

{

int n, sum=0;

cout<<" Enter integer number. To stop enter 0\n";

do

{

cin>>n;

if (n%2!=0)

Последнее изменение этой страницы: 2016-07-22

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...