C++ для «чайников» - страница 20

стр.

«Вы можете объявить переменную просто как unsigned, опустив объявление int, которое подразумевается неявно.»

[Советы]

__________

>6Вообще говоря, диапазон значений типа int определяется множеством факторов — в первую очередь компилятором, на выбор типа int которого оказывает огромное влияние тип компьютера, поэтому считать определённым раз и навсегда, что диапазон значений int простирается от -2>32 до +2>32-1, нельзя. — Прим. ред.

_________________

43 стр. Глава 2. Премудрости объявления переменных


Решение проблемы усечения дробной части...44

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

В С++ действительные числа определены как числа с плавающей точкой, или просто double ( что означает "двойной" точности; в С++ есть действительные числа и одинарной точности, но это экзотика, о которой мы не будем говорить ). Используя выражение "с плавающей точкой", имеют в виду, что десятичную запятую ( или используемую вместо неё в программах точку ) в десятичных числах можно перемещать вперёд и назад настолько, насколько этого требуют вычисления. Действительные переменные объявляются так же, как и переменные типа int:


      double dValue ;


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


      double dValue ;

      dValue = 1.0/3.0 + 2.0/3.0 + 2.0/3.0 ;


Это эквивалентно выражению


      dValue = 0.333... + 0.666... + 0.666... ;


которое даёт значение


       dValue = 1.666... ;


«Я записал значение 1.666... как число с бесконечным числом шестёрок, однако на самом деле такая запись по сути невозможна в силу того, что имеется предел количества цифр, которое может быть в переменной типа double

[Атас!]

«На прилагаемом компакт-диске в папке Cpp_Programs\Chap02 программы IntAverage и FloatAverage демонстрируют разобранные здесь примеры вычисления среднего значения.» 

[Диск]

// 

/*  IntAverage — среднее 3 чисел, используя целочисленную арифметику. */

/*               Сперва сумма трёх отношений */

/*               ( сумма каждого числа разделённого на 3), */

/*               второе разделить сумму трёх чисел на 3. */


#include

#include

#include

using namespace std ;

int main( int nNumberofArgs , char* pszArgs[ ] )

{

    setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */

    int nValue1 ;

    int nValue2 ;

    int nValue3 ;


    // введите три числа

    cout << "Эта программа вычисляет среднее трёх чисел типа int\n "

         << "integer ( целочисленной ) арифметики\n\n" ;

    cout << "Введите три целых числа:\n" ;

    cout << "n1 - " ;

    cin  >> nValue1 ;

    cout << "n2 - " ;

    cin  >> nValue2 ;

    cout << "n3 - " ;

    cin  >> nValue3 ;


    /*  Сперва сумма трёх отношений */

    cout << "n1/3 + n2/3 + n3/3 = " ;

    cout << nValue1/3 + nValue2/3 + nValue3/3 ;

    cout << "\n" ;


    /* Сейчас соотношение трёх сумм */

    cout << "( n1 + n2 + n3 ) / 3   = " ;

    cout << ( nValue1 + nValue2 + nValue3) / 3 ;

    cout << "\n" ;


    /* Пауза для того, чтобы посмотреть на результат работы программы */

    system( "PAUSE" ) ;

    return 0 ;

}


/* FloatAverage — среднее 3 чисел, используя арифметику с плавающей точкой.*/

/*                   В противном случае, так же как IntAverage */