ВУЗ:
"Мощь" оператора присваивания определяется диапазоном выражений, допустимых в правой части оператора. Как пра-
вило, разрешается использовать любые алгебраические выражения с арифметическими операциями сложения, вычитания,
умножения и деления, обычно обозначаемые символами +, –, * и /, соответственно. Однако языки программирования по-
разному интерпретируют подобные выражения. Например, при вычислении выражения 2*4+6/2 справа налево получим
результат 14, а слева направо – значение 7. Во избежание таких неоднозначностей обычно устанавливаются приоритеты
операций (operator precedence), определяющие порядок выполнения операций в выражениях. Традиционно умножение и де-
ление имеют более высокий приоритет, чем сложение и вычитание. Таким образом, операции умножения и деления должны
выполняться до сложения и вычитания. В соответствии с этим при вычислении приведенного выше выражения получим ре-
зультат 11. В большинстве языков программирования для изменения порядка выполнения операций используются скобки. В
этом случае вычисление выражения 2*(4+6)/2 даст результат 10.
Выражения в операторах присваивания могут содержать не только обычные алгебраические операции. Например, пусть
First и Last – переменные, имеющие тип строки символов. Рассмотрим следующий оператор языка FORTRAN:
Both = First // Last
В результате его выполнения переменной Both в качестве значения будет присвоена строка символов, полученная по-
средством конкатенации строк из переменных First и Last. Таким образом, если переменные First и Last содержат
строки abra и cadabra, соответственно, то переменная Both будет иметь значение abracadabra.
Многие языки программирования позволяют использовать один и тот же символ для обозначения нескольких типов
операций. В таких случаях значение символа определяется типом операндов. Например, символ + обычно означает опера-
цию сложения, если операнды являются числами, но в некоторых случаях, например в языке Java, этот символ означает опе-
рацию конкатенации, если операндами являются строки символов. Такое многозначное использование символов операций
называется перегрузкой (overloading).
Управляющие операторы. Управляющие операторы (control statement) предназначены для изменения порядка выпол-
нения программы. Из всех операторов именно они привлекают к себе наибольшее внимание и порождают большинство спо-
ров. Главным виновником этого является самый простой из всех управляющих операторов – оператор goto. Он позволяет
изменить порядок выполнения программы путем перехода к другому месту программы, обозначенному специально для этой
цели именем или числом. Таким образом, этот оператор является ничем иным, как прямым применением машинной команды
передачи управления в другое место программы. Проблема оператора goto заключается в том, что в языках программиро-
вания высокого уровня он позволяет программисту писать очень запутанные тексты, пронизанные операциями перехода, как
крысиными норами:
goto 40
20 Total = Price + 10
goto 70
40 if Price < 50 then goto 60
goto 20
60 Total = Price + 5
70 ...
Однако эти же действия можно выполнить с помощью буквально двух следующих операторов:
if (Price < 50)
then Total = Price + 5
else Total = Price + 10
Чтобы избежать подобных ситуаций, современные языки программирования включают более продуманный набор
управляющих операторов, позволяющий представлять разветвленные структуры с помощью единственного оператора. На
рис. 5.7 показаны некоторые наиболее распространенные структуры ветвления и соответствующие управляющие операторы,
используемые в различных языках программирования для их представления. Заметим, что первые два типа структур уже
упоминались в главе 4. В нашем псевдокоде они представляются операторами if-then-else и while. Третью структуру,
известную под названием "оператор case", можно рассматривать как обобщение структуры if-then-else. В то время
как структура if-then-else допускает выбор только из двух возможностей, оператор case позволяет сделать выбор од-
ного из многих описанных вариантов.
Страницы
- « первая
- ‹ предыдущая
- …
- 117
- 118
- 119
- 120
- 121
- …
- следующая ›
- последняя »