Читайте также: |
|
Выражение – это комбинация литералов, имен, операций и символов. Любому выражению ставится в соответствие абстрактный объект, называемый операндом, который обладает типом и значением и рассматривается как результат оценки или вычисления выражения. Мы будем просто говорить, что выражение имеет тип и значение.
Мы будем говорить о выражениях и многих других понятиях без ссылки на их формальный синтаксис. Чтобы понять почему мы об этом упоминаем, из любопытства можно посмотреть на формальное определение выражения (в стандарте С++) в Бэкусовской Форме (BNF, “выражение” ::= читается как “это есть”, остальное, в частности, рекурсивность определений, понятно по контексту):
expression::= assignment-expr | expression, assignment-expr… и т.д. более 4 –х десятков строк-определений! |
Итак, выражение состоит из одного или более операндов, в простейшем случае – из одного литерала или объекта. Результатом вычисления выражения всегда, если не оговорено противное, является r-значение (r-value, см. Лекц.1). Тип результата арифметического выражения определяется типами операндов. Если операнды имеют разные типы, производится преобразование типов в соответствии с предопределенным набором правил. Выражение может являться составным, то есть объединять в себе несколько подвыражений.
Значение результата оценки выражения может быть присвоено переменной, передано как аргумент, подвергнуто проверке в управляющих инструкциях, или использовано в другом выражении.
(D) Инструкции (Операторы)
Оператор присваивания
Оператор присваивания присваивает значение выражения, в частности, переменной в правой части операции = модифицируемому l-value (лево-допустимому выражению), находящемуся слева от знака =. Сам оператор присваивания также рассматривается как выражение.
Оператор ветвления
(i) if-else
Лучше всегда использовать { } для блоков операторов, следующих после if и else, даже если в блоках только один оператор, поскольку:
- легко наращивать блок.
- избавляемся от проблемы отслеживания if-else соответствия.
Ii) switch
Формат оператора:
switch (выражение){
case константное_выражение_1: [список_операторов_1]
case константное_выражение_2: [список_операторов_2]
...
case константное_выражение_n: [список_операторов_n]
[ default: операторы]
} //без точки с запятой!
Оператор s witch отличается от подобных инструкций в других языках, например, в Паскале. В C++ каждый “оператор” сase функционирует только как метка, а не как “граница” между вариантами выбора. То есть, после ухода на некоторый case программа последовательно выполняет все нижеследующие операторы в блоке оператора switch, пока не встретиться явный (“насильный”) переход из “блока” case в другое место. Выполнение НЕ останавливается у следующего “оператора” сase. Для выхода из блока оператора switch необходимо использовать оператор break . Синтаксическая ошибка в слове-метке default : не обнаруживается.
(Выход из переключателя может быть и по оператору return. Вообще, оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do. Оператор return выполняет выход из функции, в теле которой он записан.)
Поэтому, если не хотите “провалиться сквозь switch ”, в конце каждой case -группы операторов пишите 'break; ' (Эта ситуация исправлена в C#). Пример:
#include <iostream.h>
int main (void)
{
int day, month, year;
char ch;
cout << "Input a date as dd/mm/yy: ";
cin >> day >> ch >> month >> ch >> year;
switch (month) {
case 1: cout << "January"; break;
case 2: cout << "February"; break;
case 3: cout << "March"; break;
case 4: cout << "April"; break;
case 5: cout << "May"; break;
case 6: cout << "June"; break;
case 7: cout << "July"; break;
case 8: cout << "August"; break;
case 9: cout << "September"; break;
case 10: cout << "October"; break;
case 11: cout << "November"; break;
case 12: cout << "December"; break;
}
cout << ' ' << day << ", " << 1900 + year << '\n';
return 0;
}
Вот еще один пример использования оператора switch (“метры и футы”…):
#include <iostream>
using namespace std;
void menu();
int main()
{
menu();
return 0;
}// end of main
void menu()
{
int choice;
float area, base, height, radius;
cout << "1. Area of triangle \n";
cout << "2. Area of circle \n";
cout << "3. Exit \n";
cin >> choice;
switch(choice)
{
case 1:
cout << "1. metric \n";
cout << "2. english \n";
cin >> choice;
cout << "Enter base \n";
cin >> base;
cout << "Enter Height \n";
cin >> height;
area =.5f * (base * height);
switch(choice)
{
case 1:
cout << "The area is "<<area << " square meters \n";
break;
case 2:
cout << "The area is "<< area <<" square feet \n";
break;
default:
cout << "Invalid Choice \n";
}// end of inner switch
break;
case 2:
cout << "1. Metric \n";
cout << "2. English \n";
cin >> choice;
cout << "Enter the radius \n";
cin >> radius;
area = 3.14f * (radius * radius);
switch(choice)
{
case 1:
cout << "The area is "<<area << " square meters \n";
break;
case 2:
cout << "The area is "<< area <<" square feet \n";
break;
default:
cout << "Invalid Choice \n";
}// end of inner switch
break;
case 3:
return 0;
break;
default:
cout << "Invalid selection \n";
}
menu();
}
Дата добавления: 2015-11-16; просмотров: 43 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Некоторые операции | | | Кратко: for, while, do-while циклы и простые примеры |