лабораторные работы / Лабораторная работа1
.docЛабораторная работа №1
По технологии программирования
Работа с переменными в программе
Основные понятия
Переменная – именованная область памяти, значение которой можно получить или изменить.
Переменная объединяет в себе последовательность из нескольких, стоящих одна за другой ячеек памяти. Адресом переменной при этом считается адрес самой первой ячейки, входящей в эту последовательность.
В языке программирования С++ необходимо, чтобы имя переменной и ее тип был указан до того, как переменная фактически использовалась. Это связано с тем, что нужно правильно выделить место в оперативной памяти для хранения переменной.
Рассмотрим основные типы данных переменных:
-
Числовые
-
Целые числа (20, 256897)
-
Вещественные числа (12.66 или 12458789.251)
-
Положительные числа
-
Отрицательные числа
-
Строковые
-
Логические значения
-
В С существует 5 основных типов данных. Все другие типы можно получить на их основе. Основными типами языка С являются:
int – целочисленный тип. Этот тип данных позволяет хранить толь целые значения из диапазона -32768…32767. Переменные этого типа занимают в памяти 16 бит. Если попытаться присвоить переменной типа int значение, выходящее за границы диапазона, то результат будет заведомо неверным.
float – используется для хранения значений с плавающей точкой. Переменные этого типа данных занимают в памяти 32 бита и могут хранить вещественные числа с точностью до 6-го знака.
double – используется для хранения значений с плавающей точкой. Переменные этого типа данных занимают в памяти 64 бита и могут хранить вещественные числа с точностью до 18-го знака.
char – используется для представления символьной информации. Переменные этого типа занимают в памяти 1 байт.
void – специальный тип данных, предназначенный для указания отсутствия данных любого типа. Например, этот тип данных можно использовать для указания, что функция не возвращает никакого значения.
Модификаторы типов
В С используется 4 модификатора типов. Это signed, unsigned, short и long. Все эти модификаторы применимы к целочисленным и символьным типам данных. Модификатор long также можно использовать с типом данных double.
По умолчанию все переменные являются знаковыми. Поэтому применение модификатора signed на практике сильно ограничено.
Модификатор unsigned позволяет переменным работать только с положительными значениями. Этот модификатор можно использовать только с порядковыми типами (int и char).
При применении модификатора unsigned длина положительного диапазона удваивается за счет отрицательной части. Так, диапазонов типа unsigned int будет 0…65535, а не -32768…32767 как для int.
Модификатор longиспользуется для увеличения стандартного диапазона в 2 раза.
Модификатор short является базовым и на практике практически не используется (например, для типа short int диапазон будет таким же, как и для int).
В таблице 1 представлены основные типы данных языка С с использованием модификаторов.
Таблица 1 – основные типы данных языка С
Тип |
Размер в битах |
Диапазон значений |
char |
8 |
-128…127 |
unsigned char |
8 |
0…255 |
signed char |
8 |
-128…127 |
int |
16 |
-32768…32767 |
unsigned int |
16 |
0…65535 |
signed int |
16 |
-32768…32767 |
short int |
16 |
-32768…32767 |
unsigned short int |
16 |
0…65535 |
signed short int |
16 |
0…65535 |
long int |
32 |
-2147483647…2147483647 |
signed long int |
32 |
-2147483647…2147483647 |
unsigned long int |
32 |
0…4294967295 |
float |
32 |
(3.410-38…3.41038) |
double |
64 |
(1.710-308…1.710308) |
long float |
64 |
(1.710-308…1.710308) |
long double |
80 |
(3.410-4932…1.1104932) |
В С возможно преобразование типов. Причем данное преобразование происходит от "большего к меньшему". Старшинство типов данных представлено на рисунке 1.
Рис.1. Старшинство типов данных в языке С
То есть, если объявлены переменные a и b типа int, а переменная с типа float, то результат вычисления c=a/b будет преобразован к типу int.
Переменные в С могут быть локального и глобального типа.
Локальная переменная представляет собой переменную, определенную внутри функции. Такая переменная называется локальной, потому что ее известность ограничена данной функцией. Вы объявляете локальные переменные в начале функции после открывающей фигурной скобки:
void some_function(void)
{ int count; float result; }
дополнение к локальным переменным C++ позволяет вашим программам объявлять глобальные переменные, которые известны на протяжении всей программы (глобально для всех функций). Чтобы объявить глобальную переменную, следует просто поместить объявление переменной в начало вашей программы вне какой-либо функции:
int some_global_variable; ---> Объявление глобальной переменной
void main(void)
{ // Здесь должны быть операторы программы }
По мере возможности следует избегать использования в программах глобальных переменных. Однако если ваша программа должна использовать глобальную переменную, то может случиться, что имя глобальной переменной конфликтует с именем локальной переменной. При возникновении такого конфликта C++ предоставляет приоритет локальной переменной. Другими словами, программа предполагает, что в случае конфликта каждая ссылка на имя соответствует локальной переменной.
Технология работы
В данной работе необходимо провести анализ переменных, используемых в программе.
Например, необходимо составить программу для вычисления значения выражения:
Проведем анализ переменных, которые необходимо будет использовать в программе.
В программе будут входные и выходные переменные (промежуточных переменных не используется).
Входными переменными являются b,c,d. Значения этих переменных вводятся пользователем с клавиатуры.
Переменные b,c,d имеют числовой тип. Также они могут иметь целочисленный тип. Однако, так как это приведет к автоматическому преобразованию результата вычисления к целочисленному типу, то целесообразно присвоить этим переменным вещественный тип (float). В этом случае вычисление будет произведено с точностью до 6 знаков после запятой.
Определим теоретический и фактический диапазон изменения входных переменных:
b – теоретический диапазон для переменных типа float (3.410-38…3.41038), совпадает с фактическим, так как на переменную b не накладывается никаких ограничений
c– теоретический диапазон для переменных типа float (3.410-38…3.41038), совпадает с фактическим, так как на переменную c не накладывается никаких ограничений
d- теоретический диапазон для переменных типа float (3.410-38…3.41038), фактический диапазон [3.410-38;0)(0; 3.41038]так как переменная d находится в знаменателе и под знаком корня.
Переменные a,b,c являются глобальными, так как в программе нет необходимости использовать функции.
Выходной переменной является a. Ее значение вычисляется в программе и выводится на экран.
Переменная a имеет числовой тип с плавающей занятой float.
Определим теоретический и фактический диапазон изменения выходной переменной:
Теоретический диапазон для переменных типа float составляет (3.410-38…3.41038)
Определим нижнюю границу фактического диапазона:
Определим верхнюю границу фактического диапазона:
Таким образом, верхняя граница фактического диапазона для переменной а превышает установленные теоретические значения.
Переменная а будет являться глобальной, так как нет необходимости использования в программе отдельных функций.
Составим таблицу анализа переменных для программы:
Имя переменной |
Тип данных |
Область видимости |
Входная /выходная /промежуточная |
Диапазон данных теоретический |
Диапазон данных фактический |
Исключения |
a |
float |
Глобальная |
Выходная |
(3.410-38…3.41038) |
(3.410-38…3.41038) |
нет |
b |
float |
Глобальная |
Входная |
(3.410-38…3.41038) |
(3.410-38…3.41038) |
нет |
c |
float |
Глобальная |
Входная |
(3.410-38…3.41038) |
[3.410-38;0)(0; 3.41038] |
Возникновение ошибки при вводе отрицательного значения или значения, равного нулю |
d |
float |
глобальная |
Входная |
(3.410-38…3.41038) |
-3,71019…3.71057 |
Ограничение фактического диапазона |
1 В С для записи вещественных чисел используется только точка