
- •Часть 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. Динамические структуры данных
- •Варианты индивидуальных заданий
3.4. Операция запятая
Запятая может быть использована в качестве операции, а может применяться как разделитель.
Несколько выражений, разделенных запятыми, вычисляются слева направо. Например, выражение (x=3, 3*x) будет иметь результат 9, однако переменная х примет значение 3.
Операция , (запятая) позволяет вводить составные выражения и в операторах цикла for, при этом первым будет выполняться выражение, стоящее слева, затем следующее.
for (i=0, sum=0; i<=100; i++)
Рассмотрим использование запятой в качестве разделителя.
разделение начальных значений элементов массивов и компонентов структур при их инициализации.
int Massiv[5] = {1, 2, 3, 4, 5};
использование в списках формальных и фактических параметров при работе с функциями.
void print(char value, int x);
использование для описания определенных объектов (например, переменных) одного типа
int x, y;
float a, b, c, f1, f2;
Следует обратить внимание на то, что запятую-операцию стоит отделять от запятой-разделителя с помощью круглых скобок.
int i = 1;
int m[3] = {i, (i = 2, i * i), i};
В данном примере запятая в круглых скобках выступает в роли знака операции. Операция «=» имеет более высокий приоритет, чем операция «запятая». Поэтому вначале i получает значение 2, затем вычисляется произведение i * i, и этот результат служит значением выражения в скобках. Однако значением переменной i остается 2. Значения m[0], m[1], m[2] будут соответственно 1, 4, 2.
В приведённом примере видна ещё одна особенность операции запятая: выражения, являющиеся «аргументами» этой операции, вычисляются в порядке их записи независимо от приоритетов операций. Так, в приведённом примере наивысший приоритет – у операции умножения, но оно выполняется только после операции присваивания, имеющей более низкий приоритет.
3.5. Операция условия ?:
Существует более короткий путь записи оператора if...else – эту альтернативу представляют в виде ?:. Данный оператор позволяет создавать простые условные однострочные выражения, в которых выполняется одно из двух действий в зависимости от заданного условия.
выражение ? оператор 1: оператор 2;
(a>=b) ? printf(“Число a не меньше числа b.\n ”) :
printf(“Число a меньше числа b.\n ”);
В данном примере, если число a >= числа b, условие «истина», то на экране появится – «Число a не меньше числа b.», иначе «Число a меньше числа b.».
3.6. Оператор безусловного перехода goto
Результатом применения оператора goto является передача управления первому оператору программы после метки.
goto метка;
Метка представляет собой некоторый идентификатор, после которого следует двоеточие. Метка не должна выходить за пределы той функции, где находится оператор goto, который на нее ссылается.
void main()
{
int i=1;
start:
if (i>5)
goto finish;
printf(" %d ", i++);
goto start;
finish:
putchar('\n');
return 0;
}
Результат работы программы: 1 2 3 4 5
Приведенный программный код показывает работу оператора goto. Цикл, основанный на операторе goto, выполняется пять раз, и при этом каждый раз выводится значение счетчика. После инициализации переменной i значением 1 программа проверяет ее, определяя, не больше ли она 5 (метка start пропускается, так как она не выполняет никаких действий). Если значение переменной больше 5, то управление передается первому оператору, расположенному за меткой finish. Если же значение меньше или равно 5, то выполняется тело цикла (состоящее из вызова функции printf), после чего управление передается первому оператору после метки start, т.е. в данном случае – оператору if.
При разработке программ оператор goto использовать не рекомендуется, так как при его наличии программы становятся неструктурированными, их сложнее отлаживать и модифицировать.