Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование основы языка С++. Учебное пособие
.pdf
int b = 4;
bool c = a > b; // true
«<» – операция "меньше чем". Возвращает true, если первый опе-
•
ранд меньше второго, и false, если первый операнд больше второго:
bool c = 10 < 4; // false
«<=» – операция "меньше или равно". Возвращает true, если первый
•
операнд меньше или равен второму, и false, если первый операнд
больше второго:
bool c = 10 <= 4; // false
bool d = 10 <= 14; // true
«>=» – операция "больше или равно". Возвращает true, если первый
•
операнд больше или равен второму, и false, если первый операнд
меньше второго:
bool c = 10 >= 4; // true
bool d = 10 >= 14; // false
«!=» – операция "не равно". Возвращает true, если первый операнд
•
не равен второму, и false, если оба операнда равны:
bool c = 10 != 4; // true
bool d = 4 != 4; // false
6.2.2 Логические операции. Логические операции обычно объединяют несколько операций отношения. К логическим операциям относят
следующие:
«!» – операция отрицания – унарная операция, которая возвращает
•
true, если операнд равен false. Если операнд равен true, операция
возвращает false:
bool a = true;
bool b = !a; // false
bool c =!10<5; // true
«&&» – конъюнкция, логическое умножение – возвращает true,
•
если оба операнда не равны false. Возвращает false, если хотя бы
один операнд равен false:
bool a = true;
bool b = false;
bool c = a && b; // false
bool d = a && true; // true
«| |» – дизъюнкция, логическое сложение – возвращает true, если
•
хотя бы один операнд равен true. Возвращает false, если оба операнда
равны false:
81

bool a = true;
bool b = false;
bool c = a || b; // true
bool d = b || false; // false
Пример одновременного использования несколько логических опе-
раций и операций сравнения:
#include <iostream>
int main()
{
bool a = –2 > 5; // false
bool b = 0 < 7; // true
bool c = 10 > 5 && 7 < 11; // true
bool d = a && b || c; // true
std::cout << a << "\n"; // 0
std::cout << b << "\n"; // 1
std::cout << c << "\n"; // 1
std::cout << d << "\n"; // 1
return 0;
}
На консоль выводится не непосредственно true или false, а их числовые эквиваленты – 1 для true и 0 для false. Также следует учитывать,
что операции отношения имеют больший приоритет, чем логические
операции.
6.2.3 Побитовые операции. Побитовые операции выполняются над
отдельными разрядами или битами чисел и выполняются только над
целыми числами.
Операции сдвига. Каждое целое число в памяти представлено в виде
определенного количества разрядов. И операции сдвига позволяют
сдвинуть битовое представление числа на несколько разрядов вправо
или влево. Операции сдвига применяются только к целочисленным
операндам. Есть две операции:
«<<» – сдвигает битовое представление числа, представленного
•
первым операндом, влево на определенное количество разрядов,
которое задается вторым операндом.
«>>» – сдвигает битовое представление числа вправо на опреде-
•
ленное количество разрядов.
Пример использования операций:
// Число 2 в двоичном представлении 10.
82

// Если сдвинуть число 10 на два разряда влево, то получится 1000,
// что в десятичной системе равно число 8.
int a = 2 << 2; // 10 на два разрядов влево =
1000 – 8
// Число 16 в двоичном представлении 10000.
// Если сдвинуть число 10 на три разряда вправо
// (три последних разряда отбрасываются), то получится 10,
// что в десятичной системе представляет число 2.
int b = 16 >> 3; // 10000 на три разряда вправо
= 10 – 2
Поразрядные операции. Поразрядные операции также проводятся
только над соответствующими разрядами целочисленных операндов:
«&» – поразрядная конъюнкция (операция И или поразрядное
•
умножение). Возвращает 1, если оба из соответствующих разрядов
обоих чисел равны 1
«|» – поразрядная дизъюнкция (операция ИЛИ или поразрядное
•
сложение). Возвращает 1, если хотя бы один из соответствующих
разрядов обоих чисел равен 1
«^» – поразрядное исключающее ИЛИ. Возвращает 1, если только
•
один из соответствующих разрядов обоих чисел равен 1
«~» – поразрядное отрицание или инверсия. Инвертирует все раз-
•
ряды операнда. Если разряд равен 1, то он становится равен 0, а если
он равен 0, то он получает значение 1.
Пример использования операций:
int a = 5 | 2; // 101 | 010 = 111 – 7
int b = 6 & 2; // 110 & 010 = 10 – 2
int c = 5 ^ 2; // 101 ^ 010 = 111 – 7
int d = ~9; // –10
6.2.4 Операции присваивания. Операции присваивания позволяют
присвоить некоторое значения. Эти операции выполняются над двумя
операндами, причем левый операнд может представлять только модифицируемое именованное выражение, например, переменную.
Базовая операция присваивания «=» позволяет присвоить значение
правого операнда левому операнду:
int x;
x = 2
То есть в данном случае переменная x (левый операнд) будет иметь
значение 2 (правый операнд). Тип значения правого операнда не всегда
83

может совпадать с типом левого операнда. В этом случае компилятор
пытается преобразовать значение правого операнда к типу левого операнда. При этом операции присваивания имеют правосторонний порядок, то есть выполняются справа налево. И, таким образом, можно
выполнять множественное присваивание:
int a, b, c;
a = b = c = 34;
Здесь сначала вычисляется значение выражения c = 34. Значение
правого операнда – 34 присваивается левому операнду с. Далее вычисляется выражение b = c: значение правого операнда c (34) присваивается
левому операнду b. И в конце вычисляется выражение a = b: значение
правого операнда b (34) присваивается левому операнду a. Операции
присваивания имеют наименьший приоритет по сравнению с другими
типами операций, поэтому выполняются в последнюю очередь:
int x;
x = 3 + 5;
В соответствии с приоритетом операций вначале выполняется выражение 3 + 5, и только потом его значение присваивается переменной x.
Все остальные операции присваивания являются сочетанием простой операции присваивания с другими операциями:
«+=» – присваивание после сложения. Присваивает левому операнду
•
сумму левого и правого операндов: A += B эквивалентно A = A + B
«-=» – присваивание после вычитания. Присваивает левому опе-
•
ранду разность левого и правого операндов: A –= B эквивалентно
A = A – B
«*=» – присваивание после умножения. Присваивает левому
•
операнду произведение левого и правого операндов: A *= B экви-
валентно A = A * B
«/=» – присваивание после деления. Присваивает левому операнду
•
частное левого и правого операндов: A /= B эквивалентно A = A / B
«%=» – присваивание после деления по модулю. Присваивает ле-
•
вому операнду остаток от целочисленного деления левого операнда
на правый: A %= B эквивалентно A = A % B
«<<=» – присваивание после сдвига разрядов влево. Присваивает
•
левому операнду результат сдвига его битового представления влево
на определенное количество разрядов, равное значению правого
операнда: A <<= B эквивалентно A = A << B
«>>=» – присваивание после сдвига разрядов вправо. Присваивает
•
левому операнду результат сдвига его битового представления вправо
84

на определенное количество разрядов, равное значению правого
операнда: A >>= B эквивалентно A = A >> B
«&=» – присваивание после поразрядной конъюнкции. Присваивает
•
левому операнду результат поразрядной конъюнкции его битового
представления с битовым представлением правого операнда: A &=
B эквивалентно A = A & B
«|=» – присваивание после поразрядной дизъюнкции. Присваивает
•
левому операнду результат поразрядной дизъюнкции его битового
представления с битовым представлением правого операнда: A |= B
эквивалентно A = A | B
«^=» – присваивание после операции исключающего ИЛИ. При-
•
сваивает левому операнду результат операции исключающего ИЛИ
его битового представления с битовым представлением правого
операнда: A ^= B эквивалентно A = A ^ B
Примеры реализации операций присваивания:
int a = 5;
a += 10; // 15
a –= 3; // 12
a *= 2; // 24
a /= 6; // 4
a <<= 4; // 64
a >>= 2; // 16
6.2 Задания для самостоятельного решения
Задача 1. Даны два действительных числа a и b. Получить их сумму,
разность и произведение.
Задача 2. Дана длина ребра куба. Найти объем куба и площадь его
боковой поверхности.
Задача 3. Даны два действительных положительных числа. Найти
среднее арифметическое и среднее геометрическое этих чисел.
Задача 4. Даны два действительных числа. Найти среднее арифме-
тическое этих чисел и среднее геометрическое их модулей.
Задача 5. Вычислить период колебания маятника длины l.
Задача 6. Определить силу притяжения F между телами массы m1
и m2, находящимися на расстоянии r друг от друга.
Задача 7. Даны гипотенуза и катет прямоугольного треугольника.
Найти второй катет и радиус вписанной окружности.
Задача 8. Известна длина окружности. Найти площадь круга, огра-
ниченного этой окружностью.
85

Задача 9. Найти площадь кольца, внутренний радиус которого равен
20, а внешний – заданному числу r (r>20).
Задача 10. Треугольник задан величинами своих углов и радиусом
описанной окружности. Найти стороны треугольника.
Задача 11. Определить время, через которое встретятся два тела,
равноускоренно движущиеся навстречу друг другу, если известны их
начальные скорости, ускорения и начальное расстояние между ними.
Задача 12. Вычислить период колебания маятника длины l.
Задача 13. Определить силу притяжения F между телами массы m1
и m2, находящимися на расстоянии r друг от друга.
Задача 14. Даны гипотенуза и катет прямоугольного треугольника.
Найти второй катет и радиус вписанной окружности.
Задача 15. Известна длина окружности. Найти площадь круга, ограниченного этой окружностью.
Задача 16. Найти площадь кольца, внутренний радиус которого равен 20, а внешний – заданному числу r (r>20).
Задача 17. Треугольник задан величинами своих углов и радиусом
описанной окружности. Найти стороны треугольника.
Задача 18. Определить время, через которое встретятся два тела,
равноускоренно движущиеся навстречу друг другу, если известны их
начальные скорости, ускорения и начальное расстояние между ними.
Задача 19. Известно, что X кг конфет стоит A рублей. Определить,
сколько стоит 1 кг и Y кг этих же конфет.
Задача 20. Известно, что X кг шоколадных конфет стоит A рублей,
а Y кг ирисок стоит B рублей. Определить, сколько стоит 1 кг шоколадных конфет, 1 кг ирисок, а также во сколько раз шоколадные конфеты
дороже ирисок.
Задача 21. Скорость лодки в стоячей воде V км/ч, скорость течения
реки U км/ч (U < V). Время движения лодки по озеру T1 ч, а по реке
(против течения) – T2 ч. Определить путь S, пройденный лодкой (путь =
время · скорость). Учесть, что при движении против течения скорость
лодки уменьшается на величину скорости течения.
Задача 22. Скорость первого автомобиля V1 км/ч, второго – V2 км/ч,
расстояние между ними S км. Определить расстояние между ними через
T часов, если автомобили удаляются друг от друга. Данное расстояние
равно сумме начального расстояния и общего пути, проделанного автомобилями; общий путь = время · суммарная скорость.
86

Задача 23. Скорость первого автомобиля V1 км/ч, второго – V2 км/ч,
расстояние между ними S км. Определить расстояние между ними через
T часов, если автомобили первоначально движутся навстречу друг другу.
Данное расстояние равно модулю разности начального расстояния и
общего пути, проделанного автомобилями; общий путь = время · суммарная скорость.
Задача 24. Решить линейное уравнение A·x + B = 0, заданное своими
коэффициентами A и B (коэффициент A не равен 0).
Задача 25. Дано целое число. Если оно является положительным,
то прибавить к нему 1; в противном случае не изменять его. Вывести
полученное число.
Задача 26. Дано целое число. Если оно является положительным,
то прибавить к нему 1; в противном случае вычесть из него 2. Вывести
полученное число.
Задача 27. Дано целое число. Если оно является положительным,
то прибавить к нему 1; если отрицательным, то вычесть из него 2; если
нулевым, то заменить его на 10. Вывести полученное число.
Задача 28. Даны три целых числа. Найти количество положительных
чисел в исходном наборе.
Задача 29. Даны три целых числа. Найти количество положительных
и количество отрицательных чисел в исходном наборе.
Задача 30. Даны два числа. Вывести большее из них.
Задача 31. Даны два числа. Вывести порядковый номер меньшего
из них.
Задача 32. Даны два числа. Вывести вначале большее, а затем меньшее из них.
Задача 33. Даны две переменные вещественного типа: A, B.
Перераспределить значения данных переменных так, чтобы в A оказалось меньшее из значений, а в B – большее. Вывести новые значения
переменных A и B.
Задача 34. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной сумму этих значений,
а если равны, то присвоить переменным нулевые значения. Вывести
новые значения переменных A и B.
Задача 35. Даны две переменные целого типа: A и B. Если их значения не равны, то присвоить каждой переменной большее из этих
значений, а если равны, то присвоить переменным нулевые значения.
Вывести новые значения переменных A и B.
87

Задача 36. Даны три числа. Найти наименьшее из них.
Задача 37. Даны три числа. Найти среднее из них (то есть число,
расположенное между наименьшим и наибольшим).
Задача 38. Даны три числа. Вывести вначале наименьшее, а затем
наибольшее из данных чисел.
Задача 39. Даны три числа. Найти сумму двух наибольших из них.
Задача 40. Даны три переменные вещественного типа: A, B, C. Если
их значения упорядочены по возрастанию, то удвоить их; в противном
случае заменить значение каждой переменной на противоположное.
Вывести новые значения переменных A, B, C.
Задача 41. Даны три переменные вещественного типа: A, B, C. Если
их значения упорядочены по возрастанию или убыванию, то удвоить их;
в противном случае заменить значение каждой переменной на противоположное. Вывести новые значения переменных A, B, C.
Задача 42. Даны три целых числа, одно из которых отлично от двух
других, равных между собой. Определить порядковый номер числа,
отличного от остальных.
Задача 43. Даны четыре целых числа, одно из которых отлично от
трех других, равных между собой. Определить порядковый номер числа,
отличного от остальных.
Задача 44. На числовой оси расположены три точки: A, B, C.
Определить, какая из двух последних точек (B или C) расположена
ближе к A, и вывести эту точку и ее расстояние от точки A.
Задача 45. Даны целочисленные координаты точки на плоскости.
Если точка совпадает с началом координат, то вывести 0. Если точка не
совпадает с началом координат, но лежит на оси OX или OY, то вывести
соответственно 1 или 2. Если точка не лежит на координатных осях, то
вывести 3.
Задача 46. Даны координаты точки, не лежащей на координатных
осях OX и OY. Определить номер координатной четверти, в которой
находится данная точка.
Задача 47. Даны целочисленные координаты трех вершин прямоугольника, стороны которого параллельны координатным осям. Найти
координаты его четвертой вершины.
Задача 48. Дано целое число A. Проверить истинность высказывания: «Число A является положительным»
88

Задача 49. Даны два целых числа: A, B. Проверить истинность вы-
сказывания: «Каждое из чисел A и B нечетное».
Задача 50. Даны числа A, B, C (число A не равно 0). Рассмотрев
дискриминант D = B2 – 4·A·C, проверить истинность высказывания:
«Квадратное уравнение A·x2 + B·x + C = 0 имеет вещественные корни».
89

РАЗДЕЛ 7 ПОРЯДОК ВЫПОЛНЕНИЯ КОДА В ПРОГРАММЕ:
ЦИКЛЫ И ВЕТВЛЕНИЯ В C++
7.1 Условные конструкции
Условные конструкции направляют ход программы по одному из
возможных путей в зависимости от условия.
Конструкция if. Конструкция if проверяет истинность условия, и
если оно истинно, выполняет блок инструкций. Этот оператор имеет
следующую сокращенную форму:
if (условие)
{
инструкции;
}
В качестве условия использоваться условное выражение, которое
возвращает true или false. Если условие возвращает true, то выполняются последующие инструкции, которые входят в блок if. Если условие
возвращает false, то последующие инструкции не выполняются. Блок
инструкций заключается в фигурные скобки:
/***********************************************************
В данном примере определены две условных конструкции if. Они проверят больше или меньше значение переменной x, чем определенное значение.
В качестве инструкции в обоих случаях выполняется вывод некоторой
строки на консоль.
************************************************************/
#include <iostream>
int main()
{
int x = 80;
// здесь x > 70 условие истинно, так как значение переменной x
//действительно больше 70, поэтому это условие возвратит true, и,
//следовательно, будут выполнятся инструкции, которые входят в
блок if.
if(x > 70)
{
std::cout << "x – больше 70 \n";
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
