Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР3-С++-13 марта-2012.doc
Скачиваний:
14
Добавлен:
15.09.2019
Размер:
1.26 Mб
Скачать

{ // Начало главной функции double X, y, z, a, b, c, h; // Объявление переменных

cout << "Vvedite x: "; // Ввод значений x, y и z

cin >> x;

cout << "Vvedite y: ";

cin >> y;

cout << "Vvedite z: ";

cin >> z;

a = pow(x, 2*y) + exp(y-1); // Вычисление выражения

b = 1+x * fabs(y - tan(z));

c = 10 * pow(x, 1/3.) - log(z);

h = a / b + c;

cout << "Result h= " << h << endl; // Вывод результата

getch();

return 0; // Завершение выполнения программы

} // Конец главной функции

Замечания:

1. Для ввода значений переменных x, y и z необходимо набрать с клавиатуры:

2.45 (x = 2,45)

-0.423e-2 (y = -0,42310-2)

1.232e3 (z = 1,232-Ю3)

2. В языке С++ при вычислении арифметических выражений происходит автоматическое приведение типов, следовательно, при делении целого значения на целое, результат будет целым числом. Например, при вычислении "1/3" результат будет равен нулю, так как целая часть вычисленного выражения равна нулю. Для получения результата, имеющего дробную часть, необходимо, чтобы один из операндов имел действительный тип. Для этого можно использовать функцию явного приведения типа, а для констант достаточно поставить точку после числа, например: "1/3.", или "1./3.", или "1./3".

Например:

int s, n;

double sr = static_cast<double> (s) / n; // явное приведение типа

double y = pow (x, 3/4.); //

3. Язык C чувствителен к регистру букв, т.е. прописные и строчные буквы воспринимаются как разные символы.

Например: count, Count, COUNT – разные идентификаторы.

4. При выводе информации для перехода на новую строку применяется манипу­лятор (функция управления выводом) endl или '\n', для выравнивания выводи­мой информации – '\t' (вставляет символ табуляции).

5. Главная функция int main () автоматически вызывается при запуске программы и возвращает операционной системе по окончании значение 0 (return 0;).

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

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

Бинарные операции делятся на следующие группы:

• аддитивные;

• мультипликативные;

• сдвигов;

• поразрядные;

• операции отношений;

• логические;

• присваивания;

• выбора компонента структурированного объекта;

• операции с компонентами классов;

• операция "запятая";

• скобки в качестве операций.

Бинарные операции будут подробно рассмотрены в лабораторной работе № 5. В данной работе рассматриваются только две категории операций: поразрядные и сдвигов

Битовые (поразрядные) операции определены над данными целочисленных типов, которые применяются только к двоичному представлению числа.

Список побитовых операций (операторов) приведен в табл. 3.11.

Таблица 3.11

Побитовые операторы

Оператор

Действие

Применение

~

Побитовое NOT (отрицание)

~ выражение

<<

Сдвиг влево

выражение1 << выражение2

>>

Сдвиг вправо

выражение1 >> выражение2

&

Побитовое AND (конъюнкция – И)

выражение1 & выражение2

Побитовое XOR (исключающая ИЛИ)

выражение1 * выражение2

|

Побитовое OR (дизъюнкция – ИЛИ)

выражение1 | выражение2

Побитовым операторам (bitwise operator) передают операнды целочисленного типа. Эти операторы обрабатывают операнды как коллекции битов, выполняя проверку и установку отдельных битов. Эти операторы применимы также к набо­рам битов, которые они обрабатывают аналогично целочис­ленным операндам.

Побитовые операторы применимы как к знаковым, так и к беззнаковым целым числам. Обработка знакового разряда отрицательных значений при побитовых опе­рациях зачастую является машинно-зависимой. Поэтому такие операции нормально выполняются на одних машинах, а на других могут сработать иначе.

В приведенных ниже примерах подразумевается, что тип unsigned char имеет 8 битов.

Побитовый оператор NOT (~) создает новое значение, инвертировав биты операнда. Каждый бит, содержащий значение 1, будет содержать значение 0, а каждый бит, содержа­щий 0, получит значение 1, как показано на рис. 3.11.

unsigned char bits = 0227;

1

0

0

1

0

1

1

1

bits = -bits;

0

1

1

0

1

0

0

0

Рис. 3.11. Побитовый оператор NOT

Операторы < < и > > являются побитовыми операторами сдвига. Правый операнд этих операторов указывает, на сколько бит следует сдвинуть биты левого операн­да. Возвращаемое ими значение является копией левого операнда, биты которого сдвинуты на количество позиций, указанное правым операндом. Биты могут быть перемещены влево (<<) или вправо (>>), при этом вышедшие за пределы биты от­брасываются, как можно заметить на рис. 3.12.

unsigned char bits = 1;

1

0

0

1

1

0

1

1

bits << 1; // сдвиг влево

0

0

1

1

0

1

1

0

bits << 2; // сдвиг влево

0

1

1

0

1

1

0

0

bits >> 3; // сдвиг вправо

0

0

0

1

0

0

1

1

Рис. 3.12. Операторы побитового сдвига

Оператор сдвига влево (<<) добавляет нулевые биты справа, а оператор сдвига вправо (>>) — слева, если операнд не имеет знака. Если операнд имеет знаковый тип, в зависимости от конкретной реализации, в знаковый разряд может быть либо вставлена его копия, либо значение 0. Правый операнд не должен быть отрицатель­ным значением, а также он не должен превышать количества битов в левом операн­де. В противном случае результат операции окажется непредсказуемым.

Операции сдвига (определены только для целочисленных операндов).

Операции "<<" (левый сдвиг) и ">>" (правый сдвиг) имеют следующий синтаксис:

выражение1 << выражение2;

выражение1 >> выражение2,

где выражение1 - строка бит, сдвигаемая влево или вправо на число бит, которое определяется величиной выражение2.

Типы операндов: выражение1 – символьный или целый, выражение2 –константа или константное выражение (выражение, состоящее из констант).

При левом сдвиге, освобождающиеся биты справа заполняются нулями. При правом сдвиге освобождающиеся биты слева заполняются нулями.

Побитовый оператор AND (&) получает два целочисленных операнда. Каждая битовая позиция результата получит значение 1, если соответствующие биты обоих операндов содержат значение 1; в противном случае результат получит значение 0.

Внимание: Нередко побитовый оператор AND (&) путают с логическим оператором AND (&&). Аналогично, побитовый оператор OR (|) иногда путают с логиче­ским оператором OR (| |). Логические операторы AND (&&) и OR (| |) будут рассмотрены в лабораторной работе № 6.

На рис. 3.13 проиллюстрирован результат применения побитового оператора AND к двум значениям типа unsigned char, инициализированным восьмеричным литералом.

unsigned char b1 = 0145;

0

1

1

0

0

1

0

1

unsigned char b2 = 0257;

1

0

1

0

1

1

1

1

unsigned char result = b1 & b2;

0

0

1

0

0

1

0

1

Рис. 3.13. Побитовый оператор AND

Побитовый оператор XOR т.е. исключающее или, также получает два цело­численных операнда. Каждая битовая позиция результата получит значение 1, если только один (а не оба) соответствующий бит операнда содержит значение 1; в про­тивном случае результат получит значение 0, как продемонстрировано на рис. 3.14.

result = b1  b2;

1

1

0

0

1

0

1

0

Рис. 3.14. Побитовый оператор XOR

Побитовый оператор OR ( | ) получает два целочисленных операнда. Каждая бито­вая позиция результата получит значение 1, если один или оба соответствующих бита операнда содержат значение 1; в противном случае результат получит значение О, как продемонстрировано на рис. 3.15.

result = b1 | b2;

1

1

1

0

1

1

1

1

Рис. 3.15. Побитовый оператор OR