
- •О.Л. Викентьева, А.Н. Гусин, O.A. Полякова
- •ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОГРАММИРОВАНИЕ НА C++
- •1. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
- •10.1. Базовые конструкции структурного программирования
- •10.3. Составные операторы
- •10.4. Операторы выбора
- •10.5. Операторы циклов
- •10.6. Операторы перехода
- •11. ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ ОСНОВНЫХ ОПЕРАТОРОВ C++
- •11.2. Программирование арифметических циклов
- •11.3. Программирование итерационных циклов
- •11.4. Программирование вложенных циклов
- •12. МАССИВЫ
- •12.1. Определение массива в C/C++
- •12.2. Примеры решения задач с использованием массивов
- •13. УКАЗАТЕЛИ
- •13.1. Понятие указателя
- •13.2. Динамическая память
- •13.3. Операции с указателями
- •14. ССЫЛКИ
- •15.3. Динамические массивы
- •СИМВОЛЬНАЯ ИНФОРМАЦИЯ И СТРОКИ
- •16.1. Представление символьной информации
- •16.2. Библиотечные функции для работы со строками
- •16.3. Примеры решения задач с использованием строк
- •17. ФУНКЦИИ В C++
- •17.1. Объявление и определение функций
- •17.2. Прототип функции
- •17.3. Параметры функции
- •17.4. Локальные и глобальные переменные
- •17.5. Функции и массивы
- •17.5.1. Передача одномерных массивов как параметров функции
- •17.5.2. Передача строк в качестве параметров функций
- •17.5.3. Передача многомерных массивов в функцию
- •17.6. Функции с начальными значениями параметров (по умолчанию)
- •17.7. Подставляемые (inline) функции
- •17.8. Функции с переменным числом параметров
- •17.9. Рекурсия
- •17.11. Шаблоны функций
- •17.12. Указатель на функцию
- •17.13. Ссылки на функцию
- •18. ТИПЫ ДАННЫХ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ
- •18.1. Переименование типов
- •18.2. Перечисления
- •18.3. Структуры
- •18.3.1. Работа со структурами
- •18.3.2. Битовые поля
- •18.3.3. Объединения
- •19. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ
- •19.1. Создание элемента списка
- •19.2. Создание списка из п элементов
- •19.3. Перебор элементов списка
- •19.4. Удаление элемента с заданным номером
- •19.5. Добавление элемента с заданным номером
- •19.6. Двунаправленные списки
- •19.7. Очереди и стеки
- •19.8. Бинарные деревья
- •19.9. Обход дерева
- •19.10. Формирование дерева
- •19.11. Удаление элемента из дерева
- •19.12. Обработка деревьев с помощью рекурсивного обхода
- •20. ПРЕПРОЦЕССОРНЫЕ СРЕДСТВА
- •20.1. Стадии и команды препроцессорной обработки
- •20.2. Директива #define
- •20.3. Включение текстов из файлов
- •20.4. Условная компиляция
- •20.5. Макроподстановки средствами препроцессора
- •21.1. Проектирование программы
- •21.2. Кодирование и документирование программы
- •СПИСОК ЛИТЕРАТУРЫ
- •ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОГРАММИРОВАНИЕ НА C++
Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Пермский национальный исследовательский политехнический университет»
О.Л. Викентьева, А.Н. Гусин, O.A. Полякова
ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОГРАММИРОВАНИЕ НА C++
Часть I СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
Рекомендовано УМО РАЕ по классическому университетскому и техническому образованию в качестве учебного пособия для студентов высших учебных заведений, обучающихся
по направлению подготовки: 230100 - «Информатика и вычислительная техника» и специальностям: 230101.65 - «Вычислительные машины, комплексы, системы и сети»,
230102.65 - «Автоматизированные системы обработки информации и управления»
Издательство Пермского национального исследовательского
политехнического университета
2012 НАУЧНАЯ БИБЛИО
УДК 681.3 В43
Рецензенты:
канд. физ.-мат. наук, доцент Л.В. Шестакова (Пермский филиал Национального исследовательского
университета «Высшая школа экономики»); доцент А.М. Ноткин
(Пермский национальный исследовательский политехнический университет)
Викентьева, О.Л.
В43 Проектирование программ и программирование на C++: учеб, пособие: в 2 ч. Ч. I. Структурное программирование / О.Л. Викентьева, А.Н. Гусин, О.А. Полякова. - Пермь: Изд-во Перм. нац. исслед. политехи, ун-та, 2012. - 139 с.
ISBN 978-5-398-00761-9
Рассмотрены вопросы, касающиеся объектно ориентированного анализа и проектирования сложных программных систем, реализации объектно ориенти рованных программ на ЯВУ C++: основные операторы C++, массивы данных, функции, динамические структуры дашгых.
Предназначено для студентов направления 230100 «Информатика и вы числительная техника» дневной и заочной форм обучения.
УДК 681.3
ISBN 978-5-398-00761-9 |
©ПНИПУ, 2012 |
Введение........................................................................................ |
|
6 |
1. Структурное программирование............................................ |
|
8 |
2. Среда программирования Microsoft VisualStudio................. |
10 |
|
2.1. Общий вид окна................................................................ |
|
10 |
2.2. Создание консольного приложения иработа с ним .... |
11 |
|
3. Структура программы на языке C/C++ |
|
16 |
4. Элементы языка C/C++ |
|
19 |
5. Константы в C/C++ |
|
20 |
6. Типы данных в C/C++ |
|
22 |
7. Переменные............................................................................... |
|
24 |
8. Выражения................................................................................. |
|
26 |
9. Ввод и вывод данных |
|
27 |
10. Операторы C/C++ |
|
29 |
10.1. Базовые конструкции структурного |
|
|
программирования |
|
29 |
10.2. Оператор «выражение» |
|
30 |
10.3. Составные операторы..................................................... |
|
30 |
10.4. Операторы выбора.......................................................... |
|
30 |
10.5. Операторы циклов.......................................................... |
|
32 |
10.6. Операторы перехода....................................................... |
|
34 |
11. Примеры решения задач с использованием основных |
|
|
операторов C++ |
|
36 |
11.1. Программирование ветвлений...................................... |
|
37 |
11.2. Программирование арифметических циклов.............. |
39 |
|
11.3. Программирование итерационных циклов................. |
40 |
|
11.4. Программирование вложенных циклов...................... |
|
44 |
12. Массивы |
|
46 |
12.1. Определение массива в C/C++ |
|
46 |
12.2. Примеры решения задач с использованием |
|
|
массивов.......................................................................... |
|
47 |
13. Указатели |
|
50 |
13.1. Понятие указателя.......................................................... |
|
50 |
13.2. Динамическая память.................................. |
,................. |
52 |
13.3. Операции с указателями................................................ |
|
52 |
14. Ссылки..................................................................................... |
|
55 |
15. Указатели и массивы............................................................. |
|
56 |
15.1. Одномерные массивы и указатели................................ |
56 |
15.2. Многомерные массивы и указатели............................ |
57 |
15.3. Динамические массивы.................................................. |
57 |
16. Символьная информация и строки....................................... |
61 |
16.1. Представление символьной информации................... |
61 |
16.2. Библиотечные функции для работы со строками...... |
63 |
16.3. Примеры решения задач с использованием строк..... |
64 |
17. Функции в C++ |
68 |
17.1. Объявление и определение функций............................ |
68 |
17.2. Прототип функции.......................................................... |
71 |
17.3. Параметры функции....................................................... |
71 |
17.4. Локальные и глобальные переменные........................ |
75 |
17.5. Функции и массивы........................................................ |
76 |
17.5.1. Передача одномерных массивов |
|
как параметров функции................................... |
76 |
17.5.2. Передача строк в качестве параметров |
|
функций............................................................... |
79 |
17.5.3. Передача многомерных массивов |
|
в функцию............................................................ |
80 |
17.6. Функции с начальными значениями параметров |
|
(по умолчанию) |
82 |
17.7. Подставляемые (inline) функции.................................. |
83 |
17.8. Функции с переменным числом параметров............... |
84 |
17.9. Рекурсия............................................................................. |
86 |
17.10. Перегрузка функций..................................................... |
88 |
17.11. Шаблоны функций........................................................ |
89 |
17.12. Указатель на функцию.................................................. |
92 |
17.13. Ссылки на функцию |
95 |
18. Типы данных, определяемые пользователем |
96 |
18.1. Переименование типов................................................... |
96 |
18.2. Перечисления................................................................... |
96 |
18.3. Структуры........................................................................ |
96 |
18.3.1. Работа со структурами...................................... |
98 |
18.3.2. Битовые поля |
99 |
18.3.3. Объединения |
100 |
19. Динамические структуры данных........................................ |
102 |
19.1. Создание элемента списка............................................. |
103 |
19.2. Создание списка из п элементов................................... |
104 |
19.3. Перебор элементов списка............................................ |
105 |
19.4. Удаление элемента с заданным номером |
106 |
19.5. Добавление элемента с заданным номером............... |
108 |
19.6. Двунаправленные списки.............................................. |
109 |
19.7. Очереди и стеки.............................................................. |
114 |
19.8. Бинарные деревья |
115 |
19.9. Обход дерева................................................................... |
117 |
19.10. Формирование дерева.................................................. |
119 |
19.11. Удаление элемента из дерева...................................... |
122 |
19.12. Обработка деревьев с помощью рекурсивного |
|
обхода............................................................................. |
124 |
20. Препроцессорные средства................................................... |
125 |
20.1. Стадии и команды препроцессорной обработки....... |
125 |
20.2. Директива #define............................................................ |
125 |
20.3. Включение текстов из файлов...................................... |
126 |
20.4. Условная компиляция.................................................... |
129 |
20.5. Макроподстановки средствами препроцессора......... |
130 |
21. Технология создания программ |
133 |
21.1. Проектирование программы......................................... |
133 |
21.2. Кодирование и документирование программы......... |
135 |
Список литературы...................................................................... |
138 |
В процессе создания промышленных программных продуктов людям приходится сталкиваться с проблемой преодоления сложности, лежащей в самой природе таких систем. От этой сложности невозмож но избавиться, пренебрегая отдельными проявлениями поведения сис темы, как в физике. С этой сложностью можно только справиться.
Уровень сложности - это существенная черта промышленной программы. Один разработчик практически не в состоянии охватить все аспекты такой системы, поскольку это, в среднем, превышает возможности человеческого интеллекта.
Сложность программного обеспечения определяется:
-сложностью реальной предметной области, из которой исхо дит заказ на разработку;
-трудностью управления процессом разработки;
-необходимостью обеспечить достаточную гибкость программы;
-неудовлетворительными способами описания поведения боль ших дискретных систем.
Неумение создавать сложные программные системы проявляется
впроектах, которые выходят за рамки установленных сроков и бюд жетов и к тому же не соответствуют начальным требованиям. Подоб ный кризис приводит к растрате человеческих ресурсов и к сущест венному ограничению возможностей создания новых продуктов.
Цель проектирования - выявление ясной и относительно про стой внутренней структуры системы, иногда называемой архитекту рой. Результатами процесса проектирования являются модели, позво ляющие понять структуру будущей системы, определить требования
инаметить способы реализации.
Главным принципом проектирования любой сложной системы является разделение последней на все меньшие и меньшие подсисте мы, каждую из которых можно проектировать и совершенствовать независимо. В этом случае для понимания любого уровня системы потребуется одновременно держать в уме информацию лишь о не многих ее частях.
Следующим по важности принципом является принцип иерар хического упорядочивания, предполагающий организацию составных
частей проблемы в иерархические древовидные структуры с добав лением новых деталей на каждом уровне.
На данный момент существуют два основных подхода к анализу предметной области и проектированию системы:
1.Разделение по алгоритмам концентрирует внимание на поряд ке происходящих событий: каждый модуль системы выполняет один из этапов общего процесса.
2.Разделение по объектам представляет предметную область со вокупностью автономных действующих лиц, которые взаимодейст вуют друг с другом, чтобы обеспечить поведение системы, соответ ствующее более высокому уровню.
Эти концепции представлены методологиями структурного
и объектно ориентированного анализа соответственно.