
- •Приложение г Лекция 1. Элементы Языка си Используемые символы
- •Константы
- •Идентификаторы
- •Ключевые слова
- •Использование комментариев в тексте программы
- •Лекция 2. Типы данных и их объявление
- •Категории типов данных
- •Целый тип данных
- •Данные вещественного типа
- •Указатели
- •Операции разадресации и адреса
- •Переменные перечислимого типа
- •Лекция 3. Выражения и присваивания Операнды и операции
- •Преобразования при вычислении выражений
- •Операции отрицания и дополнения
- •Операция sizeof
- •Мультипликативные операции
- •Аддитивные операции
- •Операции сдвига
- •Поразрядные операции
- •Логические операции
- •Операция последовательного вычисления
- •Условная (тернарная) операция
- •Операции увеличения и уменьшения
- •Простое присваивание
- •Составное присваивание
- •Приоритеты операций и порядок вычислений
- •Побочные эффекты
- •Преобразование типов
- •Лекция 3. Операторы
- •Оператор выражение
- •Пустой оператор
- •Составной оператор
- •Оператор if
- •Оператор switch
- •Оператор break
- •Оператор while
- •Оператор do while
- •Оператор for
- •Сумма чисел от 1 до 100
- •Микрожизнь
- •Оператор continue
- •Оператор return
- •Оператор goto
- •Лекция 4. Массивы
- •Поиск минимума, сортировка
- •Ввод-вывод, обнуление
- •Двумерный массив
- •Лекция 5. Структуры
- •Объединения (смеси)
- •Поля битов
- •Переменные с изменяемой структурой
- •Определение объектов и типов
- •Лекция 6. Инициализация данных
- •Определение и вызов функций
- •Ссылки как псевдонимы переменных
- •Ссылки в качестве параметров функции
- •Ссылка в качестве возвращаемого значения
- •Передача массивов
- •Прототип
- •Указатели на функцию
- •Рекурсия
- •Предварительная инициализация параметров функции
- •Функции с переменным числом параметров
- •Передача параметров функции main
- •Исходные файлы и объявление переменных
- •Объявления функций
- •Время жизни и область видимости программных объектов
- •Лекция 7. Инициализация глобальных и локальных переменных
- •Методы доступа к элементам массивов
- •Указатели на многомерные массивы
- •Операции с указателями
- •Массивы указателей
- •Лекция 8. Динамические объекты
- •1. Выделение памяти в соответствие с типом указателя
- •2. Выделение памяти под нетипизированный указатель
- •Лекция 9. Динамическое создание и уничтожение массивов
- •Директивы Препроцессора
- •Директива #include
- •Директива #define
- •Директива #undef
- •Лекция 10. Условные директивы препроцессора
- •Линейный односвязный список
- •Лекция 11. Объектно-ориентированный подход к программированию
- •Ссылки на Себя
- •Инициализация
- •Копирующий конструктор
- •Очистка
- •Законченный Класс
- •Доступ к членам
- •Статические Члены
- •Лекция 12. Наследование
- •Перегрузка Операций
- •Операции Преобразования
- •Стандартный ввод/вывод
- •Форматируемый вывод
- •Манипуляторы
- •Ввод-вывод двоичных данных
- •Ввод/вывод с диска
- •Ввод/вывод для типов данных, определенных пользователем
- •Шаблоны функций
- •Шаблоны классов
- •Лекция 14. Библиотека stl
- •Итераторы
- •Алгоритмы
- •Контейнеры
- •Функциональные объекты
- •Пример. Работа с контейнером vector
- •Пример 2. Алгоритмы и функциональные объекты
- •Лекция 15. Обработка исключительных ситуаций
- •Лекция 16. Rtti и приведение типов
- •Операция typeid
Форматируемый вывод
Простой ввод/вывод в С++ эффективен потому, что выполняет только минимальные преобразования в соответствии с используемыми типами данных. Для целых чисел преобразование такое же, как определенное по умолчанию преобразование для printf. Предложения
int i=5; cout << i;
и
int i=5; printf("%d", i);
дают одинаковый результат.
Форматирование позволяет определить для каждого активного потока систему исчисления для преобразования (десятичная, восьмеричная и шестнадцатеричная), заполнение слева или справа, формат с плавающей запятой (научный или фиксированный) и будут ли пропускаться при вводе пробелы. Другие параметры, которые можно изменять, включают ширину поля (для вывода) и символ, используемый для заполнения. Эти флаги можно проверять, устанавливать, очищать с помощью различных функций элементов.
int i = 87;
cout.width(7); // устанавливает ширину поля, равной 7
cout.fill('*'); // устанавливает символ * для заполнения
cout << i << '\n'; // выводит на экран *****87
//после << ширина очищается и становится равной 0,
cout << i << '\n'; // выводит на экран 87
double d=3.14159;
cout.precision(4);
cout.width(8);
cout << d << '\n'; // выводит на экран ***3.142
Установление width, равной 0 (по умолчанию) означает, что дисплей будет использовать столько позиций экрана, сколько необходимо. Если заданная ширина недостаточна для правильного представления, то считается, что ширина равна 0 (т.е. усечения нет). По умолчанию заполнение обеспечивает выравнивание справа (заполнение слева) для всех типов.
Setf и unsetf — это две общие функции для установки и очистки флагов формата:
cout.setf(ios::left);
Это устанавливает выравнивание слева. Unsetf работает таким же образом, но очищает выбранные биты.
Манипуляторы
Наиболее изящный способ установки флагов формата (и выполнения других функций для потока) использует специальный механизм, известный как манипуляторы. Подобно операторам << и >> манипуляторы могут включаться в цепочку операторов потока:
cout << setw(7) << dec << i << setw(6) << oct << j;
cout << setw(7) << setprecision(4) << endl; //вывод d из пред. примера
Без манипуляторов понадобилось бы шесть отдельных предложений.
Параметризованный манипулятор setw принимает один аргумент типа int, чтобы установить ширину поля.
Непараметризованные манипуляторы, например, dec, oct и hex устанавливают систему исчисления для преобразования: десятичную, восьмеричную и шестнадцатеричную. В вышеприведенном примере int i будет выводится на экран в десятичном виде в поле шириной 7; int j будет выводится на экран в восьмеричном виде в поле шириной 6.
К другим простым параметризованным манипуляторам относится setbase,setfill,setprecision,setiosflagsиresetiosflags. Чтобы использовать любые из параметризованных манипуляторов, программа должна включить оба заголовочных файла: iomanip.h и iostream.h. Непараметризованные манипуляторы не требуют iomanip.h.
Полезные непараметризованные манипуляторы включают:
ws (извлечение пробелов): istream >> ws; будет устранять любые пробелы в istream.
endl (конец строки и очистка буфера): ostream << endl; будет вставлять новую строку в ostream, а затем очищает буфер ostream.
ends (конец строки с нулем): ostream << ends; будет добавлять 0 в ostream.
flush (очистка буфера): ostream << flush.