ПРЕДИСЛОВИЕ

Государственное учреждение образования

“Академия последипломного образования”

Белорусский государственный университет

 

 

Н. А. Аленский

 

ПРАКТИЧЕСКОЕ РУКОВОДСТВО

ПО ЯЗЫКУ С++

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

 

Минск 2006

 

УДК 519.682.2(075)

ББК 32.973.26-018.1я7

 

 

Р е ц е н з е н т ы :

 

зав. кафедрой математического обеспечения ЭВМ ФПМ Белгосуниверситета, кандидат технических наук, доцент Л. Ф. Зимянин;

доцент Минского института управления, кандидат технических наук Е. М. Демидович.

Аннотация

Книга содержит теоретический и практический материалы по наиболее сложным для изучения темам языка С++, связанным, прежде всего, с указателями. Кроме этого, рассмотрены структуры и их использование в списках, объединения, поля битов и перечисления, файлы, директивы компиляции и краткая история развития программирования. По каждой теме приведено, как правило, несколько отлаженных программ с подробными комментариями, даны задания на программирование для лабораторных работ, упражнения и тесты для самоконтроля. Задания разделены на два или три уровня сложности и в основном не привязаны к изучаемому языку С++, их можно использовать также при изучении других систем.

Благодаря простому и доступному стилю изложения пособие будет полезным прежде всего тем, кто начинает изучать программирование. Так как материал за редким исключением достаточно сложный, то и профес­сиональные программисты, желающие освоить новый для них язык, также найдут для себя много интересного Кроме этого, пособие могут использовать преподаватели при разработке лекций, практических занятий, организации самостоятельной работы и, что в литературе обычно отсутствует, для различных форм контроля знаний.

 

 

УДК 519.682.2(075)

ББК 32.973.26-018.1я7

ПРЕДИСЛОВИЕ

Учебное пособие отражает опыт преподавания автором методов программирования на первом курсе механико-математического факультета Белгосуниверситета и в школе юного программиста Академии Последипломного Образования. Большинство тем, рассмотренных в книге, изучаются во втором семестре. Поэтому учебное пособие является продолжением книги [1] этого же автора, содержащей материал первого семестра, обязательный для понимания тем, рассматриваемых здесь.

Так как язык С является подмножеством языка С++, то, изучая его по данному пособию, читатель одновременно осваивает базовые классические средства системного программирования, унаследованные от языка С. В отличие от книг, в которых язык С++ рассматривается как расширение своего предшественника С, настоящее пособие не требует от читателя знакомства со “старым” языком С. Единственное, что необходимо, — это знать материал первого семестра, подробно изложенный, например, в [1] и [2].

Пособие в основном посвящено наиболее сложным методам программирования с использованием указателей. Благодаря этому типу данных язык С++ является более мощным и гибким, а программы — компактными, красивыми и эффективными. Впервых двух главах вводится понятие указателей и показан основанный на них метод программирования циклов при работе с одномерными массивами, матрицами и строками. В третьей главе рассматривается использование статического, то есть с фиксированной размерностью в виде константы, и динамического массива указателей в матричных задачах и, как частный случай, при работе с массивом строк. Основное внимание здесь уделяется динамическому распределению памяти.

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

В шестой главе изучаются методы программирования с использованием внешней памяти, то есть работа с текстовыми и двоичными файлами. При этом рассматривается как последовательный, так и прямой доступ к данным файла. Кроме решения экономических задач и задач обработки текстовой информации показано, как с помощью файлов можно решать некоторые математические задачи, в частности, матричные, геометрические и другие.

В седьмой главе, являющейся продолжением темы “Функции” из первого семестра, рассматривается такой достаточно сложный вопрос, как связь функций с указателями. Основное внимание уделяется указателям на функции и их массивам. Здесь же показано, как разрабатывать функции с переменным количеством параметров и вводится понятие рекурсивных алгоритмов.

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

Структура пособия такова, что оно решает одновременно несколько задач. Прежде всего, по каждой теме дан лекционный материал. Вначале каждой главы, как правило, приводится общая характеристика изучаемого элемента языка или метода программирования. Далее в основной части читателю не просто предоставляется фактический материал, набор готовых правил, а изложение вопроса ведётся от примеров. Теоретический материал чаще всего, если это допустимо, рассматривается одновременно с разработкой одной или нескольких программ. Основное внимание уделяется вопросам, недостаточно подробно освещённым в современной литературе, но которые часто используются при разработке реальных проектов. Характерными примерами таких тем являются классификация и анализ строковых функций, списки, указатели на функции и некоторые другие.

В каждой главе можно найти большое количество упражнений и тестов, ответы к которым не приводятся, чтобы инициировать их самостоятельный поиск прежде всего с помощью проведения компьютерного эксперимента. Задания к лабораторным работам для разработки программ в машинном варианте разделены на несколько уровней сложности. Своевременное выполнение заданий самого низкого уровня А оценивается не выше чем на пять баллов, среднего уровня В — на девять баллов. И только решение самых сложных задач из раздела С можно оценить на 10 баллов. Кроме этого, возможны дополнительные критерии оценки (смотри, например, требования к лабораторной работе 2).

Опыт автора показывает, что язык С++ при разумном выборе тем и их последовательности и соответствующей методики изучения можно использовать и при работе со школьниками старших классов. При этом знание другого языка программирования желательно, но не обязательно. Но “планка” при выборе и оценке заданий должна опускаться на один уровень. Основным является простой уровень А, а многие задачи повышенной сложности можно рекомендовать только для работы с особо одарёнными детьми, а также при подготовке олимпиад по информатике.

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