
- •Часть 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.10. Оператор continue
Еще одну возможность влиять на выполнение операторов тела цикла обеспечивает оператор continue. Данный оператор является противоположным уже рассмотренному нами оператору break.
Continue – заставляет пропустить программу все оставшиеся операторы тела цикла, в котором он находится, но сам цикл при этом не завершается. Если условие остаётся истинным, то цикл будет продолжен.
Пример.
void main()
{
int x;
for(x=1; x<=10; x++) // счетчик наращивается;
{
if (x==8) // пропускает в цикле оставшийся код,
continue; // только если х == 8;
printf ("%d ", x);
}
printf("Продолжение при значении переменной, равной 8\n");
}
В результате работы программы получим следующее:
1 2 3 4 5 6 7 9 10
Продолжение следует при значении переменной, равной 8.
Допускается также совместное использование операторов break и continue.
Continue не рекомендуется использовать в циклах while и do до модификации значений переменных, входящих в выражение условия продолжения цикла, поскольку это может привести к образованию бесконечного цикла.
4. Массивы и указатели
4.1. Одномерные массивы и их инициализация
Массивы – это индексированные наборы данных определенного типа. Для обращения к элементу массива, мы указываем имя массива и номер позиции этого элемента в массиве.
На рис.4.1 показан целочисленный массив mas. К каждому элементу этого массива можно обратиться, задав порядковый номер элемента (от 0 до 9) и его имя (mas). Первый элемент в любом массиве имеет нулевой порядковый номер.
Рис 4.1. Массив из 10 элементов
Таким образом, первый элемент массива mas обозначается как mas[0] и его значение равно 23, второй элемент как mas[1] со значением 57, седьмой элемент как mas[6] co значением 1. В общем случае, i-тый элемент массива mas обозначается как mas[i-1].
Номер позиции элемента, содержащийся внутри квадратных скобок, называют индексом. Индекс должен быть целым числом или целочисленным выражением. Если в программе в качестве индекса используется выражение, то для определения индекса происходит оценка этого выражения. Например, если a = 2 и b = 3, то оператор
mas[a+b] = mas[a+b] + 2;
прибавляет 2 к элементу массива mas[5].
Следующая строка выводит сумму значений первых трех элементов массива mas:
printf(“%d”,mas[0]+mas[1]+mas[2]);
Для того чтобы разделить значение седьмого элемента массива mas на 2 и присвоить результат переменной x, можно написать
x = mas[6] / 2;
Скобки, в которые заключается индекс массива, на самом деле, рассматриваются в качестве операции языка Си. Они имеют тот же самый приоритет, что и круглые скобки, т.е. наивысший.
Массивы занимают определенное место в памяти. Поэтому нужно определить тип элементов массива и число элементов в массиве, чтобы компьютер мог зарезервировать соответствующий объем памяти. Для выделения памяти целочисленному массиву из 10 элементов, нужно написать
int mas[10];
При помощи одного объявления можно зарезервировать память для нескольких массивов:
int a[100], b[50];
Массив можно инициализировать при объявлении путем помещения вслед за его объявлением знака равенства и списка (заключенного в фигурные скобки) инициализирующих значений, разделенных запятыми, т.е.
int mas[10] = {2,5,7,9,10,13,17,20,23,25};
Если инициализирующих значений меньше, чем элементов массива, остающиеся элементы большинством компиляторов автоматически инициализируются нулями. Поэтому, для того, чтобы инициализировать все элементы массива нулем, следует написать:
int mas[10] = {0};
Данное выражение явно инициализирует нулем первый элемент и автоматически инициализирует нулями оставшиеся девять элементов, поскольку инициализирующих значений меньше, чем элементов в массиве. С точки зрения хорошего стиля программирования рекомендуется отдавать предпочтение явной инициализации всех элементов.
Если инициализирующих значений больше, чем элементов массива, то это вызовет синтаксическую ошибку. Типичной ошибкой является ссылка на элемент, находящийся вне границ массива.
Если размер массива не включается в его объявление со списком инициализирующих значений, то число элементов в массиве будет равно числу элементов в списке инициализации. Например, объявлением
int mas[] = {2,5,7,9,10};
создан массив из 5 элементов.
В нижеследующем примере демонстрируется инициализация массива значениями, вводимыми с клавиатуры.
#include <stdio.h>
void main()
{
// объявление массива из 10 элементов
// и вспомогательной переменной i
int n[10], i;
// чтение элементов, вводимых с клавиатуры
for (i=0; i<=9; i++)
scanf("%d", &n[i]);
//вывод элементов массива
printf("%s%13s\n", "Element", "Value");
for (i=0; i<=9; i++)
printf("%7d%13d\n", i, n[i]);
}
Результаты работы программы выглядят следующим образом:
5 8 12 17 23 30 38 47 57 68
Element Value
0 5
1 8
2 12
3 17
4 23
5 30
6 38
7 47
8 57
9 68