- •1. Краткие теоретические сведения
- •1.1. Алгоритмизация вычислительного процесса
- •1.2. Арифметические операции
- •1.2.1. Знаки операций
- •1.2.2. Операции
- •1.2.3. Арифметические операции
- •1.2.4.1. Операция присваивания
- •1.2.4.6. Операция sizeof
- •1.3. Порядок (старшинство) выполнения арифметических операций
- •1.4. Круглые скобки позволяют переопределить приоритет
- •{ // Начало главной функции double X, y, z, a, b, c, h; // Объявление переменных
- •1.6. Побитовые логические операции и операции сдвига
- •3.6. Использование операторов сдвига для организации ввода и вывода
- •2. Задание
- •2.12. Задания
- •2.12.1. Задание на алгоритмизацию вычислительных процессов (домашнее)
- •2.12.2.1. Формулировка задания
- •2.12.2.2. Варианты задания Варианты задания приведены в табл. 3.14. Вариант соответствует номеру в журнале группы.
- •2.12.2.3. Разработка алгоритма решения
- •2.12.2.4. Определение переменных программы
- •2.12.2.5. Разработка текста программы
- •2.12.2.6. Текст программы
- •При работе программы на экран было выдано следующее:
- •Варианты задания приведены в табл. 3.15. Вариант соответствует номеру в журнале группы.
- •2.12.3.3. Пример решения задачи для варианта № 30 Решение задачи предполагает создание двух программ: упаковки (см. 2.12.3.3.1) и распаковки (см. 2.12.3.3.2)
- •2.12.3.3.1. Программа упаковки
- •2.12.3.3.1.1. Разработка алгоритма решения
- •2.12.3.3.1.2. Определение переменных программы
- •2.12.3.3.1.3. Разработка текста программы
- •2.12.3.3.1.4. Программа
- •2.12.3.3.1.5. Отладка программы
- •2.12.3.3.1.6. Результаты работы программы
- •2.12.3.3.2. Программа распаковки
- •2.12.3.3.2.1. Разработка алгоритма решения.
- •2.12.3.3.2.4. Текст программы
- •2.12.3.3.2. 5. Отладка программы
- •2.12.3.3.2.6. Результаты работы программы
- •2.12.4. Домашнее задание
- •2.12.4.1. Текст программы
- •2.12.4.2. Результаты работы программы
- •3. Выводы
- •4. Требование к отчету
- •5. Вопросы для самоконтроля
- •Литература
- •Оглавление
- •1. Краткие теоретические сведения 2
- •1.1. Алгоритмизация вычислительного процесса 2
1.2. Арифметические операции
1.2.1. Знаки операций
Знаки операций обеспечивают формирование и последующее вычисление выражений. Выражение есть правило для получения значения. Один и тот же знак операции может употребляться в различных выражениях и по-разному интерпретироваться в зависимости от контекста. Для изображения операций в большинстве случаев используется несколько символов. В ANSI-стандарте языка Си определены следующие знаки операций:
[] |
() |
. |
-> |
++ |
-- |
& |
* |
+ |
- |
~ |
! |
sizeof |
/ |
% |
<< |
>> |
< |
> |
<= |
>= |
= |
! = |
^ |
| |
&&. |
|| |
? : |
= |
* = |
/= |
%= |
+= |
-= |
<<= |
>>= |
&= |
^= |
|= |
, |
# |
it |
Дополнительно к перечисленным в С++ введены:
:: |
.* |
->* |
new |
delete |
typeid |
За исключением операций [], () и ?: все знаки операций распознаются компилятором как отдельные лексемы. В зависимости от контекста одна и та же лексема может обозначать разные операции. Например, бинарная операция & – это поразрядная конъюнкция, а унарная операция & – это операция получения адреса.
Одним из принципиальных отличий языка С++ от предшествующего ему языка Си является возможность расширения действия, иначе перегрузки (overload) стандартных операций, т.е. распространения их действия на нестандартные для них операнды. Материал, относящийся к расширению действия (перегрузке) операций, будет рассматриваться в следующих лабораторных работах. Сейчас опишем кратко стандартные возможности отдельных операций.
1.2.2. Операции
Операции осуществляют пересылку и преобразование данных в программах. Обозначаются операции одним или несколькими символами, например +, -, >> и т.д. Данные, участвующие в операции, называются операндами. В качестве операндов могут использоваться переменные, константы, выражения.
Над числовыми данными определены следующие группы операций (рис. 3.10).
|
|
Операции над числовыми данными в С++ |
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
1 |
|
|
|
2 |
|
|
|
3 |
|
|
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|||||||||||||
Арифметические операции |
|
Операция присваивания |
|
Операции отношения |
|
Логические операции |
|
Операция запятая (,) |
|
Операция приведения к типу |
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
Рис. 3.10. Операции над числовыми данными |
В соответствии с количеством операндов, которые используются в операциях они делятся на унарные (один операнд), бинарные (два операнда) и тернарную (три операнда).
Унарные операции (один операнд) выполняются справа налево. Некоторые унарные операции приведены в табл. 3.1.
Таблица 3.1
Унарные операции
Знак операции |
Операция |
Описание |
- |
Унарный минус |
|
~ |
Побитовое логическое отрицание |
|
! |
Логическое отрицание |
В качестве логических значений используется 0 (false) - ложь и не 0 (true) - истина, отрицанием 0 будет 1, отрицанием любого ненулевого числа будет 0. |
+ |
Унарный плюс |
|
++ |
Увеличение (инкремент) на единицу |
префиксная операция - увеличивает операнд до его использования, постфиксная операция увеличивает операнд после его использования. |
-- |
Уменьшение (декремент) на единицу |
префиксная операция - уменьшает операнд до его использования, постфиксная операция уменьшает операнд после его использования. |
sizeof |
|
вычисление размера (в байтах) для объекта того типа, который имеет операнд |
& |
|
Получение адреса операнда |
* |
|
Получение значения, находящегося по указанному адресу (разыменование) |
new |
Выделение памяти |
Динамическое распределение памяти. |
delete |
Освобождение памяти |
Динамическое распределение памяти. |
(type) |
|
Преобразование типа |
В отличие от унарных, бинарные операции (два операнда), список которых приведен в табл. 3.2, выполняются слева направо.
Таблица 3.2
Бинарные операции
Знак операции |
Операция |
Группа операций |
Описание |
* |
Умножение |
Арифметические мультипликативные |
умножение операндов арифметического типа |
/ |
Деление |
деление операндов арифметического типа (если операнды целочисленные, то выполняется целочисленное деление) |
|
% |
Остаток от деления |
получение остатка от деления целочисленных операндов |
|
+ |
Сложение |
Арифметические аддитивные |
бинарный плюс (сложение арифметических операндов) |
- |
Вычитание |
бинарный минус (вычитание арифметических операндов) |
|
<< |
Сдвиг влево |
Операции сдвига |
|
>> |
Сдвиг вправо |
|
|
< |
Меньше |
Операции отношения |
меньше, чем |
> |
Больше |
больше |
|
<= |
Меньше или равно |
меньше или равно |
|
>= |
Больше или равно |
больше или равно |
|
= = |
Равно |
Равно??? |
|
!= |
Не равно |
не равно |
|
& |
Битовая операция И |
Битовые (поразрядные) операции |
|
| |
Поразрядное ИЛИ |
|
|
^ |
Поразрядное исключающее ИЛИ |
|
|
&& |
Логическое И |
Логические операции |
конъюнкция (И) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина( не 0) |
|| |
Логическое ИЛИ |
дизъюнкция (ИЛИ) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина(не 0) |
|
, |
Последовательное вычисление |
Последовательного вычисления |
|
= |
Присваивание |
Операции присваивания |
присваивание |
*= |
Умножение с присваиванием |
умножение с присваиванием (мультипликативное присваивание) |
|
/= |
Деление с присваиванием |
деление с присваиванием |
|
%= |
Остаток от деления с присваиванием |
деление с остатком с присваиванием |
|
-= |
Вычитание с присваиванием |
вычитание с присваиванием |
|
+= |
Сложение с присваиванием |
сложение с присваиванием |
|
<<= |
Сдвиг влево с присваиванием |
|
|
>>= |
Сдвиг вправо присваиванием |
|
|
&= |
Поразрядное И с присваиванием |
|
|
|= |
Поразрядное ИЛИ с присваиванием |
|
|
^= |
Поразрядное исключающее ИЛИ с присваиванием |
|
Тернарной операцией (три операнда) является операция «условие ?», которая реализует алгоритмическую структуру ветвления (не рассматривается в рамках лабораторного практикума).
Таблица 3.3
Тернарная операция
Знак операции |
Операция |
Описание |
?: |
Условная операция; в ней используется три операнда.
|
Выражение1 ? Выражение2 : Выражение3; Первым вычисляется значение выражения1. Если оно истинно, то вычисляется значение выражения2, которое становится результатом. Если при вычислении выражения1 получится 0, то в качестве результата берется значение выражения3. Например: x<0 ? -x : x ; //вычисляется абсолютное значение x. |
|
|
|