
- •Институт математики, экономики и механики кафедра математического обеспечения компьютерных систем в. С. Макогон, и. Н. Лисицына
- •Оглавление
- •Введение
- •Основныетипы данных, операции и выражения
- •Описание переменных.
- •Операции , выражения и операторы.
- •3. Операторы управления программой. Базовые управляющие структуры.
- •Операторы ветвления Условный оператор if
- •Оператор - переключатель
- •Операторы повторения (цикла).
- •4. Программирование алгоритмов линейной структуры.
- •5. Программирование разветвляющихся алгоритмов (оператор if).
- •6. Программирование разветвляющихся алгоритмов (оператор switch)
- •Оператор for
- •Цикл с постусловием do -while
- •8. Итерационные циклы
- •Задачи для самостоятельного решения
- •9. Программирование алгоритмов с использованием функций
- •Основные понятия численного решения уравнений
- •10. Программирование алгоритмов с использованием массивов
- •11. Символьные переменные и строки. Обработка строк.
- •Другие средства ввода-вывода символов и строк
- •Массивы строк
- •12. Указатели
- •Массивы указателей
- •2. Описание метода трапеций
- •3. Программный комплекс
- •13. Структуры
- •Указатели на структуры
- •14. Файлы. Потоковый ввод-вывод
- •Функции для работы с файлами
- •Открытие файловых потоков
- •Закрытие файловых потоков
- •Удаление файлов
- •Переименование файлов
- •Реинициализация
- •Функции для ввода-вывода по символам
- •1 Вариант) содержит только буквы исходной строки
- •2 Вариант) перевернута по отношению к исходной
- •Двоичные (бинарные) файлы. Блочно-ориентированный ввод-вывод.
Оператор - переключатель
Оператор - переключатель switch языка С/С++ имеет следующий вид:
switch (выражение)
{
case константа_1 : [блок_операторов_1] [break;]
case константа_2 : [блок_операторов_2] [break;]
...
case константа_N : [блок_операторов_N] [break;]
[default : блок_операторов_N+1]
}
Выполнение оператора начинается с вычисления значения выражения, стоящего в скобках после ключевого слова switch. Тип значения выражения должен принадлежать к одному из целых типов (в частности, может быть и символьного типа ). Эта величина и используется в качестве критерия для выбора вариантов. Вычисленное значение последовательно сравнивается со значениями констант (в общем случае – константных выражений) константа_1, константа_2, …, константа_N, которые обязаны быть того же типа, что и тестируемое выражение. Никакие две константы в одном операторе–переключателе не могут иметь одинаковые значения. При совпадении значения выражения с константой_i выполняется блок_операторов_i. Затем управление передаётся на оператор, следующий сразу после оператора-переключателя, если в i-й ветви присутствует оператор break. В противном случае выполняются операторы в ветвях i+1, i+2 и т. д. до тех пор, пока в них не встретится оператор break или не будет достигнут и выполнен блок_операторов_N+1 из ветви default.
Если значение выражения не совпало ни с одной из констант константа_1, константа_2, …, константа_N, то выполняется блок_операторов_N+1, помеченный меткой default. При её отсутствии в сложившейся ситуации выполняется оператор, следующий сразу после оператора-переключателя .
Замечание. В теле оператора switch может встретиться оператор return, который в этом случае прекращает работу оператора-переключателя и завершает работу всей функции.
Снова напишем программу, реализующую простейший калькулятор, но применим теперь в ней оператор switch.
// Калькулятор в Visual Studio 2008 3.03.2008г
#include "stdafx.h"
#include<conio.h>
#include <iostream>
using namespace std;
int main()
{
char znak;
float a, b, y;
//Устанавливаем локализацию для выходного потока
wcout.imbue(locale("rus_rus.866"));
wcout<<L"Введи арифметическое выражение типа 25*4 "<<endl;
cin>>a>>znak>>b;
switch(znak)
{
case '+': y=a+b; wcout<<L"сумма "; break;
case '-': y=a-b; wcout<<L"разность ";break;
case '*': y=a*b; wcout<<L"произведение ";break;
case '/': if (b)
{ y=a/b; wcout<<L"частное ";break; }
else
{ wcout << L"Деление на 0 " ;
_getch(); return 2;
}
default: wcout<<L"Это плохой знак!\n ";
_getch(); return 1;
}
wcout<<a<<znak<<b<<" = "<<y<<endl;
_getch(); return 0;
}
Обратите внимание, что некоторые блоки_операторов согласно синтаксису оператораswitch могут отсутствовать. Это позволяет связывать одну последовательность операторов с несколькими case-метками.
Пример.
cout << "Разрешите запуск ракеты (y/n)? "<<endl;
char ch = getch();
switch (ch)
{
case 'n' : case 'N' : case 'т' : case 'Т' :
cout << "Нельзя " <<endl; break;
case 'y' : case 'Y' : case 'н' : case 'Н' :
cout << "Можно " <<endl; break;
default :cout << "Смотреть надо, когда жмешь клавишу !" ;
}