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