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

3.6. Использование операторов сдвига для организации ввода и вывода

В библиотеке ввода-вывода побитовые операторы >> и << переопределены так, чтобы осуществлять действия по вводу и выводу данных. Хотя большинству про­граммистов вряд ли придется часто использовать именно побитовые операторы, в большинстве программ перегруженные версии этих операторов для ввода и вывода используются очень часто. Когда используется перегруженный оператор, он имеет тот же приоритет и порядок, что и у встроенной версии. Следовательно, программи­стам необходимо знать приоритет и порядок этих операторов, даже если они никогда не используются в их базовом виде, т.е. как операторов сдвига.

Более подробно использование операторов сдвига для организации ввода и вывода в операторах потокового ввода-вывода cin и cout рассмотрено в лабораторной работе № 5.

Следующая программа иллюстрирует особенности операций сдвига и поразрядных операций.

Пример 3.11.

//ЛР № 3 - Операции сдвига и поразрядные операции

#include <iostream.h>

void main()

{

cout << "\n4<<2 равняется " << (4<< 2);

cout << "\t5>>l равняется " << (5<< 1);

cout << "\n6&5 равняется " << (6&5);

cout << "\t6|5 равняется " << (6|5);

cout << **\t65 равняется " << (65);

}

Результат выполнения программы:

4<< 2 равняется 16

5>>1 равняется 2

6 & 5 равняется 4

6 | 5 равняется 7

6 5 равняется 3

Тем, кто давно не обращал внимания на битовое представление целых чисел, напоминаем, что двоичный код для 4 равен 100, для 5 – это 101, для 6 – 110 и т.д. При сдвиге влево на 2 позиции код 100 становится равным 10000 (десятичное значение равно 16). Остальные результаты операций сдвига и поразрядных операций могут быть прослежены аналогично.

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

Сдвиг операнда влево на 1, 2, 3... бита соответствует его умножению на 2, 4, 8... соответственно. Сдвиг операнда вправо на 1, 2, 3... бита соответствует его целочисленному делению на 2, 4, 8... соответственно.

2. Задание

2.1. Изучить понятие алгоритма и его основные свойства.

2.2. Изучить способы записи алгоритмов.

2.3. Изучить представление алгоритмов в виде блок-схем.

2.4. Изучить алгоритмы типовых вычислительных процессов (линейных, разветвляющихся, циклических);

2.5. Изучить основные этапы подготовки и решения задачи на ЭВМ.

2.6. Изучить арифметические операции языка С++ и приоритет операций.

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

2.8. Изучить побитовые логические операции и операции сдвига.

2.9. Ознакомиться с использованием операций сдвига в операторах потокового ввода-вывода.

2.10. Разобрать и выполнить примеры к данной лабораторной работе.

2.11. Написать и отладить три программы на языке С++.

2.12. Задания

2.12.1. Задание на алгоритмизацию вычислительных процессов (домашнее)

Дома самостоятельно составить блок-схемы алгоритмов для четырех типовых задач:

1. Составить блок-схему алгоритма для вычисления значения по следующей формуле

при x = 2,44 и заданном значении а.

2. Составить блок-схему, которая:

- вводит а, х, s;

- вычисляет

- печатает a, x, y , s, z.

3. Начертить блок-схему для вычисления функции

4. Начертить блок-схему для вычисления функции

где

5. Начертить блок-схему для вычисления функции заданной графи­чески

y

2

-2

x

2

-2

6. Начертить блок-схему для табуляции функции

для t = tН (t) tК . Принять tН = - 10, tК = 25, t =0,5.

Внимание: Блок-схемы алгоритмов представить в отчете по лабораторной работе.

2.12.2. Задание на арифметические операции и математические функции языка С++