КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Функции, модели памяти и пространства имен
1. Постройте прототипы, которые соответствовали бы следующим описаниям. а. igor() не принимает аргументов и не возвращает значения. б. tofu() принимает аргумент int и возвращает float. в. mpg() принимает два аргумента типа double и возвращает double. г. summation() принимает имя массива long и его размер и возвращает значение long. д. doctor() принимает строковый аргумент (строка не должна изменяться) и возвращает double. е. of_course() принимает структуру boss в качестве аргумента и не возвращает ничего. ж. plot() принимает указатель на структуру tар в качестве аргумента и возвращает строку. 2. Напишите функцию, принимающую три аргумента: имя массива int, его размер и значение int. Функция должна присвоить каждому элементу массива это значение int. 3. Напишите функцию, принимающую три аргумента: указатель на первый элемент диапазона в массиве, указатель на элемент, следующий за концом этого диапазона, и значение int. Функция должна присвоить каждому элементу диапазона массива это значение int. 4. Напишите функцию, принимающую имя массива double и его размер в качестве аргументов и возвращающую наибольшее значение, которое содержится в этом массиве. Обратите внимание, что функция не должна модифицировать содержимое массива. 5. Напишите функцию, имеющую следующий прототип: int replace(char * str, char c1, char c2); Эта функция должна заменять каждое появление с1 в строке str на с2 и возвращать количество выполненных замен. 6. C++ позволяет передавать структуры по значению, а также передавать адрес структуры. Если glitz - структурная переменная, как передать ее по значению? Как передать ее адрес? Каковы преимущества и недостатки обоих подходов? 7. Функция judge() имеет тип возврата int. В качестве аргумента она принимает адрес функции. Функция, адрес которой ей передается, в свою очередь, принимает аргумент типа const char и возвращает int. Напишите прототип функции. 8. Предположим, что есть следующее объявление структуры: struct applicant { char name[30]; int credit_ratings[3]; }; а. Напишите функцию, которая принимает структуру applicant в качестве аргумента и отображает ее содержимое. б. Напишите функцию, которая принимает адрес структуры applicant в качестве аргумента и отображает содержимое структуры, на которую он указывает. 9. Предположим, что функции f1() и f2() имеют следующие прототипы: void f1(applicant * а); const char * f2(const applicant * a1, const applicant * a2); Объявите p1 как указатель на функцию f1, а р2 — как указатель на f2. Объявите ар как массив из пяти указателей того же типа, что и р1, и объявите ра как указатель на массив из десяти указателей того же типа, что и р2. Воспользуйтесь typedef. 10. Предположим, что функция song() имеет следующий прототип: void song(char * name, int times); а. Как модифицировать этот прототип, чтобы для переменной times по умолчанию принималось значение 1? б. Какие изменения следует внести в определение функции? в. Можно ли переменной name присвоить используемое по умолчанию значение "О, My Papa"? 11. Напишите перегруженные версии функции iquote(), которая отображает аргументы, заключенные в двойные кавычки. Напишите три версии: одну для аргумента типа int, другую для аргумента типа double и третью для аргумента типа string. 12. Пусть имеется следующая структура: struct box { char maker [40]; float height; float width; float length; float volume; }; а. Напишите функцию, которая имеет формальный аргумент - ссылку на структуру box и отображает значение каждого члена структуры. б. Напишите функцию, которая имеет формальный аргумент - ссылку на структуру box и устанавливает член volume в результат произведения членов height, width и length. 13. Ниже дано описание результатов, которые требуется обеспечить. Укажите, может ли каждый из них быть получен с помощью аргументов по умолчанию, путем перегрузки функций, тем и другим способом, или же можно обойтись без этих средств. Предоставьте необходимые прототипы. а. Функция mass(density, volume) возвращает массу тела, имеющего плотность density и объем volume, а функция mass(density) возвращает массу тела, имеющего плотность density и объем 1.0 кубический метр. Все величины имеют тип double. б. Вызов repeat(10, "I 'm OK") отображает указанную строку 10 раз, а вызов repeat("But you're kind of stupid") отображает заданную строку 5 раз. в. Вызов average(3,6) возвращает среднее значение типа int двух аргументов int, а вызов average(3.0, 6.0) - среднее значение типа double двух значений double. г. Вызов mangle("I 'm glad to meet you") возвращает символ І или указатель на строку "I'm glad to meet you" в зависимости от того, присваивается возвращаемое значение переменной типа char или переменной типа char*. 14. Напишите шаблон функции, которая возвращает больший из двух ее аргументов. 15. Какие типы назначены переменным v1, v2, v3, v4 и v5 в следующем коде (предполагается, что код является частью завершенной программы)? int g(int x); float m = 5.5f; float & rm = m; decltype (m) v1 = m; decltype (rm) v2 = m; decltype ((m)) v3 = m; decltype (g(100)) v4; decltype (2.0 * m) v5; 16. Перепишите следующий код таким образом, чтобы в нем не использовалось ни объявление, ни директива using. #include <iostream> using namespace std; int main () { double x; cout << "Enter value: "; while (! (cin >> x)) { cout << "Bad input. Please enter a number: "; // неверный ввод cin.clear(); while (cin.get()!= '\n') continue; } cout << "Value = " << x << endl; return 0; } 17. Перепишите следующий код таким образом, чтобы в нем использовались объявления using вместо директивы using. #include <iostream> using namespace std; int main() { double x; cout << "Enter value: "; while (! (cin >> x)) { cout << "Bad input. Please enter a number: "; // неверный ввод cin.clear(); while (cin.get()!= '\n') continue; } cout << "Value = " << x << endl; return 0; } 18. Предположим, что функция average(3,6) должна возвращать значение int, которое является средним арифметическим двух аргументов типа int, когда она вызывается в одном файле, и значение double, которое является средним арифметическим от двух аргументов типа int, когда вызывается в другом файле одной и той же программы. Как это можно реализовать? 19. Какие данные будет выводить следующая программа, состоящая из двух файлов? // file1.cpp #include <iostream> using namespace std; void other(); void another(); int x = 10; int y; int main() { cout << x << endl; { int x = 4; cout << x << endl; cout << у << endl; } other(); another(); return 0; } void other() { int y=l; cout << "Other: " << x << ", " << у << endl; } // file2.cpp #include <iostream> using namespace std; extern int x; namespace { int у = -4; } void another() { cout << "another(): " << x << ", " << у << endl; } 20. Что будет выводить следующая программа? #include <iostream> using namespace std; void other(); namespace n1 { int x = 1; } namespace n2 { int x = 2; } int main() { using namespace n1; cout << x << endl; { int x = 4; cout < < x << ", " << n1::x << ", " << n2::x << endl; } using n2::x; cout << x << endl; other(); return 0; } void other() { using namespace n2; cout << x << endl; { int x = 4; cout << x << ", " «n1::x << ", " «n2::x << endl; } using n2::x; cout << x << endl; }
Дата добавления: 2017-02-01; Просмотров: 135; Нарушение авторских прав?; Мы поможем в написании вашей работы! |