- •Материалы для подоговки к экзамену по дисциплине «основы программировния»
- •Тема №1 Основные понятия
- •Способы записи алгоритма
- •Тема №2 Переменные
- •Типы переменных
- •Типы с плавающей точкой
- •Переполнение переменных
- •Постфиксное обозначение типа
- •Шестнадцатеричный и восьмеричный формат
- •Экспоненциальная форма представления чисел
- •Объявление переменных
- •Начальное значение переменной
- •Область видимости переменной
- •Тема №3 Оператор присваивания
- •Ввод-вывод Форматированный вывод
- •Форматированный ввод
- •Непечатные символы
- •Тема №4 Ветвления и логические операторы
- •Оператор Switch
- •Логические операторы
- •Логическое отрицание
- •Логическое и
- •Логическое или
- •Пример: закон де-Моргана.
- •Порядок выполнения логических операторов
- •Тема №5 Циклы
- •Цикл с предусловием
- •Циклы с постусловием
- •Цикл for
- •Вложенные циклы
- •Тема №6 Одномерные массивы
- •Начальная инициализация массива.
- •Размер массива
- •Переполнение массива
- •Пример с одномерным массивом
- •Многомерные статические массивы
- •Пример с многомерным массивом
- •Тема №7 Строки в си. Введение
- •Чтение строк
- •Указатели
- •Определение
- •Арифметика указателей
- •Указатель на указатель
- •Указатели и приведение типов
- •Null pointer - нулевой указатель
- •Пример работы с указателями
- •Тема №8 Указатели и массивы
- •Многомерные массивы и указатели на многомерные массивы
- •Определение макросов
- •Тема №9 Тернарный оператор и оператор запятая
- •Оператор запятая.
- •Сегментация приложения на си
- •Тема №10 Динамическое выделение памяти
- •Освобождение памяти с помощью free
- •Работа с двумерными и многомерными массивами
- •Тема №11 Параметры командной строки
- •Функции
- •Параметры и аргументы
- •Передача аргументов По значению
- •По указателю (ссылке)
- •Передача массива в качестве аргумента
- •Тема №12 Битовые операции
- •Операции побитового сдвига
- •Примеры
- •Вопросы к экзамену по дисциплине «Основы программирования»
Логическое или
Оператор логическое ИЛИ (логическое сложение, OR) истинен тогда, когда истиной является хотя бы один его аргумент.
X |
Y |
X OR Y |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
В си ИЛИ представлен оператором ||. Например, усовершенствуем программу: теперь пол можно вводить как большой, так и маленькой буквой
#include <conio.h>
#include <stdio.h>
void main() {
char genderInput;
char gender;
unsigned int age;
unsigned int height;
printf("Enter gender ('M' or 'F')\n");
scanf("%c", &genderInput);
printf("Enter age\n");
scanf("%u", &age);
printf("Enter height\n");
scanf("%u", &height);
if (genderInput == 'M' || genderInput == 'm') {
gender = 1;
} else {
gender = 0;
}
if ((age > 17 && height >= 180) && gender) {
printf("Wellcome");
} else {
printf("Go away");
}
_getch();
}
Как и в случае оператора И, ИЛИ коммутативен5 и ассоциативен6.
Операторы можно перемешивать друг с другом, создавая сложные операторы.
#include <conio.h>
#include <stdio.h>
void main() {
char gender;
unsigned int age;
unsigned int height;
printf("Enter gender ('M' or 'F')\n");
scanf("%c", &gender);
printf("Enter age\n");
scanf("%u", &age);
printf("Enter height\n");
scanf("%u", &height);
if ((age > 17 && height >= 180) && (gender == 'M' || gender == 'm')) {
printf("Wellcome");
} else {
printf("Go away");
}
_getch();
}
Стоит только помнить о том, что оператор отрицания имеет больший приоритет, чем И или ИЛИ, поэтому будет выполняться в первую очередь. Если может случиться ситуация, когда порядок выполнения не ясен, определите его с помощью скобок.
Пример: закон де-Моргана.
Чтобы сменить И на ИЛИ (или наоборот), необходимо инвертировать значения всех операндов, заменить И на ИЛИ (или ИЛИ на И) и инвертировать конечный результат. В случае с нашим условием.
(age > 17 && height >= 180) && (gender == 'M' || gender == 'm')
Рассмотрим сначала кусок
(age > 17 && height >= 180)
Меняем все значения на обратные
(!(age > 17) && !(height >= 180))
заменяем оператор && на ||
(!(age > 17) || !(height >= 180))
и инвертируем ответ
!(!(age > 17) || !(height >= 180))
Как видим, результат тот же. Очевидно, что
!(age > 17)
эквивалентно
age <= 17
Таким образом, изменим условие
!(age <= 17 || height < 180)
Поменяем таким же образом вторую скобку
(gender == 'M' || gender == 'm')
на
!(gender != 'M' && gender != 'm')
получим
!(age <= 17 || height < 180) && !(gender != 'M' && gender != 'm')
Теперь можно применить это же правило и для всего выражения
!((age <= 17 || height < 180) || (gender != 'M' && gender != 'm'))
