Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ШПОРЫ _ МОИ.docx
Скачиваний:
15
Добавлен:
19.09.2019
Размер:
69.58 Кб
Скачать

Типы данных для работы с вещ-ми числами. Внутренне представление. Множество значений

В СИ для представления вещественных чисел исп-т типы float и double. Они соотв-т форматам одинарной и двойной точности устройства с плавающей точкой (матем процессора) и имеют хар-ки:

Тип

Размер в битах

Диапазон значений

Точность

представления

double

64

0 от2,23*10-308 до 1,798*10308

15 знаков после запятой

float

32

0 от1,18*10-38 до 3,4*1038

7

При обработке вещ-х чисел чаще исп-т тип double. Float исп-т в системах с огранич мощностью, и его рекомендуется применять при поиске в программе ошибок округления.

Действительные числа представляются в виде: F2E, где F – мантисса (дробь, Fraction), E – порядок (экспонента, Exponent). Аналогичная запись числа в десятичной системе счисления имеет вид: F10E.

Например, 5,04545е55, где 5,04545-мантисса, 55-порядок, е – отделяет мантиссу от порядка и обозначает «на 10 в степени». В такой записи мантисса содержит значащие цифры числа и определяет точность его представления, а порядок определяет положение точки в числе.

Очевидно, в форме с плавающей точкой число может быть записано не единственным способом. Поэтому одну из таких записей принимают за нормализованную. Нормализованной будем считать запись вида: F2E,1|F|<2, т. е. в нормализованной двоичной записи числа целая часть мантиссы равна единице. Аналогичная десятичная запись имеет вид: F10E,1|F|<10.

Представление числа в форме с плавающей точкой имеет следующий формат:

знак

смещенный порядок

мантисса

старший байт младший байт

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

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

Представление порядка в смещенной форме упрощает реализацию операций над вещественными числами в устройстве с плавающей точкой (математическом сопроцессоре).

Так как число бит, отводимых под мантиссу и порядок, ограничено, то рассмотренными способами могут быть представлены не все вещественные числа: размер поля мантиссы определяет точность представления, а размер поля порядка – диапазон представимых значений. Если количество значащих цифр некоторого вещественного числа превышает размер отведенного для них поля мантиссы, то число округляется.

Есть 4 сп-ба округления. Если истинное значение b не может быть представлено точно, а a и c наиболее близкие к b представимые значения (a<b<c), то возможны следующие способы округления:

Режим округления

Результат

Погрешность

Округление к ближайшему

a или c, ближайшее к b; если ba=cb, то выбирается четное, то есть заканчивающееся нулем.

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

Округление вниз (к )

a

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

Округление вверх (к +)

c

Усечение (округление к 0)

a или c, меньшее по модулю.

Рассматриваемые форматы обеспечивают следующую точность представления вещественных значений:

Точность представления (количество значащих цифр)

в двоичной записи

в десятичной записи

Одинарная точность

24

7

Двойная точность

53

15

Расширенная точность

64

19

14.Указатели в СИ и СИ++. Ссылки в СИ++. Преобразование указателей

Объявление переменной означает, что при выполнении программы в памяти под эту переменную отведена область, куда помещается её значение. Местоположение этой области памяти (адрес) неявно указывается именем размещённой в ней переменной. СИ предлагает спец ср-ва для работы с адресами памяти. Тип данных Указатель, значениями которого явл адреса памяти. При объявлении переменной такого типа перед её именем записывается *. Например, int *a; Значением такой переменной явл адрес размещения области памяти сл значением, указанного в объявлении типа. Размер ячейки, формат представления в ней адреса зависит от реализации. В СИ 3.1 это или 2хбайтовый короткий (ближний) адрес, или 4хбайтовый длинный (дальний) адрес.

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

Адрес – это номер ячейки памяти, в которой или с которой располагаются данные.

Операции над указателями в СИ:

Взятие адреса

&

Унарная префиксная операция. Применяется к простым переменным, эл-м массива, структурам и их эл-м, адрес размещения которых явл результатом этой операции.

Обращение по адресу (косвенное обращение)

*

Унарная префиксная операция. Применяется к указателю, результатом которой является значение, размещённое в указанной операндом области памяти

Присваивание

=

Применяется для присваивания переменной указателю адреса размещения соотв-го указателю значения,. Если указатель никуда не указывает, то ему присваивают нулевое значение

Инкремент

++

Применяется для увеличения указателя (адреса) на размер типа, на который он указывает

Декремент

--

Применяется для уменьшения указателя (адреса) на размер типа, на который он указывает

Сложение

Сложение с присваиванием

+

+=

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

Вычитание

Вычитание с присваиванием

-

-=

Аналогично +. Но может выполняться и над указателями одного типа: вычисляется разность адресов и результат получается в единицах, равных размерам типа, на который они указывают

Равно

Неравно

= =

!=

Применяется для сравнения указателей на совпадение. Указатели =, если они указывают на одно и то же место в памяти

Больше, меньше…

> <

>=<=

Применяются для определения взаиморасположения области памяти, на которые указывают сравниваемые указатели.

Арифметические операции и операции отношения над указателями – машинно-зависимые. Поэтому их рекомендуется применять только при обработке массивов.

Ссылки в СИ++ - это видоизменённая форма указателя. В определении ссылки перед именем переменной указывается символ &, а не *. Такая переменная обязательно инициируется другой переменной, ссылкой (указателем) на которой и является. Инициированной ссылки не может быть присвоена другая переменная. Если ссылочная переменная определена, то её имя можно использовать вместо имени переменной, на которую она ссылается, т.е. как псевдоним последней.

Но прежде всего ссылки применяются для параметров функции. При определении параметра ссфлки перед его именем указывается &, а иниц-ся параметр-ссылка переменной, указанной в вызове функции как значение этого параметра.

11 .Массивы в СИ и СИ++. Многомерные массивы. Массивы и указатели. Массивы символов. Строки

Существуют простые типы, т.е. данное в памяти занимает отдельную ячейку и обрабатывается как единое целое. Но на практике чаще сталкиваются с обработкой совокупностей взаимосвязанных данных.В программировании это наз структура данных. Наиболее широко исп-ся структура данных, представляющая собой упорядоченную посл-ть конечного фиксированного кол-ва компонентов одной природы. Для работы с такими структурами сущ массивы. В СИ переменная-массив может быть объявлена так: <тип> <имя>[<кол-во>];

При выполнении программы под массив в памяти компьютера отводятся последовательные ячейки для размещения его элементов. В СИ элементы нумеруются целыми неотриц числами, начиная с нуля. Номер элемента – индекс. Языки программирования допускают непосредственное обращение к элементу массива. Это наз прямой доступ. Для обращения к элементу указывается его местоположение в памяти: <имя>[<индекс>];

Многомерные массивы так же часто используются, как и одномерные. Вот примеры: в школьных журналах написаны Фамилия и класс; любые базы данных; Вообще, многомерные массивы - это массивы массивов. Т.е. каждый индексный номер содержит массив. Например, int i[2][4] = {{1,2,3,4}, {5,6,7,8}};

Т.е. тут мы создаем двумерный массив размером 2х4. Т.е. 2 строчки по 4 элемента каждая.

В СИ существует взаимосвязь между указателями и массивами. Имя массива в СИ является константой-указателем, указывающей на его 1й элемент. Поэтому любое действие, достигаемое индексированием массива может быть реализовано через указатель. Например, обращение к элементу массива В с индексом 8 можно организовать так: b[8], или*( b+8). Оба выражения эквивалентны. Поэтому в СИ символы[ ] считаются знаком операции. По этой же причине и символ ., используемый для обращения к элементам структуры, считается операцией, т.к. приводит к вычислению адреса размещения элемента структуры. Использование указателей при обработке массивов и структур позволяет повысить эффективность обработки за счёт сокращения элементов массива и структуры. Но программа становится менее понятной. Если нет крайней необходимости в использовании указателей при обработке массивов и структур для обращения к их элементам лучше исп-ть [ ].

При обработке текстов часто используют структуру данных, представляющую упорядоченную посл-ть символов – строка. Си кроме строковых констант, не предлагает спец средств для работы со строками. Строковая константа в СИ – посл-ть символов в ' '.Строковые константы, несодержащие символов, представляются парой кавычек. Переменную, значением которой является строки, можно представить как массив с элементами символьного типа. Элементами такого массива могут быть все символы таблицы символов, в том числе, и управляющие, кроме символа с кодом 0.

В соответствии со стандартом СИ символ с кодом 0 – признак конца строки. Если в программе объявить массив char f[10]; то в памяти под него будет отведена область для размещения последовательности из 10 символов, но разместить его можно в строке меньшего размера и за последним символом в масииве указывается символ с кодом 0. В СИ строки нульзавершённые.

Строки можно вводить-выводить функциями scanf-printf, используя при этом спецификацию %s. Для ввода строки функция scanf в списке ввода указывает адрес размещения 1го символа строки. Это может быть имя массива символов без префикса, т.к. имя массива является адресом. При вводе строки с клавиатуры символы набираются посл-но. Строка завершена после нажатия пробел, enter, tab. Т.е. вводимая строка не может содержать символы, которые вводятся этими клавишами.

Ввод строки с пробелами организовывается ф-ей gets, при обращении к которой 1 параметр – адрес памяти для размещения 1го символа строки. СИ предлагает спец ф-ю для вывода строк, при обращении к которой ук-ся 1 параметр – выводимая строка. Для этого нужно подключить заголовочный файл stdio.h.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]