- •3.8. Упражнения 49
- •Введение
- •1. Базовые элементы
- •1.1. Комментарии
- •1.2. Функция «main»
- •1.3. Идентификаторы и пространства имен
- •1.4. Типы
- •1.5. Переменные
- •1.7. Константы
- •1.6. Преобразование типов
- •1.8. Потоковый ввод – вывод
- •1.9. Операции
- •1.9.1. Арифметические операции
- •1.9.2. Поразрядные операции
- •1.9.3. Условный оператор
- •1.9.4. Операции отношения
- •1.9.5. Логические операции
- •1.10. Стандартные математические функции
- •1.11. Упражнения
- •2. Базовые конструкции
- •2.1 Ветвление
- •2.1.1. Конструкция «if – else»
- •2.1.2. Конструкция «switch»
- •2.2. Циклы
- •2.2.1. Цикл «for»
- •2.2.2. Цикл «while»
- •2.2.3. Цикл «do – while»
- •2.2.4. Операторы циклов
- •2.2.5. Вложенность
- •2.3. Упражнения
- •2.3.1. Ветвления
- •2.3.2. Циклы
- •2.3.3. Вложенность
- •3. Указатели. Массивы. Структуры
- •3.1. Указатели
- •3.2. Массивы
- •3.2.1. Статические массивы
- •3.2.2. Динамические массивы
- •3.4. Ссылки
- •3.5. Структуры
- •3.6. Объединение
- •3.7. Переопределение типов
- •3.8. Упражнения
- •3.8.1. Статические и динамические массивы
- •3.8.2. Многомерные массивы
- •3.8.3. Строки
- •4. Функции
- •4.1. Простые функции
- •4.2. Рекурсия
- •4.3. Указатели и ссылки
- •4.3.1. Передаваемые параметры
- •4.3.2. Возвращаемые значения
- •4.3.3. Ссылки и структуры в функциях
- •4.3.4. Указатели и массивы в функциях
- •4.3.5. Указатели и ссылки на функцию
- •4.4. Шаблоны функций
- •4.5. Упражнения
- •4.5.1. Простые функции
- •4.5.2. Параметры – ссылки и параметры — указатели
- •5. Стандартные классы
- •5.1. Класс «pair»
- •5.2. Класс «complex»
- •5.3. Класс «string»
- •5.4. Контейнеры. Алгоритмы. Итераторы
- •5.5. Класс «vector»
- •5.6. Упражнения
- •5.6.1. Класс «string»
- •5.6.2. Класс «vector»
- •6. Файловый ввод – вывод
- •6.1. Операции
- •6.2. Методы
- •6.3. Флаги
- •6.4. Двоичный режим
- •6.5. Упражнения
- •Ллитература
3.6. Объединение
Унаследованным из языка C является и тип «union» – объединение. Объединение может хранить данные любого из объявленных в ней типов, при этом в нем в каждый момент времени хранится значение только одного типа.
Листинг 3.12. Объединения.
#include <iostream>
using namespace std;
union varvalue
{
int ival;
float fval;
double dval;
} varval;
int main (void)
{
cin >> varval.ival;
//теперь в объединении – целочисленное значение;
cout << varval.ival << " " << varval.fval << " " << varval.dval << endl;
cin >> varval.fval;
//теперь в объединении – дробное значение;
cout << varval.ival << " " << varval.fval << " " << varval.dval << endl;
cin >> varval.dval;
//теперь в объединении дробное значение другого типа;
cout << varval.ival << " " << varval.fval << " " << varval.dval << endl;
return 0;
}
3.7. Переопределение типов
Средство «typedef» предоставляет возможность давать типам данных новые имена. Данное средство применимо не только к стандартным встроенным типам, но и к более сложным объявлениям.
Листинг 3.13. Переопределение типов.
#include <iostream>
using namespace std;
//создание псевдонима для указателя на символ;
typedef char* String;
//структура – запсь из двух строк;
struct Person
{
String name;
String surname;
};
//создание псевдонима для целогочисленногг значения;
typedef int Number;
//структура – запись из двух строк и номер;
struct Record
{
Number number;
Person person;
};
int main (void)
{
Record rec;
rec.person.name = "Ivan";
rec.person.surname = "Ivanov";
rec.number = 1;
cout << rec.number << ". " << rec.person.name
<< " " << rec.person.surname << endl;
return 0;
}
3.8. Упражнения
Выполнить задания из разделов «3.8.1. Статические и динамические массивы» и «3.8.2. Многомерные массивы» в двух вариантах.
Для произвольного массива, элементы которого имеют любой из встроенных числовых типов, с заданным числом элементов (статический).
Для массива, элементы которого имеют любой из встроенных числовых типов, размерность которого и значения элементов задаваемых пользователем с клавиатуры (динамический).
3.8.1. Статические и динамические массивы
Найти и вывести на экран наименьший элемент.
Найти и вывести на экран разность модулей максимального и минимального элементов.
Найти и вывести на экран, все пары соседних элементов, где первый меньше второго.
Найти и вывести на экран все положительные элементы.
Найти и вывести на экран сумму всех положительных элементов.
Найти и заменить все максимальные элементы их отрицательными значениями.
Найти и вывести на экран индексы всех нечетных элементов.
Найти и вывести на экран все элементы, индексы которых кратны пяти.
Найти и вывести на экран два элемента, стоящие рядом и отличающиеся на единицу.
Найти и вывести на экран наибольший элемент.
Найти и вывести на экран индекс элемента, модуль которого является максимальным.
Найти и вывести на экран все элементы, кратные пяти.
Найти и вывести на экран все элементы, индексы которых кратны трем.
Найти и вывести на экран индексы всех четных элементов.
Найти и вывести на экран, все пары соседних элементов, где первый больше второго.
Найти и поменять местами максимальный и минимальный элементы.
Найти и вывести на экран все отрицательные элементы.
Найти и вывести на экран количество отрицательных элементов.
Найти и заменить все минимальные элементы их отрицательными значениями.
Сдвинуть массив циклически на два элемента влево.
