- •Часть 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 = b = 2, c, d;
c = ++a; //a = 3, c = 3
d = b++; //d = 2, b = 3
c = a + b; //c = 6
d = a-- * ++c / (--b + 1); //c = 7, b = 2, d = 7, a = 2
a = 10++; //неверно
a = (--b + 5)++; //неверно
Унарный плюс и унарный минус (строка 2)
Унарный плюс (+) перед операндом можно не ставить, т.к. он подразумевается по умолчанию. Унарный минус (-) меняет знак операнда на противоположный.
Явное преобразование типа
Эта унарная операция используется для явного преобразования величины из одного типа в другой, который указывается в круглых скобках перед преобразуемой величиной. При преобразовании из более длинного типа в более короткий возможна потеря информации, если исходное значение выходит за пределы диапазона результирующего типа (эта потеря никак не диагностируется, т.е. остается на совести программиста). Примеры:
int a = 9, b = 10;
float x;
x = a/b; //x = 0
x = (float)a/b; //x = 0.9
x = a/(float)b; //x = 0.9
x = (float)(a/b); //x = 0
a = 256;
b = a; //b = 256
b = (char)a; //b = 0 (потеря информации)
Операция определения размера sizeof
Эта унарная операция предназначена для вычисления размера операнда или типа в байтах, и имеет две формы:
sizeof выражение
sizeof (выражение), sizeof (тип)
Примеры:
short a, b = 5;
int c;
float x = 10;
a = sizeof(char); //a = 1
a = sizeof b; //a = 2
a = sizeof(b + 1); //a = 4 (целая константа имеет по умолчанию тип int)
a = sizeof(x + 1); //a = 4
a = sizeof(x + 1.0); //a = 8 (вещественная константа имеет по умолчанию тип double)
Деление и остаток от деления
Операция деления (/) применима ко всем простым типам данных. Если оба операнда целочисленные, результат операции округляется до целого числа путем отбрасывания дробной части. Если хотя бы один из операндов вещественный, то дробная часть не отбрасывается, и результат операции будет иметь вещественный тип.
Операция остаток от деления (%) применяется только к целочисленным операндам. Примеры:
int a = 11, b = 4, c;
float x;
x = a/b; //x = 2.0
x = (float)a/b; //x = 2.75
c = a%b; //c = 3
x = a%b; //x = 3.0 (неявное приведение типа)
Операции сдвига (<< и >>)
Они применяются к целочисленным операндам и сдвигают двоичное представление первого операнда влево или вправо на количество двоичных разрядов, заданное вторым операндом. При сдвиге влево (<<) освободившиеся разряды обнуляются. При сдвиге вправо (>>) освободившиеся биты заполняются нулями, если первый операнд беззнакового типа, и знаковым разрядом в противном случае. Примеры:
int a = 3, b = 9, c;
//a = 0…011(2) = 11(2)
c = a<<1; //c = 110(2) = 6, т.е. 3*21
c = a<<2; //c = 1100(2) = 12, т.е. 3*22
c = a<<3; //c = 11000(2) = 24, т.е. 3*23
c = a<<4; //c = 110000(2) = 48, т.е. 3*24
//b = 0…01001(2) = 1001(2)
c = b>>1; //c = 100(2) = 4, т.е. 9/21 (деление целочисленное).
c = b>>2; //c = 10(2) = 2, т.е. 9/22
c = b>>3; //c = 1(2) = 1, т.е. 9/23
c = b>>4; //c = 0(2) = 0, т.е. 9/24
Другими словами, использование операций сдвига влево и вправо приводит соответственно к умножению и делению первого операнда на 2 в степени, задаваемой вторым операндом.
Поразрядные или побитовые логические операции ~, &, |, ^
Они применяются только к целочисленным операндам и работают с их двоичными представлениями.
Унарная операция поразрядного отрицания (~), называемая также поразрядным НЕ, инвертирует каждый разряд в двоичном представлении целочисленного операнда, т.е. превращает единичные биты в нулевые и наоборот.
При поразрядном И (&), называемом также поразрядной конъюнкцией, бит результата равен 1 только тогда, когда соответствующие биты обоих операндов равны 1, например:
int a = 6, b = 5, c; 110(2)
c = a & b //c = 4 101(2)
100(2)
При поразрядном ИЛИ (|), называемом также поразрядной дизъюнкцией, бит результата равен 1 тогда, когда соответствующий бит хотя бы одного из операндов равен 1, например:
c = a | b; //c = 7 110(2)
101(2)
111(2)
При поразрядном исключающем ИЛИ (^) бит результата равен 1 только тогда, когда соответствующий бит только одного из операндов равен 1, например:
c = a ^ b; //c = 3 110(2)
101(2)
011(2)
Операции сравнения <, <=, >, >=, ==, !=
Операции сравнения, называемые также операциями отношения, сравнивают первый операнд со вторым. Результатом операции является значение логического типа ИСТИНА или ЛОЖЬ. В языке С значение ЛОЖЬ представляется нулем, а значение ИСТИНА – любым числом, не равным нулю, обычно единицей. Операции сравнения на равенство и неравенство имеют меньший приоритет, чем остальные операции сравнения.
int a = 5, b;
b = a <= 10; // b = 1
b = a % 2 == 0; // b = 0