Наш спонсор. Рекомендуем посетить.

120x90-ver153.gif (7005 bytes)

 

Обмен программами по FTP

Первоклассный софт для всех.

4.2 Дополнительные операции.

Сейчас, на примере следующей программы, рассмотрим некоторые новые операции, аналогов которым нет в Паскале.

Программа, которую мы рассмотрим, вычисляет и выводит на экран квадрат числа 3.

Итак, наиболее замечательной особенностью программы является применение инкрементного оператора ++i. Именно инкрементный оператор можно назвать визитной карточкой языка Си.

Заметьте, что при объявлении возможна инициализация объявленных переменных: p=1;.

С оператором цикла мы уже знакомились. Он включает в себя: инициализацию переменной цикла, проверку истинности условия окончания цикла и изменение переменной.

Инициализация переменной выполняется один раз, когда цикл начинает выполняться. Проверка условия производится перед выполнением каждой итерации. Изменение переменной цикла вычисляется в конце каждого выполнения тела цикла. В данном случае для изменения переменной цикла i использован инкрементный оператор, который является сокращённой формой следующей записи: i=i+1;.

Напомним, что в языке Паскаль существуют процедуры, позволяющие увеличить или уменьшить на единицу значение целого аргумента. Такие процедуры удобно использовать в циклах repeat-until и while-do. В приведённом фрагменте можно увидеть использование данных процедур.

В языке Си существуют специальные операторы для изменения переменных. Оператор p*=BASE; увеличивает значение переменной p в BASE раз и, тем самым, эквивалентен оператору p=p*BASE;. Лаконичность таких операторов повышает наглядность программы. При работе с циклами часто приходится увеличивать или уменьшать некоторые переменные, используемые в теле цикла, например счётчик. Для этих целей в языке Си существует специальная операция увеличения: ++. Она изменяет значение своего операнда на единицу. Сравните:

Существует две возможности использования данной операции: символы ++ находятся слева от переменной – “префиксная форма”; символы стоят справа от переменной – “постфиксная форма”.

В рассмотренном примере разницы между префиксной и постфиксной формой операции увеличения не существует. Обе они увеличивают значения переменных (операндов) на единицу. Постфиксная и префиксная форма операции увеличения отличаются между собой, только тем, в какой момент осуществляется увеличение операнда. Рассмотрим ещё один фрагмент:

iplus=i++ - постфиксная форма: переменная i изменяется после того, как её значение используется.

plusj=++j – префиксная форма: переменная j изменяется перед тем, как её значение используется.

Используя в программе операторы увеличения, Вы делаете её более компактной и изящной. Можно использовать её в условии цикла while, объединив в одном выражении два процесса: проверка (продолжить или нет?); изменение переменной, значение которой проверяется:

Внимание! Изменение постфиксной формы операции на префиксную в условии цикла (Фрагмент 5), должно сопровождаться также, либо изменением условия, либо изменением начальных значений переменных.

Каждой операции увеличения соответствует некоторая операция уменьшения, при этом используются символы --.

--i – префиксная форма операции уменьшения;

i-- - постфиксная форма операции уменьшения.

В соответствии с принятым в языке Си порядком вычислений, операции увеличения и уменьшения имеют очень высокий уровень старшинства. Только круглые скобки обладают более высоким приоритетом. Это значит, что выражение x*y++ означает (x)*(y++), а не (x+y)++ что очень удобно, т.к. последнее выражение не имеет смысла (операции увеличения и уменьшения применяются к переменным).

Однако не следует путать старшинство операций с порядком вычислений.

Результат последней операции будет выглядеть так: val=(2+3)*5=25. Дело в том, что значение переменной n увеличится до 4 только после того, как выражение вычислено. Старшинство операции ++ имеет отношение только к n, кроме того, оно указывает, когда значение переменной n используется при вычислении выражения, но момент изменения значения n определяется семантикой данной операции.

Заметим, что в языке Си имеется также сокращённая форма записи для увеличения переменной на фиксированную величину. Например, вместо выражения i=i+6; можно записать: i+=6;. Знак += определяет аддитивную операцию присваивания, в результате выполнения которой, величина, стоящая справа, прибавляется к значению переменной, расположенной слева.

Дополнительные операции присваивания корректируют значения переменных, в записи каждой из них имеются имя переменной, стоящее слева от знака операции, и выражение справа от него:

На месте правой части может стоять и более сложное выражение:

Дополнительные операции присваивания имеют такой же низкий приоритет, как и операция присваивания, т.е. меньший, чем у сложения и умножения.

Использовать дополнительные операции присваивания совсем не обязательно, однако они более компактны, и при трансляции позволяют получить более эффективный код.

Google
Rambler's Top100 Яндекс цитирования PageRank

Регистрация доменов .RU по минимальной ценеРегистрация в системе обмена ссылками