ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ

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

В языке Си типы связаны с именами (идентификаторами) величин, т. е. с переменными. С переменной ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ в языке Си связывается ячейка памяти. Тип переменной задает размер ячейки, метод кодировки ее содержимого, допустимые преобразования над значением данной переменной. Все переменные должны быть описаны до их использования. Любая переменная должна быть описана только один раз.

Описание состоит из спецификатора типа и последующего за ним перечня ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ переменных. Переменные в перечне делятся запятыми. В конце описания ставится точка с запятой.

Примерыописаний:

char a,b; /* Переменные а и b имеют тип

char */ intх; /* Переменная х - типа int

*/ char sym; /" Описаны переменные sym типа char;

*/ int count.num; /* num и count типа int */

Переменным могут быть присвоены исходные значения снутри их описаний ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ. Если за именованием переменной следует символ равенства и константа, то эта константа служит в качестве инициализатора.

Примеры: char backch = '\0';

int i = 0;

Разглядим главные типы в языке Си.

int - целый ("integer"). Значения этого типа - целые числа из некого ограниченного спектра (обычно от- 32768 до 32767). Спектр определяется размером ячейки для типа и находится ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ в зависимости от определенного компьютера. Не считая того, имеются служебные слова, которые можно использовать с типом int: short int («short integer» - «короткое целое»), unsigned int («unsigned integer» - «целое без знака»), long int («длинное целое»), которые уменьшают либо, напротив, расширяют спектр представления чисел.

char- символьный («character»). Допустимое значение ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ для этоготипа — одинсимвол (не путать с текстом!). Знак записывается в апострофах.

Примеры: 'х"2"?'

В памяти компьютера знак занимает один б. Практически хранится не знак, а число - код знака (от 0 до 255). В особых таблицах шифровки указываются все допустимые знаки и надлежащие им коды.

В языке Си разрешается использовать тип char ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ как числовой, т. е. создавать операции с кодом знака, применяя при всем этом спецификатор целого типа в скобках - (int).

float - вещественный (с плавающей точкой). Значения этого типа - числа, но, в отличии от char и int, не непременно целые.

Примеры:

12.87 -316.12 -3.345е5 12.345e-15

double - вещественные числа двойной точности. Этот тип аналогичен ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ типу float, но имеет существенно больший спектр значений (к примеру, для системы программирования Borland-C от 1.7Е-308 до 1.7Е+308 заместо спектра от 3.4Е-38 до 3.4Е+38 для типа float). Но повышение спектра и точности представления чисел ведет к понижению скорости выполнения программ и неэкономному использованию оперативки компьютера.

Направьте внимание на отсутствие в этом ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ перечне строкового типа. В языке Си нет специального типа, который можно было бы использовать для описания строк. Заместо этого строчки представляются в виде массива частей типа char. Это значит, что знаки в строке будут размещаться в примыкающих ячейках памяти.

Стоит отметить, что последним элементом массива является знак \0. Это «нуль ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ-символ», и в языке Си он употребляется для того, чтоб отмечать конец строчки. Нуль-символ не цифра 0; он не выводится на печать и в таблице кодов ASCII имеет номер 0. Наличие нуль-символа значит, что количество ячеек массива должно быть. по последней мере, на одну больше,чем число знаков, которые ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ нужно располагать в памяти.

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

Программка 84

# include main()

{

char string[31] ;

scanf("%s",string) ;

printf("%s",string);

}

В этом примере описан массив из 31 ячейки памяти, в 30 из которых можно поместить один элемент типа char. Он вводится при вызове функции scanf("%s",string); "&"отсутствует при указании ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ массива знаков.

Указатели. Указатель - некое символическое представление адресаячейкипамяти, отведенной для переменной.

К примеру, &name - указатель на переменную name;

Тут & - операция получения адреса. Фактический адресок - это число, а символическое представление адреса &name является константой типа «указатель».

В языке Си имеются и переменные типа указатель. Точно так же, как значением переменной ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ типа char является знак, а значением переменной типа int - целое число, значением переменной типа указатель служит адресок некой величины.

Если мы дадим указателю имя ptr, то сможем написать таковой оператор:

ptr = &name;/* присваивает адресок name переменной ptr */

Мы говорим в данном случае, что prt «указатель на» name. Различие меж 2-мя формами ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ записи: ptr и &name - в том, что prt - это переменная, в то время как &name - константа. В случае необходимости можно сделать так, чтоб переменная ptr указывала на какой-либо другой объект:

ptr = &bah; /* ptr показывает на bah, а не на name */

Сейчас значением переменной prt является адресок переменной bah. Представим ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ, мы знаем, что в переменной ptr содержится ссылка на переменную bah. Тогда для доступа к значению этой переменной можно пользоваться операцией «косвенной адресации» * :

val = *ptr; /* определение значения, на которое показывает ptr */ Последние два оператора, взятые совместно, эквивалентны последующему:

val = bah;

Итак, когда за знаком & следует имя переменной, результатом операции является ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ адресок обозначенной переменной; &nurse дает адресок переменной nurse; когда за знаком * следует указатель на переменную, результатом операции является величина, помещенная в ячейку памяти с обозначенным адресом.

Пример: nurse = 22;

ptr = &nuse; /* указатель на nurse */

val = *ptr;

Результат- присваивание значения 22 переменной val.

Недостаточно сказать, что некая переменная является ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ указателем. Не считая этого нужно сказать, на переменную какого типа ссылается данный указатель. Причина состоит в том, что переменные различных типов занимают различное число ячеек памяти, в то время как для неких операций, связанных с указателями, требуется знать объем отведенной памяти.

Примеры правильного описания указателей: int *pi; char *pc;

Спецификация типа задает ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ тип переменной, на которую ссылается указатель, а знак * определяет саму переменную как указатель. Описание вида int *pi; гласит, что pi - это указатель и что *pi - величина типа int.

В языке Си предусмотрена возможность определения имен типов данных. Хоть какому типу данных при помощи определения typedef можно присвоить имя и ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ использовать это имя в предстоящем при описании объектов.

Формат: typedef Пример: typedef long LARGE; /* определяется тип large, эквивалентный типу long */

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

Определение typedef не вводит каких-то новых типов, а только добавляет новое имя для ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ уже имеющегося типа. Описанные таким методом переменные владеют точно теми же качествами, что и переменные, описанные очевидно. Переименование типов употребляется для введения осмысленных либо сокращенных имен типов, что увеличивает понятность программ, и для улучшения переносимости программ (имена 1-го типа данных могут различаться на различных компьютерах).

Операции. Язык Си отличается огромным ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ многообразием операций (более 40). Тут мы разглядим только главные из их, табл. 3.3.

Арифметические операции. К ним относят

• сложение(+),

• вычитание (бинарное) (-),

• умножение (*),

• деление (/),

• остаток от деления нацело (%),

• вычитание (унарное) (-) .

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

Как обычно, в ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ выражениях операции умножения, деления и нахождения остатка производятся ранее сложения и вычитания. Для конфигурации порядка действий употребляют скобки.

Программка 85

#include

main()

(

int s;

5 = -3 + 4 * 5 - 6; printf("%d\n",s);

s = -3 + 4%5 - 6; printf("%d\n",s);

s = -3 * 4% - 6/5; printf("%d\n",s);

s= (7 + 6)%5/2; printf("%d\n",s);

}

Итог выполнения программки: 11 1 0 1

Таблица 3.3 Старшинство и ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ порядок выполнения операций

Ценность Операция Заглавие Порядок выполнения
Высший () [] ++ -- (тип) * Круглые скобки Квадратные скобки Повышение Уменьшение Приведение Содержимое Слева вправо Слева вправо Справа влево Справа влево Справа влево Справа влево
& - ! /~ sizeof * Адресок Унарный минус Логическое «НЕ» Инверсия битов Размер объекта Умножение Справа влево Справа влево Справа влево Справа влево Справа влево Слева ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ вправо
\ % Деление Остаток Слева вправо Слева вправо
+ - Сложение Вычитание Слева вправо Слева вправо
» « > Сдвиг на право Сдвиг на лево Больше Слева вправо Слева вправо Слева вправо
>= < <= Больше либо равно Меньше Меньше либо равно Слева вправо Слева вправо Слева вправо
= = != Равно Не равно Слева вправо Слева вправо
& Битовое ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ «И» Слева вправо
~ Битовое исключающее «ИЛИ» Слева вправо
| Битовое «ИЛИ» Слева вправо
&& Логическое «И» Слева вправо
|| = += Логическое «ИЛИ» Операция присвания Справа влево Слева вправо Справа влево
- = *= /= %= Особая форма операции присваивания Справа влево Справа влево Справа влево Справа влево

В программировании нередко встречаются ситуации, когда нужно прирастить либо уменьшить ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ значение некой переменной на 1. Для этого обычно производятся оператор присваивания вида: s= s + 1;

В языке Си для этих действий есть особые операции:

• повышение (++),

• уменьшение (--).

Последующие записи на языке Си являются эквивалентными:

i=i+l и i++; j=j-1 и j--;.

Знаки "++" либо "- -" записывается после имени переменной либо перед ним ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ.

Пример:

s + +; /* s прирастить на единицу

*/ t - -; /* t уменьшить на единицу

*/ + + а; /* а прирастить на единицу

*/ --b; /* b уменьшить на единицу */

Как и обыденные присваивания, повышение и уменьшение можно использовать в выражениях. При всем этом значительно, с какой стороны от имени стоит символ "+ +"либо "- -". Если символ стоит перед переменной (в данном случае ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ молвят о префиксной форме операции), то поначалу производится повышение (уменьшение) значения переменной, а только потом приобретенный итог употребляется в выражении. Если же символ стоит после переменной (постфиксная форма операции), то в выражении употребляется старенькое значение переменной, которое потом меняется.

Пример:

inti,j,s;

i = j = 2; /* i и j получают значение 2 */

s = (i ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ++) + (++J);

После выполнения этих действий переменные имеют такие значения:

i=3;j=3;s=5.

Операции роста ++ и уменьшения - - можно использовать топько к переменным, выражения типа s=(i+j)++ являются нелегальными. Не считая того, не рекомендуется:

1) использовать операции роста либо уменьшения к переменной, присутствующей в более чем одном аргументе ТИПЫ ДАННЫХ И ОПЕРАЦИИ В ЯЗЫКЕ СИ. ВЫРАЖЕНИЯ функции,

2) использовать операции увеличенияили уменьшения к переменной, которая заходит в выражение более 1-го раза.


tihij-amerikanec-grin-grem-izlozhenie.html
tihij-don-chast-pervaya-proizvedenie-sokrasheno-v-15-raz-stranica-4.html
tihij-don.html