
- •Программирование на языках высокого уровня. Алгоритмические языки
- •Содержание
- •Разработка (проектирование) одномодульных программ
- •Представление информации в языке Си
- •Массивы
- •УказатеЛи
- •Выражения и операции
- •Управляющие операторы
- •Функции
- •Типы данных, определяемые пользователем
- •Приемы программирования
- •Приложение 2. Арифметические основы компьютеров
- •Литература
Представление информации в языке Си
Информация в любой программе представляется константами и переменными.
Константы
Константами называют неизменяемые величины. Различают целые (1, 2, 3), вещественные (3.1415926), символьные (‘A’) и строковые (“Привет!”) константы. Форматы констант, соответствующие каждому типу, приведены в таблице.
Тип константы |
Формат |
Примеры |
Примечание |
целая |
десятичный восьмеричный шестнадцатеричный |
8, 0, 199995 01, 020, 0715 0xA, 0x1B8 |
обычный способ записи числа числа имеют префикс 0 числа имеют префикс 0x |
вещественная |
десятичный экспоненциальный |
5.7, .001, 35. 0.2E6, .11e-3, 5E10 |
обычный способ записи числа 0.2E6 ≡ 0.2*106
|
символьная |
|
‘А’, ‘ю’, ‘\n’, ‘\0’, ‘\012’,‘\0xA’ |
вместо символа можно указать его код, например, ‘\012’ – означает символ с кодом 12 в восьмеричной системе исчисления |
строковая |
|
“Привет”, “A” |
не путайте символьную константу ‘A’ и строковую “A”, в последнем случае строка состоит из двух символов ‘A’ и ‘\0’ |
Для представления символьных констант, которые не имеют печатных символов, используются Escape-последовательности, начинающиеся с косой черты. Воспринимаются такие последовательности как один символ.
Последовательность |
Функция |
\a |
Подает звуковой сигнал |
\b |
Возврат на один символ |
\f |
Перевод страницы (начало нового экрана) |
\n |
Новая строка (переход к началу новой строки) |
\r |
Возврат к началу текущей строки |
\t |
Переход к следующей позиции табуляции |
\v |
Переводит курсор вниз на несколько строк |
\\ |
Выводит обратную косую черту |
\’ |
Выводит апостроф |
\” |
Выводит двойную кавычку |
Переменные
Переменная – это именованная область памяти, в которой хранятся данные. У переменной есть имя, значение и тип.
Имя служит для обращения к области памяти, в которой хранится значение. Чтобы в программе не возникало путаницы, не допускается создание двух переменных с одинаковым именем. Язык Си чувствителен к регистру букв, поэтому Flag и flag воспринимаются как две разные переменные.
В отличие от констант значение переменной можно изменять во время выполнения программы с помощью различных операций. Например, если в переменной A хранилось целое число 3, то следующее выражение A = A + 1 приведет к тому, что в переменной A будет храниться число 4. Какие операции возможны над переменной определяет ее тип. Например, к вещественным переменным применимы арифметические операции + и –, но не применима операция % (остаток от деления). Тип переменной также определяет количество байт, которое переменная занимает в памяти. Например, переменная типа int занимает 2 байта памяти и, следовательно, может принимать 4294967296 различных значений. Эти 4294967296 значений можно использовать для представления целых чисел в диапазонах [0, 4294967295] или [-2147483648, 2147483647].
Ниже приведена классификация типовых данных, имеющихся в языке Си. Кратко прокомментируем ее.
Все типы данных можно разбить на три категории: простые типы данных, структурированные типы данных и указатели. Переменные простых типов данных могут хранить в себе только одно значение, а переменные структурированных типов – множество значений. Указатели – это особый тип данных, который будет рассматриваться позже.
Типы данных, помеченные на рисунке серым цветом, – это так называемые типы данных, определяемые пользователем. Они используются программистом для создания собственных типов данных. Типы данных, определяемые пользователем, будут рассматриваться позже.
Более подробно остановимся на простых (скалярных) типах данных. Простые типы данных включает в себя символьные, целочисленные и вещественные типы данных (сводную таблицу простых типов данных смотрите ниже).
Тип данных |
Размер (байт) |
Диапазон значений |
Примечание |
char |
1 |
-128…127 |
используется для хранения символьных констант |
unsigned char |
1 |
0…255 |
|
int |
2 (DOS) 4 (Win) |
32768…32767 (DOS) -2147483648…2147483647 (Win) |
используются для хранения целочисленных констант |
unsigned int |
2 (DOS) 4 (Win) |
0…65535 (DOS) 0…4294967295 (Win) | |
short int |
2 |
-32768…32767 | |
unsigned short int |
4 |
0…65535 | |
long int |
4 |
-2147483648…2147483647 | |
unsigned long int |
4 |
0…4294967295 | |
float |
4 |
3.410-38…3.41038 (по модулю) (7 значащих цифр) |
|
double |
8 |
1.710-308…1.710308 (по модулю) (15 значащих цифр) |
используется для хранения вещественных констант |
long double |
10 |
3.410-4932…3.4104932 (по модулю) |
|
Символьный тип используется для хранения символов. Стандартный набор символов ASCII включает в себя не более 256 символов, поэтому для хранения кода одного символа достаточно 1 байта (тип char). Необходимо отметить, что переменные символьного типа могут использоваться для хранения целых чисел в диапазонах [-128, 128] (тип char) или [0, 255] (тип unsigned char).
Целочисленный тип используется для хранения знаковых и беззнаковых целых чисел. При этом имеются несколько целочисленных типов данных, которые отличаются друг от друга размером выделяемой под них памяти, а, следовательно, и диапазоном возможных значений. Типы данных short int и unsigned short int всегда занимают 2 байта, типы данных long int и unsigned long int всегда занимают 4 байта. Типы данных int и unsigned int являются системными, т.е. размер выделяемой под них памяти зависит от операционной системы, в которой работает компилятор. В среде Microsoft Visual Studio 2005 типы данных int и unsigned int занимают 4 байта.
Вещественный тип данных используется для хранения чисел с плавающей точкой. Такие числа в компьютере представляются специальным способом: в виде мантиссы (число в диапазоне [0.0, 1.0)) и порядка. Так число 234.67 представляется в виде мантиссы 0.23467 и порядка 3 (234.67 = 0.23467*103). Этот прием позволяет расширить диапазон вещественных чисел по сравнению с целыми числами при том же количестве занимаемой памяти (сравните типы данных long int и float). Однако общее представимое количество чисел для вещественных и целочисленных типов остается одинаковым (для типов данных long int и float = 4294967296). Диапазон значений в вещественных типах данных расширяется за счет различного расстояния между соседними числами (в целочисленных типах расстояние между соседними числами всегда остается равное 1). У вещественных чисел близких к нулю 0 расстояние между соседними числами наименьшее (≤10-30), а у чисел на границах диапазона – максимальное (105).
В стандарте языка Си нет логического типа, величины которого могут принимать только значения ИСТИНА и ЛОЖЬ. Для этих целей используется любой целочисленный тип данных, при этом 0 соответствует значению ЛОЖЬ, а любое ненулевое целое число (4, -2) – значению ИСТИНА. Однако в большинстве последних модификациях языка Си применяется специализированный тип данных bool, переменные этого типа могут принимать всего два значения true и false.
Прежде чем в программе использовать переменную ее необходимо объявить, т.е. указать ее тип и имя, например, так
int A;
или так
int B, C;
Результатом этих действий является резервирование в памяти компьютера достаточного количества ячеек памяти для хранения значений этих переменных. Под резервированием памяти понимается тот факт, что компилятор не будет повторно использовать выделенную память под другие переменные.
Одновременно с объявлением переменной ей можно присвоить начальное значение – это инициализация, например
int A= 15;
Замечание 1. Операторы объявления переменных должны располагаться прежде остальных операторов программы.
Замечание 2. Так как любой тип данных позволяет воспроизводить конечный диапазон значений, то возможна ситуация переполнения переменной. Пример переполнения.
char A;
A= 127 + 3; // результат -126
Окончание занятия №7 (лекция) |