Цель лекции: изучить классификацию типов и их внутреннее представление в языке С++, научиться работать со стандартными и
Основная цель любой программы состоит в обработке каких-либо данных, например, чисел или текстов. Данные могут быть различного вида или типа и, в зависимости от этого, с ними можно выполнять разные действия.
В любом языке программирования каждая константа, переменная, результат
Тип данных – это множество допустимых значений, которые может принимать тот или иной объект, а также множество допустимых операций, которые применимы к нему. В современном понимании тип также зависит от внутреннего представления информации.
Таким образом, данные различных типов хранятся и обрабатываются по-разному. Тип данных определяет:
Исходя из данных характеристик, необходимо определять тип каждой величины, используемой в программе для представления объектов. Обязательное описание типа позволяет компилятору производить
Современные языки программирования, как правило, могут иметь набор простых типов, являющихся встроенными в данный язык программирования, и средства для создания производных типов.
Объектно-ориентированные языки программирования позволяют определять типы класса.
Реализация простых типов данных заключается в способе представления значений данного типа в компьютере и в наборе операций, поддерживаемых для данного типа.
Тип данных определяет размер памяти, выделяемой под переменную данного типа при ее создании. Язык программирования C++ поддерживает следующие типы данных (рис. 1.1).
(рис 1.1) Типы данных в языке С++Существует четыре
(короткий) |
длина |
long (длинный) |
|
(знаковый) |
знак (модификатор) |
(беззнаковый) |
Рассмотрим более подробно
Переменные данного типа применяются для хранения целых чисел (integer). int, сообщает компилятору, что он должен связать с идентификатором (именем) переменной количество памяти, достаточное для хранения целого числа во время выполнения программы.
Границы диапазона целых чисел, которые можно хранить в переменных типа int, зависят от конкретного компьютера, компилятора и операционной системы (от реализации). Для 16-разрядного процессора под него отводится 2 байта, для 32-разрядного – 4 байта.
Для внутреннего представления знаковых целых чисел характерно определение знака по старшему биту (0 – для положительных, 1 – для отрицательных). Поэтому число 0 во внутреннем представлении относится к положительным значениям. Следовательно, наблюдается
В
От количества отводимой под объект памяти зависит множество допустимых значений, которые может принимать объект:
short int – занимает 2 байта, следовательно, имеет диапазон от –32 768 до +32 767;int – занимает 4 байта, следовательно, имеет диапазон от –2 147 483 648 до +2 147 483 647;long int – занимает 4 байта, следовательно, имеет диапазон от –2 147 483 648 до +2 147 483 647;long long int – занимает 8 байтов, следовательно, имеет диапазон от –9 223 372 036 854 775 808 до +9 223 372 036 854 775 807.Модификаторы и также влияют на множество допустимых значений, которые может принимать объект:
unsigned short int – занимает 2 байта, следовательно, имеет диапазон от 0 до 65 535;unsigned int – занимает 4 байта, следовательно, имеет диапазон от 0 до 4 294 967 295;unsigned long int – занимает 4 байта, следовательно, имеет диапазон от 0 до 4 294 967 295;unsigned long long int – занимает 8 байтов, следовательно, имеет диапазон от 0 до 18 446 744 073 709 551 615.Например:
unsigned int b; signed int a; int c; unsigned d; signed f;
Приведем несколько правил, касающихся записи целочисленных значений в исходном тексте программ.
int.На практике рекомендуется использовать основной int. Данные основного подойдет для хранения больших массивов чисел с целью экономии памяти при условии, что значения элементов не выходят за предельные границы для этих типов. Длинные типы необходимы в ситуации, когда не достаточно типа int.
Для хранения вещественных чисел применяются типы данных float (с одинарной точностью) и double (с двойной точностью). Смысл знаков "+" и "-" для вещественных типов совпадает с целыми. Последние незначащие нули справа от десятичной точки игнорируются. Поэтому варианты записи +523.5, 523.5 и 523.500 представляют одно и то же значение.
Для представления вещественных чисел используются два формата:
[знак][целая часть].[дробная часть]Например: –8.13; .168 (аналогично 0.168); 183. (аналогично 183.0).
мантисса Е/е порядокНапример: 5.235e+02 (5.235 x 102 = 523.5); –3.4Е-03 (–3.4 x 10-03 = – 0.0034)
В большинстве случаев используется тип double, он обеспечивает более высокую точность, чем тип float. Максимальную точность и наибольший диапазон чисел достигается с помощью типа long double.
Величина с модификатором типа float занимает 4 байта. Из них 1 бит отводится для знака, 8 бит для избыточной
Величина типа double занимает 8 байтов в памяти. Ее формат аналогичен формату float. Биты памяти распределяются следующим образом: 1 бит для знака, 11 бит для
Величина типа long double аналогична типу double.
Например:
float a, b; double x, y; long double z;
В стандарте C++ нет типа данных, который можно было бы считать действительно символьным. Для представления символьной информации есть два типа данных, пригодных для этой цели, – это типы char и wchar_t.
Переменная типа char рассчитана на хранение только одного символа (например, буквы или пробела). В памяти компьютера символы хранятся в виде целых чисел. Соответствие между символами и их кодами определяется
Так как в памяти компьютера символы хранятся в виде целых чисел, то тип char на самом деле является подмножеством типа int.
Под величину символьного типа отводится 1 байт.
Тип char может использоваться со и . В данных типа можно хранить значения в диапазоне от –128 до 127. При использовании типа значения могут находиться в диапазоне от 0 до 255. Для кодировки используется код
Величины типа char также применяются для хранения чисел из указанных диапазонов.
Тип wchar_t предназначен для работы с набором символов, для кодировки которых недостаточно 1 байта, например в кодировке wchar_t равен 2 байтам. Если в программе необходимо использовать строковые константы типа wchar_t, то их записывают с префиксом L, например, L "Слово".
Например:
char c='c';
char a,b;
char r[]={'A','B','C','D','E','F','\0'};
char s[] = "ABCDEF";
В языке С++ используется двоичная логика (истина, true и false.
Внутренняя форма представления значения false соответствует 0, любое другое значение интерпретируется как true. В некоторых компиляторах языка С++ нет данного типа, в этом случае используют тип int, который при истинных значениях выдает 1, а при ложных – 0. Под данные
Данный тип определяется как набор идентификаторов, являющихся обычными именованными целыми константами, которым приписаны уникальные и удобные для использования обозначения. Таким образом, перечисления представляют собой упорядоченные наборы целых значений. Они имеют своеобразный синтаксис и достаточно специфическую область использования.
Переменная, которая может принимать значение из некоторого списка определенных констант, называется переменной перечисляемого типа или перечислением. Данная переменная может принимать значение только из int. Следовательно, память, соответствующая переменной перечисления, – это память, необходимая для размещения значения типа int.
Например:
enum year {winter, spring, summer, autumn};
enum week {Sunday, Monday, Tuesday, Wednesday,
Thursday, Friday, Saturday};
Множество значений этого типа пусто. Тип void имеет три назначения:
Тип void в основном используется для
| Тип | Обозначение | Название | Размер памяти, байт (бит) | Диапазон значений | ||
| Имя типа | Другие имена | |||||
| целый | int | целый | 4 (32) | -2 147 483 648 до 2 147 483 647 | ||
| беззнаковый целый | 4 (32) | 0 до 4 294 967 295 | ||||
| короткий целый | 2 (16) | -32 768 до 32 767 | ||||
| беззнаковый короткий целый | 2 (16) | 0 до 65 535 | ||||
| long | long int | длинный целый | 4 (32) | -2 147 483 648 до 2 147 483 647 | ||
| беззнаковый длинный целый | 4 (32) | 0 до 4 294 967 295 | ||||
| long long | long long int | длинный-предлинный целый | 8 (64) | -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 | ||
| беззнаковый длинный-предлинный целый | 8 (64) | 0 до 18 446 744 073 709 551 615 | ||||
| long int | ||||||
| символьный | char | байт (целый длиной не менее 8 бит) | 1 (8) | -128 до 127 | ||
| - | беззнаковый байт | 1 (8) | 0 до 255 | |||
| wchar_t | - | расширенный символьный | 2 (16) | 0 до 65 535 | ||
| вещественный | float | - | вещественный одинарной точности | 4 (32) | 3.4Е-38 до 3.4Е+38 (7 значащих цифр) | |
| double | - | вещественный двойной точности | 8 (64) | 1.7Е-308 до 1.7Е+308 (15 значащих цифр) | ||
| long double | - | вещественный максимальной точности | 8 (64) | 1.7Е-308 до 1.7Е+308 (15 значащих цифр) | ||
| bool | - | логический | 1 (8) | true (1) или false (0) | ||
| - | перечисляемый | 4 (32) | -2 147 483 648 до 2 147 483 647 | |||
При
Преобразование типов – это приведение значения переменной одного типа в значение другого типа.
Выделяют явное и неявное
Формат операции
имя_типа (операнд)
Например, int(x), float(2/5), long(x+y/0.5).
Пример 1.
//Взятие цифры разряда сотых в дробном числе
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
float s,t;
long int a,b;
printf("Введите вещественное число\n");
scanf("%f", s);
t=s*100;
a=(int)t;
//переменная t приводится к типу int в переменную a
b=a%10;
printf("\nЦифра разряда сотых числа %f равна %d.", s, b);
system("pause");
return 0;
}
Преобразования типов нужно применять с осторожностью, так как данная операция может приводить к
Пример 2. Временной интервал
Заданы моменты начала и конца некоторого промежутка времени в часах, минутах и секундах (в пределах одних суток). Найти продолжительность этого промежутка в тех же единицах.
Исходными данными для этой задачи являются шесть целых величин, задающих моменты начала и конца интервала, результатами – три целых величины (тип int ).
Обозначим переменные для хранения начала интервала hour1, min1 и sec1, для хранения конца интервала – hour2, min2 и sec2, а результирующие величины – , min и sec.
Для решения этой задачи необходимо преобразовать оба момента времени в секунды, вычесть первый из второго, а затем преобразовать результат обратно в часы, минуты и секунды. Следовательно, потребуется промежуточная переменная sum_sec, в которой будет храниться величина интервала в секундах. Она может иметь весьма большие значения, ведь в сутках 86400 секунд, что выходит за пределы типа . Следовательно, для этой переменной выберем длинный long int, сокращенно long ).
Для перевода результата из секунд обратно в часы и минуты используется отбрасывание дробной части при делении целого числа на целое.
//Временной интервал. Форматированный ввод-вывод данных
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[]){
int hour1, min1, sec1, hour2, min2, sec2, hour, min, sec;
long int sum_sec;
printf("Введите время начала интервала (час мин сек)\n");
scanf("%d%d%d", hour1,min1,sec1);
printf("Введите время окончания интервала (час мин сек)\n");
scanf("%d%d%d", hour2,min2,sec2);
sum_sec = (hour2-hour1)*3600+(min2-min1)*60+sec2-sec1;
hour = sum_sec/3600;
min = (sum_sec-hour*3600)/60;
sec = sum_sec-hour*3600-min*60;
printf("Продолжительность промежутка от %d:%d:%d до
%d:%d:%d\n",hour1,min1,sec1,hour2,min2,sec2);
printf(" равна %d:%d:%d\n",hour,min,sec);
system("pause");
return 0;
}
При выполнении математических операций производится неявное (
1. Преобразование целых типов со знаком.
long int или unsigned long int к типу float, когда точность часто может быть потеряна.2. Преобразование целых типов без знака.
unsigned short и short – числа в диапазоне от 32768 до 65535 превратятся в отрицательные.signed long, которое затем преобразуется в плавающий тип.3. Преобразования плавающих типов.
float преобразуются к типу double без изменения значения.double преобразуются к float c некоторой float, то происходит потеря значимости, о чем сообщается во время выполнения.long преобразуется к требуемому целому типу. Если значение слишком велико для long, то результат преобразования не определен. Обычно это означает, что на усмотрение компилятора может получиться любой "мусор". В реальной практике с такими преобразованиями обычно сталкиваться не приходится.Базовые типы – это типы данных, которые предопределены
Вещественный тип – это
Логический (булевый) тип – это
Неявное приведение типа – это преобразование значения переменной к новому типу, которое происходит автоматически, по правилам, заложенным в языке программирования.
Перечисляемый тип – это
Преобразование типов – это приведение значения переменной одного типа в значение другого типа.
Производные типы – это типы данных, которые задаются пользователем.
Символьный тип – это
Тип данных – это множество допустимых значений, которые может принимать тот или иной объект, а также множество допустимых операций, которые применимы к нему.
Типы класса – это типы данных, экземплярами которых являются объекты.
Целочисленный тип – это
Явное приведение типа – это преобразование значения переменной к новому типу, при котором указывается
Цель работы: изучить классификацию типов и их внутреннее представление в языке С++, научиться работать со стандартными и
При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая получает на входе числовые данные, выполняет их обработку в соответствии с требованиями задания и выводит результат на экран. Ввод данных осуществляется с клавиатуры с учетом требований к входным данным, содержащихся в постановке задачи (к задачам 2 и 4 приведен рекомендуемый вид диалога во время работы программы). Ограничениями на входные данные является допустимый диапазон значений используемых
Теоретические сведения.
Ознакомьтесь с материалом лекции 1.
Задания к лабораторной работе.
Выполните приведенные ниже задания.
Вычисление стоимости поездки на дачу. Расстояние до дачи (км) – 67 Расход бензина (л на 100 км) – 8.5 Цена литра бензина (руб.) – 23.7 Поездка на дачу обойдется в 269 руб. 94 коп.
d является корнем только одного из уравнений ax2 + bx + c = 0 и mx + n = 0 относительно х.Преобразование числа в денежный формат. Введите дробное число – 23,6 23.6 руб. – это 23 руб. 60 коп.
Указания к выполнению работы.
Каждое задание необходимо решить в соответствии с изученными методами обработки данных и преобразования типов данных в языке С++.
Следует реализовать каждое задание в соответствии с приведенными этапами:
Требования к отчету.
Отчет по лабораторной работе должен соответствовать следующей структуре.
Контрольные вопросы
void?void? Какие значения может принимать переменная типа void?Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.