Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ПЕРОВА САБАЕВА

.pdf
Скачиваний:
190
Добавлен:
11.03.2016
Размер:
1.4 Mб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

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

В.И. Перова

Т.А. Сабаева

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++

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

Рекомендовано ученым советом механико-математического факультета для студентов ННГУ, обучающихся по направлениям подготовки

080500 «Бизнес-информатика», 010100 «Математика», 010200 «Математика и компьютерные науки», 010400 «Прикладная математика и информатика», 010800 «Механика и математическое моделирование»

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

2013

3

УДК 681.3.06(075.8) ББК 32.973.26-018.1

П26

П26 Перова В.И., Сабаева Т.А. ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++: Учебное пособие. – Нижний Новгород: Изд-во Нижегородского госуниверситета, 2013. – 124 с.

Рецензенты: доктор технических наук, профессор В.Р. Милов кандидат физ.- мат. наук, доцент Н.В. Кротов

Вучебном пособии изложены сведения, необходимые для теоретического

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

Для студентов механико-математического факультета ННГУ, обучающихся по направлениям подготовки 080500 «Бизнес-информатика», 010100 «Математика», 010200 «Математика и компьютерные науки», 010400 «Прикладная математика

иинформатика», 010800 «Механика и математическое моделирование». Оно призвано оказать помощь всем пользователям, стремящимся к эффективному использованию современных объектно-ориентированных технологий.

Ответственный за выпуск: председатель методической комиссии механико-математического факультета ННГУ, к.ф.-м.н., доцент Н.А. Денисова

УДК 681.3.06(075.8) ББК 32.973.26-018.1

© В.И. Перова, Т.А. Сабаева, 2013 © Нижегородский государственный университет им. Н.И. Лобачевского, 2013

4

ОГЛАВЛЕНИЕ

 

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

5

 

ГЛАВА 1. ВЫЧИСЛЕНИЕ ЗНАЧЕНИЙ ФУНКЦИЙ ………………...

7

 

1.1. Операторы циклов ………………………………………………….

7

 

1.2. Операторы ветвления ………………………………………………

8

 

1.3. Алгоритмы, необходимые для написания программ …………….

10

 

ГЛАВА 2. СУММИРОВАНИЕ РЯДОВ ………………………………..

18

 

ГЛАВА 3. ПОЗИЦИОННАЯ ЗАПИСЬ ЧИСЛА ……………………..

24

 

ГЛАВА 4. ДЕЛИТЕЛИ ЦЕЛОГО ЧИСЛА ……………………………

30

 

ГЛАВА 5. СОРТИРОВКА ДАННЫХ ……………………………………

35

 

5.1. Сортировка вставкой ………………………………………………..

35

 

5.2. Метод пузырька ……………………………………………………

36

 

5.3. Сортировка выбором ………………………………………………..

38

 

5.4. Быстрая сортировка ……………………………………………….

41

 

ГЛАВА 6. РАБОТА С ФАЙЛАМИ. ПОСТРОЕНИЕ

46

МАССИВОВ БЕЗ ПОВТОРЕНИЙ ………………………..

 

6.1.Работа с файлами ………………………………………………….. 46

6.2.Построение массивов без повторений …………………………….. 48

ГЛАВА 7. ОБРАБОТКА ПОСЛЕДОВАТЕЛЬНОСТИ СИМВОЛОВ

55

 

7.1. Алгоритм выделения слова из строки …………………………….

55

 

7.2. Выбор слов, подходящих под шаблон ……………………..............

56

 

7.3. Перевод прописных символов в строчные ……………………….

57

 

5

ГЛАВА 8.

ПОБИТОВЫЕ ОПЕРАЦИИ ……………………………….

60

 

 

 

ГЛАВА 9.

ПРЕОБРАЗОВАНИЕ И ПОСТРОЕНИЕ МАТРИЦ …….

70

 

 

 

ГЛАВА 10.

СТРУКТУРЫ ………………………………………………..

86

 

 

 

ГЛАВА 11.

ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ …………..

101

 

 

 

11.1.Односвязные списки …………………………………………….. 101

11.2.Очереди ……………………………………………………………. 107

11.3.Стеки ………………………………………………………………. 111

Список литературы ……………………………………………………….. 122

6

ПРЕДИСЛОВИЕ

В настоящее время резко возрос интерес к программированию. Это связано с развитием и внедрением в повседневную жизнь информационных и коммуникационных технологий [2, 3, 5 – 12, 15, 37]. Все программы, например, компьютерная игра, служебная программа для архивации данных, обозреватель для работы в Интернете или операционная система Windows, написаны на одном или нескольких языках программирования. Сегодня в мире насчитывается около 400 таких языков, которые используются для создания программ, а также еще несколько тысяч языков, давно забытых, или не получивших широкой известности, иногда незаслуженно. К настоящему времени ситуация с использованием различных языков продолжает меняться. Однако для разработки наиболее сложных и высокоэффективных программ используют язык программиро-

вания С++ [13, 21 – 23, 27 – 36].

Язык программирования С++ был разработан Бьярном Страуструпом (Bjarne Stroustrup) [29] на основе языка Си [9]. Язык С++ является расширением языка Си, поэтому программы, созданные на языке Си, могут обрабатываться компилятором языка С++. Язык С++ является универсальным языком программирования, так как с его помощью можно решать широкий круг задач, выполняемых на ЭВМ. Язык С++ реализует объектно-ориентированный подход к программированию [14, 16 – 20, 23 – 25]. Он может быть и процедурноориентированным, и поддерживать параметрическое программирование. Программы, написанные на языке С++, по быстродействию сравнимы с программами, написанными на Ассемблере. С++ – это язык программирования высокого уровня. Поэтому программы, подготовленные на нем, более наглядны, и они легко переносимы с одного типа компьютера на другой.

Материал учебного пособия может быть использован при изучении курсов: «Программирование», «Объектно-ориентированный анализ и программирование (С++)», «Языки и методы программирования», «Технология программирования и работа на ЭВМ», а также при написании курсовых и дипломных работ. Наряду с теоретическим материалом в пособии приведены примеры программ, иллюстрирующих наиболее интересные стороны рассматриваемых вопросов: вычисление значений функций, суммирование рядов, позиционная запись числа и делители целого числа, сортировка данных, построение массивов, работа с файлами, обработка последовательности символов, побитовые операции, преобразование и построение матриц, структуры, динамические структуры данных. В каждой главе учебного пособия приведены упражнения для самостоятельной работы студентов.

Учебное пособие предназначено для студентов механикоматематического факультета ННГУ, обучающихся по направлению подготовки 080500 «Бизнес-информатика», 010100 «Математика», 010200 «Математика и компьютерные науки», 010400 «Прикладная математика и информатика», 010800 «Механика и математическое моделирование». Оно может быть использовано при изучении

7

языка С++ и студентами других факультетов ННГУ, изучающими объектноориентированные технологии.

Авторы выражают искреннюю благодарность заведующему кафедрой «Электроника и сети ЭВМ» НГТУ, профессору В.Р. Милову, доценту кафедры численного и функционального анализа ННГУ, доценту Н.В. Кротову за ценные советы при рецензировании рукописи.

Авторы выражают искреннюю благодарность за поддержку заместителю по очной форме обучения проректора по учебной работе, заведующей кафедрой прикладной статистики ННГУ, доценту Н.Р. Стронгиной, заведующему кафедрой математического моделирования экономических систем ННГУ, профессору Ю.А. Кузнецову, директору НИИ механики, заведующему кафедрой численного моделирования физико-механических процессов ННГУ, профессору Л.А. Игумнову и директору Института радиоэлектроники и информационных технологий НГТУ, действительному члену Международной академии информатизации, профессору В.Г. Баранову.

8

ГЛАВА 1. ВЫЧИСЛЕНИЕ ЗНАЧЕНИЙ ФУНКЦИЙ

В отличие от таких языков программирования, как Алгол, Паскаль, Фортран и других, в которых делается различие между программами и подпрограммами, процедурами и функциями, в языке С++ и его предшественнике языке Си используются только функции. При программировании на языке С++ функция является основным понятием, без которого нельзя обойтись. Каждая программа на языке С++ – это совокупность функций. Каждая функция глобальная, т.е. при определенных условиях доступна в модуле либо во всех модулях программы. Каждую из этих функций нужно определить либо описать до её использования в конкретном модуле программы. Программа должна обязательно включать единственную функцию main(), которая является главной функцией [24]. Функция main() обеспечивает создание точки входа в откомпилированную программу. Кроме этой функции в программе может быть любое количество пользовательских функций. Пользовательские функции прямо или опосредованно вызываются из функции main().

При написании функций часто используются операторы циклов.

1.1. Операторы циклов

Операторы циклов применяются для организации многократно автоматически повторяющихся вычислений [1, 17, 32]. Любой цикл содержит тело цикла, то есть операторы, которые повторяются несколько раз, начальные установки, модификацию параметров цикла и проверку условия продолжения выполнения цикла.

Один проход цикла называется итерацией. На каждой итерации выполняется проверка условия. Проверка условия может выполняться либо до тела цикла (цикл с предусловием), либо после тела цикла (цикл с постусловием).

Цикл с предусловием имеет вид:

while (выражение) {операторы тела цикла};

где выражение определяет условие повторения тела цикла. Выражение вычисляется перед каждой итерацией цикла и его тип должен быть арифметическим или приводимым к нему. Выполнение операторов тела цикла начинается с вычисления выражения. Если выражение истинно (true), то операторы тела цикл будут выполняться. Если же при первой проверке выражения оно будет равно false, то цикл не будет выполняться ни разу.

Цикл с постусловием записывается в виде:

do

{операторы тела цикла} while (выражение);

9

В данном цикле сначала выполняются операторы тела цикла, то есть простой либо составной операторы, а затем вычисляется выражение. Тип выражения, как и в операторе цикла с предусловием, должен быть арифметическим. Если выражение истинно (true), то операторы тела цикла выполняются ещё раз. Цикл будет завершен, когда выражение будет равным false, либо в теле цикла будет выполнен какой-либо оператор передачи управления. В отличие от цикла с предусловием, в цикле с постусловием операторы тела цикла могут быть выполнены хотя бы один раз.

Кроме указанных выше операторов циклов часто применяется цикл с параметрами. Он имеет следующий вид:

for (инициализация; выражение; шаг) { операторы тела цикла }

где инициализация – используется для объявления присвоения начального значения переменной цикла и присвоения начальных значений другим величинам, которые применяются в цикле. В этой части может быть использована операция «запятая» для задания нескольких операторов, выполняющихся последовательно один за другим. Инициализация осуществляется один раз в начале исполнения цикла.

Выражение – определяет условие выполнения цикла. Цикл будет выполняться, если результат выражения, приведенный к типу bool, равен true. Цикл с параметром реализуется как цикл с предусловием.

Шаг – предназначен для изменения переменной цикла. В этой части также может быть использована операция «запятая» для задания нескольких операторов.

Следует отметить, что любую часть, находящуюся внутри круглых скобок оператора с параметрами for, можно опустить. Однако точки с запятой «;» необходимо оставить на своих местах.

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

Операторы ветвления используются в разветвленных алгоритмах и служат для выбора маршрута выполнения программы в зависимости от истинности или ложности некоторых условий [1, 17, 32]. Операторы ветвления называют ещё конструкциями принятия решений [1]. К операторам ветвления относятся следующие операторы: условные операторы if, if … else и операторпереключатель switch.

Синтаксис условных операторов имеет вид [1]:

if (выражение) оператор;

10

либо, если операторов, выполняемых при истинности выражения несколько, то

if (выражение) { оператор 1; оператор 2;

…………

оператор N;

}

В случае, когда необходимо сравнить выражение с некоторым значением, нужно использовать операции отношений. Например,

if (выражение == значение) оператор; if (выражение != значение) оператор; if (выражение <= значение) оператор;

Оператор if … else может иметь две ветви:

if (выражение) { оператор 1; оператор 2;

}

else

{ оператор 3; оператор 4;

}

Здесь вторая ветвь является альтернативой.

Оператор if … else допускает применение вложенных конструкций вида:

if (выражение 1) оператор 1;

else if (выражение 2) оператор 2;

else if (выражение 3) оператор 3;

else if (выражение 4) { оператор 4;

…………

else if (выражение N) оператор N; else

оператор по умолчанию;

где последняя ветвь else оператор по умолчанию; является необязательной. Количество уровней вложенности операторов if может быть любым. Однако при количестве таких вложенных конструкций, больших четырёх-пяти, программу становится трудно отлаживать [1].

11

Когда в программе нужно выбрать один из многочисленных вариантов, бывает целесообразным применять оператор-переключатель switch. Этот оператор называется ещё оператором множественного выбора [1].

Синтаксис оператора-переключателя switch имеет вид:

switch (выражение)

 

{ case

метка 1: оператор 1;

 

 

break;

//Выход из оператора switch

{ case

метка 2: оператор 2;

 

 

break;

 

 

…………

 

case метка N: оператор N; break;

default:

оператор;

}

В данном операторе выражение и метки должны иметь значения целого либо символьного типа. Выбирается тот вариант, метка которого совпадает со значением выражения. В случае, когда нет ни одного совпадения меток со значением выражения, выбирается метка default: . Эта метка является необязательной.

1.3. Алгоритмы, необходимые для написания программ

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

1)Ограничение на входные данные приводит к необходимости проверки при их введении. Для этого можно использовать следующие циклы.

а) цикл с предусловием while (условие) . . . . Условие должно принимать значение «истина» при неправильном вводе данных. Например, необходимо ввести натуральное число n. Это осуществляется следующим циклом с предусловием:

cin >> n; while (n <= 0)

{

cout << ”Введите натуральное число “; cin >> n;

}

12