
- •Часть 1
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Учреждение образования
- •«Белорусский государственный университет
- •Информатики и радиоэлектроники»
- •Часть 2 __184__
- •Содержание дисциплины
- •1. Индивидуальные практические занятия, их характеристика
- •2. Контрольные работы, их характеристика
- •3. Курсовой проект, его характеристика
- •4. Литература
- •4.1. Основная
- •4.2. Дополнительная
- •5. Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов и технических средств обучения
- •Протокол согласования учЕбной программы по изучаемой учебной дисциплине с другими дисциплинами специальности
- •Теоретический раздел Введение
- •1. Основные типы данных
- •1.1. Общие сведения
- •1.2. Данные типа int
- •1.3. Данные типа char
- •1.4. Модификаторы доступа const и volatile
- •1.5. Данные вещественного типа (с плавающей точкой)
- •1.6. Элементарный ввод-вывод
- •1.7. Структура простой программы на языке Си
- •2. Операции и выражения
- •2.1. Выражение и его интерпретация
- •2.2. Основные операции
- •2.2.1. Арифметические операции
- •2.2.2. Побитовые логические операции
- •2.2.3. Операции сдвига
- •2.2.4. Операция присваивания
- •2.2.5. Операция sizeof
- •2.2.6. Преобразование типов в выражениях
- •2.2.7. Операция преобразования типов
- •2.2.8. Приоритеты в языке Си
- •3. Операторы управления вычислительным процессом
- •3.1. Оператор if
- •3.2. Операции отношения
- •3.3. Логические операции
- •3.4. Операция запятая
- •3.5. Операция условия ?:
- •3.6. Оператор безусловного перехода goto
- •3.7. Оператор switch
- •`` ` `3.8. Операторы цикла
- •3.8.1. Оператор for
- •3.8.2. Оператор while
- •3.8.3. Оператор do...While
- •3.9. Оператор break
- •3.10. Оператор continue
- •4. Массивы и указатели
- •4.1. Одномерные массивы и их инициализация
- •4.2. Многомерные массивы и их инициализация
- •4.3. Объявление указателей
- •4.4. Операции над указателями
- •1) Взятие адреса
- •2) Косвенная адресация или разыменование указателя
- •3) Увеличение или уменьшение значения указателя на целое число
- •4) Разность указателей
- •5) Сравнение указателей
- •6) Присваивание указателей друг другу
- •4.6. Связь между указателями и массивами
- •4.7. Динамическое распределение памяти
- •4.8. Массивы указателей
- •5. Функции
- •5.1. Общие сведения
- •5.2. Область видимости переменных
- •5.2.1. Локальные переменные
- •5.2.2. Глобальные переменные
- •5.3. Передача параметров в функцию
- •5.4. Рекурсивные функции
- •5.5. Использование функций в качестве параметров функций
- •5.6. Указатели на функции
- •5.7. Структура программы на Си
- •5.8. Передача параметров в функцию main()
- •6. Строки
- •7. Классы хранения и видимость переменных
- •7.1. Общие сведения
- •7.2. Автоматический класс хранения (auto)
- •7.3. Регистровый класс хранения (register)
- •7.4. Статический класс хранения (static)
- •7.5. Внешний класс хранения (extern)
- •7.6. Заключение
- •8. Структуры, объединения и перечисления
- •8.1. Общие сведения
- •8.2. Инициализация структурных переменных
- •8.3. Вложенные структуры
- •8.4. Указатели на структуры
- •8.5. Массивы структурных переменных
- •8.6. Передача функциям структурных переменных
- •8.7. Оператор typedef
- •8.8. Поля битов в структурах
- •8.9. Объединения
- •8.10. Перечисления
- •9. Динамические структуры данных
- •9.1. Общие сведения
- •9.2. Связные списки
- •9.2.1. Односвязные списки
- •9.2.2. Двусвязные списки
- •9.2.3. Циклические списки
- •9.3. Стеки
- •9.4. Очереди
- •9.5. Деревья
- •9.5.1. Понятие графа
- •9.5.2. Бинарные деревья
- •10. Файлы
- •10.1. Общие сведения
- •10.2. Открытие и закрытие файлов
- •10.3. Функции ввода-вывода для работы с текстовыми файлами
- •10.4. Произвольный доступ к файлу
- •10.5. Функции ввода-вывода для работы с бинарными файлами
- •11. Директивы препроцессора
- •11.1. Основные понятия
- •11.2. Директива #include
- •11.3. Директивы препроцессора #define и #undef
- •11.3.1. Символические константы
- •11.3.2. Макросы с параметрами
- •11.3.3. Директива #undef
- •11.4. Условная компиляция
- •11.5. Директивы # и ##
- •12. Модульное программирование
- •13. Введение в объектно-ориентированное программирование
- •13.1. Постановка задачи
- •13.2. Решение задачи средствами Си
- •13.5. Наследование
- •13.6. Перегрузка
- •13.7. Ссылочный тип
- •Литература
- •Приложение 1. Рекомендации по оформлению текстов программ
- •Тесты к теоретическому разделу Вопросы к разделу 1. Основные типы данных
- •Вопросы к разделу 2. Операции и выражения
- •Вопросы к разделу 3. Операторы управления вычислительным процессом
- •Вопросы к разделу 4. Массивы и указатели
- •Вопросы к разделу 5. Функции
- •Вопросы к разделу 6. Строки
- •Вопросы к разделу 7. Классы хранения и видимость переменных
- •Вопросы к разделу 8. Структуры, объединения и перечисления
- •Вопросы к разделу 9. Динамические структуры данных
- •Вопросы к разделу 10. Файлы
- •Вопросы к разделу 11. Директивы препроцессора
- •Вопросы к разделу 12. Модульное программирование
- •Вопросы к разделу 13. Введение в ооп
- •Правильные ответы на вопросы тестов к теоретическому разделу
- •Вопросы к теоретическому зачету
- •Варианты индивидуальных заданий
- •Контрольная работа №2
- •Варианты индивидуальных заданий
- •Индивидуальные практические работы Указания к выбору варианта индивидуальных практических работ
- •Индивидуальная практическая работа № 1. Массивы и строки
- •Варианты индивидуальных заданий
- •Индивидуальная практическая работа № 2. Динамические структуры данных
- •Варианты индивидуальных заданий
2.2.7. Операция преобразования типов
Имеется возможность заставить выражение принять определенный тип с помощью операции преобразования типов. Эта операция имеет следующий вид:
(тип) выражение
где тип – это один из стандартных типов данных Си или определённый пользователем тип. Например, если необходимо, чтобы выражение х / 2 имело тип float (остаток сохранится), следует написать:
(float) x / 2
Операция преобразования типов – это унарный оператор.
Хотя принудительные преобразования редко используются при программировании на Си, бывают случаи, когда они просто необходимы. Например, необходимо использовать целое число для управления циклом и, кроме этого, требуется вычислять дробную часть от деления этого числа на какое-либо другое, как в следующем примере:
#include <stdio.h>
// выводит i и i/2 с дробной частью
void main()
{
int i;
for (i = 1; i <= 100; ++i)
printf(“%d / 2 is: %f\n”, i, (float) i/2);
return 0;
}
Без принудительного преобразования (float) будет вычисляться только целая часть, а благодаря (float) получим также и дробную часть.
2.2.8. Приоритеты в языке Си
Все операции, распознаваемые компилятором, упорядочены по приоритету, который определяет порядок интерпретации выражения. Он может изменяться круглыми скобками.
Таблица 2.3. содержит перечень всех операций языка Си, упорядоченных в порядке убывания приоритета (горизонтальная черта отделяет операции с одинаковым приоритетом). В пределах своего приоритета операции выполняются справа налево или слева направо. Например, выражение 10 / 2 * 4 будет равно 20, т. к. сначала выполняется операция деления, затем операция умножения.
Таблица 2.3. Приоритеты операций
Название |
Символ операции |
Порядок выполнения |
Обращение к функции Выделение элемента массива Выделение поля структурной переменной Выделение поля структурной переменной по указателю на её начало |
() [] . –> |
Слева направо |
Логическое отрицание Поразрядное логическое НЕ Изменение знака (унарный минус) Инкремент Декремент Определение адреса переменной Обращение к памяти по значению указателя Преобразование к типу Определение размера в байтах |
! ~ – ++ –– & * (type) sizeof |
Справа налево |
Умножение Деление Определение остатка целого деления |
* / % |
Слева направо |
Сложение Вычитание |
+ – |
Слева направо |
Сдвиг влево Сдвиг вправо |
<< >> |
Слева направо |
Меньше Меньше или равно Больше Больше или равно |
< <= > >= |
Слева направо |
Равно Не равно |
== != |
Слева направо |
Поразрядное логическое И |
& |
Слева направо |
Поразрядное исключающее ИЛИ |
^ |
Слева направо |
Поразрядное логическое ИЛИ |
| |
Слева направо |
Логическое И |
&& |
Слева направо |
Логическое ИЛИ |
|| |
Слева направо |
Операция условия |
?: |
Справа налево |
Присваивание |
= += –= *= /= %= <<= >>= |= ^= &= |
Справа налево |
Операция «запятая» |
, |
Слева направо |
Заметим, что приоритеты побитовых операторов &, ^ и | ниже, чем приоритет == и !=, из-за чего в побитовых проверках типа
if ((x & y) == 0),
чтобы получить правильный результат сравнения x & y с 0, необходимо использовать скобки. Использование дополнительных круглых скобок не вызовет ошибок и не уменьшит скорость вычисления выражения.
if ((a = b) == с)
В этом примере сначала значение b присваивается операнду а, затем значение с сравнивается с полученным значением операнда а.
Можно использовать круглые скобки для уточнения порядка вычисления. Например: какое из двух выражений легче читать?
x=y/3-34*temp&127;
или
x = (у / 3) – ((34 * temp) & 127);