4387

Операторы в языке С++

Контрольная

Информатика, кибернетика и программирование

Операторы в языке С++ Математические операторы В языке С++ операторы управляют последовательностью выполнения выражений, возвращают результаты вычислений или ничего не делают (пустые операторы). Операторы последовательного действия выполняют о...

Русский

2012-11-18

130.5 KB

41 чел.

Операторы в языке С++

  1.  Математические операторы

В языке С++ операторы управляют последовательностью выполнения выражений, возвращают результаты вычислений или ничего не делают (пустые операторы). Операторы последовательного действия выполняют определенные действия над операндами – одно за другим, как показано на схеме рис. 3.1.

Рис. 3.1. Обозначение операторов последовательного действия на блок-схеме алгоритма программы

Все выражения языка С++ оканчиваются точкой с запятой. Пустые операторы представляют собой просто точку с запятой. Самый простой пример выражения – это операция присвоения значения:

x=a+b;

Здесь a и b – операнды, а x – результат операции. В отличие от алгебры, это выражение не означает, что x равняется a+b. Данное выражение следует понимать так: присвоим результат суммирования значений переменных a и b переменной x. Несмотря на то, что в этом выражении одновременно выполняются два действия (вычисление суммы и присвоение значения), после него устанавливается только один символ точки с запятой.

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

Арифметические операторы. Существуют пять арифметических операторов: сложения (+), вычитания (-), умножения (*), целочисленного деления (/) и деления по модулю (%).

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

Целочисленное деление несколько отличается от обычного. В случае целочисленного деления числа 21 на число 4 (21/4) в ответе получается 5. Чтобы получить остаток, число 21 необходимо разделить по модулю на 4 (21%4), в результате получим остаток 1.

Для получения дробного результата нужно использовать вещественные числа. Например, выражение 21.0/4.0 даст дробный ответ 5.25. Если делимое и делитель имеют вещественный тип, то результат также будет иметь вещественный тип. Но если результат присваивается целочисленной переменной, то значение будет усечено.

Очень часто в программах к переменным добавляется (или вычитается) единица. В языке С++ увеличение значения на единицу называется инкрементом, а уменьшение – декрементом. Для этих действий предусмотрены специальные операторы.

Оператор инкремента (++) увеличивает значение переменной на единицу, а оператор декремента (--) уменьшает его на единицу. Так, если переменную Counter необходимо увеличить на единицу, то можно использовать следующее выражение:

Counter++; // Увеличить значение Counter на единицу

Этот оператор эквивалентен подробному:

Counter= Counter+1;

Можно было бы подумать, что язык С++ получил свое имя после применения оператора приращения к имени языка его предшественника С. Так и есть: С++ является инкрементным приращением языка С.

Как оператор инкремента (++), так и оператор декремента (--) существуют в двух вариантах: префиксном и постфиксном. Префиксный вариант записывается перед именем переменной (++myAge), а постфиксный – после него (myAge++). В простом выражении вариант использования не имеет большого значения, но в сложном, при выполнении приращения одной переменной с последующим присвоением результата другой переменной, это весьма существенно.

Префиксный оператор вычисляется до присвоения, а постфиксный – после. Рассмотрим следующий пример. Предположим, что целочисленная переменная x имеет значение 5. Выражение int a = ++x; сообщает компилятору, что переменную x необходимо увеличить на единицу (сделав равной 6), а затем присвоить это значение переменной а. Следовательно, значение переменной а теперь равно 6 и значение переменной x тоже равно 6.

Если затем написать int b = x++, то компилятор получит команду сначала присвоить переменной b текущее значение переменной x (равное 6), а затем увеличить переменную x на единицу. В этом случае значение переменной b будет равно 6, а переменной x – 7.

  1.  Математические функции

В языке C++, как и в любом другом языке высокого уровня, используются математические функции. Декларации математических функций содержатся в файле <math.h>. При использовании таких функций мы должны добавить в начале программы строку: #include <math.h>. В табл. 3.1 приведены обозначения математических функций, принятые в языках C и C++. Аргументы математических функций имеют тип float или double. Аргументы тригонометрических функций задаются в радианах. Все математические функции возвращают результат типа double.

Таблица 3.1

Математическая функция

Имя функции в языке C++

1

sqrt(x)

2

fabs(x)

3

exp(x)

4

pow(x, y)

5

log(x)

6

log10(x)

7

sin(x)

8

cos(x)

9

tan(x)

10

asin(x)

11

acos(x)

12

atan(x)

13

atan2(x,y)

14

sinh(x)

15

cosh(x)

16

tanh(x)

17

Остаток от деления на

fmod(x,y)

18

Наименьшее целое, которое

ceil(x)

19

Наибольшее целое, которое

floor(x)

В листинге 3.1 приведен пример использования функции fmod(x,y) для генерации псевдослучайных чисел.

Листинг 3.1. Генератор псевдослучайных чисел

#include <iostream.h>

#include <math.h>

void main(){

unsigned int a=81;

unsigned int b=9;

unsigned int c=65536;

unsigned int x;

unsigned int T[11];

cout<<"Input key: ";

cin>>T[0];

for (int i=0; i<10; i++)

{

 x=a*T[i]+b;

 T[i+1]=fmod(x, c);

 cout<<T[i+1]<<"\n";

}

char ans;

cin>>ans;

}

Случайные числа генерируются с помощью следующего алгоритма:

,

где  – предыдущее псевдослучайное число,  – последующее псевдослучайное число, а коэффициенты a, b, c постоянны. Обычно c=, где  – разрядность процессора, , а b – нечетное. В этом случае последовательность псевдослучайных чисел имеет период c.

Таблица 3.2

1

90

7299

1404

48197

37342

10055

28032

42377

24674

32523

10

819

812

245

19854

35319

42800

58937

55314

23995

43060

100

8109

1478

54191

64104

15089

42570

40307

53612

17205

17358

1000

15473

8138

3827

47852

9397

40270

50615

36592

14841

22482

10000

23577

9202

24475

16404

18013

17270

22623

63000

56737

8186

В данном случае принято: a=81, b=9, c=65536. Генерируемая последовательность чисел T[i] зависит от ключа T[0], который вводится пользователем. Результаты работы программы сведены в табл. 3.2.

Необходимо заметить, что в программе из листинга 3.1 можно было бы обойтись и без файла <math.h>, если вместо функции fmod(x,y) использовать арифметический оператор деления по модулю (%). Тогда вместо строки

   T[i+1]=fmod(x, c);

мы должны были бы записать

T[i+1]=x%c;

Впрочем, если вам потребуются использовать в программе случайные числа, то для этого не обязательно писать собственные функции. Можно воспользоваться библиотечной функцией rand() из библиотеки <iostream>. Пример использования такой функции приведен в листинге 3.2. Данная программа выводит на экран действительные положительные числа, заключенные между нулем и единицей.

Листинг 3.2. Использование библиотечной функции rand() для генерации псевдослучайных чисел

#include <iostream>

void main() {

using namespace std;

for (int i=0; i<10; i++)

  cout<<(rand()/32768.0)<<endl;

}

РЕЗУЛЬТАТ

Если запустить эту программу несколько раз, то получится один и тот же результат. Значит, мы снова имеем дело с псевдослучайными, а не с истинно случайными, числами.

  1.  Логические операторы

Логический оператор AND (И) оценивает два операнда, и если оба они истинны (true), то результатом оператора AND также будет true. Оператор AND в тексте программы обозначается как: «&&». Пример:

if ((x==5)&&(y==5))

Это логическое выражение возвратит значение true, если обе переменные (x и y) равны 5, и значение false, если хотя бы одна из них не равна 5.

Логический оператор OR (ИЛИ) также оценивает два операнда. Если хотя бы один из них имеет значение true, то результатом этого оператора также будет true. Оператор OR в тексте программы обозначается как: «||».

Пример:

if ((x==5) || (y==5))

Это логическое выражение возвратит значение true, если значение либо переменной x, либо переменной y, либо оба они равны 5.

Логический оператор NOT (НЕ) оценивает только один операнд. Результат оператора NOT противоположен значение операнда. Оператор NOT в тексте программы обозначается как восклицательный знак: «!», например:

if (!(x==5))

Это логическое выражение возвратит значение true только в том случае, если x не равно 5. Это же выражение можно записать и по-другому

if (x!=5)

  1.  Операторы отношения

Существует шесть операторов отношения, они представлены в табл. 3.3.

       Таблица 3.3

Имя

Оператор

Пример

Значение

Равно

==

100 == 50;

50 == 50;

False

True

Не равно

!=

100 != 50;

50 != 50;

True

False

Больше

>

100 > 50;

50 > 50;

True

False

Больше или равно

>=

100 >= 50;

50 >= 50;

True

True

Меньше

<

100 < 50;

50 < 50;

False

False

Меньше или равно

<=

100 <= 50;

50 <= 50;

False

True

  1.  Операторы переходов по условию

Условный оператор if. Этот оператор позволяет проверить условие (например, равны ли две переменные) и в зависимости от результата выполнить тот или иной участок кода. На блок-схеме алгоритма программы этот оператор обозначается следующим образом

Рис. 3.2. Обозначение условного оператора if на блок-схеме алгоритма программы

Простейшая форма оператора if имеет вид:

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

оператор;

Выражение в круглых скобках может быть любым, но обычно оно содержит операторы отношения. Если это выражение возвращает значение false, то последующий оператор опускается. Если же оно возвращает значение true, то оператор выполняется.

Блок операторов, заключенных в фигурные скобки, эквивалентен единому оператору. Поэтому условный оператор можно использовать также следующим образом:

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

{

оператор 1;

оператор 2;

оператор 3;

}

Довольно часто в программах требуется, чтобы при выполнении условия (т.е. когда оно возвратит значение true) программа выполняла один блок кода, а при его невыполнении (т.е. когда условие возвратит значение false) – другой. В этом случае используется ключевое слово else, как показано в примере.

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

оператор;

else

оператор;

Вместо оператора if можно использовать так называемый троичный условный оператор ? : Это единственный оператор в языке С++, который работает сразу с тремя операндами. Он записывается в следующей форме

(выражение 1) ? (выражение 2) : (выражение 3)

Эту строку можно прочитать так: «Если выражение 1 истинно, возвратить значение выражения 2, в противном случае возвратить значение выражения 3». Как правило, это значение присваивается переменной. Например, строка программного кода

z=(x>y) ? x : y;

эквивалентна следующему выражению

if (x>y)

 z=x;

else

 z=y;

однако она гораздо короче.

Оператор switch. В некоторых ситуациях применение оператора if  может привести к возникновению очень сложных конструкций с большим количеством вложенных операторов. Язык С++ располагает альтернативным решением этой проблемы – оператором switch. Этот оператор имеет следующий синтаксис:

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

{

 case  значение Один: оператор;

 break;

case  значение Два: оператор;

 break;

……………………

case  значение N:  оператор;

 break;

default:   оператор;

}

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

Переход осуществляется к той строке оператора switch, где после ключевого слова case находится значение, соответствующее результату выражения. С этой строки выполнение операторов продолжается до тех пор, пока оператор switch не завершится, либо пока не встретится оператор break. Если ни одно значение case не соответствует результату выражения, выполняются операторы, следующие за ключевым словом default, а в случае его отсутствия оператор switch завершается.

Использование в операторах switch строки default считается хорошим стилем программирования. Даже если видимой необходимости в строке default нет, то в ней можно разместить обработчик непредвиденной ситуации, а также сообщение о ее возникновении. Это окажет неоценимую помощь при отладке. Следует заметить, что если оператор break в конце оператора case отсутствует, то выполнение переходит к следующему оператору case. Иногда это необходимо, но, как правило, приводит к ошибкам. Если такой прием решено применить, то стоит описать его в комментарии, чтобы впоследствии это не воспринималось как случайная ошибка. Пример использования оператора switch приведен в листинге 3.3.

Листинг 3.3. Пример использования оператора switch

1: #include <iostream>

2: int main()

3: {

4: using namespace std;

5: unsigned short int number;  

6:  cout << “Enter a number between 1 and 5: “;

7: cin >> number;

8: switch (number)   

9: {

10: case 0: cout << “Too small, sorry!”;

11:       break;

12: case 5: cout << “Good job! “ << endl;  // далее

13: case 4: cout << “Nice Pick! “ << endl; // далее

14: case 3: cout << “Excellent! “ << endl; // далее

15: case 2: cout << “Masterful! “ << endl; // далее

16: case 1: cout << “Incredible! “ << endl;  

17:       break;

18: default: cout << “Too large! ” << endl;

19:       break;

20: }

21: cout << endl << endl;

22: return 0;

23: }

РЕЗУЛЬТАТ

Enter a number between 1 and 5:  3

Excellent!

Masterful!

Incredible!

Enter a number between 1 and 5:  8

Too large!


Математический

     оператор 1

Математический

     оператор 2

 Условие

  Действие 1

  Действие 2

Да

Нет


 

А также другие работы, которые могут Вас заинтересовать

72531. Сырье для производства строительных материалов. Природные каменные материалы 58 KB
  Сырьем для изготовления всех неорганических строительных материалов каменных и металлов являются горные породы. Основное сырье для органических материалов нефть и каменный уголь можно также отнести к горным породам.
72532. Периодизация становления и развития отечественного уголовно-исполнительного права 55.5 KB
  Регламентация исполнения наказаний периода Российской империи. Система наказаний и процесс их исполнения по Судебникам 1497 и 1550 гг. Особенностью исполнения наказаний призванной усилить их превентивное воздействие стал их публичнопозорящий характер. Наращивался объем устрашающих наказаний.
72533. ИСТОРИЧЕСКОЕ ЗНАЧЕНИЕ СЛОВА «МЕНЕДЖМЕНТ» 310 KB
  Трудно установить с предельной точностью, какова этимология термина «менеджмент». Однако истинное значение слова мы можем установить, выявляя его исторические корни. В античной Греции буквального аналога слову «менеджмент» не существовало.
72534. Программный интерфейс к файловой системе UNIX 70.42 KB
  Инициализация файла: трансляция имени файла в файловый дескриптор номер в таблице дескрипторов внутри процесса; Создание записи в системной файловой таблице которая содержит права доступа к файлу текущую позицию указателя в нем и другую информацию; эта таблица общая для всех процессов.
72535. ВОЗМОЖНОСТИ ПОВЫШЕНИЯ ЭФФЕКТИВНОСТИ ЛОГИСТИЧЕСКИХ СИСТЕМ 1.52 MB
  Но замедление скорости движения материальных товарных и финансовых потоков в логистической системе предприятия неминуемо приводит к уменьшению объема выпуска и реализации продукции снижению ее рентабельности при наличии авансированных ресурсов в неизменных размерах.
72536. Ценообразование в условиях монополии и олигополии 154.5 KB
  Поэтому кривая спроса на его продукцию относительно стабильна а цены на товары ограничены лишь покупательской оценкой их полезности относительно дохода и общим состоянием рыночной конъюнктуры. Например если фирма монополизирующая рынок упаковочных материалов установит на них неприемлемо...
72537. ФИНАНСОВЫЕ РИСКИ В ЛОГИСТИЧЕСКИХ СИСТЕМАХ И СПОСОБЫ ИХ СНИЖЕНИЯ 363 KB
  На риски продавца связанные с оплатой по контракту и на риски покупателя связанные с доставкой товара существенно влияют установленные в контракте условия платежа. При этом регламентируются расходы по кредиту и платежам а также устанавливаются форма и путь оплаты.