Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы алгоритмизации и программирования .Язык си.pdf
Скачиваний:
104
Добавлен:
16.03.2016
Размер:
4.49 Mб
Скачать

char ss = ‘У’;

Текстовые символы непосредственно вводятся с клавиатуры, а специальные и управляющие – представляются в исходном тексте парами

символов, например: \\ , \' , \" .

 

 

 

 

 

 

Примеры символьных констант: 'А', '9',

'$',

'\n'.

 

 

 

 

3.4. Строковые константы

 

 

 

 

Строковая константа

представляет

собой

последовательность

 

 

 

 

 

 

Р

символов кода ASCII, заключенную в кавычки (”). Во внутреннем

представлении к строковым

константам добавляется

пустой символ

'\0',

 

 

 

 

 

И

 

который не является цифрой 0, на печать не выводится (в таблице кодов

ASCII имеет код = 0) и является признаком окончания строки.

 

 

 

Кавычки не являются

частью строки, а

 

У

 

ее

служат только для

ограничения. Строка в языке Си представляет собой массив, состоящий из символов. Внутреннее представление константы "1234ABC": '1' '2' '3' '4' 'A' 'B'

'C' '\0' .

 

 

 

 

 

 

 

 

Г

Примеры строковых констант:

 

 

 

 

 

 

 

 

 

 

 

 

"Система", "\n\t Аргумент \n", "Состояние \"WAIT \" " .

Строковые константы еще называют строковыми литералами.

В конец строковой константы

 

 

Б

омпилятор автоматически помещает

нуль-символ.

 

 

 

 

 

 

а

 

 

 

 

 

 

 

 

Длинную строковую константу можно разбить на несколько, используя

 

 

 

 

 

 

к

 

символ переноса – обратный сл ш (\).

Например:

 

Вы поступили и \

е

 

 

 

учитесь на факуль

е е информационных технологий \

 

Белорусск

г сударс венного университета \

 

информат

 

традиоэлектроники

 

 

 

 

го

 

 

 

 

Компилятор Си воспримет такую запись как единое целое, игнорируя

символы о ратного с еша.

 

 

 

 

 

 

 

 

ки

 

 

 

 

 

 

 

л

 

 

 

 

 

 

 

б

ГЛАВА 4. Обзор операций

и

 

 

4.1. Операции, выражения

Выражения используются для вычисления значений (определенного

Б

 

 

 

 

 

 

 

 

 

типа) и состоят из операндов, операций и скобок. Каждый операнд может быть, в свою очередь, выражением или одним из его частных случаев – константой или переменной. Операнды задают данные для вычислений.

Знак операции – это один или более символов, определяющих действие над операндами, т.е. операции задают действия, которые необходимо выполнить. Внутри знака операции пробелы не допускаются.

27

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

Большинство операций выполняются слева направо, например, a+b+c ® ® (a+b)+c. Исключение составляют унарные операции, операции присваивания и условная операция (?:), которые выполняются справа налево.

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

операция доступа к полям структур и объединений приРпомощи идентификаторов «.» – точка;

операция доступа к полям структур и объединенийИпри помощи указателей «–>» – стрелка;

операция [ ] индексации, используемая при Удекларации массива и обращении к его элементам;

операция ( ) обращения к функции. ГБ вприл. 2.

 

а

 

к

4.2. Арифметичес ие операции

ес

Обозначения арифметич

ких опер ций:

+ (сложение); – (вычитание);

/ (д ление, для int операндов – с

Операндами традициотнных арифметических операций (+ – * /) могут быть константы, переменные, обращения к возвращающим значения функциям, э ементы массивов, любые арифметические выражения, указатели (с огра чен ями).

отбрасыванием остатка); * (умножение); % (остаток от деления целочисленных операндов со знаком первого операнда – деление «по модулю»).

Порядок нивыполнения действий в арифметических выражениях

следующий: выражения в круглых скобках; операции *, /, %; операции +, –.

 

л

 

 

Унарные

операции «знак числа» (+, –) обладают самым высоким

пр ор тетомби

определены для

операндов числовых типов (имеющих

ч словой результат), при этом «+» носит только информационный характер,

и

 

 

 

 

«–» меняет знак операнда на противоположный (неадресная операция).

Операции

*, /, % обладают высшим приоритетом над операциями +, ,

Б

 

 

 

 

поэтому при записи сложных выражений нужно использовать общепринятые

математические правила: x + y × z -

a

« x+y*za /(b+с) , т.е. использовать

b + c

 

 

 

 

круглые скобки.

28

4.3. Операция присваивания

Формат операции присваивания:

Операнд_1 = Операнд_2 ;

Операндом_1 (левый операнд) может быть только переменная. Левый операнд операции присваивания получил название L–значение, (Lvalue, Leftvalue) – адресное выражение. Так в Си называют любое выражение, адресующее некоторый участок оперативной памяти, в который можно записать некоторое значение. Переменная – это частный случай адресного выражения.

Операндом_2 (правый операнд) могут быть: константа, переменная или

любое выражение, составленное в соответствии с синтаксисом языкаРСи.

 

 

У

Правый операнд операции присваивания назвали R–значение, (R–value,

Right–value).

Г

И

Присваивание значения в языке Cи, в отличие от традиционной

 

Б

 

 

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

например:

 

 

 

 

 

 

к

int i, j, k;

 

 

 

 

 

 

 

 

 

 

а

float x, y, z;

 

 

 

 

...

 

 

 

 

те

 

i = j = k = 0;

 

 

 

 

k = 0, j = k, i = j;

x = i + (y = 3) – (z = 0);

еz = 0, y = 3, x = i + y z;

 

 

 

 

о

 

 

Примеры недопустимых выражений:

 

 

ие

 

 

2 = x + y;

– присваиван

 

к нстан :

 

– присваиван е функции:

 

getch() = i;

л

 

 

 

 

– присваиван

е результату операции: (i + 1) = 2 + y;

б

 

 

 

 

 

 

4.4. Сокращенная запись операции присваивания

В языке Си используются два вида сокращенной записи операции

присва ван я:

 

 

 

 

 

 

 

и1) вместо записи: v = v # e;

 

 

где # – любая арифметическая операция (операция над битовым

представлениемБ

операндов), рекомендуется использовать запись v #= e;

Например,

 

i = i + 2; ↔

i += 2; (знаки операций – без пробелов);

2) вместо записи: x = x # 1;

где # – символы, обозначающие операцию инкремента (+1), либо декремента

(–1),

x – целочисленная

переменная

(или переменная-указатель),

рекомендуется использовать запись:

 

 

 

##x; – префиксную,

или

x##;

– постфиксную.

 

 

 

 

29

Если эти операции используются в чистом виде, то различий между постфиксной и префиксной формами нет. Если же они используются в выражении, то в префиксной форме (##x) сначала значение x изменится на 1, а затем полученный результат будет использован в выражении; в постфиксной форме (x##) – сначала значение переменной х используется в выражении, а затем изменится на 1. Операции над указателями будут рассмотрены в разд. 9.4.

Пример 1:

 

 

Пример 2:

 

 

Р

int i, j, k;

Смысл записи

 

int n, a, b, c, d;

 

 

Значения

float x, y;

 

 

n = 2; a = b = c = 0;

И

...

 

 

a = ++n;

 

 

 

 

 

 

 

n=3, a=3

х *= y;

x = x*y;

 

a += 2;

 

У

a=5

i += 2;

i = i + 2;

 

b = n++;

 

b=3, n=4

 

 

 

 

x /= y+15;

x = x/(y + 15);

 

b –= 2;

 

Г

 

b=1

--k;

k = k – 1;

 

c = --n;

 

n=3, c=3

 

 

 

 

k--;

k = k – 1;

 

c *= 2;

Б

 

 

c=6

 

 

 

 

 

j = i++;

j = i; i = i + 1;

 

d = n--;

 

 

 

d=3, n=2

j = ++i;

i = i + 1; j = i;

 

d %= 2;

 

 

 

d=1

 

 

 

а

 

 

 

 

 

 

 

 

 

 

 

4.5. Преобразование типов опер ндов рифметических операций

 

е

 

 

 

 

один тип, то и

Если операнды арифметич с их операндов имеют

результат операции будеттьиме такой же тип.

Но, как правило, в операциях участвуют операнды различных типов. В

этом случае они пре бразуются к общему типу в порядке увеличения их

«размера памяти», т.е. бъема памяти, необходимого для хранения их

значений. Поэтому неявные преобразования всегда идут от «меньших»

объектов к «бо ьш м». Схема выполнения преобразований операндов

 

 

о

 

 

 

арифметическ х операц й выглядит следующим образом:

 

 

и

unsigned

long

double

short, char

int

л

 

 

float

double

Стрелки отмечают преобразования даже однотипных операндов перед

б

 

 

 

 

 

выполне ем операции. То есть действуют следующие правила:

Бни– значения типов char и short всегда преобразуются в int;

– если один из операндов имеет тип double, то и другой преобразуется в double;

– если один из операндов long, то другой преобразуется в long. Внимание. Результатом операции 1/3 будет значение 0, чтобы

избежать такого рода ошибок, необходимо явно изменить тип хотя бы одного операнда, т.е. записать, например: 1./3 .

Типы char и int могут свободно смешиваться в арифметических выражениях. Каждая переменная типа char автоматически преобразуется в

30