Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2009 лекции ПЯВУ часть1.doc
Скачиваний:
23
Добавлен:
27.03.2015
Размер:
823.3 Кб
Скачать

Мультипликативные операции

В С++ операция деления определена таким образом, что при делении целого числа всегда получается целое число.

Задача. Получить от пользователя радиус сферы и вывести на экран ее объем.

#include <iostream>

using namespace std;

int main()

{

float radius;

cout<<"Enter a radius"<<endl;

cin>>radius;

cout<<"Volume is:"<<(float)4/3*3.14*radius*radius*radius << endl;

return 0;

}

Рис. 2.4 Вычисление объема сферы

Для получения от пользователя значения используется операция >>(“взять из потока”). Слева от нее указывается поток, в данном случае, это стандартный поток вводаcin, а справа – переменная, в которую следует сохранить значение.

Объем сферы вычисляется по формуле:

В С++ нет встроенной операции возведения в степень, поэтому в задаче радиус дважды умножен на самого себя (на практике при возведении в степень используется библиотечная функция pow, которая определена в библиотекеmath.h). А перед операцией деления используется операция явного приведения типа. Число4из типаintвременно превращается в типfloat. Теперь в операции деления будет участвовать число с плавающей точкой, это значит, что результатом деления также будет число с плавающей точкой.

При радиусе сферы 8.5получаемый объем равен2571.14.

Если программист забудет использовать операцию приведения типа, то результат будет сильно отличаться: при таком же радиусе полученный объем будет 1928.35. Это объясняется тем, что при целочисленном делении4/3 получится единица.

В данном случае правильный результат можно получить, если записать в формуле не 4/3, а4.0/3– тогда делимое будет нецелым числом.

Результат на экран выводит с помощью объекта cout, при этом будет выведена не формула, а сосчитанный результат.

В С++ существует операция получения остатка от деления (%), которая применяется только к целым числам. Эта операция определена таким образом, что всегда справедливо равенство [3]:

a = (a/b)*b + a%b

Операции сравнения

Использование операций сравнения в С++ отличается от привычного их использования в математике.

Например, часть программы, представленная на рис. 2.5, четыре раза использует операцию сравнения и получает результаты, показанные на рис. 2.6.

int x = 40;

if(30<x<50)

cout<<"TRUE"<<endl;

else

cout<<"FALSE"<<endl;

if(45<x<60)

cout<<"TRUE"<<endl;

else

cout<<"FALSE"<<endl;

x = -20;

if(-30<x<-10)

cout<<"TRUE"<<endl;

else

cout<<"FALSE"<<endl;

if(-10<x<1)

cout<<"TRUE"<<endl;

else

cout<<"FALSE"<<endl;

Рис. 2.5. Неправильное использование операции сравнения

TRUE

TRUE

FALSE

TRUE

Рис. 2.6. Результат работы программы на рис. 2.5

Видно, что истинные условия дают неправильный результат, и наоборот. Это происходит потому, что результатом работы операции сравнения является истина (1) или ложь(0). И в следующей операции сравнения уже участвует не значение переменнойx, а результат предыдущей операции –1или0. Для получения правильного результата необходимо двойные сравнения разделять на два одиночных и объединять их логическими операциямиИлибоИЛИ:

45<x&&x<60

Побитовые логические операции

Побитовые операции применяются только к целым числам. В них целое число рассматривается как строка битов (нулей и единиц при записи числа в двоичной системе счисления или разрядов машинного представления).

Таблица 4