Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Приоритет операторов отношений и логических операторов показан в следующей таблице.



Выражения

Операторы, литералы и переменные — это все составляющие выражений. Вероятно, вы уже знакомы с выражениями по предыдущему опыту программирования или из школьного курса алгебры. В следующих разделах мы рассмотрим аспекты выражений, которые касаются их использования в языке C++.

Преобразование типов в выражениях

Если в выражении смешаны различные типы литералов и переменных, компилятор преобразует их к одному типу. Во-первых, все char- и short int-значения автоматически преобразуются (с расширением " типоразмера" ) к типу int. Этот процесс называется целочисленным расширением (integral promotion). Во-вторых, все операнды преобразуются (также с расширением " типоразмера" ) к типу самого большого операнда. Этот процесс называется расширением типа (type promotion), причем он выполняется по операционно. Например, если один операнд имеет тип int, а другой — long int, то тип int расширяется в тип long int. Или, если хотя бы один из операндов имеет тип double, любой другой операнд приводится к типу double. Это означает, что такие преобразования, как из типа char в тип double, вполне допустимы. После преобразования оба операнда будут иметь один и тот же тип, а результат операции — тип, совпадающий с типом операндов.

Рассмотрим, например, преобразование типов, схематически представленное на рис. 3.1. Сначала символ ch подвергается процессу " расширения" типа и преобразуется в значение типа int. Затем результат операции ch/i приводится к типу double, поскольку результат произведения f*d имеет тип double. Результат всего выражения получит тип double, поскольку к моменту его вычисления оба операнда будут иметь тип double.

Преобразования, связанные с типом bool

Как упоминалось выше, значения типа bool автоматически преобразуются в целые числа 0 или 1 при использовании в выражении целочисленного типа. При преобразовании целочисленного результата в тип bool нуль преобразуется в false, а ненулевое значение — в true. И хотя тип bool относительно недавно был добавлен в язык C++, выполнение автоматических преобразований, связанных с типом bool, означает, что его введение в C++ не имеет негативных последствий для кода, написанного для более ранних версий C++. Более того, автоматические преобразования позволяют C++ поддерживать исходное определение значений ЛОЖЬ и ИСТИНА в виде нуля и ненулевого значения. Таким образом, тип bool очень удобен для программиста.

Приведение типов

В C++ предусмотрена возможность установить для выражения заданный тип. Для этого используется операция приведения типов (cast). C++ определяет пять видов таких операций. В этом разделе мы рассмотрим только один из них, а остальные четыре описаны ниже в этой книге (после темы создания объектов). Итак, общий формат операции приведения типов таков:

(тип) выражение

Здесь элемент тип означает тип, к которому необходимо привести выражение. Например, если вы хотите, чтобы выражение х/2 имело тип float, необходимо написать следующее:

(float) х / 2

Приведение типов рассматривается как унарный оператор, и поэтому он имеет такой же приоритет, как и другие унарные операторы.

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

#include < iostream>

using namespace std;

int main() /* Выводим i и значение i/2 с дробной частью.*/

{

  int i;

  for(i=1; i< =100; ++i )

    cout < < i < < " / 2 равно: " < < (float) i / 2 < < '';

  return 0;

}

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

Использование пробелов и круглых скобок

Любое выражение в C++ для повышения читабельности может включать пробелы (или символы табуляции). Например, следующие два выражения совершенно одинаковы, но второе прочитать гораздо легче.

х=10/у*(127/х);

х = 10 / у * (127/х);

Круглые скобки (так же, как в алгебре) повышают приоритет операций, содержащихся внутри них. Использование избыточных или дополнительных круглых скобок не приведет к ошибке или замедлению вычисления выражения. Другими словами, от них не будет никакого вреда, но зато сколько пользы! Ведь они помогут прояснить (для вас самих в первую очередь, не говоря уже о тех, кому придется разбираться в этом без вас) точный порядок вычислений. Скажите, например, какое из следующих двух выражений легче понять?

х = у/3-34*temp+127;

X = (у/3) - (34*temp) + 127;


Глава 4: Инструкции управления

В этой главе вы узнаете, как управлять ходом выполнения С++-программы. Существует три категории управляющих инструкций: инструкции выбора (if, switch), итерационные инструкции (состоящие из for-, while- и do-while-циклов) и инструкции перехода (break, continue, return и goto).

За исключением return, все остальные перечисленные выше инструкции описаны в этой главе.

Инструкция if

Инструкция if позволяет сделать выбор между двумя выполняемыми ветвями программы.

Инструкция if была представлена в главе 2, но здесь мы рассмотрим ее более детально. Полный формат ее записи таков.

if(выражение) инструкция;

else инструкция;

Здесь под элементом инструкция понимается одна инструкция языка C++. Часть else необязательна. Вместо элемента инструкция может быть использован блок инструкций. В этом случае формат записи if-инструкции принимает такой вид.

If(выражение)

{

  последовательность инструкций

}

Else

{

  последовательность инструкций

}

Если элемент выражение, который представляет собой условное выражение, при вычислении даст значение ИСТИНА, будет выполнена if-инструкция; в противном случае else-инструкция (если таковая существует). Обе инструкции никогда не выполняются. Условное выражение, управляющее выполнением if-инструкции, может иметь любой тип, действительный для С++-выражений, но главное; чтобы результат его вычисления можно было интерпретировать как значение ИСТИНА или ЛОЖЬ.

Использование if-инструкции рассмотрим на примере программы, которая представляет собой версию игры " Угадай магическое число" . Программа генерирует случайное число и предлагает вам его угадать. Если вы угадываете число, программа выводит на экран сообщение одобрения ** Правильно **. В этой программе представлена еще одна библиотечная функция rand(), которая возвращает случайным образом выбранное целое число. Для использования этой функции необходимо включить в программу заголовок < cstdlib> .

// Программа " Угадай магическое число".

#include < iostream>

#include < cstdlib>

using namespace std;

Int main()

{

  int magic; // магическое число

  int guess; // вариант пользователя

  magic = rand(); // Получаем случайное число.

  cout < < " Введите свой вариант магического числа: ";

    cin > > guess;

  if(guess == magic) cout < < " ** Правильно **";

  return 0;

}

В этой программе для проверки того, совпадает ли с " магическим числом" вариант, предложенный пользователем, используется оператор отношения " ==" . При совпадении чисел на экран выводится сообщение ** Правильно **.

Попробуем усовершенствовать нашу программу и в ее новую версию включим else-ветвь для вывода сообщения о том, что предположение пользователя оказалось неверным.

// Программа " Угадай магическое число":

// 1-е усовершенствование.

#include < iostream>

#include < cstdlib>

using namespace std;

Int main()

{

  int magic; // магическое число

  int guess; // вариант пользователя

  magic = rand(); // Получаем случайное число.

  cout < < " Введите свой вариант магического числа: ";

    cin > > guess;

  if(guess == magic) cout < < " ** Правильно **";

  else cout < < "...Очень жаль, но вы ошиблись.";

  return 0;

}

Условное выражение

Иногда новичков в C++ сбивает с толку тот факт, что для управления if-инструкцией можно использовать любое действительное С++-выражение. Другими словами, тип выражения необязательно ограничивать операторами отношений и логическими операторами или операндами типа bool. Главное, чтобы результат вычисления условного выражения можно было интерпретировать как значение ИСТИНА или ЛОЖЬ. Как вы помните из предыдущей главы, нуль автоматически преобразуется в false, а все ненулевые значения— в true. Это означает, что любое выражение, которое дает в результате нулевое или ненулевое значение, можно использовать для управления if-инструкцией. Например, следующая программа считывает с клавиатуры два целых числа и отображает частное от деления первого на второе. Чтобы не допустить деления на нуль, в программе используется if-инструкция.

// Деление первого числа на второе.

#include < iostream>

using namespace std;

Int main()

{

  int a, b;

  cout < < " Введите два числа: ";

  cin > > a > > b;

  if(b) cout < < a/b < < '';

  else cout < < " На нуль делить нельзя.";

  return 0;

}

Обратите внимание на то, что значение переменной b (делимое) сравнивается с нулем с помощью инструкции if(b), а не инструкции if(b! =0). Дело в том, что, если значение b равно нулю, условное выражение, управляющее инструкцией if, оценивается как ЛОЖЬ, что приводит к выполнению else-ветви. В противном случае (если b содержит ненулевое значение) условие оценивается как ИСТИНА, и деление благополучно выполняется. Нет никакой необходимости использовать следующую if-инструкцию, которая к тому же не свидетельствует о хорошем стиле программирования на C++.

if(b! = 0) cout < < а/b < < '';


Поделиться:



Популярное:

  1. E. Лица, участвующие в договоре, для регулирования своих взаимоотношений могут установить правила, отличающиеся от правил предусмотренных диспозитивными нормами права.
  2. F. Переживание мифологических и сказочных сюжетов
  3. I. Весть Святых взаимоотношений
  4. S: Категория, обозначающая совокупность отношений, выражающих координацию существующих объектов, их расположение друг относительно друга и относительную величину
  5. VI. Определение девиации по сличению показаний двух компасов
  6. VI. Свет Святых взаимоотношений
  7. А также на геологических картах и вертикальных разрезах
  8. А.Я. Вышинского представителям англо-американской печати в Москве относительно польско-советских отношений от 6 мая 1943 г.
  9. Автоматизация строительных машин и технологических процессов в строительстве
  10. Алгоритм формально-логических показателей правописания наречий, наречных сочетаний и сочетаний предлога с существительным
  11. Алогизм – непредсказуемое совмещение понятий; сознательное нарушение логических связей в художественном произведении.
  12. В каких случаях показан массаж?


Последнее изменение этой страницы: 2016-03-17; Просмотров: 1218; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.03 с.)
Главная | Случайная страница | Обратная связь