
- •Часть 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.7. Оператор switch
Оператор switch называют оператором с множественным выбором. Он используется, когда необходимо проверить выражение или переменную на равенство целому ряду константных целочисленных значений, которые они могут принимать.
Оператор break по своей сути аналогичен goto, но в отличие от последнего, не позволяет выполнять произвольных переходов, ограничивая их точкой окончания языковой конструкции, внутри которой он применяется. С точки зрения программной логики работы оператора switch оператор break обязательно должен завершать группу операторов.
switch (целое выражение)
{
case константа_1: операторы_1; break;
case константа_2: операторы_2; break;
...
case константа_n: операторы_n; break;
default: операторы_n+1;
}
Сначала вычисляется целое выражение, и результат сравнивается со значениями константа_1, константа_2, ..., константа_n. Если где-то будет совпадение, то выполняется группа операторов, имеющих соответствующую метку. Если же значение целого выражения не совпало ни с одной из констант, то выполняется группа операторов, помеченная ключевым словом default. При отсутствии ключевого слова default и несовпадении значения выражения ни с одной из констант, операторы в конструкции switch не выполняются.
Пример.
char c='a';
clrscr();
switch (c)
{
case 'm' : printf("c \n"); break;
case 'h' : printf("c \n"); break;
case 'e' : printf("c \n"); break;
case 'a' : printf("c \n"); break;
case 't' : printf("c \n"); break;
case 'z' : printf("c \n"); break;
case 'v' : printf("c \n"); break;
case 'b' : printf("c \n"); break;
default : printf("The end \n");
}
Вышеприведенный фрагмент кода программы и схема на рисунке 3.4 иллюстрируют работу оператора switch. Если выражение совпадет с константой (case ‘a’ совпадает с выражением), то на экран выведется сообщение «с», как в данном примере. Если же совпадения не последует, то по умолчанию на экране появится «The end».
Рис.3.4. Схема работы оператора switch
`` ` `3.8. Операторы цикла
3.8.1. Оператор for
Язык Си имеет несколько операторов для организации циклов. Отличие цикла for от циклов while и do..while состоит в том, что в нем, как правило, число повторений заранее известно, т.е. можно удобно задавать начальные значения и изменять параметры цикла.
Цикл for (цикл с параметром) обычно используется в тех случаях, когда нужно точно определить необходимое количество повторений.
for (выражение 1; выражение 2; выражение 3) оператор;
выражение 1 – задает начальное значение параметра цикла;
выражение 2 – условие продолжение цикла (если истина – продолжение, если ложь – выход из цикла);
выражение 3 – модификатор счетчика повторений цикла.
Пример.
int i;
for (i=0; i<=10; i++)
printf(“%d \n”,i);
Данный фрагмент программы и схема на рисунке 3.5 иллюстрируют работу оператора for. Когда программа в своем выполнении доходит до цикла for, первым выполняется инициализирующее выражение, в котором обычно устанавливается счетчик цикла. Затем условное выражение, которое также называется условием прекращения цикла; пока оно равно истине, цикл не прекращается. Каждый раз после всех строк тела цикла выполняется модифицирующее выражение, в котором происходит изменение счетчика. Как только условное выражение даст ложь, все строки тела цикла будут пропущены и управление будет передано следующей за циклом команде (т.е. выход из цикла).
Рис 3.5. Схема работы оператора for
Если тело цикла содержит более одного оператора, используются фигурные скобки.
for (выражение 1; выражение 2; выражение 3)
{
оператор 1;
оператор 2;
...
оператор n;
}
Для повышения эффективности использования оператора for можно использовать следующие приёмы.
Значение счетчика наращивания можно увеличивать или уменьшать;
for (i=0; i<=10; i++) или for (i=10; i>=0; i--)
В качестве условий продолжения цикла можно использовать арифметические выражения
for (i=х; i<=5*х; i=у/х) или for (i=4; i<=40; i=i+5)
for (i=20; i>=2; i-=2) или for (i=5; i<=25; i+=5)
Возможна инициализация нескольких переменных внутри цикла
for (int i=0, sum=0; i<=100; i++)
Все три выражения в операторе for являются необязательными, т.е. их можно опускать. Выражение 1 может быть пропущено, если переменная инициализируется в другом месте программы, выражение 3 опускается, если нет необходимости в приращении или данные операторы находятся в теле самой структуры. Например,
int i=0;
for (; i<=100; i++)
или
for (int i=0; i<=100;)
i++;
Не вызовет ошибки даже следующая запись
for ( ; ; )
Она задаёт бесконечный цикл.
В качестве индексов можно использовать переменные типа char
for (i=’a’; i<=’z’; i++)
Ниже рассмотрен несложный пример использования оператора for.
Данная программа использует оператор for для суммирования всех четных чисел от 2 до 100.
#include <stdio.h> // директива для подключения к программе
void main() // описаний средств ввода-вывода
{
int Summa=0, i; // инициализация переменных
for (i=2; i<=50; i=i+2) // условие приращения и повторения
Summa = Summa + i;
printf("Сумма равна: %d\n", Summa);
}
Сумма равна: 650.