Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Основы программирования: язык C++

Покупка
Артикул: 799101.01.99
Доступ онлайн
500 ₽
В корзину
Практикум включает в себя набор лабораторных и самостоятельных работ и предназначен для наработки и закрепления навыков элементарной алгоритмизации и написания программ на языке C++. Предлагаются задачи на организацию вычислений, логические операции, работу с потоками ввода-вывода, одномерными и двумерными массивами, си-строками, конечными автоматами, а также задачи на управление памятью. Для студентов бакалавриата, обучающихся по направлениям «Механика и математическое моделирование» и «Прикладная математика».
Кувшинов, Д. Р. Основы программирования : язык C++ : практикум / Д. Р. Кувшинов, С. И. Осипов ; под общ. ред. Д. Р. Кувшинова ; Министерство науки и высшего образования Российской Федерации, Уральский федеральный университет. - Екатеринбург : Изд-во Уральского ун-та, 2021. - 170 с. - ISBN 978-5-7996-3256-4. - Текст : электронный. - URL: https://znanium.com/catalog/product/1936356 (дата обращения: 24.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ 
РОССИЙСКОЙ ФЕДЕРАЦИИ

УРАЛЬСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ 
ИМЕНИ ПЕРВОГО ПРЕЗИДЕНТА РОССИИ Б. Н. ЕЛЬЦИНА

Рекомендовано методическим советом 
Уральского федерального университета в качестве практикума 
для студентов, обучающихся по направлениям подготовки 
01.03.03 «Механика и математическое моделирование», 
01.03.04 «Прикладная математика»

Д. Р. Кувшинов, С. И. Осипов

ОСНОВЫ

ПРОГРАММИРОВАНИЯ

Язык

Практикум

Екатеринбург

Издательство Уральского университета

2021

УДК 
004.43(076.5)

ББК 
32.973.26-018.1я73 

К88

Под общей редакцией Д. Р. Кувшинова

Рецензенты:

B. С. Тарасян, кандидат физико-математических наук, доцент,

заведующий кафедрой «Мехатроника»

(Уральский государственный университет путей сообщения);

C. В. Булычева, кандидат физико-математических наук, доцент 
(Магнитогорский государственный технический университет)

Кувшинов, Д. Р.

K88 
Основы программирования : язык C++ : практикум /  Д. Р. Кувшинов, С. И. Осипов ; под общ. ред. Д. Р. Кувшинова ; Министерство науки и высшего образования Российской Федерации, Уральский федеральный университет. — Екатеринбург : Изд-во Урал. унта, 2021. — 170 с. : ил. — 30 экз. — ISBN 978-5-7996-3256-4. — Текст : 
непосредственный.

ISBN 978-5-7996-3256-4

Практикум включает в себя набор лабораторных и самостоятельных 
работ и предназначен для наработки и закрепления навыков элементарной алгоритмизации и написания программ на языке C ++. Предлагаются 
задачи на организацию вычислений, логические операции, работу с потоками ввода-вывода, одномерными и двумерными массивами, си-строками, 
конечными автоматами, а также задачи на управление памятью.

Для студентов бакалавриата, обучающихся по направлениям «Механика и математическое моделирование» и «Прикладная математика».

УДК 
004.43(076.5) 
ББК 
32.973.26-018.1я73

ISBN 978-5-7996-3256-4
©  Уральский федеральный университет, 2021

Оглавление

Предисловие 
5

1. Значения и переменные 
6

2. Функции 
13

2.1. П ри м еры .........................................................................  
14

2.2. Варианты заданий.........................................................  
15

3. Командная строка и элементарная алгоритмизация 
18

4. Аккумуляция последовательности значений 
23

4.1. Примеры .........................................................................  
24

4.2. Варианты заданий .........................................................  
24

5. Табуляция заданной функции 
26

5.1. П ри м еры .........................................................................  
27

5.2. Варианты заданий.........................................................  
27

6. Логические вычисления 
31

6.1. П ри м еры .........................................................................  
32

6.2. Варианты заданий.........................................................  
34

7. Простая обработка массива 
38

7.1. П ри м еры .........................................................................  
39

7.2. Варианты заданий.........................................................  
40

3

8. Процедурное программирование
42

9. Элементарные вычисления 
52

9.1. П ри м еры ......................................................................  
53

9.2. Варианты заданий......................................................  
60

10. Массивы и двоичные файлы 
63

11. Линейные алгоритмы I 
74

11.1. П ри м еры ......................................................................  
75

11.2. Варианты заданий......................................................  
85

12. Случайный лабиринт 
88

13. Матрицы 
93

13.1. П ри м еры ......................................................................  
94

13.2. Варианты заданий........................................................  
103

14. Линейные алгоритмы II 
111

14.1. П ри м еры ........................................................................  
112

14.2. Варианты заданий........................................................  
119

15. Разные задачи I 
125

16. Конечные автоматы 
130

16.1. П ри м еры ........................................................................  
130

16.2. Варианты заданий........................................................  
136

17. Разные задачи II 
141

18. Си-строки 
146

18.1. П ри м еры ........................................................................  
147

18.2. Варианты заданий........................................................  
159

19. Введение в численные методы
167

Предисловие

Материал книги рассчитан на длину семестра в 18 недель.
Предполагается использование стобалльной системы. Каждая из работ помечена либо как лабораторная, либо как самостоятельная. Лабораторная работа выполняется в учебном 
классе и не разделена на варианты. Самостоятельная работа 
состоит из набора вариантов и может выполняться в классе 
и назначаться в качестве домашнего задания. Рекомендуется оценивать работу студента на лабораторной работе (кроме 
первой) в 0-3 балла (отсутствовал, присутствовал, участвовал, 
выполнил). Итого, лабораторные работы суммарно дают 0-24 
балла.

Оставшиеся 0-76 баллов распределяются между самостоятельными работами. Предлагаются следующие максимальные 
оценки в баллах за самостоятельные работы:

Работа
Оценка
Работа
Оценка

2
4
11
8

4
3
13
9

5
4
14
9

6
5
16
10

7
6
18
9

9
9

5

Значения и переменные

Цели лабораторной работы

• Освоить сборку консольного приложения в среде разработки на языке программирования C++.

• Изучить базовые средства текстового ввода-вывода, предоставляемые стандартной библиотекой C++.

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

• Изучение цикла чтения.

Оператор
Операция

+
сложение

-
вычитание

*
умножение

/
деление

%
остаток от деления

Арифметические операторы C++

6

Задание

1. Предполагается, что доступна некая среда разработки (IDE) 
с установленным компилятором C++. Запустите ее.

2. Создайте новый (пустой) проект консольного приложения.

3. Если создан пустой проект, то он не содержит файлов исходного кода. Добавьте в него новый пустой файл исходного 
кода на языке C++ (cpp-файл). Далее в данной работе все 
действия производятся в этом файле.

4. Попробуйте ввести в новый файл текст 

2+2

и запустить сборку проекта. Видны ли ошибки компиляции?

5. Введите следующую программу:

Пример 1.1. Простейшая программа 

int main () {}

Запустить сборку и исполнение кода. Программа должна 
собраться без ошибок.

6. Выполните следующую модификацию:

Пример 1.2. 2+2? 

int main() { 2 + 2; }

Запустите новую программу. Выводы?

7. Выполните следующую модификацию:

Пример 1.3. Текстовый вывод

#include <iostream > 
int main ( ) {

std : : cout << (2 + 2);

}

7

Здесь iostream — заголовочный файл, часть стандартной 
библиотеки C++. Заголовочные файлы подключаются с помощью директивы препроцессора #include, после которой 
идет имя подключаемого файла, указываемое или в «угловых скобках» (знаки «меньше» и «больше»), или в кавычках 
(знак ").

Стандартные заголовочные файлы C++ не имеют расширения (iostream, но не iostream.h и не iostream.hpp).

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

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

8. Выполните следующую модификацию программы.

Пример 1.4. Вывод нескольких значений

#include <iostream > 
int main() {

std : : cout << "6wbyw4wgivesw" << (6*4) << "\n";

}

Что означает знак *? Что будет выведено, если заменить * на 
/ (деление)? Попробуйте сначала дать ответ на этот вопрос, 
а затем проверьте свой ответ экспериментом.

9. Запись \n задает символ перевода строки. Если при запуске 
программы вывод осуществляется в окно консоли, которое 
сразу закрывается, то можно добавить в программу (перед 
закрывающей }) одну строчку:

std : : cin . ignore ();

10. Выведите значения выражений (4/6), (6/4), (4.0/6), (6.0/4). 
Проанализируйте полученные результаты.

Запустите программу.

8

Когда оба операнда являются целыми числами, выполняется целочисленное деление. В вопросе определения 
точного смысла операции в C++ основополагающее значение имеет тип операндов. При написании программ очень 
важно об этом помнить.

11. Выведите 
значения 
выражений 
(4%6), 
(6%4),

( ( - 6)%4), (6% (-4)) и ( ( - 6)% (-4)). Здесь унарный минус — 
оператор, выполняющий смену знака. Проанализируйте полученные результаты.

12. Теперь попробуйте ввести и запустить следующую программу.

Пример 1.5. Приветствие

#include <iostream> 
int main () {

s td: : co ut  << " Hello !\n"; 
s t d : : c i n . ignore ();

}

Программа должна вывести строку с приветствием, после 
которой с новой строки ожидать ввод.

13. Часто бывает обременительно в каждом обращении к имени 
из стандартной библиотеки писать префикс std :: («выбрать 
имя из пространства имен std»). Чтобы этого не делать, 
можно указать директиву

using namespace std ;

после которой компилятор будет искать имена, не найденные в глобальном пространстве имен, в пространстве имен 
std.

Пример 1.6. Уберем префикс std::

#include <iostream> 
int main () {

using namespace std ;

9

cout << " Hello !\n" ; 
cin . ignore ();

}

14. Для того чтобы получить какие-либо данные от пользователя (из потока ввода cin), требуется «застолбить» в памяти 
место для их размещения, что в C++ осуществляется путем 
определения переменной подходящего типа. Предположим, 
мы считываем два целых числа n и т .  Определим две переменные:

int n, m;

Данная строчка требует от компилятора зарезервировать в 
памяти место под два значения типа int и назначить им имена n и m. Теперь при обращении по имени будет осуществляться доступ к соответствующей области памяти. Основополагающим ее свойством является возможность изменять 
свое состояние — переменные могут изменять свои значения.

15. Добавьте в программу определение двух целочисленных переменных n и m, как указано в предыдущем пункте. Выведите их значения на экран. Что происходит? Что должно 
быть выведено?

16. Переменным можно задать начальное значение (инициализировать их). Например, так:

int n = 1, m = 2;

Задайте начальные значения переменным в программе. Убедитесь, что они теперь выводятся на экран.

17. Наконец, благодаря тому, что у нас есть теперь зарезервированное в памяти место под два числа, мы можем запросить 
их у пользователя и считать из потока cin. Сделать это можно с помощью оператора >> («направление ввода обратно 
направлению вывода»):

10

cin >> n >> m;
сначала прочитать n, затем m.

Числа вводятся подряд через пробельные символы (например, пробел или перевод строки).

18. Модифицируйте программу таким образом, чтобы она запрашивала у пользователя два целых числа и выводила их 
произведение и частное. Попробуйте вводить разные числа, 
в частности, 0 и 0.

19. Экспериментировать с такой программой неудобно, так как 
ее постоянно приходится запускать заново, чтобы ввести 
очередную пару чисел. Совсем несложно сделать так, чтобы 
программа повторяла весь этот набор действий, пока мы ее 
насильно не прервем. Для этого надо заключить повторяемый код внутрь вечного цикла:

for ( ; ; )  {

/ /  Повторяющийся код ставить здесь.

}

Поместите код своей программы (тот, что заключен внутри 
{ }) в вечный цикл и запустите программу. Что случится, 
если допустить ошибку ввода (например, ввести букву)?

20. Вечный цикл неудобен тем, что для выхода из него приходится насильно прерывать исполнение программы. При работе в консоли пользователь обычно может это сделать нажатием комбинации Ctrl+C, но для автоматической работы 
это не годится (например, считывания файла). Мы можем 
модифицировать цикл так, чтобы он завершался в случае 
ошибки ввода. Для этого в C++ принято использовать следующую идиоматическую конструкцию на основе for (цикл 
чтения):

for (определение-переменных; чтение-переменных;) {

/ /  Работа с очередными прочитанными значениями.

}

В нашем случае это превращается в следующий код:

11

for ( int n, m; cin >> n >> m ;) { 

}

Замените в своей программе вечный цикл на цикл чтения. 
Добейтесь ее работоспособности.

Завершение ввода осуществляется через ошибку ввода или 
ввод признака конца файла (в отдельной строке Ctrl+Z, 
Enter в ОС Windows, Ctrl+D, Enter в ОС семейства Unix).

21. Поменяйте тип int на тип float.

Проверьте, что теперь получится при вводе пар 1 0 и 0 0.

22. Поменяйте тип float на тип char. Попробуйте запустить программу. Как можно проинтерпретировать полученные результаты?

23. Пусть есть следующий цикл:

for ( char c; cin >> c ;)

cout << c << "wcodewi s w" << int (c) << ’ \n’ ;

Что он выполняет? Какая кодировка используется вашим 
консольным приложением?

12

Доступ онлайн
500 ₽
В корзину