
- •Часть 1
- •18 Сентября 2012 г., протокол № 1
- •Предисловие
- •§ 1. Основные понятия программы
- •1.2. Директива препроцессора #include
- •Структура программы
- •Комментарии
- •Ключевые слова, идентификаторы, переменные
- •§ 2. Ввод, вывод
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Операция присваивания
- •§ 4. Программирование ветвлений
- •4.1. Оператор if
- •4.2. Тернарная операция
- •4.3. Оператор выбора switch
- •Г л а в а 2 циклы
- •§ 1. Оператор while
- •§ 2. Оператор break
- •§ 3. Оператор do … while
- •§ 4. Оператор for
- •Г л а в а 3 Введение в массивы
- •§ 1. Основные понятия
- •§ 2. Способы определения массивов
- •§ 3. Вывод массива. Функции printf и cprintf
- •§ 4. Типы задач при работе с массивами
- •Упражнения и тесты
- •Г л а в а 4 модульное программирование. Функции
- •§1. Функции без результатов. Параметры-значения
- •1.1. Примеры. Правила оформления и вызова функций
- •Формальные и фактические параметры
- •Передача параметров по значению
- •§ 2. Функции типа void с результатами
- •2.1. Вычислeниe бeсконeчных сумм
- •2.2. Что такое ссылочный тип
- •2.3. Параметры ссылочного типа
- •§ 3. Функции, отличные от void. Оператор return
- •§ 4. Область действия имён. Локальные и глобальные имена
- •§ 5. Встраиваемые (inline) функции
- •§ 6. Параметры по умолчанию
- •§ 7. Перегрузка функций
- •7. Сравнение функций типа void и отличных от типа void.
- •Г л а в а 5 введение в объектно-оРиентированное программирование
- •§ 1. Первое знакомство с ооп
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Упражнения и тесты
- •Оглавление
- •3.1. Константы …………………………………………….………..….........…8
- •Упражнения и тесты …….………………..………………………….…………....19
- •Методы программирования:
- •Лекции, примеры, тесты
- •Пособие для студентов механико-математического факультета
- •В двух частях
- •Часть 1
3.3. Операции отношения и логические операции
Эти операции возвращают true (любое ненулевое значение, например, единицу) или false (нуль). Логические операции выполняются, как и в других языках программирования или системах, согласно следующей таблице, где A и B — некоторые операнды (части) выражения со значением true или false. Например, в выражении x>0 && y>0, в котором x и y принимают вещественные значения, первым операндом A является x>0, a вторым операндом В — вторая часть y>0.
A |
B |
A && B |
A || B |
!B |
0 (x<=0) |
0 (y<=0) |
0 |
0 |
1 |
0 (x<=0) |
1 (y>0) |
0 |
1 |
0 |
1 (x>0) |
0 (y<=0) |
0 |
1 |
1 |
1 (x>0) |
1 (y>0) |
1 |
1 |
0 |
В результате операции && получается true (1) тогда и только тогда, когда оба операнда истинны — в нашем примере оба числа положительные. В остальных случаях получается false (0).
В результате операции || получается true, если один из операндов либо оба истинны, то есть в примере одно из чисел или оба положительные. Результатом является false только в том случае, если оба операнда ложны.
Операция отрицания (!) одноместная и меняет значение одного операнда на противоположное, то есть true на false и false на true.
Для закрепления этих операций и для развития логического мышления полезно научиться выполнять упражнения двух типов:
дана некоторая область плоскости. Записать логическое выражение, принимающее значение “истина” тогда и только тогда, когда точка с вещественными координатами (x, y), принадлежит указанной области;
наоборот, по заданному выражению нарисовать область плоскости, в которой и только которой указанное выражение истинно.
Такие задачи, в зависимости от того, какие логические операции используются при определении областей, можно классифицировать следующим образом:
в выражении не используются логические операции. Например, точки первой и третьей четвертей, включая и оси координат, определяются с помощью выражения x*y>=0;
используется только операция &&, если область состоит из одной части. Например, точки внутри треугольника с вершинами
(1,1), (0,0) и (-1,1) определяются так: у>=abs(x) && y<=1;
используется только операция ||, если область состоит из нескольких относительно несложных частей, для определения каждой из которых достаточно одного неравенства. Область, состоящая из левой половины круга радиуса 2 с центром в начале координат, включая и полуокружность, и точек справа от оси OY, не включая её, определяется так: x>0 || x*x+y*y<=4. Заметим, что круглые скобки (x>0) ||(x*x+y*y<=4) не обязательны, так как в отличие от Pascal операции сравнения имеют более высокий приоритет, чем логические;
используются как операция &&, так и операция ||, если область “склеена” из нескольких частей. Каждая из них определяется с помощью нескольких неравенств, соединённых операцией &&. Например, ту же левую половину круга радиуса 2, включая и его границы, и правую относительно оси OY часть полукольца, образованного окружностями радиусов 2 и 3 с центром в начале координат, можно определить так:
x<=0 && x*x+y*y<=4 || x>=0 && x*x+y*y>=4 && x*x+y*y<=9;
используется операция отрицание (!), если легче определить область, которой точки не принадлежат, или некоторую часть уже определённой области надо “выбросить” из неё. Например, так легче определить круг радиуса 5 с центром в начале координат, из которого выброшен треугольник с вершинами (1,1), (0,0) и (–1,1): x*x+y*y<=25 && ! ( у>=abs(x) && y<=1);.