|
Программирование >> Унарные и бинарные операторы
унарные-бинарные операторы Как и кнопки пульта управления, собственные функции, сделанные опытным программистом, не могут повредить объект, которым они управляют. На примере телевизора видно, что у сложного объекта может быть очень простой интерфейс. Программируя на С++, можно скрыть сложность внутри объекта, оставив снаружи простые и понятные собственные функции. Очередность До сих пор операторы встречались нам поодиночке. Инструкция с=а+Ь вполне однозначна: в ней сумма двух переменных, а и Ь, отправляется в переменную с. Но как гюнять фрагмент программы, показанной в лнсти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!:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |