Программирование >>  Процедурные приложения 

1 ... 22 23 24 [ 25 ] 26 27 28 ... 150


системах, он имел размерность 80 бит (10 байтов) и диапазон значений приблизительно +/-1,2Е+/-4932. В Windows 95/98/NT он эквивалентен типу double.

В следующем фрагменте программы на языке C++ показано описание и использование переменных с плавающей запятой:

float. срр

Эта программа на языке C++ демонстрирует использование переменных типа float. #include <iostream.h> #include <iomanip.h> int main() {

long loriginal flags = cin.flags() floatfvalue;

cout << Введите число с плавающей запятой: cin >> fvalue;

cout << Стандартный формат: << fvalue << \n ;

cout << setiosflags(ios::scientific);

cout << Научный формат : << fvalue << \n ;

cout << resetiosflags(ios::scientific);

cout << setiosflags(ios::fixed) ;

cout << Фиксированный формат: << fvalue << \n ;

cout.flags (loriginal flags);

return(0);

В результате работы программы на экран будет выведена следующая информация:

Введите число с плавающей запятой: 12.34 Стандартный формат: 12.34 Научный формат: 1.234000е+001 Фиксированный формат: 12.340000

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

Перечисления

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

фрагменте описывается перечисление air supply с константами EMPTY, useable и FULL и

создается переменная instructor tank данного типа.

enum air supply { EMPTY, USEABLE, FULL = 5 } instructor tank;

Все константы имеют тип int, и каждой из них автоматически присваивается значение по умолчанию, если не указано какое-нибудь другое значение. В нашем примере константе EMPTY по умолчанию присвоено нулевое значение, так как это первый элемент в списке. Константе useable присвоено значение 1, так как это второй элемент списка после константы со значением 0. Для константы full вместо значения по умолчанию назначено значение 5. Если бы после константы full стояла еше одна константа, то ей по умолчанию было бы присвоено значение 6.

Имея перечисление air supply, объявим еще одну переменную - student tank: enum air supply student tank

Обе переменные теперь можно использовать независимо друг от друга:

instructor tank = FULL; >>tudent tank = EMPTY;

В этом примере переменной instructor tank присваивается значение 5, а переменной studenttank - 0.



и C++ при описании переменной типа перечисления нет необходимости указывать ключевое слово enum, хотя его наличие не является ошибкой.

Часто ошибочно полагают, что air supply - это переменная. В действительности это особый тип данных, который можно использовать для создания переменных, таких как instructor tank и student tank.

Переменные типа перечисления являются адресуемыми и могут стоять в выражениях слева от оператора присваивания. Именно это и происходит в показанных выше двух строках программы. empty, useableи full- это имена констант, а не переменных, поэтому их значения не могут быть изменены в ходе выполнения программы.

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

* enum.c

* Эта программа на языке С демонстрирует использование перечислений.

#include <stdio.h> #include <stdlib.h> int main () {

enum air supply { EMPTY, USEABLE, FULL = 5 } instructor tank; enum air supply student tank; instructor tank = FULL; student tank = EMPTY;

printf ( Значение переменной instructor tank

равно%d\n ,instructor tank) ;

if (student tank < USEABLE) {

printf( Наполните бак горючим.\п ); printf( Занятие отменено.\n );

exit(l); }

if (instructor tank >= student tank) printf( Продолжайте занятие.\n ); else printf( Занятие отменено.\n ); return(0); }

В языке С тип enum эквивалентен типу int. Это позволяет присваивать целочисленные значения непосредственно переменным типа перечисления. В C++ ведется более строгий контроль за типами данных, и такие присваивания не допускаются.

В результате работы программы на экран будет выведена следующая информация:

Значение переменной instructor tank равно 5 Наполните бак горючим. Занятие отменено.

Новый тип данных языка C++ - bool

Тип данных bool относится к семейству целых типов. Переменные этого типа могут принимать только значения true или false. В C++ все услрвные выражения возвращают логические значения. Например, выражение myvar! = 0, может возвратить только true или false в зависимости от значения переменной myvar.

Значения true и false связаны друг с другом следующими отношениями:

!false == true !true == false

Рассмотрим следующий фрагмент:

if (условие) выражение;

Если условие равно true, то выражение будет выполнено, если же условие равно false,то выражение выполнено не будет. При создании условных выражений следует помнить о том,



что как в С, так и в C++ любое значение, отличное от нуля, воспринимается как истинное, а равное нулю - как ложное.

Когда к переменной типа bool применяются операции префиксного и постфиксного инкремента (++), переменная принимает значение true. Операторы префиксного и постфиксного декремента (-) не разрешены с переменными типа bool. Кроме того, поскольку тип данных bool относится к целочисленным, переменные этого типа могут быть приведены к типу int, при этом значение true преобразуется в I, aзначение false - в 0.

Квалификаторы

В С и C++ используются два квалификатора доступа: const и volatile. Они появились в стандарте ANSI С для обозначения неизменяемых переменных (const) и переменных, чьи значения могут измениться в любой момент (volatile).

Квапификатор const

Иногда требуется, чтобы значение переменной оставалось постоянным в течение всего времени работы программы. Такие переменные называются константными. Например, если в программе вычисляется длина окружности или площадь круга, то часто придется использовать число пи - 3,14159. В бухгалтерских программах постоянной величиной является НДС. Поскольку НДС время от времени все же может меняться, то удобно будет описать его как переменную, значение которой остается постоянным в процессе выполнения программы.

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

Предположим, вы создаете программу, в которой используется число л. Можно объявить переменную с именем pi и присвоить ей начальное значение 3,14159. Но оно не должно больше меняться, так как это нарушит правильность вычислений с числом я, поэтому должен существовать формальный способ запретить размещение данной переменной в левой части оператора присваивания. Этой цели служит квалификатор const. Например:

const float pi = 3.14159;

const int iMIN = 1, iSALE PERCENTAGE = 25; int irow index = 1, itotal =100; doubleddistance => 0;

Поскольку значение константной переменной не может меняться в программе, такая переменная может быть только проинициализирована. Это выполняется один раз во время объявления переменной. Так, в показанном выше примере целочисленным константам imin и isale percentage присвоены постоянные значения 1 и 25 соответственно. В то же время переменные irow index, itotal и ddistance, инициализируемые аналогичным образом, могут впоследствии быть модифицированы обычным путем.

Константные и простые переменные используются в программе совершенно одинаково. Единственное отличие состоит в том, что начальные значения, присвоенные константным переменным при их инициализации, не могут быть изменены в ходе выполнения программы. Другими словами, константы не являются l-значениями (левосторонними значениями), т.е. не могут располагаться в выражениях слева от оператора присваивания. (Примером l-значения, ссылающегося на изменяемую ячейку памяти, является переменная, в объявлении которой не указан квалификатор const.) При выполнении присваивания оператор записывает значение правого операнда в ячейку памяти, адресуемую именем левого операнда. Таким образом, левый операнд (или единственный операнд унарной операции) должен ссылаться на изменяемую ячейку.

Директива #define

В С и C++ существует другой способ описания констант: директива препроцессора #define. Предположим, в начале программы введена такая строка:

#define SALES TEAM 10

Общий формат данной строки следующий: директива #define, литерал sales team(имя константы), литерал 10 (значение константы). Встретив такую команду, препроцессор



1 ... 22 23 24 [ 25 ] 26 27 28 ... 150

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика