Программирование >>  Унарные и бинарные операторы 

[ 1 ] 2 3 4 ... 37


унарные-бинарные операторы

Как и кнопки пульта управления, собственные функции, сделанные опытным программистом, не могут повредить объект, которым они управляют. На примере телевизора видно, что у сложного объекта может быть очень простой интерфейс. Программируя на С++, можно скрыть сложность внутри объекта, оставив снаружи простые и понятные собственные функции.



Очередность

До сих пор операторы встречались нам поодиночке. Инструкция с=а+Ь вполне однозначна: в ней сумма двух переменных, а и Ь, отправляется в переменную с. Но как гюнять фрагмент программы, показанной в лнсти1[ге 3.1?

Листинг 3.1

#inclucle <iostream> using namespace std: int main(){ int a=l.b=2.c=3:

cout a+b*c endl:

Инструкция a+b*c содержит два оператора, и не ясно, какой из них выполнится первым. Если это будет сложение, то на экране появится цифра 9, так как (1 +2) х 3 = = 9. Если же сначала умножить b пас и к произведению добавить а, то результат окажется равным 7, так как 1 + (2 X 3) = 7.

Проверка показывает, что справедлива вторая гипотеза: сначала выполняется умножение, а потом сложение. Ины.ми словами, приоритет оператора умножения выше, чем оператора сложения.

Приоритет есть, конечно, у любого оператора С++. У арифметических операторов (+, -, *, /) он выше, чем у оператора вывода . Вот почему компилятор сначала вычисляет а+Ь*с и лишь [ютом выводит результат на экран.

Кроме приоритета у любого оператора есть еще порядок выполнения. Так, например, оператор вывода выполняется слева направо, поэтому в следующей ин-

Условности 35

струкции сначала \ш экран выводится результат операций а+Ь*с и только заттг&и переводится строка: cout a+b*c endl:

Подробнее о приоритетах и порядке выполнения операторов С++ можно узнать в приложении.

Но как изменить этот порядок? Здесь помогут обычные круглые скобки. Чтобы в листинге 3.1 сумма а и b умножалась на с, достаточно aainicarb инструкцию вывода на эк1)ан так: cout (a+b)*c endl:

Условности

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

Знакомство с условными операторами пач1[ем с программы, определяющей минимальное число из трех (листинг 3.2).

Листинг 3.2

#include <iostream>

using namespace std:

Int main(){

int x=4.y-2.z=3.mln;

min=x;

if(y < min) min=y; прололжение



После выполнения этой программы в переменной min должно оказаться самое маленькое число, в нашем случае - 2. Первая инструкция программы засылает в min переменную х, и min становится равной 4. Далее выполняется условная инструкция if (у < min) min=y, смысл которой прост: если у меньше min, то в переменную min засылается значение у. Если же условие не выполняется, переменная min остается прежней. В нашем случае у=2, а min=4, значит, условие выполняется, и в переменную min засылается значение у, то есть min становится равной 2, а программа переходит к инструкции if(z < min) min=z, смысл которой аналогичен. В нашем случае z=3, а min=2. Значит, условие z < min не выполняется, присваивания min=z не происходит, профамма переходит к следующей инструкции и выводит на экран цифру 2.

Наш следующий пример показывает, как с помощью условного оператора уместить в нескольких строчках тысячи, миллионы инструкций. Программа, приведенная в листинге 3.3, выводит на экран сумму тысячи последовательных целых чисел от 1 до 1000.

Листинг 3.3

#include <iostream> using namespace std: int main(){ int N=1000: int sum=0.i=l; while(i<=N){

sum=sum+1;

i=i+l;

cout sum= sum endl: }

Профамма начинается с задания числа слагаемых int N-1000, а также начального значения суммы и первого слагаемого:

int sum=0.i=l:

Сумма вычисляется с помощью цикла whi 1 е() {}. Выполнение цикла начинается с проверки условия, стоящего в круглых скобках. Если оно истинно, то выполняется тело цикла, заключенное в фигурные скобки.

В нашем случае цикл начинается с проверки i <= N (i меньше или равно N) и, поскольку в этот момент i рав1Ю 1, а N - тысяче, условие выполняется, а значит, к переменной sum прибавляется единица (sum-suii+i), затем увеличивается переменная i (i=i+l), и мы вновь переходим к проверке условия i <= N, но теперь уже i равно 2, а N - но-прежнему тысяче. Зьючит, условие снова выполняется, и цикл совершает свой второй оборот, прибавляя к переменной sum двойку и вновь увеличивая переменную i (она становится равной трем).

Легко понять, что в последний раз условие i<N выполнится, когда переменная i будет равна 1000. На этом последнем обороте цикла к переменной sum прибавится 1000, затем i увеличится на 1 и снова начнется проверка условия i<=N. На этот раз условие не выполнится, потому что переменная i уже равна 1001, программа пропустит тело цикла и перейдет к следующей инструкции, выводящей на экран значение суммы:

cout suni= sum endl;

Задача 3.1. He компилируя программу, попробуйте понять, чему будет равна сумма при N=1000.

Заметим, что программу, показанную в листинге 3.2, довольно легко приспособить для суммирования лю-

Запись sum = sum + i поначалу многим непонятна. Но программирование - не алгебра, а оператор = означает присваивание, то есть к переменпой sum прибавляется i и результат снова отправляется в переменную sum.

Листинг 3.2 {проАОЛжениё)

if(z < min) min=z;

cout. niin= min end!:



[ 1 ] 2 3 4 ... 37

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика