Описание Языка СИ


Содержание
Ведение
1.ОПИСАНИЕ ЯЗЫКА СИ
1.1.ЭЛЕМЕНТЫЯЗЫКА СИ
1.1.1. Используемые символы
1.1.2. Константы
1.1.3. Идентификатор
1.1.4. Ключевые слова
1.1.5. Использование комментариев в тексте программы
1.2. ТИПЫ ДАННЫХ И ИХ ОБ ЯВЛЕНИЕ
1.2.1 Категории типов данных
1.2.2. Целый тип данных
1.2.3. Данные плавающего типа
1.2.4. Указатели
1.2.5. Переменные перечислимого типа
1.2.6. Массивы
1.2.7. Структуры
1.2.8. Объединения (смеси)
1.2.9. Поля битов
1.2.10. Переменные с изменяемой структурой
Заключение
Определение объектов и типов
Список литературы
1.Описание Языка СИ
1.1. Элементы Языка СИ
1.1.1. Используемые символы
Множество символов используемых в языке СИ можно разделить на пять групп.
1. Символы, используемые для образования ключевых слов и идентификаторов
(табл.1). В эту группу входят прописные и строчные буквы английского
алфавита, а также символ подчеркивания. Следует отметить, что одинаковые
прописные и строчные буквы считаются различными символами, так как имеют
различные коды.
Таблица 1
Прописные буквы латинского A B C D E F G H I J K L M N O
алфавита P Q R S T U V W X Y Z
Строчные буквы латинского a b c d e f g h i j k l m n o
алфавита p q r s t u v w x y z
Символ подчеркивания _
2. Группа прописных и строчных букв русского алфавита и арабские цифры
(табл.2).
Таблица 2
Прописные буквы А Б В Г Д Е Ж З И К Л М Н О П Р С
русского алфавита Т У Ф Х Ц Ч Ш Щ Ы Ь Э Ю Я
Строчные буквы русскогоа б в г д е ж з и к л м н о п р с
алфавита т у ф х ц ч ш щ ъ ы ь э ю я
Арабские цифры 0 1 2 3 4 5 6 7 8 9
3. Знаки нумерации и специальные символы (табл. 3). Эти символы
используются с одной стороны для организации процесса вычислений, а с
другой - для передачи компилятору определенного набора инструкций.
Таблица 2
Символ Наименование Символ Наименование
, запятая ) круглая скобка
правая
. точка ( круглая скобка левая
; точка с запятой } фигурная скобка
правая
: двоеточие { фигурная скобка
левая
? вопросительный знак меньше
' апостроф больше
! восклицательный знак[ квадратная скобка
вертикальная черта ] квадратная скобка
дробная черта # номер
\ обратная черта % процент
~ тильда & амперсанд
* звездочка ^ логическое не
+ плюс = равно
- мину " кавычки
4. Управляющие и разделительные символы. К той группе символов относятся:
пробел, символы табуляции, перевода строки, возврата каретки, новая
страница и новая строка. Эти символы отделяют друг от друга объекты,
определяемые пользователем, к которым относятся константы и идентификаторы.
Последовательность разделительных символов рассматривается компилятором как
один символ (последовательность пробелов).
5. Кроме выделенных групп символов в языке СИ широко используются так
называемые, управляющие последовательности, т.е. специальные символьные
комбинации, используемые в функциях ввода и вывода информации. Управляющая
последовательность строится на основе использования обратной дробной черты
(\) (обязательный первый символ) и комбинацией латинских букв и цифр
(табл.4).
Таблица 4
Управляющая Наименование Шеснадцатеричная
последовательность замена
\a Звонок 007
\b Возврат на шаг 008
\t Горизонтальная табуляция 009
\n Переход на новую строку 00A
\v Вертикальная табуляция 00B
\r Возврат каретки 00C
\f Перевод формата 00D
\" Кавычки 022
\' Апостроф 027
\0 Ноль-символ 000
\\ Обратная дробная черта 05C
\ddd Символ набора кодов ПЭВМ в
восьмеричном представлении
\xddd Символ набора кодов ПЭВМ в
шестнадцатеричном
представлении
Последовательности вида \ddd и \xddd (здесь d обозначает цифру) позволяет
представить символ из набора кодов ПЭВМ как последовательность восьмеричных
или шестнадцатеричных цифр соответственно. Например символ возврата каретки
может быть представлен различными способами:
\r - общая управляющая последовательность,
\015 - восьмеричная управляющая последовательность,
\x00D - шестнадцатеричная управляющая последовательность.
Следует отметить, что в строковых константах всегда обязательно задавать
все три цифры в управляющей последовательности. Например отдельную
управляющую последовательность \n (переход на новую строку) можно
представить как \010 или \xA, но в строковых константах необходимо задавать
все три цифры, в противном случае символ или символы следующие за
управляющей последовательностью будут рассматриваться как ее недостающая
часть. Например:
"ABCDE\x009FGH" данная строковая команда будет напечатана с использованием
определенных функций языка СИ, как два слова ABCDE FGH, разделенные 8-ю
пробелами, в этом случае если указать неполную управляющую
строку"ABCDE\x09FGH",то на печати появится ABCDE==GH, так как компилятор
воспримет последовательность \x09F как символ "=+=".
Отметим тот факт, что, если обратная дробная черта предшествует символу не
являющемуся управляющей последовательностью (т.е. не включенному в табл.4)
и не являющемуся цифрой, то эта черта игнорируется, а сам символ
представляется как литеральный. Например:
символ \h представляется символом h в строковой или символьной константе.
Кроме определения управляющей последовательности, символ обратной дробной
черты (\) используется также как символ продолжения. Если за (\) следует
(\n), то оба символа игнорируются, а следующая строка является продолжением
предыдущей. Это свойство может быть использовано для записи длинных строк.
1.1.2. Константы
Константами называются перечисление величин в программе. В языке СИ
разделяют четыре типа констант: целые константы, константы с плавающей
запятой, символьные константы и строковыми литералы.
Целая константа: это десятичное, восьмеричное или шестнадцатеричное число,
которое представляет целую величину в одной из следующих форм: десятичной,
восьмеричной или шестнадцатеричной.
Десятичная константа состоит из одной или нескольких десятичных цифр,
причем первая цифра не должна быть нулем (в противном случае число будет
воспринято как восьмеричное).
Восьмеричная константа состоит из обязательного нуля и одной или нескольких
восьмеричных цифр (среди цифр должны отсутствовать восьмерка и девятка, так
как эти цифры не входят в восьмеричную систему счисления).
Шестнадцатеричная константа начинается с обязательной последовательности 0х
или 0Х и содержит одну или несколько шестнадцатеричных цифр (цифры
представляющие собой набор цифр шеснадцатеричной системы счисления:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
Примеры целых констант:
Десятичная Восьмеричная Шестнадцатеричная
константа константа константа
16 020 0x10
127 0117 0x2B
240 0360 0XF0
Если требуется сформировать отрицательную целую константу, то используют
знак "-" перед записью константы (который будет называться унарным
минусом). Например: -0x2A, -088, -16 .
Каждой целой константе присваивается тип, определяющий преобразования,
которые должны быть выполнены, если константа используется в выражениях.
Тип константы определяется следующим образом:
- десятичные константы рассматриваются как величины со знаком, и им
присваивается тип int (целая) или long (длинная целая) в соответствии со
значением константы. Если константа меньше 32768, то ей присваивается тип
int в противном случае long.
- восьмеричным и шестнадцатеричным константам присваивается тип int,
unsigned int (беззнаковая целая), long или unsigned long в зависимости от
значения константы согласно табл 5.
Таблица 5
Диапазон шестнадцатеричных Диапазон восьмеричных Тип
констант констант
0x0 - 0x7FFF 0 - 077777 int
0X8000 - 0XFFFF 0100000 - 0177777 unsigned
int
0X10000 - 0X7FFFFFFF 0200000 - 017777777777 long
0X80000000 - 0XFFFFFFFF 020000000000 - 037777777777unsigned
long
Для того чтобы любую целую константу определить типом long, достаточно в
конце константы поставить букву "l" или "L". Пример:
5l, 6l, 128L, 0105L, OX2A11L.
Константа с плавающей точкой - десятичное число, представленное в виде
действительной величины с десятичной точкой или экспонентой. Формат имеет
вид:
[ цифры ].[ цифры ] [ Еe [+-] цифры ] .
Число с плавающей точкой состоит из целой и дробные части и (или)
экспоненты. Константы с плавающей точкой представляют положительные
величины удвоенной точности (имеют тип double). Для определения
отрицательной величины необходимо сформировать константное выражение,
состоящее из знака минуса и положительной константы.
Примеры: 115.75, 1.5Е-2, -0.025, .075, -0.85Е2
Символьная константа - представляется символом заключенном в апострофы.
Управляющая последовательность рассматривается как одиночный символ,
допустимо ее использовать в символьных константах. Значением символьной
константы является числовой код символа. Примеры:
' '- пробел ,
'Q'- буква Q ,
'\n' - символ новой строки ,
'\\' - обратная дробная черта ,
'\v' - вертикальная табуляция .
Символьные константы имеют тип int и при преобразовании типов дополняются
знаком.
Строковая константа (литерал) - последовательность символов (включая
строковые и прописные буквы русского и латинского а также цифры)
заключенные в кавычки (") . Например: "Школа N 35", "город Тамбов", "YZPT
КОД".
Отметим, что все управляющие символы, кавычка ("), обратная дробная черта
(\) и символ новой строки в строковом литерале и в символьной константе
представляются соответствующими управляющими последовательностями. Каждая
управляющая последовательность представляется как один символ. Например,
при печати литерала "Школа \n N 35" его часть "Школа" будет напечатана на
одной строке, а вторая часть "N 35" на следующей строке.
Символы строкового литерала сохраняются в области оперативной памяти. В
конец каждого строкового литерала компилятором добавляется нулевой символ,
представляемый управляющей последовательностью \0.
Строковый литерал имеет тип char[] . Это означает, что строка
рассматривается как массив символов. Отметим важную особенность, число
элементов массива равно числу символов в строке плюс 1, так как нулевой
символ (символ конца строки) также является элементом массива. Все
строковые литералы рассматриваются компилятором как различные объекты.
Строковые литералы могут располагаться на нескольких строках. Такие
литералы формируются на основе использования обратной дробной черты и
клавиши ввод. Обратная черта с символом новой строки игнорируется
компилятором, что приводит к тому, что следующая строка является
продолжением предыдущей. Например:
"строка неопределенной длины" полностью идентична литералу "строка
неопределенной длинны" . Для сцепления строковых литералов можно
использовать символ (или символы) пробела. Если в программе встречаются два
или более строковых литерала, разделенные только пробелами, то они будут
рассматриваться как одна символьная строка. Этот принцип можно использовать
для формирования строковых литералов занимающих более одной строки.
1.1.3. Идентификатор
Идентификатором называется последовательность цифр и букв, а также
специальных символов, при условии, что первой стоит буква или специальный
символ. Для образования идентификаторов могут быть использованы строчные
или прописные буквы латинского алфавита. В качестве специального символа
может использоваться символ подчеркивание (_). Два идентификатора для
образования которых используются совпадающие строчные и прописные буквы,
считаются различными. Например: abc, ABC, A128B, a128b .
Важной особенностью является то, что компилятор допускает любое количество
символов в идентификаторе, хотя значимыми являются первые 31 символ.
Идентификатор создается на этапе объявления переменной, функции, структуры
и т.п. после этого его можно использовать в последующих операторах
разрабатываемой программы. Следует отметить важные особенности при выборе
идентификатора.
Во первых, идентификатор не должен совпадать с ключевыми словами, с
зарезервированными словами и именами функций библиотеки компилятора языка
СИ.
Во вторых, следует обратить особое внимание на использование символа (_)
подчеркивание в качестве первого символа идентификатора, поскольку
идентификаторы построенные таким образом, что, с одной стороны, могут
совпадать с именами системных функций и (или) переменных, а с другой
стороны, при использовании таких идентификаторов программы могут оказаться
непереносимыми, т.е. их нельзя использовать на компьютерах других типов.
В третьих, на идентификаторы используемые для определения внешних
переменных, должны быть наложены ограничения, формируемые используемым
редактором связей (отметим, что использование различных версий редактора
связей, или различных редакторов накладывает различные требования на имена
внешних переменных). 1.2. Типы Данных И Их Объявление
Важное отличие языка СИ от других языков (PL1, FORTRAN, и др.) является
отсутствие принципа умолчания, что приводит к необходимости объявления всех
переменных используемых в программе явно вместе с указанием соответствующих
им типов.
Объявления переменной имеет следующий формат: [спецафикатор-класа-
памяти] спецификатор-типа описатель [=инициатор] [,описатель [=
инициатор] ]...
Описатель - идентификатор простой переменной либо более сложная конструкция
с квадратными скобками, круглыми скобками или звездочкой (набором
звездочек).
Спецификатор типа - одно или несколько ключевых слов, определяющие тип
объявляемой переменной. В языке СИ имеется стандартный набор типов данных,
используя который можно сконструировать новые (уникальные) типы данных.
Инициатор - задает начальное значение или список начальных значений,
которые (которое) присваивается переменной при объявлении.
1.2.1 Категории типов данных
Ключевые слова для определения основных типов данных
Целые типы : Плавающие типы:
char float
int double
short long double
long signed unsigned
Переменная любого типа может быть объявлена как немодифицируемая. Это
достигается добавлением ключевого слова const к спецификатору-типа. Объекты
с типом const представляют собой данные используемые только для чтения,
т.е. этой переменной не может быть присвоено новое значение. Отметим, что
если после слова const отсутствует спецификатор-типа, то подразумевается
спецификатор типа int. Если ключевое слово const стоит перед объявлением
составных типов (массив, структура, смесь, перечисление), то это приводит к
тому, что каждый элемент также должен являться немодифицируемым, т.е.
значение ему может быть присвоено только один раз.
Примеры:
const double A=2.128E-2;
const B=286; (подразумевается const int B=286)
Примеры объявления составных данных будут рассмотрены ниже.
1.2.2. Целый тип данных
Для определения данных целого типа используются различные ключевые слова,
которые определяют диапазон значений и размер области памяти, выделяемой
под переменные (табл. 6).
Таблица 6
Тип Размер памяти в байтах Диапазон значений
char 1 от -128 до 127
int Для IBM XT,AT,SX,DX 2
short 2 от -32768 до 32767
long 4 от -2 147 483 648 до 2 147 483
647
unsigned shar1 oт 0 до 255
unsigned int Для IBM XT,AT,SX,DX 2
unsigned 2 от 0 до 65535
short
unsigned long4 от 0 до 4 294 967 295
Отметим, что ключевые слова signed и unsigned необязательны. Они указывают,
как интерпретируется нулевой бит объявляемой переменной, т.е., если указано
ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в
противном случае нулевой бит интерпретируется как знаковый. В случае
отсутствия ключевого слова unsigned целая переменная считается знаковой. В
том случае, если спецификатор типа состоит из ключевого типа signed или
unsigned и далее следует идентификатор переменной, то она будет
рассматриваться как переменная типа int.
Например:
unsigned int n;
unsigned int b;
int c; (подразумевается signed int c );
unsigned d; (подразумевается unsigned int d );
signed f; (подразумевается signed int f ).
Отметим, что модификатор-типа char используется для представления символа
(из массива представление символов) или для объявления строковых литералов.
Значением объекта типа char является код (размером 1 байт), соответствующий
представляемому символу. Для представления символов русского алфавита,
модификатор типа идентификатора данных имеет вид unsigned char, так как
коды русских букв превышают величину 127.
Следует сделать следующее замечание: в языке СИ не определено представление
в памяти и диапазон значений для идентификаторов с модификаторами-типа int
и unsigned int. Размер памяти для переменной с модификатором типа signed
int определяется длиной машинного слова, которое имеет различный размер на
разных машинах. Так, на 16-ти разрядных машинах размер слова равен 2-м
байтам, на 32-х разрядных машинах соответственно 4-м байтам, т.е. тип int
эквивалентен типам short int, или long int в зависимости от архитектуры
используемой ПЭВМ. Таким образом, одна и та же программа может правильно
работать на одном компьютере и неправильно на другом. Для определения длины
памяти занимаемой переменной можно использовать операцию sizeof языка СИ,
возвращающую значение длины указанного модификатора-типа.
Например:
a = sizeof(int);
b = sizeof(long int);
c = sizeof(unsigned long);
d = sizeof(short);
Отметим также, что восьмеричные и шестнадцатеричные константы также могут
иметь модификатор unsigned. Это достигается указанием префикса u или U
после константы, константа без этого префикса считается знаковой.
Например:
0xA8C (int signed );
01786l (long signed );
0xF7u (int unsigned );
1.2.3. Данные плавающего типа
Для переменных, представляющих число с плавающей точкой используются
следующие модификаторы-типа : float, double, long double (в некоторых
реализациях языка long double СИ отсутствует).
Величина с модификатором-типа float занимает 4 байта. Из них 1 байт
отводится для знака, 8 бит для избыточной экспоненты и 23 бита для
мантиссы. Отметим, что старший бит мантиссы всегда равен 1, поэтому он не
заполняется, в связи с этим диапазон значений переменной с плавающей точкой
приблизительно равен от 3.14E-38 до 3.14E+38.
Величина типа double занимает 8 байт в памяти. Ее формат аналогичен формату
float. Биты памяти распределяются следующим образом: 1 бит для знака, 11
бит для экспоненты и 52 бита для мантиссы. С ... продолжение
Ведение
1.ОПИСАНИЕ ЯЗЫКА СИ
1.1.ЭЛЕМЕНТЫЯЗЫКА СИ
1.1.1. Используемые символы
1.1.2. Константы
1.1.3. Идентификатор
1.1.4. Ключевые слова
1.1.5. Использование комментариев в тексте программы
1.2. ТИПЫ ДАННЫХ И ИХ ОБ ЯВЛЕНИЕ
1.2.1 Категории типов данных
1.2.2. Целый тип данных
1.2.3. Данные плавающего типа
1.2.4. Указатели
1.2.5. Переменные перечислимого типа
1.2.6. Массивы
1.2.7. Структуры
1.2.8. Объединения (смеси)
1.2.9. Поля битов
1.2.10. Переменные с изменяемой структурой
Заключение
Определение объектов и типов
Список литературы
1.Описание Языка СИ
1.1. Элементы Языка СИ
1.1.1. Используемые символы
Множество символов используемых в языке СИ можно разделить на пять групп.
1. Символы, используемые для образования ключевых слов и идентификаторов
(табл.1). В эту группу входят прописные и строчные буквы английского
алфавита, а также символ подчеркивания. Следует отметить, что одинаковые
прописные и строчные буквы считаются различными символами, так как имеют
различные коды.
Таблица 1
Прописные буквы латинского A B C D E F G H I J K L M N O
алфавита P Q R S T U V W X Y Z
Строчные буквы латинского a b c d e f g h i j k l m n o
алфавита p q r s t u v w x y z
Символ подчеркивания _
2. Группа прописных и строчных букв русского алфавита и арабские цифры
(табл.2).
Таблица 2
Прописные буквы А Б В Г Д Е Ж З И К Л М Н О П Р С
русского алфавита Т У Ф Х Ц Ч Ш Щ Ы Ь Э Ю Я
Строчные буквы русскогоа б в г д е ж з и к л м н о п р с
алфавита т у ф х ц ч ш щ ъ ы ь э ю я
Арабские цифры 0 1 2 3 4 5 6 7 8 9
3. Знаки нумерации и специальные символы (табл. 3). Эти символы
используются с одной стороны для организации процесса вычислений, а с
другой - для передачи компилятору определенного набора инструкций.
Таблица 2
Символ Наименование Символ Наименование
, запятая ) круглая скобка
правая
. точка ( круглая скобка левая
; точка с запятой } фигурная скобка
правая
: двоеточие { фигурная скобка
левая
? вопросительный знак меньше
' апостроф больше
! восклицательный знак[ квадратная скобка
вертикальная черта ] квадратная скобка
дробная черта # номер
\ обратная черта % процент
~ тильда & амперсанд
* звездочка ^ логическое не
+ плюс = равно
- мину " кавычки
4. Управляющие и разделительные символы. К той группе символов относятся:
пробел, символы табуляции, перевода строки, возврата каретки, новая
страница и новая строка. Эти символы отделяют друг от друга объекты,
определяемые пользователем, к которым относятся константы и идентификаторы.
Последовательность разделительных символов рассматривается компилятором как
один символ (последовательность пробелов).
5. Кроме выделенных групп символов в языке СИ широко используются так
называемые, управляющие последовательности, т.е. специальные символьные
комбинации, используемые в функциях ввода и вывода информации. Управляющая
последовательность строится на основе использования обратной дробной черты
(\) (обязательный первый символ) и комбинацией латинских букв и цифр
(табл.4).
Таблица 4
Управляющая Наименование Шеснадцатеричная
последовательность замена
\a Звонок 007
\b Возврат на шаг 008
\t Горизонтальная табуляция 009
\n Переход на новую строку 00A
\v Вертикальная табуляция 00B
\r Возврат каретки 00C
\f Перевод формата 00D
\" Кавычки 022
\' Апостроф 027
\0 Ноль-символ 000
\\ Обратная дробная черта 05C
\ddd Символ набора кодов ПЭВМ в
восьмеричном представлении
\xddd Символ набора кодов ПЭВМ в
шестнадцатеричном
представлении
Последовательности вида \ddd и \xddd (здесь d обозначает цифру) позволяет
представить символ из набора кодов ПЭВМ как последовательность восьмеричных
или шестнадцатеричных цифр соответственно. Например символ возврата каретки
может быть представлен различными способами:
\r - общая управляющая последовательность,
\015 - восьмеричная управляющая последовательность,
\x00D - шестнадцатеричная управляющая последовательность.
Следует отметить, что в строковых константах всегда обязательно задавать
все три цифры в управляющей последовательности. Например отдельную
управляющую последовательность \n (переход на новую строку) можно
представить как \010 или \xA, но в строковых константах необходимо задавать
все три цифры, в противном случае символ или символы следующие за
управляющей последовательностью будут рассматриваться как ее недостающая
часть. Например:
"ABCDE\x009FGH" данная строковая команда будет напечатана с использованием
определенных функций языка СИ, как два слова ABCDE FGH, разделенные 8-ю
пробелами, в этом случае если указать неполную управляющую
строку"ABCDE\x09FGH",то на печати появится ABCDE==GH, так как компилятор
воспримет последовательность \x09F как символ "=+=".
Отметим тот факт, что, если обратная дробная черта предшествует символу не
являющемуся управляющей последовательностью (т.е. не включенному в табл.4)
и не являющемуся цифрой, то эта черта игнорируется, а сам символ
представляется как литеральный. Например:
символ \h представляется символом h в строковой или символьной константе.
Кроме определения управляющей последовательности, символ обратной дробной
черты (\) используется также как символ продолжения. Если за (\) следует
(\n), то оба символа игнорируются, а следующая строка является продолжением
предыдущей. Это свойство может быть использовано для записи длинных строк.
1.1.2. Константы
Константами называются перечисление величин в программе. В языке СИ
разделяют четыре типа констант: целые константы, константы с плавающей
запятой, символьные константы и строковыми литералы.
Целая константа: это десятичное, восьмеричное или шестнадцатеричное число,
которое представляет целую величину в одной из следующих форм: десятичной,
восьмеричной или шестнадцатеричной.
Десятичная константа состоит из одной или нескольких десятичных цифр,
причем первая цифра не должна быть нулем (в противном случае число будет
воспринято как восьмеричное).
Восьмеричная константа состоит из обязательного нуля и одной или нескольких
восьмеричных цифр (среди цифр должны отсутствовать восьмерка и девятка, так
как эти цифры не входят в восьмеричную систему счисления).
Шестнадцатеричная константа начинается с обязательной последовательности 0х
или 0Х и содержит одну или несколько шестнадцатеричных цифр (цифры
представляющие собой набор цифр шеснадцатеричной системы счисления:
0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F)
Примеры целых констант:
Десятичная Восьмеричная Шестнадцатеричная
константа константа константа
16 020 0x10
127 0117 0x2B
240 0360 0XF0
Если требуется сформировать отрицательную целую константу, то используют
знак "-" перед записью константы (который будет называться унарным
минусом). Например: -0x2A, -088, -16 .
Каждой целой константе присваивается тип, определяющий преобразования,
которые должны быть выполнены, если константа используется в выражениях.
Тип константы определяется следующим образом:
- десятичные константы рассматриваются как величины со знаком, и им
присваивается тип int (целая) или long (длинная целая) в соответствии со
значением константы. Если константа меньше 32768, то ей присваивается тип
int в противном случае long.
- восьмеричным и шестнадцатеричным константам присваивается тип int,
unsigned int (беззнаковая целая), long или unsigned long в зависимости от
значения константы согласно табл 5.
Таблица 5
Диапазон шестнадцатеричных Диапазон восьмеричных Тип
констант констант
0x0 - 0x7FFF 0 - 077777 int
0X8000 - 0XFFFF 0100000 - 0177777 unsigned
int
0X10000 - 0X7FFFFFFF 0200000 - 017777777777 long
0X80000000 - 0XFFFFFFFF 020000000000 - 037777777777unsigned
long
Для того чтобы любую целую константу определить типом long, достаточно в
конце константы поставить букву "l" или "L". Пример:
5l, 6l, 128L, 0105L, OX2A11L.
Константа с плавающей точкой - десятичное число, представленное в виде
действительной величины с десятичной точкой или экспонентой. Формат имеет
вид:
[ цифры ].[ цифры ] [ Еe [+-] цифры ] .
Число с плавающей точкой состоит из целой и дробные части и (или)
экспоненты. Константы с плавающей точкой представляют положительные
величины удвоенной точности (имеют тип double). Для определения
отрицательной величины необходимо сформировать константное выражение,
состоящее из знака минуса и положительной константы.
Примеры: 115.75, 1.5Е-2, -0.025, .075, -0.85Е2
Символьная константа - представляется символом заключенном в апострофы.
Управляющая последовательность рассматривается как одиночный символ,
допустимо ее использовать в символьных константах. Значением символьной
константы является числовой код символа. Примеры:
' '- пробел ,
'Q'- буква Q ,
'\n' - символ новой строки ,
'\\' - обратная дробная черта ,
'\v' - вертикальная табуляция .
Символьные константы имеют тип int и при преобразовании типов дополняются
знаком.
Строковая константа (литерал) - последовательность символов (включая
строковые и прописные буквы русского и латинского а также цифры)
заключенные в кавычки (") . Например: "Школа N 35", "город Тамбов", "YZPT
КОД".
Отметим, что все управляющие символы, кавычка ("), обратная дробная черта
(\) и символ новой строки в строковом литерале и в символьной константе
представляются соответствующими управляющими последовательностями. Каждая
управляющая последовательность представляется как один символ. Например,
при печати литерала "Школа \n N 35" его часть "Школа" будет напечатана на
одной строке, а вторая часть "N 35" на следующей строке.
Символы строкового литерала сохраняются в области оперативной памяти. В
конец каждого строкового литерала компилятором добавляется нулевой символ,
представляемый управляющей последовательностью \0.
Строковый литерал имеет тип char[] . Это означает, что строка
рассматривается как массив символов. Отметим важную особенность, число
элементов массива равно числу символов в строке плюс 1, так как нулевой
символ (символ конца строки) также является элементом массива. Все
строковые литералы рассматриваются компилятором как различные объекты.
Строковые литералы могут располагаться на нескольких строках. Такие
литералы формируются на основе использования обратной дробной черты и
клавиши ввод. Обратная черта с символом новой строки игнорируется
компилятором, что приводит к тому, что следующая строка является
продолжением предыдущей. Например:
"строка неопределенной длины" полностью идентична литералу "строка
неопределенной длинны" . Для сцепления строковых литералов можно
использовать символ (или символы) пробела. Если в программе встречаются два
или более строковых литерала, разделенные только пробелами, то они будут
рассматриваться как одна символьная строка. Этот принцип можно использовать
для формирования строковых литералов занимающих более одной строки.
1.1.3. Идентификатор
Идентификатором называется последовательность цифр и букв, а также
специальных символов, при условии, что первой стоит буква или специальный
символ. Для образования идентификаторов могут быть использованы строчные
или прописные буквы латинского алфавита. В качестве специального символа
может использоваться символ подчеркивание (_). Два идентификатора для
образования которых используются совпадающие строчные и прописные буквы,
считаются различными. Например: abc, ABC, A128B, a128b .
Важной особенностью является то, что компилятор допускает любое количество
символов в идентификаторе, хотя значимыми являются первые 31 символ.
Идентификатор создается на этапе объявления переменной, функции, структуры
и т.п. после этого его можно использовать в последующих операторах
разрабатываемой программы. Следует отметить важные особенности при выборе
идентификатора.
Во первых, идентификатор не должен совпадать с ключевыми словами, с
зарезервированными словами и именами функций библиотеки компилятора языка
СИ.
Во вторых, следует обратить особое внимание на использование символа (_)
подчеркивание в качестве первого символа идентификатора, поскольку
идентификаторы построенные таким образом, что, с одной стороны, могут
совпадать с именами системных функций и (или) переменных, а с другой
стороны, при использовании таких идентификаторов программы могут оказаться
непереносимыми, т.е. их нельзя использовать на компьютерах других типов.
В третьих, на идентификаторы используемые для определения внешних
переменных, должны быть наложены ограничения, формируемые используемым
редактором связей (отметим, что использование различных версий редактора
связей, или различных редакторов накладывает различные требования на имена
внешних переменных). 1.2. Типы Данных И Их Объявление
Важное отличие языка СИ от других языков (PL1, FORTRAN, и др.) является
отсутствие принципа умолчания, что приводит к необходимости объявления всех
переменных используемых в программе явно вместе с указанием соответствующих
им типов.
Объявления переменной имеет следующий формат: [спецафикатор-класа-
памяти] спецификатор-типа описатель [=инициатор] [,описатель [=
инициатор] ]...
Описатель - идентификатор простой переменной либо более сложная конструкция
с квадратными скобками, круглыми скобками или звездочкой (набором
звездочек).
Спецификатор типа - одно или несколько ключевых слов, определяющие тип
объявляемой переменной. В языке СИ имеется стандартный набор типов данных,
используя который можно сконструировать новые (уникальные) типы данных.
Инициатор - задает начальное значение или список начальных значений,
которые (которое) присваивается переменной при объявлении.
1.2.1 Категории типов данных
Ключевые слова для определения основных типов данных
Целые типы : Плавающие типы:
char float
int double
short long double
long signed unsigned
Переменная любого типа может быть объявлена как немодифицируемая. Это
достигается добавлением ключевого слова const к спецификатору-типа. Объекты
с типом const представляют собой данные используемые только для чтения,
т.е. этой переменной не может быть присвоено новое значение. Отметим, что
если после слова const отсутствует спецификатор-типа, то подразумевается
спецификатор типа int. Если ключевое слово const стоит перед объявлением
составных типов (массив, структура, смесь, перечисление), то это приводит к
тому, что каждый элемент также должен являться немодифицируемым, т.е.
значение ему может быть присвоено только один раз.
Примеры:
const double A=2.128E-2;
const B=286; (подразумевается const int B=286)
Примеры объявления составных данных будут рассмотрены ниже.
1.2.2. Целый тип данных
Для определения данных целого типа используются различные ключевые слова,
которые определяют диапазон значений и размер области памяти, выделяемой
под переменные (табл. 6).
Таблица 6
Тип Размер памяти в байтах Диапазон значений
char 1 от -128 до 127
int Для IBM XT,AT,SX,DX 2
short 2 от -32768 до 32767
long 4 от -2 147 483 648 до 2 147 483
647
unsigned shar1 oт 0 до 255
unsigned int Для IBM XT,AT,SX,DX 2
unsigned 2 от 0 до 65535
short
unsigned long4 от 0 до 4 294 967 295
Отметим, что ключевые слова signed и unsigned необязательны. Они указывают,
как интерпретируется нулевой бит объявляемой переменной, т.е., если указано
ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в
противном случае нулевой бит интерпретируется как знаковый. В случае
отсутствия ключевого слова unsigned целая переменная считается знаковой. В
том случае, если спецификатор типа состоит из ключевого типа signed или
unsigned и далее следует идентификатор переменной, то она будет
рассматриваться как переменная типа int.
Например:
unsigned int n;
unsigned int b;
int c; (подразумевается signed int c );
unsigned d; (подразумевается unsigned int d );
signed f; (подразумевается signed int f ).
Отметим, что модификатор-типа char используется для представления символа
(из массива представление символов) или для объявления строковых литералов.
Значением объекта типа char является код (размером 1 байт), соответствующий
представляемому символу. Для представления символов русского алфавита,
модификатор типа идентификатора данных имеет вид unsigned char, так как
коды русских букв превышают величину 127.
Следует сделать следующее замечание: в языке СИ не определено представление
в памяти и диапазон значений для идентификаторов с модификаторами-типа int
и unsigned int. Размер памяти для переменной с модификатором типа signed
int определяется длиной машинного слова, которое имеет различный размер на
разных машинах. Так, на 16-ти разрядных машинах размер слова равен 2-м
байтам, на 32-х разрядных машинах соответственно 4-м байтам, т.е. тип int
эквивалентен типам short int, или long int в зависимости от архитектуры
используемой ПЭВМ. Таким образом, одна и та же программа может правильно
работать на одном компьютере и неправильно на другом. Для определения длины
памяти занимаемой переменной можно использовать операцию sizeof языка СИ,
возвращающую значение длины указанного модификатора-типа.
Например:
a = sizeof(int);
b = sizeof(long int);
c = sizeof(unsigned long);
d = sizeof(short);
Отметим также, что восьмеричные и шестнадцатеричные константы также могут
иметь модификатор unsigned. Это достигается указанием префикса u или U
после константы, константа без этого префикса считается знаковой.
Например:
0xA8C (int signed );
01786l (long signed );
0xF7u (int unsigned );
1.2.3. Данные плавающего типа
Для переменных, представляющих число с плавающей точкой используются
следующие модификаторы-типа : float, double, long double (в некоторых
реализациях языка long double СИ отсутствует).
Величина с модификатором-типа float занимает 4 байта. Из них 1 байт
отводится для знака, 8 бит для избыточной экспоненты и 23 бита для
мантиссы. Отметим, что старший бит мантиссы всегда равен 1, поэтому он не
заполняется, в связи с этим диапазон значений переменной с плавающей точкой
приблизительно равен от 3.14E-38 до 3.14E+38.
Величина типа double занимает 8 байт в памяти. Ее формат аналогичен формату
float. Биты памяти распределяются следующим образом: 1 бит для знака, 11
бит для экспоненты и 52 бита для мантиссы. С ... продолжение
Похожие работы
Дисциплины
- Информатика
- Банковское дело
- Оценка бизнеса
- Бухгалтерское дело
- Валеология
- География
- Геология, Геофизика, Геодезия
- Религия
- Общая история
- Журналистика
- Таможенное дело
- История Казахстана
- Финансы
- Законодательство и Право, Криминалистика
- Маркетинг
- Культурология
- Медицина
- Менеджмент
- Нефть, Газ
- Искуство, музыка
- Педагогика
- Психология
- Страхование
- Налоги
- Политология
- Сертификация, стандартизация
- Социология, Демография
- Статистика
- Туризм
- Физика
- Философия
- Химия
- Делопроизводсто
- Экология, Охрана природы, Природопользование
- Экономика
- Литература
- Биология
- Мясо, молочно, вино-водочные продукты
- Земельный кадастр, Недвижимость
- Математика, Геометрия
- Государственное управление
- Архивное дело
- Полиграфия
- Горное дело
- Языковедение, Филология
- Исторические личности
- Автоматизация, Техника
- Экономическая география
- Международные отношения
- ОБЖ (Основы безопасности жизнедеятельности), Защита труда