Char choice ; // объявление символьной переменной

cout << "Enter an integer -> "; // вывод подсказки

cin >> x;                    // ввод значения x

cout << "Enter 1...3 -> ";   // вывод подсказки

cin >> choice;   // ввод значения choice

Switch (choice) // анализ значения choice

{

Case '1':                    // если choice равен символу '1',

cout << x << endl;     // то выводится x

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

Case '2':                    // если choice равен символу '2',

cout << x * x << endl; // то выводится квадрат x

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

Case '3':                    // если choice равен символу '3',

cout << x * x * x << endl; // то выводится куб x

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

default:                     // если choice не равен '1','2'или'3'

cout << "Error of input\n"; // то сообщение об ошибке

}

 

 

Рис. 7.14 Схема оператора switch

Оператор-переключатель анализирует введенное значение символьной переменной choice. Оператор break, присутствующий в каждом case, обеспечивает выход из switch после выполнения необходимых действий. Обратите внимание, что метка default не нуждается в операторе break, управление будет передано следующему оператору. Если введен символ 1, то выводится значение переменной х. Если 2, то выводится квадрат х. Если 3, то выводится куб. Наконец, если будет введен символ, отличный от 1, 2, или 3, то выводится сообщение об ошибке ввода.

 

Листинг 7.15. Пример использования оператора switch с одинаковыми действиями для разных констант

 

#include <iostream>

using namespace std;

Int main ()

{

char c = ' ';          // вводимый символ

int counterABC = 0;    // счетчик символов A, B, или C

int counterOTHERS = 0; // счетчик остальных символов

cout << "Enter symbols -> ";

while (c!= '.')      // цикл повторяется, пока с не '.'

{

       cin >> c;   // ввод значения символа с

       switch (c)       // анализ введенного значения

       {

       case 'A':

       case 'a':

       case 'B':

       case 'b':

       case 'C':

       case 'c':

// инкремент счетчика для A, B, или C независимо от регистра

             ++counterABC;   

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

       case '.':   // если символ является точкой

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

// инкремент счетчика для остальных символов

       default:

             ++counterOTHERS;

       }            // конец оператора switch

}                  // конец оператора while

cout << "ABC or abc = " << counterABC << endl;

cout << "Other symbols = " << counterOTHERS << endl;

return 0;

}

 

Программа (листинг 7.15) вычисляет количество прописных символов A,B,C и строчных символов а, b, с, которые введены пользователем, а также количество всех остальных символов. В программе используются три переменные:

с - для хранения значения символа;

counterABC — для хранения числа первых трех букв латинского алфавита;

counterOTHERS — для хранения количества всех остальных символов.

До начала цикла while происходит объявление и инициализация переменных. Инициализации переменной с значением символа пробела позволяет начать выполнение цикла, который завершится в тот момент, когда переменная с получает значение символа точки. Начинается цикл с оператора ввода значения переменной с, за которым следует оператор switch.

Оператор-переключатель вложен в оператор цикла. Инкремент счетчиков количества тех или иных введенных символов происходит в зависимости от значения переменной с.

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

Метка «.» не поддерживает никаких вычислений в программе, а оператор break передает управление оператору while, который не будет выполняться, так как условие выполнения цикла в данном случае является ложным.

Благодаря метке default подсчитывается количество символов, отличных от A,B,C.

После завершения цикла выводятся результаты вычислений, которые демонстрируются на рис. 7.15 Конец лекции 23 октября гр. 2141

 

Рис. 7.15. Результаты использования оператора switch

7.10 ОПЕРАТОР ВОЗВРАТА RETURN

Форматы оператора:

return;

return выражение;

В первом случае оператор прекращает выполнение текущей функции и возвращает управление вызвавшей функции.

Во втором случае управление вызвавшей функции передается с передачей значения выражения (листинг 7.16).

Функции рассматриваются в этом курсе позднее.

< Примечание >

Если тип функции не является типом void, то в теле такой функции обязательно должен присутствовать оператор return.

Листинг 7.16. Пример оператора return

return (х + у); // возврат значения х + у в вызвавшую функцию

7.11 ТЕРНАРНЫЙ ОПЕРАТОР ?:

Формат оператора:

выражение1? выражение2: выражение3;

 Оператор?: называется тернарным, так как имеет три операнда. Этот оператор представляет собой компактную форму условного оператора if else. Сначала вычисляется выражение 1. Если оно истинно, вычисляется выражение2 и полученное значение становится результатом всего оператора. Если выражение1 ложно, то тогда вычисляется выражение3, и его значение становится peзультатом всего оператора (листинг 7.17).

 

< Примечание >

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

Листинг 7.17. Пример оператора?:

j = (i < 0)? (-i): (i);

max = (a > b)? a: b;

 

Первый оператор вычисляет абсолютное значение числа и записывает его в переменную j. Если значение переменной i является отрицательным, то происходит смена знака, и переменная j получает значение -i. В противном случае - значение i.

 Второй оператор выполняет выбор наибольшего значения из двух. Если a больше b, то переменной mах присваивается значение переменной а. Иначе - значeние переменной b.

Схема использования тернарного оператора из листинга 7.17 приведена на рис 7.16

 

 

Рис 7.16 Схема использования тернарного оператора из листинга 7.17

 

7.12 ОПЕРАТОР SIZEOF

Формат оператора:

sizeof (выражение);

Оператор является статическим и вычисляет длину операнда в байтах. Результат оператора рассматривается как константа целого типа и никогда не бывает равным нулю. Данный оператор позволяет программе автоматически определять размеры встроенных типов, что делает программу независимой от компьютера (листинг 7.18)

 

Листинг 7.18. Пример оператора sizeof

cout << sizeof (double) << endl;

int j; cout << sizeof (j);

В первой строке выводится фактическая длина встроенного типа double, которая определена при помощи оператора sizeof.

Во второй строке определяется и выводился фактическая длина в байтах, занимаемая целочисленной переменной j.

 

Резюме

В этой лекции обсуждались вопросы использования операторов передачи управления continue, break, switch для изменения порядка выполнения программ, а также операторов завершения функций return, тернарного оператора ?: и статического оператора sizeof. Сейчас мы должны запомнить следующие основные концепции:

1. Оператор continue может использоваться только внутри тела операторов while, for и do while.

2. Оператор break используется в основном для досрочного завершения выполнения цикла.

3. Константное выражение в операторе switch не может включать переменные или вызовы функций, а ключевые слова case и default не могут находиться вне блока switch.

4. Оператор return прекращает выполнение текущей функции и либо возвращает в вызвавшую функцию значение выражения, либо не возвращает.

5. Тернарный оператор?:, является компактной формой записи оператора if else


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: