Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метода по ОАиП.doc
Скачиваний:
12
Добавлен:
11.05.2015
Размер:
3.21 Mб
Скачать

М. П. Батура, В. Л. Бусько, А. Г. Корбит, Т. М. Кривоносова

Основы алгоритмизации и программирования. Язык Си

Допущено Министерством образования Республики Беларусь

в качестве учебного пособия

для студентов учреждений, обеспечивающих получение

высшего образования по специальностям «Искусственный интеллект», «Программное обеспечение информационных технологий»,

«Автоматизированные системы обработки информации»,

«Электронные вычислительные средства»,

«Инженерно-психологическое обеспечение информационных технологий»

Минск БГУИР 2007

УДК 621.3 (075.8)

ББК 22.193 я 73

Б 28

Р е ц е н з е н т ы :

зав. кафедрой алгоритмики и дискретной математики БГУ,

д-р техн. наук, проф. В. М. Котов;

начальник кафедры систем автоматического управления Военной академии Республики Беларусь, д-р техн. наук, проф. В. А. Куренев

Батура, М. П.

Б 28 Основы алгоритмизации и программирования. Язык Си : учеб. пособие / М. П. Батура, В. Л. Бусько, А. Г. Корбит, Т. М. Кривоносова. –Минск : БГУИР, 2007. – 240 с. : ил.

ISBN978-985-488-192-8

Материал пособия составлен на основе курса лекций по дисциплине «Основы алгоритмизации и программирования», читаемого авторами в Белорусском государственном университете информатики и радиоэлектроники на факультете информационных технологий и управления.

Содержание пособия охватывает темы, посвященные основным конструкциям языка Си. Приведенные примеры, иллюстрирующие основные возможности языка, прошли проверку в качестве консольных приложений среды программирования Visual C++ 6.0.

Неотъемлемой частью учебного пособия являются индивидуальные задания для практических и лабораторных работ. В приложениях рассматриваются некоторые элементы языка С++, приведены дополнительные задания.

УДК 621.3 (075.8)

ББК 22.193 я 73

ISBN 978-985-488-192-8  УО «Белорусский государственный

университет информатики

и радиоэлектроники», 2007

Содержание

ПРЕДИСЛОВИЕ 9

ГЛАВА 1. Введение в алгоритмы 11

1.1. Этапы решения задач на ЭВМ 11

1.2. Понятие алгоритма 11

1.3. Свойства алгоритмов 12

1.4. Сложность алгоритма 12

1.5. Способы описания алгоритмов 13

1.6. Способы реализации алгоритмов 15

1.7. Пример простейшего линейного процесса 16

1.7. Пример циклического процесса 17

ГЛАВА 2. Базовые средства языка Си 18

2.1. Алфавит языка Си 18

2.2. Лексемы 18

2.3. Идентификаторы и ключевые слова 19

2.4. Комментарии 20

2.5. Простейшая программа 20

2.6. Основные типы данных 21

2.7. Декларация объектов 22

2.8. Данные целого типа (integer) 23

2.9. Данные символьного типа (char) 23

2.10. Данные вещественного типа (float, double) 24

2.11. Использование модификаторов при декларации производных типов данных 25

ГЛАВА 3. Константы в программах 26

3.1. Целочисленные константы 26

3.2. Константы вещественного типа 27

3.3. Символьные константы 27

3.4. Строковые константы 28

ГЛАВА 4. Обзор операций 28

4.1. Операции, выражения 28

4.2. Арифметические операции 29

4.3. Операция присваивания 29

4.4. Сокращенная запись операции присваивания 30

4.5. Преобразование типов операндов арифметических операций 31

4.6. Операция приведения типа 32

4.7. Операции сравнения 32

4.8. Логические операции 33

4.9. Побитовые логические операции, операции над битами 34

4.10. Операция «,» (запятая) 36

ГЛАВА 5. Обзор базовых инструкций языка Си 36

5.1. Стандартная библиотека языка Си 36

5.2. Стандартные математические функции 37

5.3. Функции вывода данных на дисплей 37

5.4. Функции ввода информации 39

Советы по программированию 40

ЗАДАНИЕ 1. Составление линейных алгоритмов 41

Первый уровень сложности 41

Второй уровень сложности 42

ГЛАВА 6. Составление разветвляющихся алгоритмов 45

6.1. Краткая характеристика операторов языка Си 45

6.2. Условные операторы 45

6.3. Условная операция «? :» 48

6.4. Оператор выбора альтернатив (переключатель) 49

ГЛАВА 7. Составление циклических алгоритмов 53

7.1. Понятие циклического кода 53

7.2. Оператор с предусловием while  53

7.3. Оператор цикла с постусловием do – while 55

7.4. Оператор цикла с предусловием и коррекцией for 56

ГЛАВА 8. Операторы и функции передачи управления 59

8.1. Оператор безусловного перехода goto 59

8.2. Операторы continue, break и return 59

8.3. Функции exit и abort 60

Советы по программированию 60

ЗАДАНИЕ 2. Разветвляющиеся алгоритмы 61

Первый уровень сложности 61

Второй уровень сложности 62

ЗАДАНИЕ 3. Циклические алгоритмы 63

Первый уровень сложности 63

Второй уровень сложности 64

ГЛАВА 9. Указатели 65

9.1. Определение указателей 65

9.2. Операция sizeof 67

9.3. Инициализация указателей 68

9.4. Операции над указателями 69

ГЛАВА 10. Массивы 71

10.1. Понятие массива 71

10.2. Одномерные массивы 72

10.3. Связь указателей и массивов 73

10.4. Строки как одномерные массивы данных типа char 74

10.5. Указатели на указатели 77

10.6. Многомерные массивы 78

10.7. Адресная функция 80

10.8. Работа с динамической памятью 81

10.9. Библиотечные функции 81

10.10. Пример создания одномерного динамического массива 82

10.11. Пример создания двухмерного динамического массива 83

ГЛАВА 11. Функции пользователя 84

11.1. Декларация функции 85

11.2. Вызов функции 86

11.3. Передача аргументов в функцию 88

11.4. Операция typedef 89

11.5. Указатели на функции 89

11.6. Рекурсивные функции 93

11.7. Параметры командной строки функции main 96

ГЛАВА 12. Классы памяти и область действия объектов 97

12.1. Классы памяти объектов в языке Cи 97

12.2. Автоматические переменные 98

12.3. Статические и внешние переменные 99

12.4. Область действия переменных 101

Советы по программированию 104

ЗАДАНИЕ 4. Обработка массивов 105

Первый уровень сложности 105

Второй уровень сложности 106

ЗАДАНИЕ 5. Функции пользователя 107

Первый уровень сложности 107

Второй уровень сложности 107

ГЛАВА 13. Структуры, объединения, перечисления 108

13.1. Структуры 108

13.2. Декларация структурного типа данных 109

13.3. Создание структурных переменных 110

13.4. Обращение к полям структур 111

13.5. Вложенные структуры 112

13.6. Массивы структур 113

13.7. Размещение структурных переменных в памяти 114

13.8. Объединения 114

13.9. Перечисления 115

13.10. Битовые поля 117

ГЛАВА 14. Файлы в языке Си 118

14.1. Открытие файла 118

14.2. Закрытие файла 120

14.3. Запись-чтение информации 121

14.4. Позиционирование в файле 122

14.5. Дополнительные файловые функции 123

Советы по программированию 124

ЗАДАНИЕ 6. Создание и обработка структур 125

Первый уровень сложности 125

Второй уровень сложности 126

ЗАДАНИЕ 7. Создание и обработка файлов 126

Первый уровень сложности 126

Второй уровень сложности 127

ГЛАВА 15. Динамические структуры данных 128

15.1. Линейные списки 128

15.2. Структура данных СТЕК 129

15.2.1. Алгоритм формирования стека 130

15.2.2. Алгоритм извлечения элемента из стека 132

15.2.3. Просмотр стека 132

15.2.4. Алгоритм освобождения памяти, занятой стеком 133

15.2.5. Алгоритм проверки правильности расстановки скобок 133

15.3. Структура данных ОЧЕРЕДЬ 134

15.3.1. Формирование очереди 135

15.3.2. Алгоритм удаления первого элемента из очереди 137

15.4. Двунаправленный линейный список 137

15.4.1. Формирование первого элемента 138

15.4.2. Добавление элементов в конец списка 138

15.4.3. Алгоритм просмотра списка 139

15.4.4. Алгоритм поиска элемента в списке по ключу 139

15.4.5. Алгоритм удаления элемента в списке по ключу 140

15.4.6. Алгоритм вставки элемента в список после элемента с указанным ключом 141

15.5. Нелинейные структуры данных 142

15.5.1. Бинарные деревья 143

15.5.2. Основные алгоритмы работы с бинарным деревом 144

15.5.3. Формирование дерева 144

15.5.4. Вставка нового элемента 145

15.5.5. Удаление узла 146

15.5.6. Алгоритмы обхода дерева 149

15.5.7. Функция просмотра 150

15.5.8. Освобождение памяти 151

15.6. Построение обратной польской записи 151

15.6.1. Алгоритм, использующий дерево 152

15.6.2. Алгоритм, использующий стек 153

15.6.3. Пример реализации 154

15.7. Понятие хеширования 157

15.7.1. Хеш-таблица и хеш-функции 157

15.7.2. Примеры хеш-функций 158

15.7.3. Схемы хеширования 160

15.7.4. Примеры реализации схем хеширования 161

ЗАДАНИЕ 8. Обработка списков 163

Вариант 1. Однонаправленные списки 163

Вариант 2. Двунаправленные списки 164

ЗАДАНИЕ 9. Деревья и польская запись 165

Вариант 1. Создание и обработка структур типа «дерево» 165

Вариант 2. Создание и использование польской записи 166