3.3.2. Оператор выбора if..Else
Синтаксис оператора if..else имеет следующий вид:
if (выражение)
оператор;
else
оператор;
Блок-схема выполнения оператора if..else приведена на рис. 3.2.
Рис. 3.2. Исполнение оператора if..else
Например, оператор псевдокода
Если оценка студента больше или равна 60
Тогда вывести на экран «Зачет»
Иначе
Вывести на экран «Незачет»
выводит на экран «Зачет», если оценка студента больше или равна 60, либо выводит «Незачет», если оценка
студента меньше 60. В любом случае после вывода на экран «выполняется» следующий по порядку
оператор псевдокода.
Предыдущая структура псевдокода если..иначе может быть написана на С++ как
if ( grade >= 60 )
cout << “Зачет” ;
else
cout << “Незачет”;
В теле оператора выбора if предполагается наличие только одного оператора. Чтобы включить в тело if несколько операторов, нужно заключить этот набор операторов в фигурные скобки ({ и }). Совокупность операторов, содержащихся внутри пары фигурных скобок, называется составным оператором или блоком. Составной оператор может быть помещен в любое место программы, где может стоять простой оператор.
Следующий пример содержит составной оператор в ветви else оператора if..else.
if ( grade >= 60 )
cout << “Зачет”;
else
{
cout << “Незачет”;
cout << “Вам следует снова пройти этот курс”;
}
В этом случае, если переменная grade меньше 60, программа выполняет оба оператора cout внутри ветви else и выводит
Незачет
Вам следует снова пройти этот курс.
Обратите внимание на фигурные скобки, в которые заключены оба оператора в предложении else. Эти скобки важны. Без этих скобок оператор
Cout << “Вам следует снова пройти этот курс”;
оказался бы вне тела else-ветви оператора if и выполнялся бы вне зависимости от того, меньше 60 значение grade или нет.
3.3.3. Тернарный условный оператор
Условный оператор ? — единственный оператор в языке C++, который работает сразу с тремя операндами. Он получает три выражения и возвращает значение:
(выражение1) ? (выражение2): (выражениеЗ)
Эту строку можно прочитать так: "Если выражение1 истинно, возвратить значение выражения2, в противном случае возвратить значение выражения3". Как правило, это значение присваивается переменной. Следующий пример демонстрирует применение условного оператора ? вместо оператора if..else.
stroka =(grade >=60) ? “зачет”: “незачет”;
cout << stroka;
3.3.4. Оператор множественного выбора switch
В некоторых ситуациях применение оператора if может привести к возникновению очень сложных конструкций с большим количеством вложенных операторов. Язык C++ располагает альтернативным решением этой проблемы — оператором switch. В отличие от оператора if, он позволяет проверять сразу несколько условий, организуя ветвление программы более эффективно. Оператор switch имеет следующий синтаксис:
switch (выражение)
{
case значение1: оператор;
break;
case значение2: оператор;
break;
...
case значениеN: оператор;
break; default: оператор;
}
Выражение в скобках оператора switch представляет собой любое допустимое выражение языка C++, а оператор — это любой допустимый оператор или блок операторов. Выражение возвращает (или может быть однозначно преобразовано в) целочисленное значение. Поэтому использование логических операций или выражений сравнения здесь недопустимо.
Переход осуществляется к той строке оператора switch, где после ключевого слова case находится значение, соответствующее результату выражения. С этой строки выполнение операторов продолжится до тех пор, пока оператор switch не завершится либо пока не встретится оператор break. Если ни одно значение case не соответствует результату выражения, выполняются операторы, следующие за ключевым словом default, а в случае его отсутствия оператор switch завершается. Блок-схема выполнения оператора if..else приведена на рис. 3.3.
Рис. 3.3. Исполнение оператора if..else
Пример использования оператора switch приведен в листинге 3.3.
Листинг 3.3. Пример использования оператора switch
// DemoSwitch.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
unsigned 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! " << endl; // далее
case 4: cout << "Nice Pick! " << endl; // далее
case 3: cout << "Exellent! " << endl; // далее
case 2: cout << "Masterful! " << endl; // далее
case 1: cout << "Incredible!" << endl; // далее
break;
default: cout << "Too large! "; break;
}
cout << endl << endl;
cin >> number;
return 0;
}
Использование флажка - компонента CheckBox
Компонент CheckBox представляет флажок, который может находиться в одном из двух состояний: выбранном (установленном) или невыбранном (выключенном). Рядом с флажком, как правило, находится поясняющий текст. Компоненты CheckBox обычно используют для выбора нескольких опций из ряда возможных.
Состояние флажка изменяется в результате щелчка на его изображение (если его свойство Autocheck равно true). При этом возникает событие CheckedChanged, а потом событие Click. Если значение свойства Autocheck равно false, то в результате щелчка на флажке возникает событие Click, а затем, если процедура обработки события изменит состояние кнопки, возникает событие CheckedChanged.
Следующая программа демонстрирует (ее окно приведено на рис. 3.1, а текст - в листинге 3.4) демонстрирует использование компонента CheckBox. Программа позволяет посчитать цену автомобиля в зависимости от комплектации.
Рис. 3.1. Окно программы "Комплектация".
Листинг 3.4. Пример использования компонента CheckBox
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)
{
double cena; // цена в базовой комплектации
double dop; // сумма за доп. оборудование
double discount; // скидка
double total; // общая сумма
cena = 415000;
dop = 0;
if (checkBox1->Checked)
{
// kovriki
dop += 1200;
}
if (checkBox2->Checked)
{
// zaschita kartera
dop += 4500;
}
if (checkBox3->Checked)
{
// zimnie shiny
dop += 12000;
}
if (checkBox4->Checked)
{
// litye diski
dop += 12000;
}
total = cena + dop;
System :: String ^st;
st = "Cena v vybrannoi kompleknation: " + total.ToString("C");
if (dop != 0)
{
st += "\nV tom chisle dop. oborudovanie: " +
dop.ToString("C");
}
if ((checkBox1->Checked) && (checkBox2->Checked) &&
(checkBox3->Checked) && (checkBox4->Checked))
{
// Skidka predostavlyaetcya, esli vybrany vse option
discount = dop * 0.1;
total -= discount;
st += "\nSkidka na dop. oborudovanie (10%): " + discount.ToString("C") +
"\nItogo: " + total.ToString("C");
}
label2->Text = st;
}
Проект 3_1 Начинаем строить справочную систему С++
В этом проекте строится простая справочная система, выводящая информацию о синтаксисе управляющих предложений С++. Программа выводит меню, содержащее список управляющих предложений, и затем ожидает, чтобы вы выбрали одно из них. После этого на экран вводится синтаксис соответствующего предложения. В этот первый вариант программы включены только справки по предложениям if и switch. Другие управляющие предложения будут добавлены в последующих проектах.
Шаг за шагом
1. Создайте новый файл с именем Help.cpp.
2. Программа начинает свою работу с вывода следующего меню:
Справка по:"
1. if
2 . switch
Выберите один из пунктов:
Для реализации пункта 2 вы можете использовать такую последовательность предложений:
cout.<< "Справка по:\n";
cout << " 1. if \n" ;
cout << " 2. switch\n";
cout << "Выберите один из пунктов: ";
3. Далее программа вводит выбранный пользователем номер, как это показано ниже:
cin >> choice;
4. Получив от пользователя номер, программа выводит на экран соответствующую справку с помощью следующего предложения switch:
switch(choice) {
case '1' :
cout << "Предложение if:\n\n";
cout << "if(условие) предложение;\n";
cout << "else предложение;\n";
break;
case '2':
cout << "Предложение switch:\n\n";
cout << "switch(выражение) {\n";
cout << " case константа : \n" ;
cout << " последовательность предложений\n";
cout << " break;\n";
cout <<"//... \n" ;
cout << " } \n" ;
break;
default :
cout << "Этот пункт отсутствует.\n";
}
Обратите внимание на то, как предложение default отбирает недопустимые номера. Если, например, пользователь ввел 3, этому числу нет соответствия в ветвях case, что и приведет к выполнению последовательности default.
5. Ниже приведен полный текст программы Help.cpp:
/*
Проект 3-1
Простая справочная система.
*/
#include <iostream>
using namespace std;
int main() {
char choice;
cout << "Справка no:\n";
cout << " 1. if \n" ;
cout << " 2 . switch\n";
cout << "Выберите один из пунктов: ";
cin >> choice;
cout << "\n" ;
switch(choice) {
case '1':
cout << "Предложение if:\n\n";
cout << "if(условие) предложение;\n";
cout << "else предложение;\n";
break;
case '2':
cout << "Предложение switch:\n\n";
cout << "switch(выражение) {\n";
cout << " case константа: \n" ;
cout << " последовательность предложений\n";
cout << " break;\n";
cout << " / / . . . \n" ;
cout << "}\n";
break;
default :
cout << "Этот пункт отсутствует.\n";
}
cin >> choice;
return 0;
}
Ниже приведен пример работы программы.:
Справка по:
1. if
2 . switch
Выберите один из пунктов: 1
Предложение if:
if(условие) предложение;
else предложение;
