- •Глава 2 36
- •1 Задание 1 62
- •Лабораторная работа №1
- •Краткие теоретические сведения
- •1.1Создание консольного приложения
- •1.2Отладка программы
- •1.2.1Установка точек останова (Add breakpoint)
- •2.2Идентификаторы
- •2.3Ключевые слова
- •2.4Знаки операций
- •2.5Константы
- •2.6Комментарии
- •2.7.1Понятие типа данных
- •2.7.2Основные типы данных
- •2.7.3Целый тип (int).
- •2.7.4Символьный тип (char).
- •2.7.5Логический тип (bool).
- •2.7.6Вещественный тип (float, double и long double).
- •2.8Переменные
- •2.9Функции и объекты ввода/вывода
- •2.9.1Основные функции ввода/вывода в стиле с:
- •2.10Операции
- •2.10.2Операция определения размера sizeof
- •2.10.4Деление (/) и остаток от деления (%).
- •2.10.8Логические операции (&& и ||).
- •2.10.10 Условная операция (?:).
- •2.11Выражения
- •2.11.1Преобразование типов в выражении.
- •Задание к лабораторной работе №1
- •Контрольные вопросы к лабораторной работе №1
- •1.1Оператор «выражение»
- •1.2Операторы ветвления
- •1.2.1Условный оператор if... Else
- •1.2.2Об условиях в операторе if
- •1.2.3Оператор выбора switch
- •1.3Операторы передачи управления
- •1.3.1Оператор goto
- •1.3.2Оператор break
- •2 Тестирование программ
- •Домашнее Задание
- •Задание к лабораторной работе №2
- •1Задание 1
- •2Задание 2
- •Содержание отчета
- •2Операторы цикла
- •2.1Цикл с предусловием (while)
- •2.2Цикл с постусловием (do … while)
- •2.3Цикл с параметром for
- •3Дополнительные операторы передачи управления
- •3.1Оператор break
- •3.2Оператор continue
- •4Вложенные циклы
- •Домашнее Задание
- •Задание к лабораторной работе №3
- •1Задание 1
- •2Задание 2
- •Содержание отчета
- •Контрольные вопросы к лабораторной работе №3
- •4Программа пузырьковой сортировки
- •Домашнее Задание
- •Задание к лабораторной работе №4
- •Содержание отчета
- •Контрольные вопросы к лабораторной работе №4
- •0 Строка
- •1 Строка
- •5 Строка
- •2Ввод и вывод многомерных массивов
- •Домашнее Задание
- •Задание к лабораторной работе №5
- •4Ссылки
- •5Динамическое распределение памяти
- •5.1Использование стандартных функций malloc и free
- •5.2Использование операторов new и delete
- •Домашнее Задание
- •Задание к лабораторной работе № 6
- •Содержание отчета
- •Контрольные вопросы к лабораторной работе №6
- •Лабораторная работа №7 отладка программы краткие теоретические сведения
- •6Отладочные пункты меню
- •7Элементы отладки
- •7.1Контрольные точки
- •7.1.1Контрольные точки в исходном коде
- •7.1.2Адресные контрольные точки
- •7.1.3Контрольные точки данных
- •7.2Команда Run to Cursor
- •7.3Команда Pause
- •8Наблюдение за переменными
- •8.1Быстрый просмотр данных
- •9Инспектор отладки
- •9.1Инспекция локальных переменных
- •10Другие инструменты отладки
- •10.1Диалог Evaluate/Modify
- •10.2Окно cpu
- •10.3Стек вызовов
- •10.4Команда Go to Address
- •10.5Команда Program Reset
- •Задание на лабораторную работу №7
- •Контрольные вопросы к лабораторной работе №7
- •Приложение I
- •Приложение II Блоки схем алгоритмов согласно гост 19.002 – 80 и 19.003 – 80
- •Приложение III Оформление алгоритма программы в виде блок-схемы
- •Приложение IV Базовая программа для выполнения лабораторных работ
- •Приложение V
- •Приложение VI
- •Список используемых источников
2.9Функции и объекты ввода/вывода
В языке C++ нет встроенных средств ввода/вывода – он осуществляется с помощью функций, типов и объектов, содержащихся в стандартных библиотеках. Используется два способа: функции, унаследованные из языка С, и объекты C++. Подчеркивая важность функций и объектов ввода/вывода их иногда называют операторами, хотя, по сути, это не так.
2.9.1Основные функции ввода/вывода в стиле с:
scanf (const char* format, [адрес переменной] , [адрес переменной]... ) // ввод
printf(const char* format, [имя переменной] , [имя переменной]... ) // вывод
Они выполняют форматированный ввод и вывод произвольного количества величин в соответствии со строкой формата format.
printf () является функцией стандартной библиотеки с переменным числом аргументов. Она всегда имеет, по крайней мере, один аргумент – строку формата, чаще всего строковый литерал. Строка может содержать спецификаторы преобразования. Функция сканирует строку и передает ее символы на стандартный вывод программы, по умолчанию консоль, пока не встретит спецификатор преобразования. В этом случае printf () ищет дополнительный аргумент (используя имя переменной из списка), который форматируется и выводится в соответствии со спецификацией ( спецификация в строке вывода заменяется на значение переменной). Таким образом, вызов printf () должен содержать столько дополнительных аргументов, сколько спецификаторов преобразования имеется в строке формата.
Спецификатор преобразования
Синтаксис спецификатора преобразования имеет такой вид:
%[флаги] [поле][.точность][размер]символ типа
Как видите, обязательными элементами спецификатора являются только начальный знак процента (по знаку процента легко контролировать количество переменных) и символ, задающий тип преобразования. Таблица I.5 Приложения I перечисляет возможные варианты различных элементов спецификации.
Флаги задают “стиль” представления чисел на выводе, поле и точность определяют характеристики поля, отведенного под вывод аргумента, размер уточняет тип аргумента, символ типа задает собственно тип преобразования.
В строке формата можно использовать escape-последовательности. В приведенном ниже примере используется последовательность \n, которая обеспечивает при выводе перевод строки.
Следующий пример показывает возможности форматирования функции printf (). Если суть оператора и спецификации не понятна, выполните следующую далее программу в C++Builder.
Примечание: следует напомнить, что на рис. 1.2 была базовая программа. Здесь и далее будет приведен текст, который нужно поместить между линиями из звездочек в базовую программу.
/*
**Демонстрация форматирования вывода на консоль
**функцией printf().
*/
double p = 27182.81828;
int j = 255;
/* Вывести 4 цифры; вывести обязательный знак числа */
printf(RUS(" Позиции: 1234567891234123456789\n"));
printf(RUS("Тест целого формата: %13.4d %+8d\n"), j, j);
/* Вывести по левому краю со знаком;
заполнить нулями свободные позиции: */
printf(RUS(" Позиции: 1234567891234512345678\n"));
printf(RUS("Еще один тест целых форматов: %-+13d %08d\n"), j, j);
/* Самостоятельно определить формат вывода*/
printf(RUS(" Позиции: 1234567891234512345678\n"));
printf(RUS("Тест o и h форматов: %#13o %#8.7x\n"), j, j);
printf(RUS(" Позиции: 1234567891234512345678\n"));
printf(RUS("Тест формата e и f: %13.7e %8.2f\n"), p, p);
Обязательно, выполните эту программу в C++Builder!
В языке С для ввода имеется “зеркальный двойник” printf() – функция scanf (). Функция читает данные со стандартного ввода, по умолчанию – клавиатуры. Она так же, как и printf () , принимает строку формата с несколькими спецификаторами преобразования и несколько дополнительных параметров, которые должны быть адресами переменных, куда будут записаны введенные значения.
Примером вызова scanf () может служить следующий фрагмент кода:
int age;
printf("Enter your age: "); // Запросить ввод возраста пользователя.
scanf ("%d", &age); // Прочитать введенное число.
Знак & означает операцию получения адреса.
Для работы с этими функциями в программу необходимо включить заголовочный файл stdio.h.
2.9.2Основные объекты ввода/вывода в стиле С++:
cin>>[имя переменной] >> [имя переменной]... //ввод
cout<<[имя переменной] << [имя переменной]... //вывод
Программа с использованием для ввода/вывода библиотеки классов C++ выглядит так:
int i;
cout << RUS("Введите целое число\n");
cin >> i;
cout<<RUS("Вы ввели число ")<<i;
cout<<RUS(", спасибо!");
Примечание. К сожелению, следует избегать двух функций RUS в одной строке с объектом cout. Это приводит к неправильному выводу. Поэтому фраза “, спасибо” выведена отдельным объектом cout.
Заголовочный файл <iostream.h> содержит описание набора классов для управления вводом/выводом. В нем определены стандартные объекты-потоки cin для ввода с клавиатуры и cout для вывода на экран, а также операции помещения в поток << и чтения из потока >>.
Для вывода информации в стандартный поток используется формат
cout << выражение ;
где выражение может быть представлено переменной или некоторым смысловым выражением:
cout << Z ;
cout <<RUS("Сумма =");
cout << 7+3;
Последовательно можно выводить несколько выражений:
cout << выражение 1 <<выражение 2;
или
cout << выражение 1
<< выражение 2
<< выражение 3
<< выражение 4;
При выводе можно использовать escape-последовательности:
cout << RUS("Введите целое число\n");
cout << z <<" \n";
Для ввода данных с клавиатуры используется формат записи:
cin >> переменная ;
или
cin >> переменная 1>> переменная2;
При этом тип вводимого значения и тип переменной в программе, которой передается значение, должны совпадать.
Можно вводить несколько значений для разных переменных. Переменные отделяются пробелом или нажатием клавиши Enter. Если введенных значений больше, чем ожидается в программе, часть вводимых данных останется во входном буфере.
В случае если вводится строка символов, ввод продолжается до первого символа пробела или нажатия клавиши Enter. Если при следующем коде
char String[80];
cin>> String;
будет введена строка "Да здравствует С++", то переменная String примет значение "Да". Остальная часть строки останется в буфере до тех пор, пока в программе не встретится следующий оператор ввода.
Для работы с объектами cin и cout в программу необходимо включить заголовочный файл iostream.h.
В дальнейшем изложении будут использоваться оба способа ввода/вывода, но в одной программе смешивать их не рекомендуется.