СОДЕРЖАНИЕ
КРАТКОЕ ОПИСАНИЕ УЧЕБНОГО КУРСА "ОСНОВЫ ПРОГРАММИРОВАНИЯ
НА ЯЗЫКЕ СИ++"..........................................................................................................................5
ЛЕКЦИЯ 1. ОСНОВЫ СИ++.........................................................................................................7
1. НЕСКОЛЬКО ЗАМЕЧАНИЙ О НАЗНАЧЕНИИ ПРОГРАММИРОВАНИЯ................................................7
2. ПРОИСХОЖДЕНИЕ ЯЗЫКА СИ++...................................................................................................9
3. СТАНДАРТ ANSI СИ++................................................................................................................9
4. СРЕДА РАЗРАБОТКИ MICROSOFT DEVELOPER STUDIO VISUAL С++...........................................10
5. ПРИМЕР ПРОГРАММЫ НА СИ++.................................................................................................10
6. ВЫПОЛНЕНИЕ ВВОДА/ВЫВОДА ДАННЫХ И ПРИСВАИВАНИЕ ЗНАЧЕНИЙ....................................12
7. УПРАВЛЕНИЕ ПОРЯДКОМ ВЫПОЛНЕНИЯ КОМАНД С ПОМОЩЬЮ ОПЕРАТОРА IF........................13
8. ОФОРМЛЕНИЕ ИСХОДНОГО ТЕКСТА...........................................................................................15
9. СВОДКА РЕЗУЛЬТАТОВ...............................................................................................................15
10. УПРАЖНЕНИЯ...........................................................................................................................15
ЛЕКЦИЯ 2. ПЕРЕМЕННЫЕ, ТИПЫ ДАННЫХ И ВЫРАЖЕНИЯ....................................18
1. ИДЕНТИФИКАТОРЫ....................................................................................................................18
2. ТИПЫ ДАННЫХ...........................................................................................................................18
3. ВЫВОД ВЕЩЕСТВЕННЫХ ЧИСЕЛ НА ЭКРАН................................................................................22
4. ОПИСАНИЯ, КОНСТАНТЫ И ПЕРЕЧИСЛЕНИЯ..............................................................................24
5. ПРИСВАИВАНИЕ И ВЫРАЖЕНИЯ.................................................................................................26
6. СВОДКА РЕЗУЛЬТАТОВ...............................................................................................................28
7. УПРАЖНЕНИЯ.............................................................................................................................28
8. ПРИЛОЖЕНИЯ.............................................................................................................................29
ЛЕКЦИЯ 3. ФУНКЦИИ И ПРОЦЕДУРНАЯ АБСТРАКЦИЯ.............................................31
1. НАЗНАЧЕНИЕ ПОДПРОГРАММ.....................................................................................................31
2. ОПРЕДЕЛЕНИЕ НОВЫХ ФУНКЦИЙ...............................................................................................31
3. СПОСОБЫ ПЕРЕДАЧИ ПАРАМЕТРОВ ВНУТРЬ ФУНКЦИЙ..............................................................33
4. ПОЛИМОРФИЗМ И ПЕРЕГРУЗКА ФУНКЦИЙ..................................................................................35
5. ПРОЦЕДУРНАЯ АБСТРАКЦИЯ И "ХОРОШИЙ" СТИЛЬ ПРОГРАММИРОВАНИЯ...............................36
6. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ...........................................................................................36
7. СВОДКА РЕЗУЛЬТАТОВ...............................................................................................................38
8. УПРАЖНЕНИЯ.............................................................................................................................39
ЛЕКЦИЯ 4. ТЕКСТОВЫЕ ФАЙЛЫ И ПОТОКИ ВВОДА/ВЫВОДА................................41
1. НАЗНАЧЕНИЕ ФАЙЛОВ................................................................................................................41
2. ПОТОКИ ВВОДА/ВЫВОДА...........................................................................................................41
3. ПРОВЕРКА ОШИБОК ВЫПОЛНЕНИЯ ФАЙЛОВЫХ ОПЕРАЦИЙ.......................................................43
4. СИМВОЛЬНЫЙ ВВОД/ВЫВОД......................................................................................................44
5. ПРОВЕРКА ДОСТИЖЕНИЯ КОНЦА ФАЙЛА ПРИ ОПЕРАЦИЯХ ВВОДА............................................45
6. ПЕРЕДАЧА ПОТОКОВ ФУНКЦИЯМ В КАЧЕСТВЕ ПАРАМЕТРОВ.....................................................47
7. ОПЕРАТОРЫ ВВОДА/ВЫВОДА ">>" И "<<".................................................................................48
8. СВОДКА РЕЗУЛЬТАТОВ...............................................................................................................50
9. УПРАЖНЕНИЯ.............................................................................................................................50
ЛЕКЦИЯ 5. ОПЕРАТОРЫ ВЕТВЛЕНИЯ И ЦИКЛЫ...........................................................52
1. ЛОГИЧЕСКИЕ ЗНАЧЕНИЯ, ВЫРАЖЕНИЯ И ФУНКЦИИ...................................................................52
2. ЦИКЛЫ "FOR", "WHILE" И "DO...WHILE".....................................................................................53
3. МНОЖЕСТВЕННОЕ ВЕТВЛЕНИЕ И ОПЕРАТОР "SWITCH"..............................................................55
4. БЛОКИ И ОБЛАСТЬ ВИДИМОСТИ ПЕРЕМЕННЫХ..........................................................................56
4
5. ЗАМЕЧАНИЕ О ВЛОЖЕННЫХ ЦИКЛАХ.........................................................................................59
6. СВОДКА РЕЗУЛЬТАТОВ...............................................................................................................59
7. УПРАЖНЕНИЯ.............................................................................................................................60
ЛЕКЦИЯ 6. МАССИВЫ И СИМВОЛЬНЫЕ СТРОКИ.........................................................63
1. НАЗНАЧЕНИЕ МАССИВОВ...........................................................................................................63
2. ПЕРЕДАЧА МАССИВОВ В КАЧЕСТВЕ ПАРАМЕТРОВ ФУНКЦИЙ....................................................66
3. СОРТИРОВКА МАССИВОВ...........................................................................................................68
4. ДВУМЕРНЫЕ МАССИВЫ..............................................................................................................69
5. СИМВОЛЬНЫЕ СТРОКИ...............................................................................................................70
6. СВОДКА РЕЗУЛЬТАТОВ...............................................................................................................73
7. УПРАЖНЕНИЯ.............................................................................................................................73
ЛЕКЦИЯ 7. УКАЗАТЕЛИ............................................................................................................75
1. НАЗНАЧЕНИЕ УКАЗАТЕЛЕЙ........................................................................................................75
2. ПЕРЕМЕННЫЕ ТИПА "МАССИВ". АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ С УКАЗАТЕЛЯМИ....................79
3. ДИНАМИЧЕСКИЕ МАССИВЫ.......................................................................................................81
4. АВТОМАТИЧЕСКИЕ И ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ................................................................82
5. СВЯЗНЫЕ СПИСКИ......................................................................................................................82
6. СВОДКА РЕЗУЛЬТАТОВ...............................................................................................................86
7. УПРАЖНЕНИЯ.............................................................................................................................87
ЛЕКЦИЯ 8. РЕКУРСИЯ...............................................................................................................89
1. ПОНЯТИЕ РЕКУРСИИ...................................................................................................................89
2. ПРОСТОЙ ПРИМЕР РЕКУРСИИ.....................................................................................................89
3. КАК ВЫПОЛНЯЕТСЯ РЕКУРСИВНЫЙ ВЫЗОВ................................................................................90
4. ЕЩЕ ТРИ ПРИМЕРА РЕКУРСИИ....................................................................................................92
5. РЕКУРСИЯ И ЦИКЛЫ....................................................................................................................93
6. РЕКУРСИЯ В СТРУКТУРАХ ДАННЫХ............................................................................................94
7. РЕКУРСИВНАЯ РЕАЛИЗАЦИЯ АЛГОРИТМА БЫСТРОЙ СОРТИРОВКИ.............................................94
8. СВОДКА РЕЗУЛЬТАТОВ...............................................................................................................97
9. УПРАЖНЕНИЯ.............................................................................................................................97
ЛЕКЦИЯ 9. СОСТАВНЫЕ ТИПЫ ДАННЫХ.......................................................................100
1. НАЗНАЧЕНИЕ СОСТАВНЫХ ТИПОВ ДАННЫХ............................................................................100
2. ОПИСАНИЕ И ИНИЦИАЛИЗАЦИЯ СТРУКТУР..............................................................................100
3. ДОСТУП К КОМПОНЕНТАМ СТРУКТУРЫ ЧЕРЕЗ УКАЗАТЕЛЬ......................................................103
4. МАССИВЫ И СТРУКТУРЫ..........................................................................................................104
5. ПЕРЕГРУЗКА ОПЕРАТОРОВ........................................................................................................105
6. ПРИМЕНЕНИЕ СТРУКТУР ДЛЯ РЕАЛИЗАЦИИ СТЕКА..................................................................107
7. СВОДКА РЕЗУЛЬТАТОВ.............................................................................................................111
8. УПРАЖНЕНИЯ...........................................................................................................................112
ПРИЛОЖЕНИЕ. КРАТКОЕ РУКОВОДСТВО ПО СРЕДЕ РАЗРАБОТКИ DEVELOPER
STUDIO VISUAL C++..................................................................................................................113
1. СОЗДАНИЕ НОВОГО ПРОЕКТА...................................................................................................113
2. ДОБАВЛЕНИЕ В ПРОЕКТ НОВОГО ИСХОДНОГО ФАЙЛА.............................................................114
3. СБОРКА ПРОЕКТА.....................................................................................................................115
4. ЗАПУСК НОВОГО ПРИЛОЖЕНИЯ................................................................................................116
ЛИТЕРАТУРА.............................................................................................................................117
5
Краткое описание учебного курса "Основы программиро-
вания на языке Си++"
Развитие современных технологий программирования предполагает владение
программистом широким набором практических навыков, среди которых одними из
основных можно считать знание языка программирования, среды разработки и сис-
темных технологий базовой операционной системы. Рассматриваемый учебный курс
предназначен для начальной подготовки программиста, владеющего языком про-
граммирования Си++ применительно к разработке программ в ОС семейства Win32.
При анализе доступных в Интернет зарубежных курсов, связанных с обучени-
ем практическому программированию в рамках подготовки по специальностям Computer
Science, оказалась заметна следующая тенденция: существуют курсы по изуче-
нию языка Си++, курсы по изучению объектно-ориентированного программирования
на базе, чаще всего, Java и реже, Си++, и практически стандартный курс "Операцион-
ные системы", посвященный структуре Unix-совместимых операционных систем. Ха-
рактерной особенностью зарубежных университетских курсов является отсутствие
разделов, посвященных изучению практического программирования в среде коммер-
ческих ОС массового распространения, в первую очередь, ОС Windows. С другой
стороны, изучение программирования для этих ОС предлагается рядом коммерческих
учебных организаций, но сроки обучения порядка 3-5 дней предполагают обучение
уже грамотного специалиста, имеющего навыки программирования в какой-либо дру-
гой ОС или на другом языке программирования.
В сегодняшних российских условиях, не отрицая необходимости фундамен-
тальной подготовки специалистов по вычислительной технике в области теории алго-
ритмов и устройства вычислительных и программных систем, можно отметить полез-
ность изучения технологий практического программирования – использования сред
разработки и библиотек программирования для ОС массового распространения. Этим
обусловлена направленность рассматриваемого курса – начальная подготовка про-
граммистов на Си++ для среды ОС Windows.
Сложность обучения практическому программированию, на наш взгляд, за-
ключается в трудности сочетания обучения абстрактным понятиям программирова-
ния (таким, как структуры данных, понятие алгоритма, основные компоненты алго-
ритмического языка, методология проектирования программного обеспечения), с
изучением технологий и сред программирования на базе какой-либо конкретной ОС.
Эти практические технологии пребывают в постоянном развитии, поэтому может
быть сложно выделить какие-либо конкретные средства разработки в качестве пред-
мета изучения.
Несмотря на широкое распространение сред быстрой разработки ПрО (напри-
мер, Visual Basic, Inprise Builder и Inprise Delphi), выбор их в качестве учебной среды
представляется нецелесообразным, т.к. в этих средах кажущаяся простота разработки
ПрО касается только формирования каркаса приложения из набора готовых компо-
нент, а устройство этих компонент или изменение структуры каркаса требует серьез-
ных знаний не только по структуре базовой ОС, но и по системной архитектуре среды
программирования.
Программа данного курса предназначена для обучения лиц, имеющих навыки
пользовательской работы на персональном компьютере, основным понятиям и мето-
дам современного практического программирования. Предметом изучения курса яв-
ляется объектно-ориентированное программирование на языке Си++ в среде совре-
менных 32-х разрядных операционных систем семейства Windows. Программа курса
6
разбита на 4 части:
1) Введение в программирование на языке Си++ (9 лекций)
2) Основы программирования трехмерной графики (8 лекций)
3) Объектно-ориентированное программирование на языке Си++ (9 лекций)
4) Программирование для Microsoft Windows с использованием Visual C++ и
библиотеки классов MFC (9 лекций)
На каждое лекционное занятие должно быть предусмотрено минимум одно
практическое (2 академических часа) и еще, в среднем, 4 часа самостоятельных заня-
тий. Т.о., на изучение курса отводится 72 лекционных часа, 72 практических (т.о., 144
аудиторных часа) и 144 часа самостоятельных занятий.
Методические материалы для курса сформированы на основе примерно 10-ти
зарубежных изданий, часть из которых переведена на русский язык.
В первой части курса рассматриваются процедурные основы языка Си++. Они
включают в себя оформление текста программ, правила записи выражений на Си++,
рассмотрение простых типов данных и алгоритмических конструкций условных опе-
раторов, циклов _______и др. В конце этой части курса подробно рассматриваются составные
типы данных. При этом делаются замечания о достоинствах и недостатках этих типов
данных, что впоследствии упрощает введение понятий объектно-ориентированного
программирования.
Вторая часть курса посвящена применению языка Си++ для программирования
задач в конкретной предметной области – трехмерной компьютерной графики. В ка-
честве базовой графической библиотеки выбрана библиотека OpenGL, являющаяся
открытым стандартом в данной области. Изучение этой библиотеки демонстрирует
методику освоения готового инструментария, сформированного в результате приме-
нения методов структурного проектирования в конкретной предметной области. По-
нятия, относящиеся к машинной графике, понятие каркаса приложения и обработки
событий иллюстрируются простыми примерами и в дальнейшем используются при
изучении программирования в среде Windows.
Третья часть курса изучается после усвоения студентами процедурного про-
граммирования. Основные вопросы объектно-ориентированного программирования
на Си++ излагаются на примере программирования консольных приложений Win32.
Рассматриваются элементарные приемы объектно-ориентированного проектирования
– проектирование на основе распределения обязанностей, метод CRC-карточек.
В четвертой части курса изучается архитектура операционных систем семейст-
ва Windows и методы программирования для этих ОС. Примерно треть этой части по-
священа рассмотрению основных компонент операционных систем Windows 9x/NT,
знакомству с базовыми сервисами операционных систем и программированию для
этих ОС на языке Си++ на уровне Win32 API. В оставшейся части рассматриваются
приемы программирования для ОС Windows на базе библиотеки классов MFC. Эта
библиотека классов является промышленным стандартом, упрощающим разработку
программ и использование Win32 API. Подробно описывается каркас приложения
MFC, основные классы этой библиотеки, приемы использования этих классов в соб-
ственных программах, архитектура однодокументных приложений "документ/вид".
После изучения курса студент получает достаточно полное представление о
содержании современного объектно-ориентированного программирования, об уст-
ройстве современных операционных систем Win32 и о событийно-управляемом про-
граммировании. На практических занятиях вырабатываются навыки программирова-
ния на Си++ в интегрированной среде разработки Microsoft Visual C++ 5.0.
7
ЛЕКЦИЯ 1. Основы Си++
Несколько замечаний о назначении программирования
Программирование – это техническая творческая деятельность, цель которой
заключается в решении важных для человека задач или выполнении определенных
действий с помощью компьютера. На рис. 1 представлена идеализированная схема
решения типичной задачи программирования.
Подробное описание
задачи или необходимых
действий КОМПЬЮТЕР
Решение задачи или
выполнение действий
Рис. 1. Схема решения задачи с помощью компьютера.
В рамках такой схемы необходимыми компонентами компьютера являются
центральный процессор, устройства ввода/вывода и память (рис. 2).
Рис. 2. Основные компоненты компьютера.
Конечно, в действительности дело обстоит не так просто, как показано на
рис. 1. Например, "подробное описание (спецификация) задачи" на естественном язы-
ке для компьютера не годится (в настоящее время). Более того, для решения задачи на
компьютере недостаточно полного описания задачи, необходимо также снабдить
компьютер информацией о том, как именно следует решать задачу – т.е. составить ал-
горитм. Для описания алгоритмов решения задач или алгоритмов выполнения каких-
либо действий (например, управление роботом-манипулятором) с помощью компью-
тера применяются языки программирования.
На рис. 3 показана более подробная схема решения задачи с помощью компью-
тера, в которой учтена необходимость использования языка программирования. Ил-
люстрация этой схемы на конкретном примере приведена в таблице 1.
Существует большое количество различных языков программирования и много
способов их классификации. Например, "языками высокого уровня" считаются те
языки, синтаксис которых сравнительно близок к естественному языку, в то время как
синтаксис "низкоуровневых" языков содержит много технических подробностей, свя-
занных с устройством компьютера и процессора.
8
Рис. 3. Схема решения задачи на компьютере с использованием языка программирования.
Таблица 1. Основные этапы решения задачи по проверке числа на простоту.
Спецификация задачи Требуется определить, является ли данное число простым.
Алгоритм Ввести x
Для каждого целого числа z из диапазоне от 1 до x
Если остаток от деления x на z равен 0, то
вывести сообщение "число не простое" и закончить работу
Если такого числа z не найдено, то
вывести сообщение "число простое" и закончить работу