- •Р. Лафоре
- •Глава 1. Общие сведения 32
- •Глава 3. Циклы и ветвления 92
- •Глава 4. Структуры 142
- •Глава 5. Функции 168
- •Глава 6. Объекты и классы 217
- •Глава 7. Массивы и строки 261
- •Глава 8. Перегрузка операций 312
- •Глава 9. Наследование 361
- •Глава 10. Указатели 411
- •Глава 11. Виртуальные функции 476
- •Глава 12. Потоки и файлы 536
- •Глава 13. Многофайловые программы 596
- •Глава 14. Шаблоны и исключения 640
- •Глава 15. Стандартная библиотека шаблонов (stl) 681
- •Глава 16. Разработка объектно-ориентированного по 752
- •Глава 1 «Общие сведения» включает список тем, касающихся uml, с указа- нием их расположения в книге.
- •Глава 1
- •Глава 2
- •Глава 3
- •If внутри циклов
- •If и else во вложенных ветвлениях
- •Глава 4
- •Глава 5 Функции
- •Глава 6
- •Глава 7
- •123456. Россия
- •123456. Россия
- •Глава 8
- •Глава 9
- •Глава 10 Указатели
- •Main() передает адрес переменной var в ptrd в centimize()
- •Centimize() использует этот адрес для доступа к var
- •Глава 11
- •Глава 12
- •Тип:менеджер Фамилия: Александров Номер:1111
- •Тип:Ученый Фамилия: Лебедев Номер:2222
- •Тип:рабочий Фамилия:Шевелев Номер:3333
- •Глава 13
- •Глава 14
- •Много объектов разных классов в памяти Рис. 14.2. Шаблон класса
- •Алгоритмы используют итераторы для работы с объектами контейнеров. Рис. 15.1. Контейнеры, алгоритмы и итераторы
- •Глава 16
- •Глава 1
- •Глава 2
- •Глава 3
- •Глава 4
- •Глава 5
- •Глава 6
- •Глава 7
- •Глава 8
- •Глава 9
- •Глава 10 Ответы на вопросы
- •Глава 11
- •Глава 12 Ответы на вопросы
- •Глава 13 Ответы на вопросы
- •Глава 14 Ответы на вопросы
- •Глава 15 Ответы на вопросы
- •Глава 16
{
}
//
конструктор
с
тремя
аргументами
time(int
h, int
m, int
s):hrs(h), mins(m), secs(s)
{
}
void
display()const
//
формат
11:59:59
{
cout
<< hrs << ":"
<< mins << ":"
<< secs; }
void
add_time(time t1, time t2)//
сложить
две
переменные
{
secs
= t1.secs +t2.secs; //
сложить
секунды
if(secs
> 59) //
если перебор,
{
secs -= 60; mins++; } //
прибавить минуту
mins
+= t1.mins +t2.mins; //
сложить минуты
if(mins
> 59) //
если слишком много минут,
{
mins -= 60; hrs++; } //
прибавить час
hrs
+= t1.hrs +t2.hrs; //
сложить часы
}
};
///////////////////////////////////////////////////////////
int
main()
{
const
time time1(5, 59, 59); //
создание и инициализация
const
time time2(4, 30, 30); //
двух переменных
time
time3; //
создать еще одну переменную
time3.add_time(time1,
time2);//
сложить
две
переменные
cout
<< "time3
=";
time3.display();//
вывести
результат
cout
<< endl;
return
0;
}
Ответы
на вопросы
г.
Того
же.
Правильный
ответ:
double
double
Array[100];
0.9.
Правильный
ответ:
cout
<< double
Array[j];
в.
Правильный
ответ:
int
coins[]
= {
1, 5, 10, 25, 50, 100 };
г.
Правильный
ответ:
twoD[2][4]
Истинно.
Правильный
ответ:
float
flarr[3][3]
= { {52, 27, 83},
{94,
73, 49},
{3,
6, 1}
};Глава 7
Адрес
в памяти.
а.
г.
Массив
из 1000 элементов структуры или класса
employee.
Правильный
ответ:
emplist[16].salary
г.
Правильный
ответ:
bird
manybirds[50];
Ложно.
Правильный
ответ:
manybirds[26].cheep();
массив,
char.
Правильный
ответ:
char
city[21](Нужен
еще один байт для пустого символа.)
Правильный
ответ:
char
dextrose[]
= "6H1206-H20
";
Истинно.
г.
Правильный
ответ:
strcpy(blank,
name)
Правильный
ответ:
class
dog
{
private:
char
breed[80];
int
age;
};
Ложно.
б,
в.
Правильный
ответ:
int
n = s1.find("cat");
Правильный
ответ:
s1.insert(12,
"cat
");
Решения
упражнений
1.
Верное решение:
//
ex7_1.cpp
//
переворачивает
строку
#include
<iostream>
#include
<cstring>//
для
strlen()
using
namespace std;
int
main()
{
void
reversit(char[]);
//
прототип
const
int
MAX = 80; //
размер массива
char
str[MAX];
//
строка
cout
<< "\nВведите
строку:";
//
получить строку от
cin.get(str,
MAX);
//
пользователя
reversit(str);
//
перевернуть строку
cout
<< "Перевернутая
строка:";
cout
<< str
<< endl;
//
и вывести ее
return
0;
}
//---------------------------------------------------------
//
reversit()
//
функция, переворачивающая строку,
переданную в аргументе
void
reversit(char
s[])
{
int
len = strlen(s);
//
найти длину строки
//
поменять все символы из первой половины
for(int
j = 0; j < len / 2; j++)
{
char
temp
= s[j];
//
на символы
s[j]
= s[len
– j
- 1]; //
из второй половины
s[len
– j
- 1] = temp;
}
}
2.
Верное решение:
//
ex7_2.cpp
//
объект employee, использующий строковый
тип данных
#include
<iostream>
#include
<string>
using
namespace std;
///////////////////////////////////////////////////////////
class
employee
{
private:
string
name;
long
number;
public:
void
getdata() //
получить данные от пользователя
{
cout
<< "\nВведите
имя:";cin
>>
name;
cout
<< "Введите
номер:";cin
>>
number;
}
void
putdata() //
вывод
данных
{
cout
<< "\n
Имя:"
<< name;
cout
<< "\n
Номер:"
<< number;
}
};
///////////////////////////////////////////////////////////
int
main()
{
employee
emparr[100]; //
массив
типа
employee
int
n = 0; //
количество работников
char
ch;
//
ответ пользователя
do
{ //
получить данные от пользователя
cout
<< "\nВведите
данные о работнике с номером "
<< n
+ 1;
emparr[n++].getdata();
cout
<< "Продолжить
(y/n)?";cin
>>
ch;
}
while(ch
!= 'n');
for(int
j
= 0; j
< n;
j++)
//
вывести данные из массива
{
cout
<< "\nНомер
работника "
<< j
+ 1;
emparr[j].putdata();
}
cout
<< endl;
return
0;
}
3.
Верное решение:
//
ex7_3.cpp
//
считает среднее значение длин, введенных
пользователем
#include
<iostream>
using
namespace std;
///////////////////////////////////////////////////////////
class
Distance //
класс английских расстояний
{
private:
int
feet;
float
inches;
public:
Distance()
//
конструктор (без аргументов)
{
feet = 0; inches = 0; }
Distance(int
ft, float
in)//
конструктор
(2 аргумента)
{
feet = ft; inches = in; }
void
getdist() //
получить
расстояние
//
от пользователя
{
cout
<< "\nВведите
футы:";cin
>>
feet;
cout
<< "Введите
дюймы:";cin
>>
inches;
}
void
showdist() //
вывод
расстояния
{
cout
<< feet << "\'-"
<<
inches <<
'\"';
}
void
add_dist(Distance, Distance);//
объявления
void
div_dist(Distance, int);
};
//---------------------------------------------------------
//
сложение
расстояний
d2 и
d3
void
Distance::add_dist(Distance d2, Distance d3)
{
inches
= d2.inches +d3.inches;//
сложить
дюймы
feet
= 0; //
(для возможного переноса)
if(inches
>= 12.0) //
если сумма превышает 12.0,
{
//
уменьшить число дюймов
inches
-= 12.0; //
на 12.0 и
feet++;
//
увеличить число футов
}
//
на 1
feet
+= d2.feet +d3.feet; //
сложить
футы
}
//---------------------------------------------------------
//
деление объекта Distance на целое число
void
Distance::div_dist(Distance d2, int
divisor)
