Вход/Регистрация
Программирование. Принципы и практика использования C++ Исправленное издание
вернуться

Страуструп Бьерн

Шрифт:

15. В чем заключается разница между передачей аргумента по значению и передачей по константной ссылке?

16. Что делает функция

swap
?

17. Следует ли определять функцию с параметром типа

vector<double>
, передаваемым по значению?

18. Приведите пример неопределенного порядка выполнения вычислений. Какие проблемы создает неопределенный порядок вычислений?

19. Что означают выражения

x&&y
и
x||y
?

20. Соответствуют ли стандарту языка С++ следующие конструкции: функции внутри функций, функции внутри классов, классы внутри классов, классы внутри функций?

21. Что входит в активационную запись?

22. Что такое стек вызовов и зачем он нужен?

23. Для чего нужны пространства имен?

24. Чем пространство имен отличается от класса?

25. Объясните смысл объявления

using
.

26. Почему следует избегать директив

using
в заголовочных файлах?

27. Опишите пространство имен

std
.

Термины

Упражнения

1. Модифицируйте программу-калькулятор из главы 7, чтобы поток ввода стал явным параметром (как показано в разделе 8.5.8). Кроме того, напишите конструктор класса

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

2. Напишите функцию

print
, которая выводит в поток
cout
вектор целых чисел. Пусть у нее будет два аргумента: строка для комментария результатов и объект класса
vector
.

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

fibonacci(x,y,v,n)
, в которой аргументы
x
и
y
имеют тип
int
, аргумент
v
является пустой переменной типа
vector<int>
, а аргумент
n
— это количество элементов, подлежащих записи в вектор
v;
элемент
v[0]
равен
x
, а
v[1]
—
y
. Число Фибоначчи — это элемент последовательности, в которой каждый элемент является суммой двух предыдущих. Например, последовательность начинается с чисел 1 и 2, за ними следуют числа 1, 2, 3, 5, 8, 13, 21... Функция
fibonacci
должна генерировать такую последовательность, начинающуюся с чисел
x
и
y
.

4. Переменная типа

int
может хранить целые числа, не превышающие некоторого максимального числа. Вычислите приближение этого максимального числа с помощью функции
fibonacci
.

5. Напишите две функции, изменяющие порядок следования элементов в объекте типа

vector<int>
. Например, вектор 1, 3, 5, 7, 9 становится вектором 9, 7, 5, 3, 1. Первая функция, изменяющая порядок следования элементов на противоположный, должна создавать новый объект класса
vector
, а исходный объект класса
vector
должен оставаться неизменным. Другая функция должна изменять порядок следования элементов без использования других векторов. (Подсказка: как функция
swap
.)

6. Напишите варианты функций из упражнения 5 для класса

vector<string>
.

7. Запишите пять имен в вектор

vector<string> name
, затем предложите пользователю указать возраст названных людей и запишите их в вектор
vector<double> age
. Затем выведите на печать пять пар
(name[i],age[i])
. Упорядочьте имена
(sort(name.begin, name.end))
и выведите на печать пары
(name[i], age[i])
. Сложность здесь заключается в том, чтобы получить вектор
age
, в котором порядок следования элементов соответствовал бы порядку следования элементов вектора
name
. (Подсказка: перед сортировкой вектора
name
создайте его копию и используйте ее для получения упорядоченного вектора
age
. Затем выполните упражнение снова, разрешив использование произвольного количества имен).

8. Напишите простую функцию

randint
, генерирующую псевдослучайные числа в диапазоне
[0:MAXINT]
. (Подсказка: Д. Кнут Искусство программирования, том 2.)

9. Напишите функцию, которая с помощью функции

randint
из предыдущего упражнения вычисляет псевдослучайное целое число в диапазоне [a:b]:
rand_in_range(int a, int b)
. Примечание: эта функция очень полезна для создания простых игр.

10. Напишите функцию, которая по двум объектам,

price
и
weight
, класса
vector<double>
вычисляет значение (“индекс”), равное сумме всех произведений
price[i]*weight[i]
. Заметьте, что должно выполняться условие
weight.size<=price.size
.

11. Напишите функцию

maxv
, возвращающую наибольший элемент вектора.

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

struct
, либо с помощью механизма передачи аргументов по ссылке. Какой из этих двух способов следует предпочесть и почему?

13. Усовершенствуйте функцию

print_until_s
из раздела 8.5.2. Протестируйте ее. Какие наборы данных лучше всего подходят для тестирования? Укажите причины. Затем напишите функцию
print_until_ss
, которая выводит на печать сроки, пока не обнаружит строку аргумента
quit
.

  • Читать дальше
  • 1
  • ...
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: