Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК_ПВМ.doc
Скачиваний:
5094
Добавлен:
21.02.2016
Размер:
2.79 Mб
Скачать

Основные операции в языке Си.

Самой общей операцией является присваивание. В языке Си оператор присваивания записывается V=A;

где V– переменная,A– выражение.

Можно использовать последовательные присваивания, например sum=a=b;

Присваивание производится справа налево, то есть bбудет присвоеноa, которая в свою очередь будет присвоенаsum, так что все три переменные получают одно и тоже значения (а именно; начальное значениеb).

Язык Си поддерживает обычный набор арифметических операций:

* – умножение, / – деление, % – операция деления по модулю, + – сложение, – – вычитание.

Операция деление по модулю используется в целочисленной арифметике. Ее результатом является остаток от деления целых чисел (20 % 3 = 2).

Операции + и - имеют приоритет ниже, чем приоритет операций *, / и %, а у них он, в свою очередь, ниже приоритета унарного минуса.

Рассмотрим пример:

main( )

{ int m1, m2;

m1=m2= -(15+3)*5+(11+9*(8+3)) – 266%16; /*m1=m2=10;

(операция выполняется справа налево) */

printf (“m1 = %d\n”, m1);

printf (“%d\n”, m2/3); }

Операции увеличения и уменьшения: ++ и - -.

Эти операции позволяют добавить 1 или вычесть 1 из любого операнда. Различают две формы указанных операций, постфиксная и префиксная. Они различаются между собой только тем, в какой момент осуществляется увеличение или уменьшение операнда. Операции увеличения и уменьшения могут быть выполнены в середине выражения, причем эти операции могут быть выполнены до и после вычисления выражения. Рассмотрим примеры.

Пример 1: Пусть l=10;

тогда

x=l++; присвоит переменнойxзначение 10,

x=++l; присвоит переменнойxзначение 11.

В двух случаях значение lстанет равным 11.

Пример 2:

sum=a+b++;

sum=a+ ++b;

b++ – постфиксная форма: переменнаяbизменяется после того, как ее значение используется.

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

В первом случае: “сложить aиb, присвоить результатsumи увеличитьbна единицу.

Во втором случае: “увеличить bна единицу, сложитьaиb, и присвоить результатsum”.

Пример 3:

main()

{ int a, b, s=0;

a=b=10; s=a+b++;

printf(“%d %d \n”, s, b);

s=a+ ++b;

printf (“%d %d \n”, s, b); }

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

Преобразование типов

Если в выражении используются операнды различных типов, то они преобразуются к некоторому общему типу. Компилятор использует набор правил для автоматического преобразования типов. Приведем основные правила при преобразовании типов:

1. Если операция выполняется над данными двух различных типов, обе величины приводятся к «высшему» из двух типов. Этот процесс называется «повышением» типа.

2. Последовательность имен типов, упорядоченных от «высшего» типа к «низшему» выглядит так: double,float,long,int,shortиchar. Примечание ключевого словаunsignedповышает ранг соответствующего типа данных.

3. В операторе присваивания конечный результат вычисления выражения в правой части приводится к типу переменной, которой должно быть присвоено это значение. Данный процесс может привести к «повышению» или «понижению» типа (во втором случае величина приводится к типу данных, имеющему более низкий приоритет).

«Повышение» типа обычно происходит гладко, а «понижение» необходимо выполнять с учетом представления данных в памяти.

Пример:

main ( )

{ char ch; int i; float fl;

fl=i=ch=’A’;

printf (“ch=%c, i=%d, fl=%6.2f\n”,ch, i, fl);

ch=ch + f; (65+1=66 =>код символа ''В''=> в ch)

i=fl+2*ch; (66*2+65.00=>132.00+65.00=>197.00=>197)

fl=2.0*ch+c; printf (''сh=%с, i=%d, fl=%62f)n'',ch, i, fl); }

Результат:

ch=A, i=65, fl=65.00

ch=B, i=197, fl=329.10

Еще один вид преобразования типов. Для сохранения точности вычислений при арифметических операциях все величины типа floatпреобразуются в данные типаdouble. Это существенно уменьшает ошибку округления. Конечный результат, преобразуется обратно в число типаfloat, если это диктуется соответствующим оператором описания.

Операции приведения.

Преобразование типов, рассмотренные выше, выполняется автоматически. Существует возможность точно указывать тип данные, к которому необходимо привести некоторую величину. Этот способ называется ''приведением'' типов и используется следующим образцом: перед данной величиной в круглых скобка и имя типа вместе образуют ''операцию приведения''. В общем виде она записывается так:

(тип) выражение

где фактически имя требуемого типа подставляется вместо слова ''тип''

Например: пусть m– типаint

m = 2.7+2.9; - 5

m = (int) 2.7 + (int)2.9; - 4

Библиотечная программа sqrtрассчитана на аргумент типаdouble. Еслиm– целое, то приsqrt((double)m) параметрmсначала преобразуется к типуdouble.

Выражение представляет собой объединение операций и операндов. Некоторые выражения состоят из меньших выражений, которые называются подвыражениями. В языке Си каждое выражение имеет значение.

Примеры: С=5+10=15 25+(С=5+10)=40

    1. = 1

Операции отношения. Операции отношения используются для сравнений двух значений. Приведем список операций отношения, применяемых при программировании на языке Си:

<, <=, = =, >=, >, !=

Если отношение истинно, значение условного выражения равно 1; если отношение ложно значение условного выражения равно 0. Простое условие выражения состоит из знака операции отношения и операндов, расположенных слева и справа от него. Приоритет операции отношения считается меньшим, чем у арифметических операций +, -, *, /, и большим, чем у операции присваивания.

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

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

Оператор присваиванияимеет вид:V=A;

y=5*x+sqrt(7*x+3);

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

Например: выражение вида ((S=13+12)<=30) будет иметь значение истина.

Составные операторы (блоки). Составные операторы представляют собой два или более операторов, объединенных с помощью фигурных скобок; он называется также ''блоком''. Составные операторы используются в условном операторе, операторах цикла.

Основная литература: 1осн[63-77],2осн[23-133]

Дополнительная литература:11доп[84-106 ]

Контрольные вопросы:

  1. Назовите тип данных для работы с беззнаковыми целыми числами?

  2. Какие существуют формы записи операций увеличения и уменьшения и чем они отличаются?

  3. Назовите директиву препроцессора для определения символьных и строковых констант?

  4. Какие спецификации формата являются эквивалентными при их использовании в функции scanf?

  5. В каком случае происходит «повышение» типа?