
- •Часть 1
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Часть 2 184
- •Пояснительная записка
- •Содержание дисциплины
- •Индивидуальные практические работы, их характеристика
- •Контрольные работы, их характеристика
- •Литература
- •Основная
- •Дополнительная
- •Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •Учебно-методические пособия
- •Алфавит языка
- •Лексемы
- •Идентификаторы
- •Ключевые слова
- •Знаки операций
- •Константы
- •Комментарии
- •Тема 2. Типы данных Концепция типа данных.
- •Простые типы данных
- •Целый тип int
- •Символьный тип char
- •Типы с плавающей точкой: float, double, long double
- •Тема 3. Выражения
- •Переменные
- •Именованные константы
- •Операции
- •Операции присваивания
- •Инкремент и декремент
- •Унарный плюс и унарный минус (строка 2)
- •Явное преобразование типа
- •Операция определения размера sizeof
- •Деление и остаток от деления
- •Логические операции не, и, или (!, &&, ||)
- •Условная операция (?:)
- •Операция запятая (,)
- •Операции взятия адреса и разадресации
- •Тема 4. Операторы
- •Структура программы
- •Тема 5. Базовые конструкции структурного программирования
- •Операторы ветвления
- •1. Условный оператор if
- •2. Оператор switch
- •Операторы цикла
- •1. Цикл с предусловием while
- •2. Цикл с постусловием do-while
- •3. Цикл с параметром for
- •Тема 6. Массивы
- •Тема 7. Указатели и массивы
- •Тема 8. Строки символов
- •Тема 9. Структуры
- •Массивы структур
- •Битовые поля
- •Объединения
- •Перечисления
- •Тема 10. Функции
- •Глобальные, локальные и статические переменные
- •Параметры функции
- •Передача массивов в качестве параметров функции
- •Функция main, ее параметры
- •Функции стандартной библиотеки
- •Функции форматного вывода и ввода printf и scanf
- •Тема 11. Файлы
- •Тема 12. Работа с динамической памятью
- •Тема 13. Динамические структуры данных
- •Очереди
- •Линейные списки
- •Бинарные деревья
- •Практический раздел Общие указания Указания по выбору варианта
- •Порядок оформление итогового отчета
- •Индивидуальные практические работы Индивидуальная практическая работа 1 Методические указания
- •Варианты заданий.
- •Индивидуальная практическая работа 2 Методические указания
- •Варианты заданий
- •Контрольные работы Контрольная работа 1 Методические указания
- •Варианты заданий
- •Контрольная работа 2 Методические указания
- •Варианты заданий
Логические операции не, и, или (!, &&, ||)
Операнды этих логических операций рассматриваются как имеющие значение ЛОЖЬ, если они равны нулю, и значение ИСТИНА – если не равны нулю. Результатом любой логической операции является значение логического типа ИСТИНА или ЛОЖЬ.
Результат унарной операции логическое НЕ (!) есть ЛОЖЬ, если операнд имеет значение ИСТИНА, и ИСТИНА, – если операнд имеет значение ЛОЖЬ.
Результат операции логическое И (&&) имеет значение ИСТИНА, только если оба операнда имеют значение ИСТИНА.
Результат операции логическое ИЛИ (||) имеет значение ИСТИНА, если хотя бы один из операндов имеет значение ИСТИНА.
Если значения первого операнда достаточно, чтобы определить результат операции, второй операнд не вычисляется. Примеры:
int a = 5, b = 10, c;
с = a + b; //с = 15
с = !(a + b); //с = 0
с = a && b; //с = 1
с = a - 5 && b; //с = 0
с = (a && b) - 5; //с = -4
с = a >= 10 && b >= 10; //с = 0
с = !(a >= 10 && b >= 10); //с = 1
с = a >= 10 || b >= 10; // с = 1
с = !a >= 10 || !b >= 10; //с = 0
с = ( . . . ) || 1; //с всегда равно 1
с = ( . . . ) && 0; //с всегда равно 0
Условная операция (?:)
Эта операция тернарная, т.е. имеет 3 операнда. Ее формат:
операнд1 ? операнд2 : операнд3
Первый операнд всегда рассматривается с точки зрения его логического значения, и если результат вычисления первого операнда есть ИСТИНА, то результатом условной операции будет значение второго операнда, иначе – третьего операнда. Вычисляется всегда либо второй операнд, либо третий. Примеры:
int a = 5, b = 10, max;
max = (b > a) ? b : a; //max = 10
a = (a < b) ? a + 1 : 5; //при повторе а будет изменяться в диапазоне от 5 до 10
a = a / b ? 5 : a + 1; //при повторе а будет изменяться в диапазоне от 5 до 10
Условная операция правоассоциативна, т.е. выполняется справа налево. Например, выражение a ? b : c ? d : e вычисляется как a ? b : (c ? d : e).
Операция запятая (,)
Операция запятая, называемая также операцией последовательного вычисления, используется достаточно редко и обычно в конструкциях, которые тесно связаны друг с другом (например, в операторах цикла for). Выражения, разделенные запятой, вычисляются слева направо. Тип и значение результата совпадают с типом и значением крайнего справа выражения. Например:
int a, b, c;
c = 2 * (a = 3, b = 7, a + 2) + b; //c = 17
c = a + b; //c = 10
Тот же результат можно получить без использования операции запятая:
int a = 3, b = 7, c;
c = 2 * (a + 2) + b;
c = a + b;
Следующие 3 оператора: a = 1; b = 2; c = 3; можно объединить в один: a = 1, b = 2, c = 3;
Операции взятия адреса и разадресации
Унарная операция взятия адреса (&) позволяет получить адрес операнда, хранящего свое значение в оперативной памяти (точнее, адрес первого байта, если под значение отводится несколько байт). Объект, предназначенный для хранения адреса операнда, называется указателем и описывается по аналогии с описанием переменной с тем лишь отличием, что перед именем указателя ставится звездочка (*). Например:
int a = 5, b = 10, c; //описание переменных a, b, c и инициализация a и b
int *pa, *pb; //описание указателей pa и pb, которые пока ни на что не указывают
pa = &a; //указатель pa теперь будет указывать на переменную а
pb = &b; //указатель pb теперь будет указывать на переменную b
Последние 3 строки можно записать короче:
int *pa = &a, *pb = &b; //описание и инициализация указателей pa и pb
Унарная операция разадресации (*) позволяет получить значение операнда по значению указателя на этот операнд:
c = *pa; //c = 5
c = *pb; //c = 10
c = *pa + *pb; //c = 15
pb = pa;
c = *pb; //c = 5
Чтобы указатель ни на что не указывал, нужно приравнять его нулю или, что то же самое, приравнять встроенной константе NULL, которая введена специально для работы с указателями:
pa = 0; //указателей pa теперь ни на что не указывает
pb = NULL; //указателей pb теперь ни на что не указывает
c = *pa; //ошибка
c = *pb; //ошибка
Оставшиеся 4 унарные операции (строка 1), будут рассмотрены позднее. Отметим лишь следующее:
Операция () обозначает вызов функции (например main(), printf(…), scanf(…) и др.).
Операция [] обеспечивает доступ к элементам массива.
Операции . (точка) и -> обеспечивают доступ к полям структуры.