Типы данных с плавающей точкой



Лекция4-курс-«Языки программирования»

СОДЕРЖАНИЕ

 

Типы данных С++. 2

Общие положения. 2

Символы.. 3

Целые числа. 4

Типы данных с плавающей точкой. 5

Булев тип данных. 6

Тип данных void. 7

Литералы.. 7

Шестнадцатеричные и восьмеричные литералы.. 8

Строковые литералы.. 8

Символьные Esc-последовательности. 8

Подробнее о переменных. 9

Инициализация переменных. 9

Динамическая инициализация переменных. 10

Операторы.. 10

Арифметические операторы.. 10

Инкремент и декремент.. 11

Операторы отношения и логические. 12

Оператор присваивания. 13

Составные присваивания. 13

Выражения. 14

Приведение типа. 14

Вопросы для самопроверки. 16

 


Типы данных С++

Общие положения

Ядром языка программирования являются его типы данных и операторы. Эти элементы определяют границы языка и области его применения. С++ поддерживает богатый набор типов данных и операторов, что делает его удобным для решения самого широкого круга задач программирования.

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

Таким образом С++ позволяет работать с теми же типами данных, что и процессор. Этим и объясняется возможность использования С++ для написания чрезвычайно эффективных программ системного уровня.

Семь базовых типов данных служат ядром системы типов С++. Язык допускает указание перед некоторыми базовыми типами модификаторов, которые изменяют значение базового типа, более точно приспосабливая его к потребностям определённых ситуаций. Возможное использование модификатора с базовым типом приведено в таблице

 

№ п/п Базовый тип Значение Модификатор Значение с учётом модификатора Минимальный диапазон
1 char Символ От -127 до 127

 

 

Unsigned char Символ без знака От 0 до 255
signed char Символ со знаком От -127 до 127
2 wchar_t «Широкий» символ От 0 до 65535
3 int Целое От -32768 до 32768

 

 

 

unsigned int Целое без знака От 0 до 65535
signed int Целое со знаком От -32768 до 32768
short int Короткое целое От -32768 до 32768
unsigned short int Короткое целое без знака От 0 до 65535
long int Длинное целое (- +)2147483647
signed long int Длинное целое со знаком (- +)2147483647
unsigned long int Длинное целое без знака От 0 до 4294967295
4 float Число с плав. точкой с 6-ю знач. цифрами От 1Е-37 до 1Е+37

5

doubl Число с плав. точкой удв. точности с 10-ю знач. цифрами От 1Е-37 до 1Е+37
    long double с 10-ю знач. цифрами От 1Е-37 до 1Е+37
6 bool Булева переменная True или false
7 void Пустой тип

 

Примечание

В таблице определены минимальные диапазоны для встроенных типов данных, а не их точные границы, что позволяет каждому компилятору оптимизировать типы данных применительно к используемой операционной среде. Отчасти поэтому С++ позволяет создавать высокопроизводительное программное обеспечение. Стандарт С_++ только устанавливает, что встроенные типы данных должны удовлетворять определённым требованиям. Например, стандарт требует, чтобы тип int имел естественный размер, задаваемый архитектурой исполнительной среды. Таким образом, в 32-разрядной среде int будет иметь размер в 32 бит. В 16-разрядной длина данных типа int составит 16 бит.

Символы

Переменные типа содержат 8—битовые коды ASCII символов, например А, z или G, или любое 8-битовое число. При задании в программе символа его следует заключит в одинарные кавычки, например:

 

char ch;

ch = ’X’

cout << “ Это ch: ”<< ch;

При выполнении на экран будет выведено сообщение: Это ch: Х

Тип можно модифицировать с помощью модификаторов signed или unsigned. Вообще говоря, будет ли char по умолчанию со знаком или без знака, зависит от реализации. Для большинства компиляторов char считается типом со знаком. В таких средах использование char с модификатором signed является избыточным.

Тип char может содержать значения, отличные от наборов символов ASCII. Этот тип можно использовать как маленькое целое с диапазоном значений обычно от -128 до 127. Такую переменную можно использовать вместо целой. Так в ниже приведённой программе переменная типа char используется для управления циклом.

// АВС.cpp: главный файл проекта.

// Эта программа выводит латинский алфавит

// Назовите этот файл АВС.cpp

#include "stdafx.h"

#include <iostream>

using namespace std;

// C++ программа начинает своё выполнение с функции main()

int main()

{

       setlocale (LC_ALL,"Russian");

char letter;

for (letter = 'A'; letter <= 'Z'; letter++)

 

       cout << letter <<" ";

        cin.get();

}

 

Тип wchar_t содержит символы, входящие в расширенный набор, используемый в случаях, когда число символов велико и их кодировка требует большее, чем 8 число бит, например, китайский язык. Тип wchar_t был создан в С++ для поддержки таких языков.

Целые числа

Переменные типа int содержат целые величины, у которых нет дробных частей. Переменные этого типа часто используются для управления циклами и условными предложениями, а также для счёта. Операции с величинами целого типа выполняются значительно быстрее, чем для типов с плавающей точкой.

В силу важности целых чисел для программирования, в С++ для них определён ряд вариантов. Из приведённой ранее таблицы видно, что целые могут быть обычными, короткими и длинными, со знаком и без знака, что устанавливается с использованием модификаторов. Целое со знаком может содержать как положительное так и отрицательное значение. По умолчанию тип int рассматривается как числа со знаком. Таким образом, использование модификатора signed является избыточным, но допустимым

Различие между целыми со знаком и без знака заключается в том, каким образом интерпретируется старший бит числа. Если объявлено целое со знаком, то компилятор С++ при генерации кода предполагает, что старший бит числа используется как флаг знака. Если флаг знака равен 0, то число положительное; если он равен 1, то число отрицательное. Отрицательные числа почти всегда представляются в дополнительном коде. Для получения отрицательного числа этим методом все биты числа (за исключением знака) инвертируются и к полученному числу прибавляется 1. После чего флаг знака числа устанавливается в 1.

 

// INT_ZN.cpp: главный файл проекта.

/* Пргорамма демонстрирует различие между

Целыми числами со знаком и без знака*/

// Назовите этот файл INT_ZN.cpp

       #include "stdafx.h"

       #include <iostream>

       using namespace std;

// C++ программа начинает своё выполнение с функции main()

int main()

{

       setlocale (LC_ALL,"Russian");

       short int i;            //короткое целое со знаком

       unsigned short int j;   //короткое целое без знака

       j = 60000;

       i = j;

       cout << i <<" "<< j;

        cin.get();

}

Вывод сообщения на экран будет выглядеть как:

-5536 60000

Примечание

В С++ можно использовать модификаторы short, long, unsigned без int. Тип int в этом случае предполагается по умолчанию. Таким образом, оба следующих предложения объявляют целые переменные без знака.

unsigned x;

unsigned int y;

Типы данных с плавающей точкой

Переменные типов float и doubl используются либо при необходимости иметь дробные числа, либопри работе с большими или, наоборот, очень маленькими числами Типы float и doubl различаются значением наибольшего (наименьшего) числа, которое может содержаться в переменных этих типов. Обычно тип doubl может хранить число, приблизительно на 10 порядков больше чем float.

В программах чаще используется тип doubl. Одна из причин этого заключается в том, что многие математические функции используют значения типа doubl. Например, функция sqrt() возвращает значение типа doubl, являющееся квадратным корнем из аргумента того же типа.

 

// DLGP.cpp: главный файл проекта.

/* Использование теоремы Пифагора для нахождения

длины гипотенузы прямоугольного треугольника

при заданных длинах двух его катетов*/

// Назовите этот файл DLGP.cpp

#include "stdafx.h"

#include <iostream>

#include <cmath>

using namespace std;

// C++ программа начинает своё выполнение с функции main()

int main()

{

       setlocale (LC_ALL,"Russian");

       double x, y, z;

       x = 5.0;

       y = 4.0;

       z = sqrt(x*x + y*y);

       cout << "Гипотенуза равна "<< z;

       cin.get();

}

Вывод сообщения на экран будет выглядеть как:

Гипотенуза равна 6.40312

Тип long double позволяет работать с очень большими или очень маленькими числами. Наиболее полезен этот тип в программах для научных исследований. Например, типом long double можно пользоваться для анализа астрономических данных

Булев тип данных

Тип bool является относительно новым добавлением в С++. Он хранит булевы (истина или ложь) значения. В С++ определены две булевы константы true (истина) и false (ложь), которые только можно использовать с переменными этого типа.

Одной из фундаментальных концепций C++ является интерпретация любого ненулевого значения как true, а нулевого – как false. Эта концепция полностью совместима с типом, потому что при использовании в булевом выражении С++ автоматически преобразует любое ненулевое значение в true , а ненулевое – в false. Справедливо также и обратное:  при использовании в не булевом выражении true преобразуется в 1, а false - -в 0.

Далее приведена программа, демонстрирующая использование типа bool:

/ EX_BOOL.cpp: главный файл проекта.

// Демонстрация булевых значений

// Назовите этот файл EX_BOOL.cpp

#include "stdafx.h"

#include <iostream>

using namespace std;

 

// C++ программа начинает своё выполнение с функции main()

int main()

{

       setlocale (LC_ALL,"Russian");

       bool b;

       b = false;

       cout << "b равно "<< b <<"\n";

       b = true;

       cout << "b равно "<< b <<"\n";

// булево значение может управлять предложением if

       if (b) cout << "Это выполняется.\n";

       b = false;

       if (b) cout << "Это не выполняется.\n";

// результатом действия оператора отношения является

// значение true/ false

       cout << "10 > 9 есть "<< (10 >9) <<"\n";

        cin.get();

}

 Вывод программы должен быть:

B равно 0

B равно 1

Это выполняется

10 >9 есть 1

Таким образом:

· Если значение типа bool выводится с помощью cout, на экране отображается 0 или 1. Однако существуют опции вывода, позволяющие вывести на экран слова true и false.

· Значение булевой переменной может использоваться для управления предложением if.

· Результатом действия оператора отношения, например, >, является булево значение. Именно поэтому выражение 10 > 9 выводит значение 1. Вокруг выражения необходимы дополнительные скобки, потому что оператор << имеет более высокий приоритет, чем >.

Тип данных void

Тип void описывает выражение, не имеющее значение. В примерах далее будет показано, как это может быть использовано в программе.


 

Проект 2-1 Разговор с Марсом

Кратчайшее расстояние между Землёй и Марсом 34 000 000 миль. Следует рассчитать, какова будет задержка между моментом отправления радиосигнала с Земли и моментом достижения им Марса.

Радиосигнал распространяется со скоростью света, т.е. приблизительно 186000 миль в секунду. Для определения задержки следует расстояние разделить на скорость света. Время задержки выразить в секундах и в минутах.

// MARS.cpp: главный файл проекта.

// Назовите этот файл MARS.cpp

#include "stdafx.h"

#include <iostream>

using namespace std;

// C++ программа начинает своё выполнение с функции main()

int main()

{

       setlocale (LC_ALL,"Russian");

       double dist;            // расстояние

       double lspeed;          //скорость света

       double delay;           //задержка в секундах

       double delay_min;  // задержка в минутах

}

 Вывод программы на экран следующий:

Временная задержка при разговоре с Марсом: 182.796 секунд.

Это составляет 3.04659 минут.

 

Допишите программу и получите верный результат.

Литералы

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

В С++ литералы могут быть любого из базовых типов данных. Способ представления литерала зависит от его типа. Символьные литералы заключаются в одиночные кавычки. Числовые литералы задаются в виде чисел: целых, дробных и становятся интуитивно понятными. Однако существует несколько типов для описания целых, дробных чисел. Поэтому для правильного представления компилятор С++ автоматически принимает определённые предположения относительно типа литерала, а также для литерала можно явно указать тип.

По умолчанию компилятор С++ помещает целочисленный литерал в минимальный по размеру и совместимый с конкретным значением литерала тип данного, начиная с int, литералы с плавающей точкой получают тип double.

В тех случаях, когда предположения по умолчанию о типах числовых литералов не устраивают можно задать конкретный тип числового литерала с помощью суффикса. Примеры использования суффиксов приведены в Таблице 1.

Тип данного Примеры констант
int 1 123 21000 -234
long int 35000L -34L
unsigned int 10000U 987U 40000U
Unsigned long 12323UL 900000UL
float 123.23F 4.34e-3F
double 23.23 123123.33 -0.9876324
long double 1001.2L

 


Дата добавления: 2019-07-15; просмотров: 447; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!