Файл: Вариант 16: Понятие переменной в программировании.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 26.06.2023

Просмотров: 48

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Первый в таблице — это тип данных bool — целочисленный тип данных, так как диапазон допустимых значений — целые числа от 0 до 255. Но как Вы уже заметили, в круглых скобочках написано — логический тип данных, и это тоже верно. Так как bool используется исключительно для хранения результатов логических выражений. У логического выражения может быть один из двух результатов true или false. true — если логическое выражение истинно, false — если логическое выражение ложно[4].

Но так как диапазон допустимых значений типа данных bool от 0 до 255, то необходимо было как-то сопоставить данный диапазон с определёнными в языке программирования логическими константами true и false. Таким образом, константе true эквивалентны все числа от 1 до 255 включительно, тогда как константе false эквивалентно только одно целое число — 0.  Рассмотрим программу с использованием типа данных bool.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

// data_type.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

    bool boolean = 25; // переменная типа bool с именем boolean

    if ( boolean ) // условие оператора if

        cout << "true = "  << boolean << endl; // выполнится в случае истинности условия

    else

        cout << "false = " << boolean << endl; // выполнится в случае, если условие ложно

    system("pause");

    return 0;

}

В строке 9 объявлена переменная типа bool, которая инициализирована значением 25. Теоретически после строки 9, в переменной boolean должно содержаться число 25, но на самом деле в этой переменной содержится число 1. Число 0 — это ложное значение, число 1 — это истинное значение. Суть в том, что в переменной типа bool могут содержаться два значения — 0 (ложь) или 1 (истина). Тогда как под тип данных bool отводится целый байт, а это значит, что переменная типа bool может содержать числа от 0 до 255. Для определения ложного и истинного значений необходимо всего два значения 0 и 1. Возникает вопрос: «Для чего остальные 253 значения?».

Исходя из этой ситуации, договорились использовать числа от 2 до 255 как эквивалент числу 1, то есть истина. Вот именно по этому в переменной boolean содержится число 25 а не 1. В строках 10 -13 объявлен оператор условного выбора if, который передает управление оператору в строке 11, если условие истинно, и оператору в строке 13, если условие ложно. Результат работы программы смотреть на рисунке 2.1


Рис. 2.1.Тип данных bool

Тип данных char

Тип данных char — это целочисленный тип данных, который используется для представления символов. То есть, каждому символу соответствует определённое число из диапазона [0;255]. Тип данных char также ещё называют символьным типом данных, так как графическое представление символов в С++ возможно благодаря char. Для представления символов в C++ типу данных char отводится один байт, в одном байте — 8 бит, тогда возведем двойку в степень 8 и получим значение 256 — количество символов, которое можно закодировать. Таким образом, используя тип данных char  можно отобразить любой из 256 символов. Все закодированные символы представлены в таблице ASCII[5]

ASCII ( от англ. American Standard Code for Information Interchange) — американский стандартный код для обмена информацией.

Рассмотрим программу с использованием типа данных char.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

// symbols.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

    char symbol = 'a'; // объявление переменной типа char и инициализация её символом 'a'

    cout << "symbol = " << symbol << endl; // печать символа, содержащегося в переменной symbol

    char string[] = "cppstudio.com"; // объявление символьного массива (строки)

    cout << "string = " << string << endl; // печать строки

    system("pause");

    return 0;

}

Итак, в строке 9 объявлена переменная с именем symbol, ей присвоено значение символа 'a' (ASCII код). В строке 10 оператор cout печатает символ, содержащийся в переменной symbol. В строке 11 объявлен строковый массив с именем string, причём размер массива задан неявно. В строковый массив сохранена строка "cppstudio.com". Обратите внимание на то, что, когда мы сохраняли символ в переменную типа char, то после знака равно мы ставили одинарные кавычки, в которых и записывали символ. При инициализации строкового массива некоторой строкой, после знака равно ставятся двойные кавычки, в которых и записывается некоторая строка. Как и обычный символ, строки выводятся с помощью оператора cout, строка 12. Результат работы программы показан на рисунке 2.2

Рис. 2 — Тип данных char

Целочисленные типы данных

Целочисленные типы данных используются для представления чисел. В таблице 1 их аж шесть штук: short int, unsigned short int, int, unsigned int, long int, unsigned long int. Все они имеют свой собственный размер занимаемой памяти и  диапазоном принимаемых значений. В зависимости от компилятора, размер занимаемой памяти и диапазон принимаемых значений могут изменяться. В таблице 2.1 все диапазоны принимаемых значений и размеры занимаемой памяти взяты для компилятора MVS2010. Причём все типы данных в таблице 1 расположены в порядке возрастания размера занимаемой памяти и диапазона принимаемых значений. Диапазон принимаемых значений, так или иначе, зависит от размера занимаемой памяти. Соответственно, чем больше размер занимаемой памяти, тем больше диапазон принимаемых значений. Также диапазон принимаемых значений меняется в случае, если тип данных объявляется с приставкой unsigned — без знака. Приставка unsigned говорит о том, что тип данных не может хранить знаковые значения, тогда и диапазон положительных значений увеличивается в два раза, например, типы данных short int и unsigned short int[6].


Приставки целочисленных типов данных:

  • short — приставка укорачивает тип данных, к которому применяется, путём уменьшения размера занимаемой памяти;
  • long — приставка удлиняет тип данных, к которому применяется, путём увеличения размера занимаемой памяти;
  • unsigned (без знака)  — приставка увеличивает диапазон положительных значений в два раза, при этом диапазон отрицательных значений в таком типе данных храниться не может.

Так, что, по сути, имеем один целочисленный тип для представления целых чисел — это тип данных int. Благодаря приставкам short, long, unsigned появляется некоторое разнообразие типов данных int, различающихся размером занимаемой памяти и (или) диапазоном принимаемых значений.

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

В С++ существуют два типа данных с плавающей точкой: float и double. Типы данных с плавающей точкой предназначены для хранения чисел с плавающей точкой. Типы данных float и double могут хранить как положительные, так и отрицательные числа с плавающей точкой. У типа данных float размер занимаемой памяти в два раза меньше, чем у типа данных double, а значит и диапазон принимаемых значений тоже меньше. Если тип данных float объявить с приставкой long, то диапазон принимаемых значений станет равен диапазону принимаемых значений типа данных double. В основном, типы данных с плавающей точкой нужны для решения задач с высокой точностью вычислений, например, операции с деньгами.

Итак, были рассмотрены главные моменты, касающиеся основных типов данных в С++. Осталось только показать, откуда взялись все эти диапазоны принимаемых значений и размеры занимаемой памяти. А для этого разработаем программу, которая будет вычислять основные характеристики всех, выше рассмотренных, типов данных.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

// data_types.cpp: определяет точку входа для консольного приложения.

#include "stdafx.h"

#include <iostream>

// библиотека манипулирования вводом/выводом

#include <iomanip>

// заголовочный файл математических функций

#include <cmath>

using namespace std;

int main(int argc, char* argv[])

{

    cout << "     data type      "   << "byte"                      << "      "    << "    max value  " << endl // заголовки столбцов

             << "bool               =  " << sizeof(bool)                << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных bool*/                           << (pow(2,sizeof(bool) * 8.0) - 1)               << endl

         << "char               =  " << sizeof(char)                << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных char*/                           << (pow(2,sizeof(char) * 8.0) - 1)               << endl

         << "short int          =  " << sizeof(short int)           << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных short int*/                      << (pow(2,sizeof(short int) * 8.0 - 1) - 1)      << endl

             << "unsigned short int =  " << sizeof(unsigned short int)  << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных unsigned short int*/             << (pow(2,sizeof(unsigned short int) * 8.0) - 1) << endl

             << "int                =  " << sizeof(int)                 << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных int*/                            << (pow(2,sizeof(int) * 8.0 - 1) - 1)            << endl

             << "unsigned int       =  " << sizeof(unsigned int)        << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных unsigned int*/                   << (pow(2,sizeof(unsigned int) * 8.0) - 1)       << endl

             << "long int           =  " << sizeof(long int)            << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных long int*/                       << (pow(2,sizeof(long int) * 8.0 - 1) - 1)       << endl

             << "unsigned long int  =  " << sizeof(unsigned long int)   << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных undigned long int*/              << (pow(2,sizeof(unsigned long int) * 8.0) - 1)  << endl

             << "float              =  " << sizeof(float)               << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных float*/                          << (pow(2,sizeof(float) * 8.0 - 1) - 1)          << endl

             << "double             =  " << sizeof(double)              << "         " << fixed << setprecision(2)

/*вычисляем максимальное значение для типа данных double*/                         << (pow(2,sizeof(double) * 8.0 - 1) - 1)         << endl;

    system("pause");

    return 0;

}


Оператор sizeof() вычисляет количество байт, отводимое под тип данных или переменную. Функция pow(x,y) возводит значение х в степень y, данная функция доступна из заголовочного файла <cmath>. Манипуляторы fixed и setprecision() доступны из заголовочного файла <iomanip>. Первый манипулятор — fixed, передаёт в поток вывода значения в фиксированной форме. Манипулятор setprecision(n) отображает n знаков после запятой. Максимальное значение некоторого типа данных вычисляется по такой формуле:

1

2

3

4

5

6

7

8

9

max_val_type = 2^(b * 8 - 1) - 1; // для типов данных с отрицательными и положительными числами

// где, b - количество байт выделяемое в памяти под переменную с таким типом данных

// умножаем на 8, так как в одном байте 8 бит

// вычитаем 1 в скобочках, так как диапазон чисел надо разделить надвое для положительных и отрицательных значений

// вычитаем 1 в конце, так как диапазон чисел начинается с нуля

// типы данных с приставкой unsigned

max_val_type = 2^(b * 8 ) - 1; // для типов данных только с положительными числами

// пояснения к формуле аналогичные, только в скобочка не вычитается единица

Пример работы программы можно увидеть на рисунке 2.3.

Рис.2. 3 — Типы данных С++

В первом столбце показаны основные типы данных в С++, во втором столбце размер памяти, отводимый под каждый тип данных и в третьем столбце — максимальное значение, которое может содержать соответствующий тип данных. Минимальное значение находится аналогично максимальному[7]. В типах данных с приставкой unsigned минимальное значение равно 0.

1

2

3

4

5

// сокращённая запись типа данных int

short a1; //  тоже самое, что и short int

long a1; // тоже самое, что и long int

unsigned a1; // тоже самое, что и unsigned int

unsigned short a1; // тоже самое, что и unsigned short int

Если, например, переменной типа short int присвоить значение 33000, то произойдет переполнение разрядной сетки, так как максимальное значение в переменной типа short int  это 32767. То есть в переменной типа short int сохранится какое-то другое значение, скорее всего будет отрицательным. Так как затронули тип данных int, стоит отметить, что можно опускать ключевое слово int и писать, например, просто short. Компилятор будет интерпретировать такую запись как short int. Тоже самое относится и к приставкам long и unsigned.


2.2 Объявление переменных в С++

Чтобы использовать переменную в C++, необходимо сначала объявить это, указывая, каким типом данных мы хотим, чтобы это было. Синтаксис, чтобы объявить новую переменную должен записать спецификатор требуемого типа данных (как интервал, bool, плавание...) сопровождаемый допустимым идентификатором переменной. Например:

1
2

int a;

float mynumber;

Они - два допустимых объявления переменных. Первый объявляет переменную типа int с идентификатором a. Второй объявляет переменную типа float с идентификатором mynumber. После того, как объявленный, переменные a и mynumber могут использоваться в пределах остальной части их контекста в программе.

Если нужно объявить больше чем одну переменную того же самого типа, можно объявить всех их в единственном операторе, разделяя их идентификаторы цезурами. Например:

int a, b, c;

Это объявляет три переменные (a, b и c), все они типа int, и имеет точно то же самое значение как:

1
2
3

int a;

int b;

int c;

Целочисленные типы данных char, short, long и int могут быть или подписаны или без знака в зависимости от диапазона чисел, должен был быть представлен. Типы со знаком могут представить и положительные и отрицательные величины, тогда как типы без знака могут только представить положительные значения (и нуль). Это может быть указано или при использовании спецификатора signed или при использовании спецификатора unsigned перед именем типа. Например:

1
2

unsigned short int NumberOfSisters;

signed int MyAccountBalance;

По умолчанию, если не указываем или signed или unsigned, большинство настроек компилятора предположит, что тип подписывается, поэтому вместо второго объявления выше, мы, возможно, записали:

int MyAccountBalance;

с точно тем же самым значением (с или без ключевого слова signed).
Исключение к этому общему правилу - тип char, который существует отдельно и считается различным фундаментальным типом данных от signed char и unsigned char, который, как думают, сохранил символы. Следует использовать также signed или unsigned если нужно сохранить численные значения в char - доведенная до требуемого размера переменная.

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