Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Tekhnologia_programmirovania.pdf
Скачиваний:
181
Добавлен:
08.04.2015
Размер:
1.76 Mб
Скачать

Федеральное агентство по образованию Нижегородский государственный университет им. Н.И. Лобачевского

Национальный проект «Образование» Инновационная образовательная программа Нижегородского университета: Образовательно-научный центр «Информационно-телекоммуникационные системы: физические основы и математическое обеспечение»

В.Л. Тарасов

Программирование на C++

Учебное пособие

Нижний Новгород

Издательство Нижегородского госуниверситета 2006

УДК 004.43 ББК В185 Т19

Тарасов В.Л. Программирование на С++: Учебное пособие.– Н. Новгород: Изд-во ННГУ, 2006.– 310 с.

ISBN 5-85746-942-2

Описываются основные конструкции языка программирования C++, приводятся примеры их применения в виде готовых к выполнению программ, демонстрируются типовые алгоритмы и методы программирования, даются задачи для самостоятельного решения.

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

ISBN 5-85746-942-2

Издано в рамках Инновационной образовательной программы ННГУ:

Образовательно-научный центр «Информационно-телекоммуникационные системы: физические основы и математическое обеспечение»

ББК В185

©Тарасов В.Л., 2006

©Нижегородский госуниверситет

им. Н.И. Лобачевского, 2006

 

5

Содержание

 

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

12

ГЛАВА 1. ОСНОВНЫЕ ПОНЯТИЯ...................................................................

14

1.1. ЭЛЕМЕНТЫ ЯЗЫКА ПРОГРАММИРОВАНИЯ.................................................................

14

Алфавит........................................................................................................

14

Лексемы........................................................................................................

14

Выражения...................................................................................................

15

Функции.......................................................................................................

16

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

16

1.2. ПРОЦЕСС СОЗДАНИЯ ПРОГРАММЫ..........................................................................

17

1.3. ПЕРВАЯ ПРОГРАММА............................................................................................

18

Программа 1. Приветствие....................................................................

18

1.4. СОСТАВ ПРОГРАММЫ...........................................................................................

18

ГЛАВА 2. СРЕДСТВА РАЗРАБОТКИ НА C++................................................

21

2.1. СИСТЕМЫ TURBO C++ 3.0/BORLAND C++ 3.1....................................................

21

Установка Turbo C++ 3.0 на компьютере...................................................

21

Загрузка........................................................................................................

23

Меню.............................................................................................................

24

Работа с окнами............................................................................................

24

Настройка среды..........................................................................................

26

Указание каталогов библиотек.............................................................

27

Подключение графической библиотеки...............................................

28

Назначение текущего каталога.............................................................

28

Помощь.........................................................................................................

29

Работа с блоками текста в редакторе..........................................................

30

Выполнение программы..............................................................................

30

Отладка программ........................................................................................

31

Программа 2. Деление чисел.................................................................

32

Синтаксические ошибки.......................................................................

32

Ошибки в процессе работы программы...............................................

33

Трассировка программ..........................................................................

34

Просмотр текущих значений выражений.............................................

34

2.2. СИСТЕМА C++ BUILDER......................................................................................

35

Разработка консольных приложений..........................................................

35

Программа 3. Hello................................................................................

37

Выполнение и отладка программы.............................................................

38

Файлы проекта.............................................................................................

39

Автоматическая генерация кода.................................................................

40

Особенности ввода и вывода......................................................................

41

ГЛАВА 3. РАБОТА С ЧИСЛОВЫМИ ДАННЫМИ........................................

43

6 Содержание

 

3.1. ЦЕЛЫЕ ТИПЫ......................................................................................................

43

Целые константы.........................................................................................

44

Программа 4. Операции над целыми....................................................

45

3.2. ЧИСЛА С ПЛАВАЮЩЕЙ ТОЧКОЙ.............................................................................

46

Плавающие константы................................................................................

47

3.3. ВВОД И ВЫВОД ЧИСЕЛ..........................................................................................

47

Программа 5. Точность плавающих чисел...........................................

48

3.4. ЛОГИЧЕСКИЙ ТИП И ЛОГИЧЕСКИЕ ОПЕРАЦИИ...........................................................

49

3.5. МАТЕМАТИЧЕСКИЕ ФУНКЦИИ................................................................................

51

ГЛАВА 4. ОПЕРАТОРЫ. КЛЮЧЕВЫЕ СЛОВА.............................................

52

4.1. ОПЕРАТОРЫ........................................................................................................

52

Унарные операторы.....................................................................................

52

Бинарные операторы....................................................................................

53

Оператор запятая.........................................................................................

53

Условное выражение...................................................................................

54

Операторы присваивания............................................................................

54

4.2. ПРИОРИТЕТЫ ОПЕРАТОРОВ....................................................................................

55

4.3. КЛЮЧЕВЫЕ СЛОВА...............................................................................................

56

4.4. СТРУКТУРА ПРОГРАММЫ.......................................................................................

59

Объявления переменных.............................................................................

59

Объявления и определения.........................................................................

60

Инструкции и блоки....................................................................................

60

4.5. КОНСТАНТЫ.......................................................................................................

61

ЗАДАЧИ - . ПРОСТЕЙШИЕ ВЫЧИСЛЕНИЯ........................................................................

61

ГЛАВА 5. УПРАВЛЕНИЕ И ЦИКЛЫ................................................................

64

5.1. УСЛОВНЫЙ ОПЕРАТОР..........................................................................................

64

Программа 6. Максимальное из двух чисел.........................................

65

5.2. ОПЕРАТОРЫ ЦИКЛА..............................................................................................

65

Цикл с предусловием while.........................................................................

65

Программа 7. Суммирование цифр целого..........................................

66

Цикл for........................................................................................................

67

Программа 8. Поиск максимума и минимума.....................................

68

Цикл do-while...............................................................................................

69

Программа 9. Вычисление квадратного корня....................................

69

5.3. ПЕРЕКЛЮЧАТЕЛЬ.................................................................................................

71

Программа 10. День недели..................................................................

72

5.4. ОПЕРАТОРЫ BREAK И CONTINUE.............................................................................

72

Программа 11. Сумма положительных чисел......................................

73

ЗАДАЧИ -. ВЫБОР И ЦИКЛЫ........................................................................................

73

ГЛАВА 6. МАССИВЫ...........................................................................................

77

6.1. ОДНОМЕРНЫЕ МАССИВЫ......................................................................................

77

Программа 12. Проверка упорядоченности массива...........................

78

6.2. ДВУМЕРНЫЕ МАССИВЫ.........................................................................................

79

Содержание

7

Программа 13. Подсчет выручки..........................................................

80

ЗАДАЧИ -. ОДНО- И ДВУМЕРНЫЕ МАССИВЫ..................................................................

82

ГЛАВА 7. ФУНКЦИИ...........................................................................................

84

7.1. ОПРЕДЕЛЕНИЕ ФУНКЦИИ.......................................................................................

84

7.2. ФОРМАЛЬНЫЕ ПАРАМЕТРЫ И ФАКТИЧЕСКИЕ АРГУМЕНТЫ...........................................

85

Пpограмма.14. Степени целых чисел...................................................

86

7.3. АВТОМАТИЧЕСКИЕ И СТАТИЧЕСКИЕ ПЕРЕМЕННЫЕ.....................................................

88

Программа 15. Автоматические и статические переменные..............

88

7.4. ПРОТОТИПЫ ФУНКЦИЙ.........................................................................................

90

7.5. МАССИВЫ КАК АРГУМЕНТЫ ФУНКЦИЙ....................................................................

90

7.6. ВНЕШНИЕ ПЕРЕМЕННЫЕ ......................................................................................

91

Программа 16. Сортировка массива.....................................................

91

7.7. РЕКУРСИЯ..........................................................................................................

94

Программа 17. Рекурсивная печать целого..........................................

94

7.8. ПЕРЕГРУЖЕННЫЕ ИМЕНА ФУНКЦИЙ........................................................................

96

Программа 18. Перегрузка функций....................................................

96

7.9. АРГУМЕНТЫ ФУНКЦИЙ ПО УМОЛЧАНИЮ.................................................................

97

Программа 19. Аргументы по умолчанию...........................................

97

ЗАДАЧИ -. ФУНКЦИИ.................................................................................................

98

ГЛАВА 8. СИМВОЛЫ И СТРОКИ...................................................................

102

8.1. СИМВОЛЫ........................................................................................................

102

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

102

Программа 20. Представления символов...........................................

103

Ввод и вывод символов.............................................................................

104

Программа 22. Печать текста по словам............................................

104

8.2. СТРОКИ СИМВОЛОВ...........................................................................................

105

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

106

Ввод и вывод строк....................................................................................

106

Средства работы со строками...................................................................

106

Программа 23. Реверсирование строк................................................

107

ЗАДАЧИ -. СИМВОЛЫ И СТРОКИ................................................................................

109

ГЛАВА 9. ПРЕПРОЦЕССОР.............................................................................

112

9.1. ДИРЕКТИВЫ ПРЕПРОЦЕССОРА..............................................................................

112

9.2. МАКРОСЫ........................................................................................................

113

Программа 24. Возможности препроцессора.....................................

115

ЗАДАЧИ -. МАКРОСЫ...............................................................................................

116

ГЛАВА 10. УКАЗАТЕЛИ И ССЫЛКИ.............................................................

118

10.1. УКАЗАТЕЛИ И АДРЕСА......................................................................................

118

Программа 25. Расчет треугольника...................................................

118

10.2. УКАЗАТЕЛИ И МАССИВЫ...................................................................................

121

10.3. АДРЕСНАЯ АРИФМЕТИКА..................................................................................

122

8 Содержание

 

10.4. СИМВОЛЬНЫЕ УКАЗАТЕЛИ.................................................................................

122

10.5. МАССИВЫ УКАЗАТЕЛЕЙ....................................................................................

123

Программа 26. Названия месяцев.......................................................

123

10.6. УКАЗАТЕЛИ НА ФУНКЦИИ.................................................................................

124

Программа 27. Поиск максимума функции.......................................

124

10.7. ССЫЛКИ.........................................................................................................

126

Программа 28. Использование ссылок...............................................

127

10.8. ОПЕРАТОРЫ NEW И DELETE...............................................................................

128

Программа 29. Выделение и освобождение памяти..........................

129

ЗАДАЧИ -. УКАЗАТЕЛИ И ССЫЛКИ..............................................................................

130

ГЛАВА 11. О ФАЙЛАХ И КОМАНДНОЙ

 

СТРОКЕ..............................................................................................

132

11.1. ЗНАКОМСТВО С ФАЙЛАМИ................................................................................

132

Программа 30. Копирование файлов..................................................

133

11.2. КОМАНДНАЯ СТРОКА.......................................................................................

135

11.3. ПЕРЕНАПРАВЛЕНИЕ СТАНДАРТНОГО ВВОДА И ВЫВОДА НА ФАЙЛ.............................

137

11.4. АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ......................................................................

139

Программа 31. Эхо аргументов командной строки...........................

140

Программа 32. Печать строк, содержащих образец..........................

141

ЗАДАЧИ -. ФАЙЛЫ И КОМАНДНАЯ СТРОКА..................................................................

143

ГЛАВА 12. РАБОТА С ЭКРАНОМ ДИСПЛЕЯ..............................................

144

12.1. ТЕКСТОВЫЙ РЕЖИМ.........................................................................................

144

Программа 33. Российский флаг.........................................................

147

12.2. ГРАФИЧЕСКИЙ РЕЖИМ......................................................................................

148

Графические драйверы и режимы.............................................................

148

Инициализация графики............................................................................

149

Функции рисования...................................................................................

150

Программа 34. Звезда..........................................................................

151

ЗАДАЧИ -. РАБОТА С ЭКРАНОМ..................................................................................

154

ГЛАВА 13. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ЧИСЕЛ.............................

156

13.1. ДВОИЧНАЯ СИСТЕМА СЧИСЛЕНИЯ......................................................................

156

13.2. БЕЗЗНАКОВЫЕ ЦЕЛЫЕ.......................................................................................

157

13.3. ДВОИЧНЫЙ ДОПОЛНИТЕЛЬНЫЙ КОД....................................................................

158

13.4. ДВОИЧНЫЙ КОД С ИЗБЫТКОМ............................................................................

160

13.5. ПОБИТОВЫЕ ОПЕРАТОРЫ..................................................................................

161

Программа 35. Побитовые операторы................................................

164

13.6. ДРОБНЫЕ ЧИСЛА В ДВОИЧНОЙ СИСТЕМЕ.............................................................

166

13.7. ВНУТРЕННЕЕ ПРЕДСТАВЛЕНИЕ ПЛАВАЮЩИХ ТИПОВ.............................................

167

13.8. ПРЕОБРАЗОВАНИЕ ТИПОВ..................................................................................

169

Тип char.......................................................................................................

169

Значения логических выражений..............................................................

172

Арифметические преобразования.............................................................

173

Преобразование при присваивании..........................................................

174

Содержание

9

Явное приведение типа..............................................................................

174

ЗАДАЧИ -. ПОБИТОВЫЕ ОПЕРАТОРЫ...........................................................................

174

ГЛАВА 14. СТРУКТУРЫ, ПЕРЕЧИСЛЕНИЯ, ОБЪЕДИНЕНИЯ..............

176

14.1. ОБЪЯВЛЕНИЕ СТРУКТУР....................................................................................

176

14.2. СТРУКТУРЫ И ФУНКЦИИ...................................................................................

178

14.3. УКАЗАТЕЛИ НА СТРУКТУРЫ...............................................................................

179

Программа 36. Точки и прямоугольники на экране..........................

180

14.4. МАССИВЫ СТРУКТУР........................................................................................

184

Программа 37. Подсчет ключевых слов.............................................

184

14.5. ПЕРЕЧИСЛЕНИЯ...............................................................................................

189

Программа 38. Использование перечислений...................................

189

14.6. ОБЪЕДИНЕНИЯ...............................................................................................

190

Программа 39. Внутреннее представление float................................

190

14.7. БИТОВЫЕ ПОЛЯ...............................................................................................

194

14.8. О БИНАРНЫХ ФАЙЛАХ......................................................................................

194

Программа 40. Анализ успеваемости.................................................

195

ЗАДАЧИ -. СТРУКТУРЫ.............................................................................................

198

ГЛАВА 15. КЛАССЫ..........................................................................................

200

15.1. СТРУКТУРЫ В C++. ИНКАПСУЛЯЦИЯ................................................................

200

Программа 41. Время как структура..................................................

200

15.2. ВСТРОЕННЫЕ ФУНКЦИИ....................................................................................

202

15.3. КЛАССЫ. СКРЫТИЕ ДАННЫХ.............................................................................

203

Программа 42. Класс дат.....................................................................

203

15.4. КОНСТРУКТОРЫ...............................................................................................

206

Программа 43. Конструкторы в классе дат........................................

206

15.5. СТАТИЧЕСКИЕ ЧЛЕНЫ КЛАССА...........................................................................

209

Программа 44. Размер класса и объектов класса...............................

209

15.6. ДРУЗЬЯ КЛАССА..............................................................................................

210

Программа 45. Статические члены и друзья класса..........................

210

15.7. КОПИРОВАНИЕ ОБЪЕКТОВ КЛАССА.....................................................................

212

Программа 46. Копирование объектов...............................................

213

15.8. УПРАВЛЕНИЕ ДОСТУПОМ..................................................................................

213

Структуры и классы...................................................................................

214

Правила доступа.........................................................................................

214

15.9. ССЫЛКА НА СЕБЯ............................................................................................

215

Программа 47. Модификация дат.......................................................

215

15.10. ДЕСТРУКТОРЫ...............................................................................................

218

Программа 48. Деструктор в классе дат.............................................

218

Программа 49. Многоугольники.........................................................

219

ЗАДАЧИ -. РАБОТА С КЛАССАМИ...............................................................................

226

ГЛАВА 16. ПРОГРАММЫ ИЗ НЕСКОЛЬКИХ ФАЙЛОВ...........................

227

16.1. РАБОТА С ПРОЕКТАМИ......................................................................................

227

Проекты в Turbo C++.................................................................................

227

10 Содержание

 

Проекты в C++Builder................................................................................

229

16.2. ОБЛАСТЬ ДЕЙСТВИЯ ИМЕН................................................................................

229

Программа 50. Глобальные и локальные имена................................

229

Статические имена.....................................................................................

230

Программа 51. Сумматор чисел..........................................................

231

16.3. ЗАГОЛОВОЧНЫЕ ФАЙЛЫ....................................................................................

234

Страж включения.......................................................................................

235

Понятие стека.............................................................................................

235

Модули.......................................................................................................

236

Программа 52. Реализация стека в виде массива...............................

236

16.4. ПРОСТРАНСТВА ИМЕН......................................................................................

238

Стандартные пространства имен..............................................................

240

ЗАДАЧИ -. РАБОТА СО СТЕКОМ..................................................................................

241

ГЛАВА 17. ПЕРЕГРУЗКА ОПЕРАТОРОВ......................................................

243

Программа 53. Обыкновенные дроби.................................................

243

17.1. ПРАВИЛА ПЕРЕГРУЗКИ ОПЕРАТОРОВ....................................................................

245

Программа 54. Комплексные числа....................................................

246

ЗАДАЧИ -. ПЕРЕГРУЗКА ОПЕРАТОРОВ..........................................................................

252

ГЛАВА 18. КОНСТРУКТОР КОПИРОВАНИЯ И ОПЕРАТОР

 

ПРИСВАИВАНИЯ............................................................................

254

18.1. ПРОБЛЕМЫ ПРИ КОПИРОВАНИИ..........................................................................

254

Программа 55. Вектора на плоскости.................................................

256

ЗАДАЧИ -. КОНСТРУКТОР КОПИРОВАНИЯ....................................................................

262

ГЛАВА 19. ВВОД И ВЫВОД..............................................................................

264

19.1. ВЫВОД..........................................................................................................

264

19.2. ВВОД.............................................................................................................

265

19.3. ВВОД И ВЫВОД ОПРЕДЕЛЯЕМЫХ

 

ПОЛЬЗОВАТЕЛЕМ ТИПОВ.............................................................................................

266

Программа 56. Перегрузка операторов ввода/вывода.......................

266

19.4. РАБОТА С ФАЙЛАМИ........................................................................................

267

Программа 57. Сравнение текстового и бинарного файлов.............

268

Задачи 19.4-19.4. Ввод и вывод...........................................................

271

ГЛАВА 20. ВЗАИМООТНОШЕНИЯ КЛАССОВ...........................................

272

20.1. ОБЪЕКТЫ КАК ЧЛЕНЫ КЛАССА...........................................................................

272

20.2. КОНСТРУКТОРЫ ВСТРОЕННЫХ ТИПОВ..................................................................

273

Программа 58. Личные данные...........................................................

273

20.3. НАСЛЕДОВАНИЕ..............................................................................................

279

Пример наследования................................................................................

280

Программа 59. Наследование..............................................................

280

Управление доступом при наследовании.................................................

281

Наследование и конструкторы..................................................................

283

Содержание

11

Программа 60. Производный класс личных данных.........................

283

20.4. ВИРТУАЛЬНЫЕ ФУНКЦИИ.................................................................................

285

Программа 61. Невиртуальные функции...........................................

285

Программа 62. Виртуальные функции...............................................

287

20.5. АБСТРАКТНЫЕ КЛАССЫ....................................................................................

288

Программа 63. Абстрактный класс фигур..........................................

288

Вызов виртуальных функций....................................................................

292

20.6. СОВМЕСТИМОСТЬ ТИПОВ.................................................................................

292

20.7. МНОЖЕСТВЕННОЕ НАСЛЕДОВАНИЕ.....................................................................

293

Программа 64. Системы уравнений....................................................

294

Класс алгебраических векторов Vector..............................................

294

Класс прямоугольных матриц.............................................................

297

Объявление класса Matrix...................................................................

298

Реализация класса Matrix....................................................................

299

Класс систем линейных уравнений....................................................

303

Пример использования классов..........................................................

304

ЗАДАЧИ -. НАСЛЕДОВАНИЕ КЛАССОВ.........................................................................

307

ГЛАВА 21. ШАБЛОНЫ, ИСКЛЮЧЕНИЯ......................................................

309

21.1. ШАБЛОНЫ.....................................................................................................

309

21.2. ШАБЛОНЫ ФУНКЦИЙ.......................................................................................

309

Программа 65. Объявление и определение шаблона функции.........

310

21.3. КЛАССЫ И ШАБЛОНЫ.......................................................................................

311

Программа 66. Шаблон классов векторов..........................................

311

Программа 67. Шаблон классов динамических массивов................

312

21.4. ОБРАБОТКА ИСКЛЮЧЕНИЙ.................................................................................

314

Программа 68. Расчет НОД.................................................................

315

21.5. СТАНДАРТНАЯ БИБЛИОТЕКА ШАБЛОНОВ..............................................................

316

Программа 69. Использование шаблона векторов............................

318

ЛИТЕРАТУРА.....................................................................................................

320

ПРЕДМЕТНЫЙ УКАЗАТЕЛЬ.........................................................................

321

12

Предисловие

Внастоящее время язык программирования C++ является одним из самых распространенных. Его предшественником является язык Си, разработанный Денисом Ритчи в начале 1970-х годов [1]. Си быстро завоевал популярность у программистов благодаря своей лаконичности, выразительности и эффективности. Долго время единственным руководством по языку Си была книга [2], заслужившая почетное название «Библия языка Си». В 1989 г. Международной организацией стандартов (International Standard Organization – ISO) был принят стандарт языка Си, в 1999 г. стандарт Си был переработан [3]. Если программа написана в соответствии со стандартом языка, это гарантирует, что она будет выполняться на любом компьютере и в любой среде разработки.

В1979 г. Бьярн Страуструп на основе языка Си разработал язык C+

+[4]. Главным нововведением было включение в язык понятия класса, с помощью которого реализована концепция объектно-ориентированного программирования, благодаря чему облегчилось создание программ большого объема. В 1998 г. был принят стандарт языка C++. Язык Си является, за небольшими исключениями, подмножеством языка C++, так что программа, написанная на Си, является и программой на C++.

Синтаксис языков Си и C++ использован в новейших языках программирования Java и C# (Си-шарп), таким образом, знакомство с языком C++ может служить базой для изучения других современных языков.

Языкам Си и C++ посвящена обширная литература, некоторые издания перечислены в списке литературы.

Изучить программирование можно без компьютера, потому что программа должна быть создана, прежде всего, в голове программиста, а уже затем перенесена на бумагу или в файл. Наличие под рукой компьютера просто позволяет быстро проверить возникающие идеи, убедиться, что в программе нет ошибок. Тем не менее, в книге приводится описание ряда систем разработки, использующих язык C++: Turbo C++ 3.0/Borland C++3.1, C++ Builder. Программист сам волен выбирать наиболее удобный для себя инструмент.

Примеры программ приводятся в том виде, как они выглядят в среде Turbo C++, если это не оговорено особо. Они без изменения могут выполняться в других средах разработки за двумя исключениями.

Если среда разработки – это Windows-приложение, то она использует кодовую таблицу 1251, в которой для русских букв

Предисловие 13

используются коды, не совпадающие с их кодами в среде выполнения программы – текстовом окне DOS, где применяется кодовая таблица 866. В этом случае при выводе на экран русских букв вместо них появляются непонятные значки (на самом деле это символы, которые стоят в кодовой таблице 866 на том месте, где в кодовой таблице 1251 стоят русские буквы). Выход состоит или в использовании английского языка, что очень полезно будущему программисту, или в простой замене русских букв латинскими (транслитерации), или в предварительном преобразовании русских букв в кодовую таблицу, используемую в среде выполнения программы. Как это сделать, сказано при описании работы в C++ Builder.

Второе исключение состоит в том, что программы, использующие графические возможности Turbo C++ 3.0/Borland C++3.1, непереносимы в другие средства разработки, так как используют нестандартные графические функции.