Меню сайта
Категории каталога
PHP [0]
C++ [3]
Мини-чат
200
Наш опрос
Как Вам сайт?
1. Отлично
2. Хорошо
3. Можно и лучше
4. Неплохо
Всего ответов: 15
Главная » Статьи » Кодинг » C++

Урок второй. Премудрости объявления переменных
Премудрости объявления переменных

В этом уроке…

- Объявление переменных
- Объявление разных типов переменных
- Объявления типов переменных
- Выражения смешанного типа

Одним из основных в C++ является понятие переменной. Переменную можно представить, как небольшую шкатулку, в которой хранятся вещи для дальнейшего многократного использования. Понятие переменной заимствовано из математики. Инструкция вида

X = 1

сохраняет значение 1 в переменной х. После такого присвоения математики могут использовать переменную х вместо константы 1, пока не изменят значение х на другое.
В C++ переменные используются таким же образом. После присвоения х = 1; и до следующего изменения содержимого переменная х становится обозначением числа 1 в программе. При этом говорят, что значение х есть 1.
К сожалению, в C++ возни с переменными несколько больше, чем в математике. Этот урок как раз и повествует о заботах, связанных с использованием переменных в C++.

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

Все числа, с которыми работает C++, хранятся в небольших "ларцах", которые называются переменными. В математике с переменными обращаются достаточно свободно. Допускаются формулировки наподобие

| (х+2)=у/2
|                 найти х и у
| х+4=у
Уверен, вам не нужно объяснять, что такой способ задания переменных действительно однозначен. К сожалению, C++ не так сообразителен.
Прежде чем использовать в программе новую переменную, вы должны ее объявить:

int x;
х = 10;
int у;
у = 5;

Таким образом, мы объявили переменные х, у и определили, что они могут содержать значения типа int (типы переменных мы будем обсуждать позже). Объявлять переменные можно в любом удобном для вас месте программы, но обязательно перед их использованием.

Объявление разных типов переменных

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

х = 1;
х = 2.3
х = "Это - предложение."
х = Техас

Но C++ не настолько гибкий язык. В C++ переменные могут хранить значения только одного типа. Причиной тому является большая разница в размерах памяти, необходимой для хранения значений переменных разных типов. Если некоторые данные программы могут состоять всего из одного числа, то довольно часто разработчикам приходится манипулировать целыми предложениями.
Добавлю, что особенности использования переменных разных типов различны. Пока вы встречались только с переменными типа int:

int х;
х = 1;

В C++ тип int определяет множество целых чисел. Напомню, что целым называется число, не имеющее дробной части.
Целые числа используют для самых разных видов вычислений. В C++ более 90% всех переменных имеют тип int.
К сожалению, иногда использование в программах переменных типа int приводит к ошибочным результатам. Когда в первом уроке мы работали с программой, преобразующей температуру, существовала (пусть неявно) проблема: программа могла работать только с целыми значениями температуры.

Ограничения, налагаемые на целые числа вС++

Целочисленные переменные в C++ представляются типом int. На переменные этого типа накладываются те же ограничения, что и на их эквиваленты в математике.

Округление до целых значений
Рассмотрим проблему вычисления среднего трех чисел. Введем три целочисленные переменные — nValue1, nValue2, nValue3. Среднее значение вычисляется по формуле

(nValuel + nValue2 + nValue3) / 3

Поскольку все три значения являются целыми, их сума тоже будет целым числом. Например, сумма чисел 1, 2 и 2 равна 5. Но если 5 поделить на 3, получим 1,666.... В отличие от людей (обладающих разумом), компьютеры приводят полученный результат к целому значению, просто отбрасывая его дробную часть. При этом 1,666 утратит свой остаток и превратится в 1.
Для многих приложений усечение дробной части числа не представляет большой проблемы. Однако такое округление целых может весьма пагубно сказаться на работе некоторых программ. Рассмотрим следующую, эквивалентную приведенной выше формулу:

nValue1 / 3 + nValue2 / 3 + nValue3 / 3

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

Ограничения диапазона
Второй проблемой переменной типа int является ограниченный диапазон возможных ее значений. Максимальным значением обычной целочисленной переменной является число 2 147 483 647, минимальным — -2 147 483 648, т.е. общий диапазон — около 4 млрд чисел.

Решение проблемы усечения дробной части
Рассмотренные особенности переменных типа int делают невозможным их использование в некоторых приложениях. Но C++ умеет работать и с десятичными числами, которые могут иметь ненулевую дробную часть (математики называют их действительными числами). Используя действительные числа, можно избежать большинства перечисленных проблем. Заметьте, что десятичные числа могут иметь ненулевую дробную часть, а могут и не иметь, оставаясь действительными. В C++ число 1.0 является таким же действительным числом, как и 1.5. Эквивалентным им целым числом является просто 1.
В C++ действительные числа определены как числа с плавающей точкой, или просто float. Используя выражение "с плавающей точкой", имеют в виду, что десятичную запятую (или используемую вместо нее в программах точку) в десятичных числах можно перемещать вперед и назад настолько, насколько этого требуют вычисления. Действительные переменные объявляются так же, как и переменные типа int:

float fValue;

Начиная с этой строки, во всей остальной части программы переменная fValue может принимать значения типа float. Тип уже объявленной переменной изменить нельзя: fValue является действительной переменной и останется ею до конца программы. Рассмотрим, как решается присущая целочисленным переменным проблема отбрасывания дробной части. Для этого в объявлении все переменные определим как действительные (тип float):

1/3 + 2/3 + 2/3
Это эквивалентно выражению
0 . 333... + 0.666... + 0.666...,
которое равно
1.666...

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

Перечисление
Использовать переменные с плавающей точкой для простого перечисления нельзя. C++ не умеет определять, какое целочисленное значение подразумевается под действительным числом.
Например, ясно, что 1.0 есть 1. Но что такое 0.9 или 1.1? Следует ли их рассматривать как 1? Так что C++ избегает многих проблем, требуя использовать при перечислении только целые значения.

Потеря точности
Действительные переменные не могут решить всех вычислительных проблем. Обычно их точность ограничена приблизительно шестью разрядами, но есть и расширенный вариант типа для действительных чисел, который может содержать после десятичной точки до 15 значимых разрядов.
Чтобы понять эту проблему, представим 1/3 в виде бесконечной последовательности 0.333.... Однако математическое понятие периода в программировании не имеет смысла, так как точность компьютерных вычислений ограничена и где-то наша дробь должна оборваться (что зависит от использованного для хранения числа типа переменной). Поэтому, усреднив числа 1, 2, 2, мы получим не точное, а приблизительное значение 1.666667.
В некоторых случаях ошибки округления может исправлять сам C++; например, выводя информацию на экран, вместо числа 0.999999 C++ выдаст пользователю значение 1.

Ограниченность диапазона
Тип данных float также ограничен, хотя диапазон чисел с плавающей точкой намного обширнее диапазона целочисленных переменных. Максимальным значением типа int является число чуть больше 2 млрд. Максимальное значение переменной типа float приблизительно равно 100000000000000000000000000000000000000 (1 с 38) нулями.

Объявления типов переменных
Вы уже знаете, что все переменные в программе должны быть объявлены и что им должен быть назначен тип. В таблице 2.1 представлен список некоторых стандартных типов переменных языка C++ с указанием их достоинств и недостатков.

Таблица 2.1 Переменные С++
 
ПЕРЕМЕННАЯ ПРИМЕР ХАРАКТЕРИСТИКА
int 1 Простые положительные или отрицательные числа, используемые для перечисления
float 1.0 F Действительные числа
double 1.0 Расширенная версия float: использует больше памяти, допускает работу с большим диапазоном и обеспечивает более высокую точность вычислений
char c Символьный тип; значением переменных может быть символ алфавита, цифра, знак препинания или знак арифметической операции. Не годится для арифметических операций
string "this is a string" Строка символов, составляющая предложение
long 10L Потенциально расширенная версия типа int.
 
Следующий оператор объявляет переменные lVariable типа long и dVariable типа double и присваивает им начальные значения:

//объявление переменной и установка ее равной 1
long lVariable;
lVariable = 1

//объявление переменной типа double и ее инициализация
double dVariable;
dVariable = 1.0;

Объявить и инициализировать переменную можно одним оператором:

int nVariable = 1; //объявление переменней и ее инициализация

Единственное преимущество инициализации переменной в объявлении — уменьшение размеров текстов программ. Но даже и это весьма важное достижение. Переменная типа char может содержать единственный символ, в то время как строковая переменная — строку символов. Поэтому а можно интерпретировать и как символ а, и как строку, содержащую только букву а (в действительности string не является типом переменной, но в большинстве случаев его можно рассматривать именно так). В последующих уроках мы более детально рассмотрим этот тип данных.

Типы констант
Константой называют произвольную постоянную величину (например, 1, 0.5 или ‘с’). Подобно переменным, константы имеют свой тип. В выражении n = 1; константа 1 имеет тип int. Чтобы привести 1 к типу long, нужно написать n = 1L;. Для лучшего понимания можно провести следующую аналогию: если под 1 понимать поездку на грузовике, то 1L можно интерпретировать как путешествие на лимузине. Их маршруты могут быть совершенно одинаковыми, но согласитесь, что путешествовать вторым способом гораздо удобнее.
Константу 1 можно также привести к действительному числу 1.0. Однако заметим, что по умолчанию типом действительной константы является double. Поэтому 1.0 будет числом типа double, а не float.

Специальные символы
Для работы с любыми печатаемыми символами можно использовать переменные типа char или string. Но значениями переменных, используемых в качестве символьных констант, могут быть и непечатаемые символы. В табл. 2.2 приведено описание некоторых важных непечатаемых символов.

Таблица 2.2. Специальные символы
 
Символьные константы Обозначение действий
\n Новая строка
\t Табуляция
\0 Нулевой символ
\\ Обратная косая черта
 
С символом новой строки мы уже встречались раньше. Он позволяет разделить строку в любом месте на две части. Например, строка "Это первая строка \п Это вторая строка"
при выводе на экран будет выглядеть так:

Это первая строка
Это вторая строка

По аналогии символ табуляции \t перемещает выводимую информацию к следующей позиции табуляции. В зависимости от типа компьютера, на котором вы запустите программу, эта позиция может изменяться. Символ "обратная косая черта"
используется для обозначения специальных символов, поэтому, чтобы вывести его на экран, необходимо записать два символа: \\. Соответственно путь к файлу file в папке folderA в С++ будет выглядеть так: С:\\folderA\\file.
 
Выражения смешанного типа
C++ позволяет использовать в одном выражении переменные разных типов. Например, позволено складывать целые и действительные переменные. В следующем выражении переменная nValue является целой:

//в следующем выражении перед выполнением операции сложения
// значение nValuel преобразуется к типу double
int nValuel = 1;
double fValue = nValuel + 1.0;

Выражение, в котором два операнда относятся к разным типам, называется выражением смешанного типа. Тип генерируемого в результате значения будет соответствовать более мощному типу операнда. В нашем случае перед началом вычислительного процесса nValuel конвертируется в тип double. По тому же принципу выражение одного типа может быть присвоено переменной другого типа, например:

//в следующем задании целая часть
// fVariable сохраняется в nVariable
float fVariable = 1.0;
int nVar iable;
nVariable = fVariable;

Если переменная в левой стороне равенства относится к типу менее мощному, чем переменная справа, то при таком присвоении можно потерять точность или диапазон значений (например, если значение переменной fVariable превышает диапазон допустимых значений переменной nVariable).
 
Соглашения по именованию
Вы могли заметить, что имя каждой переменной начинается с определенного символа, который, как может показаться, совсем ни к чему (эти специальные символы приведены в таблице ниже). С помощью соглашений по использованию этих символов можно мгновенно распознать, что dvariable— это переменная типа double.
Эти символы помогают программисту распознавать типы переменных, не обращаясь к их объявлениям в другом месте программы. Так, нетрудно определить, что в представленном ниже выражении осуществляется присвоение смешанного типа
(переменная типа long присваивается целочисленной переменной):

nVariable = lVariable;

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

Символ Тип
n int
l long
f float
d double
c character
sz string

Преобразование типа большего размера в меньший называется понижающим приведением (demotion), а обратное преобразование — повышающим приведением (promotion).
Использование в C++ выражений смешанного типа — идея далеко не самая блестящая; их лучше избегать, не позволяя C++ делать преобразования за вас.

 

Категория: C++ | Добавил: game4u (08.02.2008)
Просмотров: 20610 | Комментарии: 2 | Рейтинг: 4.1/15 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа
Поиск
Друзья сайта
Скачать переводы манги, саундтреки к аниме, рисование манги, галерея картинок
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Copyright Game4U © 2024