Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лафоре Р. - Объектно-ориентированное программир...doc
Скачиваний:
51
Добавлен:
01.04.2025
Размер:
40.77 Mб
Скачать

3. Верное решение:

// ex4_3.cpp

// использование структуры для моделирование объема

// помещения

#include <iostream>

using namespace std;

///////////////////////////////////////////////////////////

struct Distance

{

int feet;

float inches;

};

///////////////////////////////////////////////////////////

struct Volume

{

Distance length;

Distance width;

Distance height;

};

///////////////////////////////////////////////////////////

int main()

{

float l, w, h;

Volume room1 = { {16, 3.5}, {12, 6.25}, {8, 1.75} };

l = room1.length.feet + room1.length.inches / 12.0;

w = room1.width.feet + room1.width.inches / 12.0;

h = room1.height.feet + room1.height.inches / 12.0;

cout << "Объем =" << l*w*h << " кубических футов \n ";

return 0;

}

Глава 5

Ответы на вопросы

    1. г (б наполовину правильно).

    2. Определении.

    3. Правильный ответ:

void foot) {

cout << "фу :-) "; }

    1. Объявлением, прототипом.

    2. Тело.

    3. Вызовом.

    4. Описателем.

    5. в.

    6. Ложно.

  1. Для уяснения назначения аргументов.

  1. а, б, в.

  2. Пустые скобки означают отсутствие аргументов.

  3. Один.

  4. Истинно.

  5. В начале объявления и описателя.

  6. void.

  7. Правильный ответ:

main() {

int times2(int); // прототип

int alpha = times2(37); // вызов функции }

  1. г.

  2. Изменение исходного значения аргумента (или желание избежать копи- рования большого аргумента).

  3. а, в.

  4. Правильный ответ:

int bar(char); int bar(char, char);

  1. Быстрее, больше.

  2. Правильный ответ:

inline float foobar(float fvar)

  1. a, 6.

  2. Правильный ответ:

char blyth(int, float = 3.14159);

  1. Видимостью, временем жизни.

  2. Функции, определенные после переменных.

  3. Те, в которых она определена.

  4. б, г.

  5. Слева от знака равенства.

Решения упражнений

1. Верное решение: // ex5_1.cpp

// функция находит площадь окружности

#include <iostream>

using namespace std;

float circarea(float radius);

int main()

{

double rad;

cout << "\nВведите радиус окружности:";

cin >> rad;

cout << "Площадь равна " << circarea(rad) << endl;

return 0;

}

// ---------------------------------------------------------

float circarea(float r)

{

const float PI = 3.14159F;

return r * r * PI;

}

    1. Верное решение:

// ex5_2.cpp

// функция возводит число в степень

#include <iostream>

using namespace std;

double power(double n, int p = 2); // p has default value 2

int main()

{

double number, answer;

int pow;

char yeserno;

cout << "\nВведите число:"; // get number

cin >> number;

cout << "Будете вводить степень (y/n)?";

cin >> yeserno;

if(yeserno == 'y')// пользователю нужен не квадрат числа?

{

cout << "Введите степень:";

cin >> pow;

answer = power(number, pow); // возвести число в степень

}

else

answer = power(number); // квадрат числа

cout << "Ответ " << answer << endl;

return 0;

}

//---------------------------------------------------------

// power()

// возвращает число n, возведенное в степень p

double power(double n, int p)

{

double result = 1.0; // начать с 1

for(int j = 0; j < p; j++) // умножить на n

result *= n; // p раз

return result;

}

    1. Верное решение:

// ex5_3.cpp

// функция устанавливает наименьшее из двух чисел в ноль

#include <iostream>

using namespace std;

int main()

{

void zeroSmaller(int&, int&);

int a = 4, b = 7, c = 11, d = 9;

zeroSmaller(a, b);

zeroSmaller(c, d);

cout << "\na =" << a << " b =" << b

<< " c =" << c << " d =" << d;

return 0;

}

//--------------------------------------------------

// zeroSmaller()

// устанавливает наименьшее из двух чисел в ноль

void zeroSmaller(int&first, int&second)

{

if(first < second)

first = 0;

else

second = 0;

}

4. Верное решение: // ex5_4.cpp

// функция возвращает наибольшее из двух значений расстояний

#include <iostream>

using namespace std;

///////////////////////////////////////////////////////////

struct Distance // Английские расстояния

{

int feet;

float inches;

};

///////////////////////////////////////////////////////////

Distance bigengl(Distance, Distance);// объявления

void engldisp(Distance);

int main()

{

Distance d1, d2, d3; // определение трех расстояний

// получить расстояние d1 от пользователя

cout << "\nВведите число футов:";cin >> d1.feet;

cout << "Введите число дюймов:";cin >> d1.inches;

// получить расстояние d2 от пользователя

cout << "\nВведите число футов:";cin >> d2.feet;

cout << "Введите число дюймов:";cin >> d2.inches;

d3 = bigengl(d1, d2); // d3 больше, чем d1 и d2

// вывести все значения

cout << "\nd1 ="; engldisp(d1);

cout << "\nd2 ="; engldisp(d2);

cout << "\nнаибольшее - "; engldisp(d3);cout << endl;

return 0;

}

//---------------------------------------------------------

// bigengl()

// сравнивает две структуры типа Distance, возвращает

// наибольшую

Distance bigengl(Distance dd1, Distance dd2)

{

if(dd1.feet > dd2.feet) // если число футов различается,

return dd1; // вернуть то, которое больше

if(dd1.feet < dd2.feet)

return dd2;

if(dd1.inches > dd2.inches)// если число дюймов

// различается,