Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Выражения. Выражения состоят из операндов, знаков операций и скобок и используются для вычисления некоторого значения определённого типа

 

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

(a+0. 12) /6

x && y ||!z

(t * sin(x)-1.05e4)/((2 * k + 2) * (2 * k + 3))

Операции выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки. Если в одном выражении записано несколько операций одинакового приоритета, унарные операции, условная операция и операции присваивания выполняются справа налево, остальные – слева направо. Например, a = b = c означает a = (b = c), а a + b + c означает (a + b)+c. Порядок вычисления подвыражений внутри выражений не определён: например, нельзя считать, что в выражении (sin (x + 2) + cos (y +1)) обращение к синусу будет выполнена раньше, чем к косинусу, и что x+2 будет вычислено раньше, чем y+1. Результат вычисления выражения характеризуется значением и типом. Например, если a и b – переменные целого типа и описаны так:

Int a = 2, b = 5;

то выражение а + b имеет значение 7 и тип int, а выражение a = b имеет значение, равное помещённому в переменную a (в данном случае 5) и тип, совпадающий с типом этой переменной. Таким образом, в С++ допустимы выражения вида a = b = c: сначала вычисляется выражение b = c, а за тем его результат становится правым операндом для операций присваивания переменной а. В выражение могут входить операнды различных типов. Если операнды имеют одинаковый тип, то результат операции будет иметь тот же тип. Если операнды разного типа, перед вычислениями выполняются преобразования типов по определённым правилам, обеспечивающим преобразование более коротких типов в более длинные для сохранения значимости и точности.

Преобразования бывают двух типов:

q Изменяющие внутреннее представление величин (с потерей точности или без потери точности);

q Изменяющие только интерпретацию внутреннего представления.

К первому типу относятся, например, преобразование целого числа вещественное (без потери точности) и наоборот (возможно, с потерей точности), ко второму – преобразование знакового целого в без знаковое. В любом случае величины типов char, signed char, unsigned char, short int и unsigned short int преобразуются в тип int, если он может представить все значения, или в unsigned int в противном случае.

После этого операнды преобразуются к типу наиболее длинного из них, и он используется как тип результата.

Раздел 3. Операторы языка.

Условный оператор if

Условный оператор if используется для разветвления процесса вычислений на два направления. Формат оператора:

if (выражение) оператор_1; [else оператор_2;]

Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется пер­вый оператор, иначе — второй. После этого управление передается па оператор, следующий за условным.

Одна из ветвей может отсутствовать, логичнее опускать вторую ветвь вместе с ключевым словом else. Если в какой-либо ветви требуется выполнить несколь­ко операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы (но не может состоять из од­них описаний). Необходимо учитывать, что переменная, описанная в блоке, вне блока не существует.

 

Примеры:

// 1 // 2 // 3 // 4 // 5

if (а<0) b = 1;

if (a<b && (a>d || a==0)) b++; else {b *=; a = 0;}

if (a<b) {if (a<c) m = a; else m = c;} else {if (b<c) m = b; else m = c;}

if (a++) b++;

if (b>a) max = b; else max = a;

В примере 1 отсутствует ветвь el se. Подобная конструкция называется «пропуск оператора», поскольку присваивание либо выполняется, либо пропускается в за­висимости от выполнения условия.

Если требуется проверить несколько условий, их объединяют знаками логиче­ских операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие а<Ь и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом -ИЛИ.

Оператор в примере 3 вычисляет наименьшее значение из трех переменных. Фи­гурные скобки в данном случае не обязательны, так как компилятор относит часть el se к ближайшему if.

Пример 4 напоминает о том, что хотя в качестве выражений в операторе i f чаще всего используются операции отношения, это не обязательно.

Конструкции, подобные оператору в примере 5, проще и нагляднее записывать в виде условной операции (в данном случае: max = (b > а)? b: а;).

Если какая-либо переменная используется только внутри условного оператора, рекомендуется объявить ее внутри скобок, например:

If (int i = fun(t)) a -= i; else a += i:

Объявление переменной в тот момент, когда она требуется, то есть когда ей необ­ходимо присвоить значение, является признаком хорошего стиля и позволяет из­бежать случайного использования переменной до ее инициализации. Объявлять внутри оператора i f можно только одну переменную. Область ее видимости на­чинается в точке объявления и включает обе ветви оператора.

 

Оператор switch

Оператор switch (переключатель) предназначен для разветвления процесса вы­числений на несколько направлений. Формат оператора:

switch (выражение){

case константное_выражение_1: [список_рператоров_1] case константное_вырамение_2: [список_операторов_2]

case константное_выражение_n: [список_операторов_n] [default: операторы ]

}

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

Выход из переключателя обычно выполняется с помощью операторов break или return. Оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do. Оператор return выполняет выход из функ­ции, в теле которой он записан.

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

Пример (программа реализует простейший калькулятор на 4 действия):

#include <iostream.h> int main(){

int a, b, res;

char op;

cout << “\n Введите 1й операнд: “; cin >> a;

cout << “\n Введите знак операции: “; cin >> op:

cout << “\n Введите 2й операнд: “; cin >> b;

bool f = true;

switch (op){

case ' + ': res = a + b; break;

case '-': res = a – b; break;

case '*': res = a * b; break;

case '/': res = a / b; break:

default: cout <<” \n Неизвестная операция”; f = false;

}

if (f) cout << “ \n Результат: “ << res;

return 0;

}

ПРИМЕЧАНИЕ

В случае синтаксической ошибки в слове default сообщение об ошибке не выдается, по­скольку компилятор воспримет это слово как допустимую метку оператора.

 

 


Пример (программа реализует простейший калькулятор на 4 действия):

#include <iostream.h> int main(){

int a, b, res;

char op;

cout << “\n Введите 1й операнд: “; cin >> a;

cout << “\n Введите знак операции: “; cin >> op:

cout << “\n Введите 2й операнд: “; cin >> b;

bool f = true;

switch (op){

case ' + ': res = a + b; break;

case '-': res = a – b; break;

case '*': res = a * b; break;

case '/': res = a / b; break:

default: cout <<” \n Неизвестная операция”; f = false;

}

if (f) cout << “ \n Результат: “ << res;

return 0;

}

Операторы цикла

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

Один проход цикла называется итерацией. Проверка условия выполняется на каждой итерации либо до тела цикла (тогда говорят о цикле с предусловием), либо после тела цикла (цикл с постусловием). Разница между ними состоит в том, что тело цикла с постусловием всегда выполняется хотя бы один раз, после чего проверяется, надо ли его выполнять еще раз. Проверка необходимости вы­полнения цикла с предусловием делается до тела цикла, поэтому возможно, что он не выполнится ни разу.

 

Начальные установки  
а
Начальные установки  
б

 

         
   
 
 
   

 


схемы операторов цикла: а — цикл с предусловием; б — цикл с постусловием

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

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

Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue, return и goto (см. раздел «Операторы пе­редачи управления»). Передавать управление извне внутрь цикла не реко­мендуется.

Для удобства, а не по необходимости, в C++ есть три разных оператора цикла -

while, do while и for.

<== предыдущая лекция | следующая лекция ==>
Константы | Цикл с параметром (for)
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 652; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.037 сек.