4387

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

Контрольная

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

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

Русский

2012-11-18

130.5 KB

57 чел.

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

  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

Да

Нет


 

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

83780. Исполнение обязанности по уплате налогов и сборов. Объекты налогообложения. Принципы определения цены товаров, работ или услуг для целей налогообложения 44.19 KB
  Сущность исполнения налоговой обязанности заключается в уплате налога или сбора. Налоговая обязанность возникает с момента возникновения установленных налоговым законодательством обстоятельств предусматривающих уплату конкретного налога или сбора. Так вот обстоятельствами с которыми налоговое законодательство связывает возникновение налоговой обязанности являются следующие: вопервых это наличие объекта конкретного налога или сбора; вовторых это наличие непосредственной связи между этим объектом и субъектом налогоплательщиком. И...
83781. Исполнение обязанности по уплате налогов и сборов. Основания возникновения, изменения и прекращения обязанности по уплате налогов и соборов; порядок исчисления налогов; взыскание налога за счет денежных средств и иного имущества налогоплательщика 46.34 KB
  Основания возникновения изменения и прекращения обязанности по уплате налогов и соборов; порядок исчисления налогов; взыскание налога за счет денежных средств и иного имущества налогоплательщика. Возникновение обязанности по уплате налогов и сборов связано с несколькими обстоятельствами: с наличием конституционноправовой обязанности по уплате налогов по нормам законодательства о налогах и сборах в которых детализируется реализация обязанности по уплате налогов объектами налогообложения.  Основанием возникновения налогового обязательства...
83782. Изменение срока уплаты налога и сбора: общие условия изменения срока уплаты; обстоятельства исключающие изменение срока уплаты, органы, уполномоченные принимать решение об изменении сроков уплаты 41.84 KB
  Изменением срока уплаты налога и сбора признается перенос установленного срока уплаты налога и сбора на более поздний срок. Срок уплаты налога и или сбора может быть изменен в отношении всей подлежащей уплате суммы налога и или сбора либо ее части с начислением процентов на сумму задолженности. Изменение срока уплаты налога и сбора осуществляется в форме отсрочки рассрочки инвестиционного налогового кредита.
83783. Порядок и условия предоставления отсрочки и рассрочки по уплате налога и сбора. Инвестиционный налоговый кредит. Порядок и условия его предоставления 48.98 KB
  Отсрочка или рассрочка по уплате налога представляет собой изменение срока уплаты на срок не превышающий один год соответственно с единовременной или поэтапной уплатой суммы задолженности. Отсрочка или рассрочка может быть предоставлена заинтересованному лицу если имеются достаточные основания полагать что возможность уплаты указанным лицом такого налога возникнет в течение срока на который предоставляется отсрочка или рассрочка при наличии хотя бы одного из следующих оснований: 1 причинение этому лицу ущерба в результате стихийного...
83784. Требование об уплате налогов и сборов. Способы обеспечения исполнения обязанностей по уплате налогов и сборов 48.4 KB
  Требованием об уплате налога признается извещение налогоплательщика о неуплаченной сумме налога а также об обязанности уплатить в установленный срок неуплаченную сумму налога. Требование об уплате налога направляется налогоплательщику при наличии у него недоимки. Направляется налогоплательщику независимо от привлечения его к ответственности за нарушение законодательства о налогах и сборах. Требование об уплате налога должно содержать сведения о сумме задолженности по налогу размере пеней начисленных на момент направления требования сроке...
83785. Зачет и возврат излишне уплаченных или излишне взысканных сумм 39.45 KB
  В НК для налогоплательщиков плательщиков сборов налоговых агентов установлены единые правила зачета излишне уплаченных или взысканных налогов сборов и соответствующих пеней ст. Налоговый орган обязан сообщить налогоплательщику плательщику сбора налоговому агенту о каждом ставшем известным налоговому органу факте излишней уплаты и сумме излишне уплаченного взысканного в течение 10 дней со дня обнаружения такого факта. В случае обнаружения фактов свидетельствующих о возможной излишней уплате по предложению налогового органа или...
83786. Налоговая декларация: понятие, общие положения. Порядок внесения изменений и дополнений в налоговую декларацию 49.88 KB
  Налоговая декларация представляется в налоговый орган по месту учета налогоплательщика плательщика сбора налогового агента по установленной форме на бумажном носителе или в электронном виде в соответствии с законодательством РФ. Налоговый орган не вправе отказать в принятии налоговой декларации расчета представленной налогоплательщиком плательщиком сборов налоговым агентом по установленной форме установленному формату и обязан проставить по просьбе налогоплательщика плательщика сбора налогового агента на копии налоговой...
83787. Учет организаций и ФЛ. Порядок постановки на учет и снятия с учета организаций и ФЛ. Идентификационный номер налогоплательщика 41.68 KB
  Порядок постановки на учет и снятия с учета организаций и ФЛ. Юридическое лицо становится субъектом налоговых отношений с момента его государственной регистрации вне зависимости от его постановки на налоговый учет с этого же момента возникает и налоговая обязанность. Постановка на учет в качестве налогоплательщика организации и индивидуального предпринимателя осуществляется вне зависимости от обстоятельств с которыми НК РФ связывает возникновение обязанности по уплате того или иного налога т. Фактически НК РФ называет субъект налоговых...
83788. Налоговая проверка как основной метод налогового контроля. Камеральная налоговая проверка 42.7 KB
  Посредством проведения налоговой проверки возможно сопоставление данных предоставленных налогоплательщиком в налоговый орган и тех фактов которые выявлены налоговым органом. Срок давности проведения налоговой проверки составляет три календарных года деятельности налогоплательщика плательщика сбора или налогового агента. Подобные процессуальные действия называются встречной налоговой проверкой. Однако не следует считать встречную проверку самостоятельным видом налоговых проверок поскольку ее назначение возможно исключительно в пределах...