Скачать 1.94 Mb.
|
А.А. Богуславский, С.М. Соколов Основы программирования на языке Си++ Часть 1. Введение в программирование на языке Си++ (для студентов физико-математических факультетов педагогических институтов) Коломна, 2002 ББК 32.97я73 Рекомендовано к изданию УДК 681.142.2(075.8) редакционно-издательским советом Б 73 Коломенского государственного педагогического института Богуславский А.А., Соколов С.М. Б73 Основы программирования на языке Си++: Для студентов физико-математических факультетов педагогических институтов. - Коломна: КГПИ, 2002.-490 с. Пособие предназначено для обучения студентов, обладающих навыками пользовательской работы на персональном компьютере, основным понятиям и методам современного практического программирования. Предметом изучения курса является объектно-ориентированное программирование на языке Си++ в среде современных 32-х разрядных операционных систем семейства Windows. Программа курса разбита на 4 части: (1) Введение в программирование на языке Си++; (2) Основы программирования трехмерной графики; (3) Объектно-ориентированное программирование на языке Си++ и (4) Программирование для Microsoft Windows с использованием Visual C++ и библиотеки классов MFC. После изучения курса студент получает достаточно полное представление о содержании современного объектно-ориентированного программирования, об устройстве современных операционных систем Win32 и о событийно-управляемом программировании. На практических занятиях вырабатываются навыки программирования на Си++ в интегрированной среде разработки Microsoft Visual C++ 5.0. Рецензенты: И.П. Гиривенко - к.т.н., доцент, зав. кафедрой информатики и вычислительной техники Рязанского государственного педагогического университета им. С.А. Есенина. А.А. Шамов - к.х.н., доцент кафедры теоретической физики Коломенского государственного педагогического института. СОДЕРЖАНИЕ КРАТКОЕ ОПИСАНИЕ УЧЕБНОГО КУРСА "ОСНОВЫ ПРОГРАММИРОВАНИЯ НА ЯЗЫКЕ СИ++" 5 ЛЕКЦИЯ 1. ОСНОВЫ СИ++ 7
10. Упражнения 15 ЛЕКЦИЯ 2. ПЕРЕМЕННЫЕ, ТИПЫ ДАННЫХ И ВЫРАЖЕНИЯ 18
ЛЕКЦИЯ 3. ФУНКЦИИ И ПРОЦЕДУРНАЯ АБСТРАКЦИЯ 31
ЛЕКЦИЯ 4. ТЕКСТОВЫЕ ФАЙЛЫ И ПОТОКИ ВВОДА/ВЫВОДА 41
ЛЕКЦИЯ 5. ОПЕРАТОРЫ ВЕТВЛЕНИЯ И ЦИКЛЫ 52
ЛЕКЦИЯ 6. МАССИВЫ И СИМВОЛЬНЫЕ СТРОКИ 63
ЛЕКЦИЯ 7. УКАЗАТЕЛИ 75
ЛЕКЦИЯ 8. РЕКУРСИЯ 89
ЛЕКЦИЯ 9. СОСТАВНЫЕ ТИПЫ ДАННЫХ 100
ПРИЛОЖЕНИЕ. КРАТКОЕ РУКОВОДСТВО ПО СРЕДЕ РАЗРАБОТКИ DEVELOPER STUDIO VISUAL C++ 113
ЛИТЕРАТУРА 117 Краткое описание учебного курса "Основы программирования на языке Си++" Развитие современных технологий программирования предполагает владение программистом широким набором практических навыков, среди которых одними из основных можно считать знание языка программирования, среды разработки и системных технологий базовой операционной системы. Рассматриваемый учебный курс предназначен для начальной подготовки программиста, владеющего языком программирования Си++ применительно к разработке программ в ОС семейства Win32. При анализе доступных в Интернет зарубежных курсов, связанных с обучением практическому программированию в рамках подготовки по специальностям Computer Science, оказалась заметна следующая тенденция: существуют курсы по изучению языка Си++, курсы по изучению объектно-ориентированного программирования на базе, чаще всего, Java и реже, Си++, и практически стандартный курс "Операционные системы", посвященный структуре Unix-совместимых операционных систем. Характерной особенностью зарубежных университетских курсов является отсутствие разделов, посвященных изучению практического программирования в среде коммерческих ОС массового распространения, в первую очередь, ОС Windows. С другой стороны, изучение программирования для этих ОС предлагается рядом коммерческих учебных организаций, но сроки обучения порядка 3-5 дней предполагают обучение уже грамотного специалиста, имеющего навыки программирования в какой-либо другой ОС или на другом языке программирования. В сегодняшних российских условиях, не отрицая необходимости фундаментальной подготовки специалистов по вычислительной технике в области теории алгоритмов и устройства вычислительных и программных систем, можно отметить полезность изучения технологий практического программирования - использования сред разработки и библиотек программирования для ОС массового распространения. Этим обусловлена направленность рассматриваемого курса - начальная подготовка программистов на Си++ для среды ОС Windows. Сложность обучения практическому программированию, на наш взгляд, заключается в трудности сочетания обучения абстрактным понятиям программирования (таким, как структуры данных, понятие алгоритма, основные компоненты алгоритмического языка, методология проектирования программного обеспечения), с изучением технологий и сред программирования на базе какой-либо конкретной ОС. Эти практические технологии пребывают в постоянном развитии, поэтому может быть сложно выделить какие-либо конкретные средства разработки в качестве предмета изучения. Несмотря на широкое распространение сред быстрой разработки ПрО (например, Visual Basic, Inprise Builder и Inprise Delphi), выбор их в качестве учебной среды представляется нецелесообразным, т.к. в этих средах кажущаяся простота разработки ПрО касается только формирования каркаса приложения из набора готовых компонент, а устройство этих компонент или изменение структуры каркаса требует серьезных знаний не только по структуре базовой ОС, но и по системной архитектуре среды программирования. Программа данного курса предназначена для обучения лиц, имеющих навыки пользовательской работы на персональном компьютере, основным понятиям и методам современного практического программирования. Предметом изучения курса является объектно-ориентированное программирование на языке Си++ в среде современных 32-х разрядных операционных систем семейства Windows. Программа курса разбита на 4 части:
На каждое лекционное занятие должно быть предусмотрено минимум одно практическое (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. ЛЕКЦИЯ 1. Основы Си++ 1. Несколько замечаний о назначении программирования Программирование - это техническая творческая деятельность, цель которой заключается в решении важных для человека задач или выполнении определенных действий с помощью компьютера. На рис. 1 представлена идеализированная схема решения типичной задачи программирования. Подробное описание задачи или необходимых действий КОМПЬЮТЕР Решение задачи или выполнение действий Рис. 1. Схема решения задачи с помощью компьютера. В рамках такой схемы необходимыми компонентами компьютера являются центральный процессор, устройства ввода/вывода и память (рис. 2).
УСТРОЙСТВА ВВОДА/ВЫВОДА ЦЕНТРАЛЬНЫЙ ПРОЦЕССОР ПАМЯТЬ Рис. 2. Основные компоненты компьютера. Конечно, в действительности дело обстоит не так просто, как показано на рис. 1. Например, "подробное описание (спецификация) задачи" на естественном языке для компьютера не годится (в настоящее время). Более того, для решения задачи на компьютере недостаточно полного описания задачи, необходимо также снабдить компьютер информацией о том, как именно следует решать задачу - т.е. составить алгоритм. Для описания алгоритмов решения задач или алгоритмов выполнения каких-либо действий (например, управление роботом-манипулятором) с помощью компьютера применяются языки программирования. На рис. 3 показана более подробная схема решения задачи с помощью компьютера, в которой учтена необходимость использования языка программирования. Иллюстрация этой схемы на конкретном примере приведена в таблице 1. Существует большое количество различных языков программирования и много способов их классификации. Например, "языками высокого уровня" считаются те языки, синтаксис которых сравнительно близок к естественному языку, в то время как синтаксис "низкоуровневых" языков содержит много технических подробностей, связанных с устройством компьютера и процессора. ВЫСОКИЙ УРОВЕНЬ, НЕ ЗАВИСИТ ОТ АППАРАТУРЫ НИЗКИЙ УРОВЕНЬ, ЗАВИСИТ ОТ АППАРАТУРЫ СРЕДА РАЗРАБОТКИ VISUAL C++ Спецификация Алгоритм Язык программирования высокого уровня Внутренний код данного компьютера Исполняемый файл ОБЪЕКТНЫЙ КОД КОМАНДЫ ПРОЦЕССОРА РУССКИЙ ЯЗЫК Си++, Си, Паскаль (формальный стиль) ПСЕВДОКОД (неформальный стиль) (полуформальный стиль) Рис. 3. Схема решения задачи на компьютере с использованием языка программирования. Таблица 1. Основные этапы решения задачи по проверке числа на простоту.
"Императивные" или "процедурные" языки позволяют программисту описать, в какой последовательности компьютер будет выполнять отдельные шаги алгоритма и, таким образом, решать задачу и выдавать на экран результат. "Декларативные" языки предназначены больше для описания самой задачи и желаемого результата, а не действий компьютера. "Объектно-ориентированные языки" рассчитаны на применение особого подхода к описанию задач, согласно которому в задаче выделяются некоторые "объекты" с характерным для них "поведением" и взаимодействующие между собой. Один из 8 первых объектно-ориентированных языков - Смоллток, он предназначен исключительно для объектно-ориентированного программирования. В отличие от него, язык Си++ обладает как объектно-ориентированными возможностями, так и средствами традиционного процедурного программирования. Радикальные приверженцы различных языков и стилей программирования иногда делают экстравагантные заявления, выделяющие семейство языков или один язык как исключительный и идеально подходящий для любых задач. Например, довольно распространено мнение, что объектно-ориентированный подход наиболее близок к способу решения задач человеком. По этому поводу вы со временем сможете составить собственное мнение, т.к. абсолютно истинного, очевидно, нет. 2. Происхождение языка Си++ Язык Си++ был разработан в начале 1980-х гг. Бьерном Страуструпом из компании AT&T Bell Laboratories. Си++ основан на языке Си. Два символа "++" в названии - это игра слов, символами "++" в языке Си обозначается операция инкремента (увеличение значения переменной на 1). Т.о., Си++ был задуман как язык Си с расширенными возможностями. Большая часть языка Си вошла в Си++ как подмножество, поэтому многие программы на Си можно скомпилировать (т.е. превратить в набор низкоуровневых команд, которые компьютер может непосредственно выполнять) с помощью компилятора Си++. При классификации языков программирования язык Си вызывает некоторые трудности. По сравнению с ассемблером, это высокоуровневый язык. Однако Си содержит много низкоуровневых средств для непосредственных операций с памятью компьютера. Поэтому язык Си отлично подходит для написания эффективных "системных" программ. Но программы других типов на Си могут оказаться довольно сложными для понимания, и есть ряд ошибок, которым программы на Си особенно подвержены. Дополнительные объектно-ориентированные возможности Си++ были добавлены в Си, в частности, для устранения этих недостатков. 3. Стандарт ANSI Си++ Национальный Институт Стандартизации США (American National Standards Institution, ANSI) разработал "официальные" стандарты для многих языков программирования, в том числе для Си и Си++. Эти стандарты стали общепринятыми и они имеют очень большое значение. Программу, целиком написанную на ANSI Си++, гарантированно можно запустить на любом компьютере, для которого имеется компилятор ANSI Си++. Другими словами, стандарт гарантирует переносимость программ на языке ANSI Си++. В действительности большинство версий Си++ представляют собой стандартный ANSI Си++, дополненный некоторыми машинно-зависимыми возможностями. Эти специфические средства предназначены для облегчения взаимодействия программ с конкретными операционными системами. Вообще, в программах, которые должны быть переносимыми, подобными специфическими возможностями следует пользоваться как можно реже. В таких случаях части программы на Си++, в которых используются не-ANSI компоненты языка, целесообразно особым образом помечать, так, чтобы их легко можно было отделить от основной части программы и модифицировать для других компьютеров и операционных систем. 4. Среда разработки Microsoft Developer Studio Visual С++ Известно, что лучший способ изучения языка программирования заключается в том, чтобы писать на нем программы и проверять, как они работают на компьютере. Для этого необходимы несколько программ:
В данном курсе изучения Си++ практические упражнения предполагается выполнять в среде разработки программ Microsoft Developer Studio Visual C++ для IBM-совместимых ПК под управлением Windows 95/NT. В этом пакете интегрированы редактор, компилятор, компоновщик и отладчик. Все вместе они образуют единую удобную среду программирования. Краткое описание работы со средой Visual C++ приведено в Приложении. 5. Пример программы на Си++ Ниже приведен исходный текст простой программы на Си // В языке Си++ с двойной косой черты начинаются комментарии // (например, как эта строка). Компилятор игнорирует комментарии, // начиная от первой черты и до конца строки. /* Второй способ записи комментариев - после косой черты со звездочкой. После текста комментария надо поставить звездочку, а затем - косую черту. Комментарии, записанные подобным образом, могут занимать больше одной строки. */ /* В программе ОБЯЗАТЕЛЬНО должно быть достаточное количество комментариев! */ /* Эта программа запрашивает у пользователя текущий год, возраст пользователя и еще один год. Затем программа вычисляет возраст пользователя, который будет у него во втором введенном году.*/ #include int main() { int year_now, age_now, another_year, another_age; cout « "Введите текущий год и нажмите ENTER.\n"; cin » year_now; cout « "Введите свой возраст (в годах). \n"; cin » age_now; 10 cout « "Введите год, для которого вы хотите узнать свой возраст.\n"; cin » another_year; another_age = another_year - (year_now - age_now); if (another_age >= 0) { cout « "B " « another_year « " году вам будет "; cout « another_age « "\n"; } else { cout « "B " « another year « " вы еще не родились!\n"; } return 0; } Программа 5.1. Некоторые свойства программы 5.1 являются обычными для большинства программ на Си++. Программа начинается (после комментариев) с оператора #include Этот оператор называется "директивой include". До компилятора исходный текст обрабатывается препроцессором - специальной программой, которая модифицирует текст программы по специальным командам - директивам. Директивы препроцессора начинаются с символа "#". Директива include предназначена для включения в исходный текст содержимого другого файла. Например, в программу 5.1 включается файл iostream.h, содержащий описания функций стандартной библиотеки ввода/вывода для работы с клавиатурой и экраном. (Стандартные библиотеки языка Си++ будут рассматриваться позже). Алгоритм, записанный в программе 5.1, очень простой. Поэтому структуру программы легко представить в виде списка последовательно выполняемых команд (операторов). Схематично программу, содержащуюся после директивы #include, можно представить в виде: int main () { Первый оператор; Последний оператор; return 0; Подобная структура является общей для всех программ на Си++. Каждый оператор в теле программы завершается точкой с запятой. В хорошо разработанной большой программе большинство операторов являются обращениями (вызовами) к подпрограммам, которые записываются после функции main () или в отдельных файлах. Каждая подпрограмма (функция) имеет структуру, подобную функции main (). Но функция main () в каждой программе только одна. Именно с нее начинается выполнение программы. (Подробнее функции будут рассматриваться далее.) В конце функции main () записана строка: 11 return 0; Эта строка значит "вернуть операционной системе в качестве сигнала об успешном завершении программы значение 0". Оператор возврата return применяется не только при завершении программы, но и при завершении отдельных подпрограмм. В любом случае этот оператор возвращает определенное значение на более высокий уровень управления. В программе-примере используются четыре переменные: year_now, age_now, another_year и another_age Переменные в программировании отличаются от математических переменных. Они используются как символические имена "фрагментов оперативной памяти компьютера". При выполнении программы в различные моменты времени переменные могут хранить различные значения. В программе 5.1 первое упоминание четырех переменных содержится в строке с оператором описания переменных: int year_now, age_now, another_year, another_age; Этот оператор уведомляет компилятор, что для хранения четырех переменных типа "целое число" (integer - int) требуется выделить необходимое количество памяти. Эта область памяти будет зарезервирована в течение выполнения оставшейся части программы. Переменные всегда должны быть описаны до первого использования. В программировании хорошим стилем считается описание всех переменных, используемых в подпрограмме, в начале этой подпрограммы. В Си++ есть несколько различных типов переменных, и они будут обсуждаться немного позже. 6. Выполнение ввода/вывода данных и присваивание значений После компиляции программы ее можно запустить на выполнение. Результат выполнения на экране будет выглядеть примерно так: Введите текущий год и нажмите ENTER. 2000 Введите свой возраст (в годах). 21 Введите год, для которого вы хотите узнать свой возраст. 2017 В 2017 году вам будет 38 Первая, третья, пятая и седьмая строки выдаются на экран программой с помощью следующего оператора: cout « Выражение1 « Выражение2 « ... « ВыражениеN; Этот оператор выводит на экран сообщение: Выражение1 Выражение2 ... ВыражениеN Последовательность операторов cout « Выражение1 ; cout « Выражение2 ; cout « ВыражениеN; 12 приводит к аналогичному результату. Если между выражениями требуется вставить пробелы или новые строки, то их нужно указать явно, с помощью символов " " и " \ n " соответственно. Числа, показанные выше в примере выдачи на экран полужирным шрифтом, были напечатаны пользователем. В показанном примере оператор cin » year_now; приводит к тому, что переменной year_now присваивается значение 2000. Это происходит после того, как пользователь напечатает "2000" и нажмет клавишу Enter. В программе есть еще места, где переменным присваиваются значения, в том числе оператор присваивания: another_age = another_year - (year_now - age_now); Операция "=" означает "присвоить переменной, стоящей слева от знака равенства, значение, указанное справа". Проверка на равенство в Си++ обозначается двойным символом: "==". 7. Управление порядком выполнения команд с помощью оператора if В нескольких последних строках программы (до строки "return 0") записано: if (another_age >= 0) cout « "В " « another_year « " году вам будет "; cout « another_age « "\n"; else cout « "В " « another year « " вы еще не родились!\n"; Оператор ветвления (условный оператор) "if. . . else. . ." выглядит примерно одинаково во всех процедурных языках программирования. В Си++ он называется просто оператором if, и его общая структура такова: if ( условие ) Оператор1; ОператорN; else Опера торN+1; Опера торN +M; |
Лекция основы Си++ 9 Б73 Основы программирования на языке Си++: Для студентов физико-математических факультетов педагогических институтов. – Коломна:... |
Лекция I и проблема языка и сознания лекция II 31 слово и его семантическое... Монография представляет собой изложение курса лекций, про* читанных автором на факультете психологии Московского государственного... |
||
Лекция психосексуальное развитие. Возрастная динамика взаимоотношения полов 15 Основы семейной психопедагогики (курс лекций) / В. И. Короткий. — Архангельск: М'арт, 2003. — 178 с |
Лекция Архитектура 32-разрядных ос windows 7 Б73 Основы программирования на языке Си++: Для студентов физико-математических факультетов педагогических институтов. – Коломна:... |
||
Лекция Основные понятия ооп 7 Б73 Основы программирования на языке Си++: Для студентов физико-математических факультетов педагогических институтов. – Коломна:... |
Лекция №1. Введение. Элементы дифференциальной геометрии. 2 Лекция №5. Множества Жюлиа, множество Мандельброта и их компьютерное представление. 18 |
||
Лекция на тему: «Современные подходы к содержанию дополнительного образования детей» ... |
Лекция в Дорнахе 22 мая 1920 года Канта и протестантизма. Эта лекция вызвала негодование среди членов Лиги, культивировавших и признававших под названием монизма вообще... |
||
Курс лекций Лекция Введение в философскую суицидологию. Лекция Общая... Открыть, в чём состоит суть суицида, наука не в состоянии (по собственной ограниченной природе) и потому должна обращаться за объяснениями... |
Лекция для слушателей курса «Основы религий» Я не могу всего этого понять, потому что некоторые пытливые учителя, помню, меня просто одолевали вопросами, где найти, например,... |
Поиск на сайте Главная страница Литература Доклады Рефераты Курсовая работа Лекции |