Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Практическая работа №4. Типы данных
1. Цель работы
Получение навыков в работе с типами данных языка C++ и в использовании функций стандартного вывода.
В Си++ имеется четыре базовых арифметических (числовых) типа данных. Из них два целочисленных char, int, и два плавающих (вещественных) float и double. Кроме того, в программах можно использовать некоторые модификации этих типов, описываемые с помощью служебных слов модификаторов. Существуют два модификатора размера short (короткий) и long (длинный) и два модификатора знаков signed (знаковый) и unsigned (беззнаковый). Знаковые модификаторы применяются только к целым типам.
Как известно, тип величины связан с ее формой внутреннего представления, множеством принимаемых значений и множеством операций, применимых к этой величине. В таблице перечислены арифметические типы данных Си++, указан объем занимаемой памяти и диапазон допустимых значений.
Размер типа int и unsigned int зависит от размера слова операционной системы, в которой работает компилятор Си++. В 16-разрядных ОС (MS DOS) этим типам соответствуют 2 байта, в 32-разрядных (Windows) 4 байта.
Типичные размеры значений и диапазоны представления
Анализируя данные таблицы, можно сделать следующие выводы:
если не указан модификатор знаков, то по умолчанию подразумевается signed;
с базовым типом float модификаторы не употребляются;
• модификатор short применим только к базовому типу int.
Особенность - тип char причислен к арифметическим типам. Ведь даже его имя указывает на то, что это символьный тип! В Си/Си++ величины типа char могут рассматриваться в программе и как символы, и как целые числа. Все зависит от контекста, т.е. от способа использования этой величины. В случае интерпретации величины типа char как символа ее числовое значение является ASCII-кодом. Следующий пример иллюстрирует сказанное.
char a=65;
printf("%с",а); /*На экране появится символ А*/
printf("%d",a);/*На экране появится число 65*/
Символы "%с" являются спецификацией формата ввода/вывода символьных данных, a "%d" спецификацией для целых чисел.
Еще одной особенностью С++ является отсутствие среди базовых типов логического типа данных. Между тем, как мы дальше увидим, в С++ используются логические операции и логические выражения. В качестве логических величин в С++ выступают целые числа. Интерпретация их значений в логические величины происходит по правилу: равно нулю ложь, не равно нулю истина.
В последние версии С++ добавлен отдельный логический тип с именем bool. Его относят к разновидности целых типов данных.
Описание переменных в программах на С++ имеет вид:
имя_типа список_переменных;
Примеры описаний:
char symbol, cc;
unsigned char code;
int number,row;
unsigned long long_number;
float x,X,cc3;
double e,b4;
long double max_num;
Одновременно с описанием можно задать начальные значения переменных. Такое действие называется инициализацией переменных. Описание с инициализацией производится по следующей схеме:
тип имя_переменной = начальное_ значение
Например:
float pi=3.14159, с=1.23;
unsigned int year=2000;
Константы. Запись целых констант. Целые десятичные числа, начинающиеся не с нуля, например: 4, 356, 128.
Целые восьмеричные числа, запись которых начинается с нуля, например: 016, 077.
Целые шестнадцатеричные числа, запись которых начинается с символов 0х, например: 0xlA, 0x253, 0xFFFF.
Тип константы компилятор определяет по следующим правилам: если значение константы лежит в диапазоне типа int, то она получает тип int; в противном случае проверяется, лежит ли константа в диапазоне типа unsigned int, в случае положительного ответа она получает этот тип; если не подходит и он, то пробуется тип long и, наконец, unsigned long.
Если значение числа не укладывается в диапазон типа unsigned long, то возникает ошибка компиляции.
Запись вещественных констант. Если в записи числовой константы присутствует десятичная точка (2.5) или экспоненциальное расширение (1Е-8), то компилятор рассматривает ее как вещественное число и ставит ей в соответствие тип double. Примеры вещественных констант: 44 . 3.14159 44Е0 1.5Е-4.
Использование суффиксов. Программист может явно задать тип константы, используя для этого суффиксы. Существуют три вида суффиксов: F (f) -float; U(u) unsigned; L(l) - long (для целых и вещественных констант). Кроме того, допускается совместное использование суффиксов U и L в вариантах ul или LU.
Примеры:
3 .14159F константа типа float, под которую выделяется 4 байта памяти;
3.14L константа типа long double, занимает 10 байт;
50000U константа типа unsigned int, занимает 2 байта памяти (вместо четырех без суффикса);
0LU константа типа unsigned long, занимает 4 байта;
24242424UL константа типа unsigned long, занимает 4 байта.
Запись символьных и строковых констант. Символьные константы заключаются в апострофы. Например: 'А', 'а', '5', ' + '. Строковые константы, представляющие собой символьные последовательности, заключаются в двойные кавычки. Например: "rezult", "введите исходные данные".
Особую разновидность символьных констант представляют так называемые управляющие символы. Их назначение управление выводом на экран. Как известно, такие символы расположены в начальной части кодовой таблицы ASCII (коды от 0 до 31) и не имеют графического представления. В программе на Си они изображаются парой символов, первый из которых ' \ '. Вот некоторые из управляющих символов:
'\n' переход на новую строку;
'\t' горизонтальная табуляция;
'\а' подача звукового сигнала.
Полный список управляющих символьных последовательностей будет дан позднее.
Управляющие символьные последовательности являются частным случаем эскейп-последовательностей (ESC-sequence), с помощью которых можно задать символьную константу указанием ее кода. Код символа можно указать в восьмеричном или в шестнадцатеричном представлении. Формат восьмеричного представления: '\ddd'. Здесь d восьмеричная цифра (от 0 до 7). Формат шестнадцатеричного представления: '\xhh' (или '\Xhh'), где h шестнадцатеричная цифра (от 0 до F). Например, константа, соответствующая заглавной латинской букве А, может быть представлена тремя способами: 'А', '\101', '\х41'.
Именованные константы (константные переменные).
В программе на Си/Си++ могут использоваться именованные константы. Употребляемое для их определения служебное слово const принято называть квалификатором доступа. Квалификатор const указывает на то, что данная величина не может изменяться в течение всего времени работы программы. В частности, она не может располагаться в левой части оператора присваивания. Примеры описания константных переменных:
const float pi=3.1415 9;
const int iMIN=l, iMAX=1000;
Определение констант на стадии препроцессорной обработки программы. Еще одной возможностью ввести именованную константу является использование препроцессорной директивы #define в следующем формате:
#define <имя константы> <значение константы>
Например:
#define iMIN l
#define iMAX 1000
Тип констант явно не указывается и определяется по форме записи. В конце директивы не ставится точка с запятой.
На стадии препроцессорной обработки указанные имена заменяются на соответствующие значения. Например, если в программе присутствует оператор
X=iMAX - iMIN;
то в результате препроцессорной обработки он примет вид:
Х=1000-1;
При этом идентификаторы iMAX и iMIN не требуют описания внутри программы.
Константы перечисляемого типа. Данное средство языка позволяет определять последовательность целочисленных именованных констант. Описание перечисляемого типа начинается со служебного слова enum, а последующий список констант заключается в фигурные скобки. Например:
enum {A,B,C,D};
В результате имени А будет сопоставлена константа 0, имени B константа 1, C 2, D 3. По умолчанию значение первой константы равно нулю.
Для любой константы можно явно указать значение. Например:
enum {A=10,B,C,D};
В результате будут установлены следующие соответствия: А=10, B=11, С=12, D=13.
Возможен и такой вариант определения перечисления:
enum {A=10,B=20,C=35,D=100} ;
Если перечисляемому типу дать имя, то его можно использовать в описании переменных. Например:
enum metal {Fe,Co,Na,Cu,Zn}; metal Metl,Met2;
Здесь идентификатор metal становится именем типа. После такого описания в программе возможны следующие операторы:
Metl=Na; Met2=Zn;
Определение размера памяти
sizeof операция вычисления размера (в байтах) для объекта того типа, который имеет операнд. Разрешены два формата операции:
sizeof унарное_выражение
и
sizeof(тип).
//podb01
#include <iostream.h>
#include <conio.h>
void main() {
clrscr();
cout << "\n sizeof 111 = " << sizeof 111;
cout << "\n sizeof 111 u = " << sizeof 111u;
cout << "\n sizeof 111L = " << sizeof 111L;
cout << "\n sizeof 111 ul = " << sizeof 111ul;
cout << "\n\t sizeof 40000 = " << sizeof 40000;
cout << "\n\t sizeof 40000u = " << sizeof 40000u;
cout << "\n\t sizeof 40000L = " << sizeof 40000L;
cout << "\n\t sizeof 40000LU = " << sizeof 40000LU;
cout<<"\n press any key one enter";
getch();
}
Здесь использована унарная операция языка С++ sizeof, позволяющая определить размер в байтах области памяти, выделенной для стоящего справа операнда.
Результат выполнения программы:
sizeof 111 = 2
sizeof 111u = 2
sizeof 111L = 4
sizeof 111uL = 4
sizeof 40000 = 4
sizeof 40000u = 2
sizeof 40000L = 4
sizeof 40000LU = 4
PAGE 5