Файл: Лекция 2. Основы программирования на языке С 1 Состав языка.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 22.11.2023
Просмотров: 150
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
Исходя из этих характеристик, программист выбирает тип каждой величины, используемой в программе для представления реальных объектов. Обязательноеописание типа позволяет компилятору производить проверку допустимости различных конструкций программы. От типа величины зависят машинные команды,которые будут использоваться для обработки данных.Все типы языка С++ можно разделить на основные и составные. В языке С++определено шесть основных типов данных для представления целых, вещественных,символьных и логических величин. На основе этих типов программист может вводить описание составных типов. К ним относятся массивы, перечисления, функции, структуры, ссылки, указатели, объединения и классы.Основные (стандартные) типы данных часто называют арифметическими, поскольку их можно использовать в арифметических операциях. Для описания основных типов определены следующие ключевые слова:
По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать.Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если этот тип по каким-либо причинам не устраиваетпрограммиста, он может явно указать требуемый тип с помощью суффиксов L, l(long) и U, u (unsigned). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, 0x22UL или 05Lu.Под величину символьного типа отводится количество байт, достаточное дляразмещения любого символа из набора символов для данного компьютера, что иобусловило название типа. Как правило, это 1 байт. Тип char, как и другие целыетипы, может быть со знаком или без знака. В величинах со знаком можно хранитьзначения в диапазоне от -128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCII. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short. Строковые константы типа wchar_t записываются с префиксом L, например, L»Gates».Величины логического типа могут принимать только значения true и false, являющиеся зарезервированными словами. Внутренняя форма представления значения false - 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.Стандарт С++ определяет три типа данных для хранения вещественных значений: float, double и long double.Типы данных с плавающей точкой хранятся в памяти компьютера иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двухчастей - мантиссы и порядка. В IBM PC-совместимых компьютерах величины типа float занимают 4 байта, из которых один двоичный разряд отводится под знак мантиссы, 8 разрядов под порядок и 23 под мантиссу. Мантисса - это число, большее 1.0, но меньшее 2.0. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится.Для величин типа double, занимающих 8 байт, под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка - его диапазон. Как можно видеть из табл. 1.4, при одинаковом количестве байтов
Для вещественных типов в таблице приведены абсолютные величины минимальных и максимальных значений.Для написания переносимых на различные платформы программ нельзя делать предположений о размере типа int. Для его получения необходимо пользоваться операцией sizeof, результатом которой является размер типа в байтах. Например, для операционной системы MS-DOS sizeof (int) даст в результате 2, а для Windows 9X или OS/2 результатом будет 4.В стандарте ANSI диапазоны значений для основных типов не задаются, определяются только соотношения между их размерами, например:sizeof(float) _ sizeof(double) _ sizeof(long double)sizeof(char) _ sizeof(short) _ sizeof(int) _ sizeof(long)Различные виды целых и вещественных типов, различающиеся диапазоном и точностью представления данных, введены для того, чтобы дать программисту возможность наиболее эффективно использовать возможности конкретной аппаратуры, поскольку от выбора типа зависит скорость вычислений и объем памяти. Но оптимизированная для компьютеров какого-либо одного типа программа может стать не переносимой на другие платформы, поэтому в общем случае следует избегать зависимостей от конкретных характеристик типов данных.
Кроме перечисленных, к основным типам языка относится тип void, но множество значений этого типа пусто. Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.2.3 Переменные и выражения2.3.1 ПеременныеПеременная - это именованная область памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Во время выполнения программы значение переменной можно изменять. Перед использованием любая переменная должна быть описана.Пример описания целой переменной с именем a и вещественной переменной x: int a; float x;Общий вид оператора описанияпеременных:[класс памяти] [const] тип имя [инициализатор];Правила задания составных частей этого оператора.
Класс памяти определяет время жизни и область видимости программного объекта (в частности, переменной). Если класс памяти не указан явным образом, он определяется компилятором исходя из контекста объявления. Время жизниможет быть постоянным (в течение выполнения программы) и временным (в течение выполнения блока).Областью видимости идентификатораназывается часть текста программы, из которой допустим обычный доступ к связанной с идентификатором областью памяти. Чаще всего область видимости совпадает с областью действия. Исключением является ситуация, когда во вложенном блоке описана переменная с таким же именем. В этом случае внешняя переменная во вложенном блоке невидима, хотя он и входит в ее область действия. Тем не менее к этой переменной, если она глобальная, можно обратиться, используя операцию доступа к области видимости ::.Для задания класса памяти используются следующие спецификаторы:
-
int (целый); -
char (символьный); -
wchar_t (расширенный символьный); -
bool (логический); -
float (вещественный); -
double (вещественный с двойной точностью).
-
short (короткий); -
long (длинный); -
signed (знаковый); -
unsigned (беззнаковый).
По умолчанию все целочисленные типы считаются знаковыми, то есть спецификатор signed можно опускать.Константам, встречающимся в программе, приписывается тот или иной тип в соответствии с их видом. Если этот тип по каким-либо причинам не устраиваетпрограммиста, он может явно указать требуемый тип с помощью суффиксов L, l(long) и U, u (unsigned). Например, константа 32L будет иметь тип long и занимать 4 байта. Можно использовать суффиксы L и U одновременно, например, 0x22UL или 05Lu.Под величину символьного типа отводится количество байт, достаточное дляразмещения любого символа из набора символов для данного компьютера, что иобусловило название типа. Как правило, это 1 байт. Тип char, как и другие целыетипы, может быть со знаком или без знака. В величинах со знаком можно хранитьзначения в диапазоне от -128 до 127. При использовании спецификатора unsigned значения могут находиться в пределах от 0 до 255. Этого достаточно для хранения любого символа из 256-символьного набора ASCII. Величины типа char применяются также для хранения целых чисел, не превышающих границы указанных диапазонов.Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например, Unicode. Размер этого типа зависит от реализации; как правило, он соответствует типу short. Строковые константы типа wchar_t записываются с префиксом L, например, L»Gates».Величины логического типа могут принимать только значения true и false, являющиеся зарезервированными словами. Внутренняя форма представления значения false - 0 (нуль). Любое другое значение интерпретируется как true. При преобразовании к целому типу true имеет значение 1.Стандарт С++ определяет три типа данных для хранения вещественных значений: float, double и long double.Типы данных с плавающей точкой хранятся в памяти компьютера иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двухчастей - мантиссы и порядка. В IBM PC-совместимых компьютерах величины типа float занимают 4 байта, из которых один двоичный разряд отводится под знак мантиссы, 8 разрядов под порядок и 23 под мантиссу. Мантисса - это число, большее 1.0, но меньшее 2.0. Поскольку старшая цифра мантиссы всегда равна 1, она не хранится.Для величин типа double, занимающих 8 байт, под порядок и мантиссу отводится 11 и 52 разряда соответственно. Длина мантиссы определяет точность числа, а длина порядка - его диапазон. Как можно видеть из табл. 1.4, при одинаковом количестве байтов
, отводимом под величины типа float и long int, диапазоны их допустимых значений сильно различаются из-за внутренней формы представления.
Спецификатор long перед именем типа double указывает, что под величину отводится 10 байтов.
Константы с плавающей точкой имеют по умолчанию тип double. Можно явно указать тип константы с помощью суффиксов F, f (float) и L, l (long). Например, константа 2E+6L будет иметь тип long double, а константа 1.82f - тип float.
Таблица 2.4 - Диапазоны значений простых типов данных для IBM PC
| Тип | Диапазон значений | Размер (байт) |
| Bool | true и false | 1 |
| signed char | -128 … 127 | 1 |
| unsigned char | 0 … 255 | 1 |
| signed short int | -32 768 … 32 767 | 2 |
| unsigned short inr | 0 … 65 535 | 2 |
| signed long int | -2 147 483 648 … 2 147 483 647 | 4 |
| unsigned long int | 0 … 4 294 967 295 | 4 |
| Float | 3.4e-38 … 3.4e+38 | 4 |
| Double | 1.7e-308 … 1.7e+308 | 8 |
| long double | 3.4e-4932 … 3.4e+4932 | 10 |
Кроме перечисленных, к основным типам языка относится тип void, но множество значений этого типа пусто. Он используется для определения функций, которые не возвращают значения, для указания пустого списка аргументов функции, как базовый тип для указателей и в операции приведения типов.2.3 Переменные и выражения2.3.1 ПеременныеПеременная - это именованная область памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Во время выполнения программы значение переменной можно изменять. Перед использованием любая переменная должна быть описана.Пример описания целой переменной с именем a и вещественной переменной x: int a; float x;Общий вид оператора описанияпеременных:[класс памяти] [const] тип имя [инициализатор];Правила задания составных частей этого оператора.
-
Необязательный класс памяти может принимать одно из значений auto, extern, static и register. -
Модификатор const показывает, что значение переменной изменять нельзя. Такую переменную называют именованной константой, или просто константой. -
При описании можно присвоить переменной начальное значение, это называется инициализацией. Инициализатор можно записывать в двух формах - сознаком равенства:
Класс памяти определяет время жизни и область видимости программного объекта (в частности, переменной). Если класс памяти не указан явным образом, он определяется компилятором исходя из контекста объявления. Время жизниможет быть постоянным (в течение выполнения программы) и временным (в течение выполнения блока).Областью видимости идентификатораназывается часть текста программы, из которой допустим обычный доступ к связанной с идентификатором областью памяти. Чаще всего область видимости совпадает с областью действия. Исключением является ситуация, когда во вложенном блоке описана переменная с таким же именем. В этом случае внешняя переменная во вложенном блоке невидима, хотя он и входит в ее область действия. Тем не менее к этой переменной, если она глобальная, можно обратиться, используя операцию доступа к области видимости ::.Для задания класса памяти используются следующие спецификаторы:
-
auto - автоматическая переменная. Память под нее выделяется в стеке и при необходимости инициализируется каждый раз при выполнении оператора, содержащего ее определение. Освобождение памяти происходит при выходе из блока, в котором описана переменная. Время ее жизни - с момента описания до конца блока. Для глобальных переменных этот спецификатор не используется, а для локальных он принимается по умолчанию, поэтому задавать его явным образом большого смысла не имеет. -
extern - означает, что переменная определяется в другом месте программы (в другом файле или дальше по тексту). Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены. -
static - статическаяпеременная. Время жизни - постоянное. Инициализируется один раз при первом выполнении оператора, содержащего определение переменной. В зависимости от расположения оператора описания статические переменные могут быть глобальными и локальными. Глобальные статические переменные видны только в том модуле, в котором они описаны. -
register - аналогично auto, но память выделяется по возможности в регистрах процессора. Если такой возможности у компилятора нет, переменные обрабатываются как auto.