Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вопросы 9-44.docx
Скачиваний:
4
Добавлен:
22.09.2019
Размер:
252.07 Кб
Скачать

14. Числовые вещественные константы. Особенности и примеры их применения.

  • 5f,5F - короткое вещественное число (суффикс - f или F, от Fixed );

  • 5LF,5FL,5fl,5lf,5Lf,5lF,5Fl,5fL - длинное вещественное число.

Для внутреннего представления данных вещественного типа характерно то, что в соответствующей области оперативной памяти хранятся две компоненты числа - мантисса m и порядок p. Само число x при этом равно произведению m*2p. Таким образом, мантисса определяет значащие цифры числа и его знак, а порядок - положение запятой, которая благодаря этому как бы "плавает" между значащими цифрами (отсюда и термин - формат с плавающей запятой ). Такой способ представления числовых данных позволяет при одинаковом количестве двоичных разрядов, отведенных для хранения чисел существенно расширить диапазон допустимых данных.

Наиболее часто применяемые типы вещественных чисел представлены короткими (4 байта) и длинными (8 байт) данными. Короткий вещественный формат по модулю обеспечивает представление чисел в диапазоне приблизительно от 10-38 до 10+38 с 7-8 значащими десятичными цифрами. Для 8-байтового формата диапазон существенно расширяется - от 10-308 до 10+308, а количество значащих цифр увеличивается до 15-16. Сопроцессор IBM PC предлагает расширенный десятибайтовый формат вещественных данных, перекрывающий диапазон (по модулю) от 10-4932 до 10+4932 и сохраняющий 19-20 значащих цифр.

В системах программирования Borland C++ для объявления данных вещественного типа используют спецификаторы float (короткое вещественное, 4 байта), double (вещественное с удвоенной точностью, 8 байт) и long double (длинное вещественное с удвоенной точностью, 10 байт).

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

15. Операция присваивания. Пример линейной программы.

(=, +=, -=, *= и т. д.) Формат операции простого присваивания (*=):

операнд_1 = операнд_2

Сначала вычисляется выражение, стоящее в правой части операции, а потом его результат записывается в область памяти, указанную в левой части (мнемоническое правило: «присваивание — это передача данных "налево"»). То, что ранее хранилось в этой области памяти, естественно, теряется.

В сложных операциях присваивания ( +=, *=, /= и т п.) при вычислении выражения, стоящего в правой части, используется и L-значение из левой части. Например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд, то есть выражение а += b является более компактной записью выражения а = а + b.

Операции присваивания выполняются справа налево. Например, а = b = с означает а = (b = с).

16. Синтаксис и семантика операторов выражения, перехода и возврата, ветвления и выбора. Пример программы ветвления.

Любое выражение, завершающееся точкой с запятой, рассматривается как оператор, выполнение которого заключается в вычислении выражения. Частным случаем выражения является пустой оператор ; (он используется, когда по синтаксису оператор требуется, а по смыслу — нет). Примеры:

i++; // выполняется операция инкремента

а* = b + с; // выполняется умножение с присваиванием

fun(i, к); // выполняется вызов функции

Оператор безусловного перехода goto имеет формат:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

Оператор goto передает управление на помеченный оператор. Метка — это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.

Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:

return [ выражение ];

Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.

Условный оператор if используется для разветвления процесса вычислений на два направления. Формат оператора:

if ( выражение ) оператор_1; [else оператор_2;]

Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется первый оператор, иначе — второй. После этого управление передается на оператор, следующий за условным. Одна из ветвей может отсутствовать, логичнее опускать вторую ветвь вместе с ключевым словом еlse. Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление.

Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Формат оператора:

switch ( выражение ){

case константное_выражение_1: [список_операторов_1]

case константное_выражение_2: [список_операторов_2]

case константное_выражение_п: [список_операторов_п]

[default: операторы ]

}

Выполнение оператора начинается с вычисления выражения (оно должно быть целочисленным), а затем управление передается первому оператору из списка, помеченного константным выражением, значение которого совпало с вычисленным. После этого, если выход из переключателя явно не указан, последовательно выполняются все остальные ветви. Выход из переключателя обычно выполняется с помощью операторов break или return.