- •Общие указания
- •Установка программного обеспечения
- •Основные библиотеки
- •Лабораторная работа №1
- •Основные теоретические сведения Создание проекта
- •Написание программного кода
- •Компиляция и устранение ошибок
- •Запуск программы на выполнение и ее останов
- •Ввод/вывод информации на экран
- •Генератор случайных чисел
- •Задание к лабораторной работе
- •Контрольные вопросы
- •Лабораторная работа №2
- •Основные теоретические сведения
- •Переменные и оператор присваивания
- •Арифметические операторы
- •Математические функции
- •Оператор if
- •Логические операторы
- •Оператор switch
- •Цикл while
- •Цикл for
- •Инструкция return
- •Решение типовых задач
- •Задание к лабораторной работе Варианты заданий к задаче 1
- •Варианты заданий к задаче 2
- •Варианты заданий к задаче 3
- •Контрольные вопросы
- •Лабораторная работа №3
- •Основные теоретические сведения
- •Одномерные массивы
- •Двумерные массивы
- •Алгоритмы
- •Решение типовых задач
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа №4
- •Основные теоретические сведения. Функции
- •Самодиагностика
- •Лабораторная работа №4
- •Основные теоретические сведения.
- •Транспонирование матриц
- •Сложение матриц
- •Умножение матриц
- •Задание на лабораторную работу №4
- •Варианты заданий
- •Контрольные вопросы
- •Лабораторная работа №5
- •Основные теоретические сведения.
- •Работа с файлами
- •Решение типовых задач
- •Задание на лабораторную работу №5
- •Варианты заданий
- •Производная функции на интервале
- •Решение типовых задач
- •Задание на лабораторную работу №6
- •Вычисление интегральной функции
- •Решение типовых задач
- •Задание на лабораторную работу №7
- •Контрольные вопросы
- •Лабораторная работа №8
- •Основные теоретические сведения.
- •Решение типовых задач
- •Задание на лабораторную работу №8
- •Варианты заданий
- •Контрольные вопросы
- •Литература
Ввод/вывод информации на экран
Система ввода/вывода Си++ действует через так называемые потоки (streams). Поток ввода/вывода – это логическое устройство, которое выдает и принимает пользовательскую информацию. Образно говоря потоки ввода/вывода – это органы чувств программы. Как у человека есть уши, чтобы слышать и голосовые связки, чтобы говорить, так и у программы есть поток ввода для получения информации извне и поток вывода для записи информации во внешнее устройство, например, на экран.
Поток связан с физическим устройством с помощью системы ввода/вывода Си++. Поскольку все потоки ввода/вывода действуют одинаково, то, несмотря на то, что программисту приходится работать с совершенно разными по характеристикам устройствами, система ввода/вывода предоставляет для этого единый удобный интерфейс. Например, функция, которая используется для записи информации на экран монитора, вполне подойдет как для записи в файл, так и для вывода на принтер.
Если программа на Си++ начинает выполняться, открываются четыре потока:
Поток |
Значение |
Устройство ввода/вывода по умолчанию |
cin |
Стандартный ввод |
Клавиатура |
cout |
Стандартный вывод |
Экран |
cerr |
Стандартная ошибка |
Экран |
clog |
Буферизуемая версия cerr |
Экран |
В дальнейшем нас пока будут интересовать потоки cin, cout.
Для использования стандартных функций ввода/вывода вам необходимо подключить к вашей программе библиотеку iostream. Собственно ввод/вывод осуществляется в Си++ двумя операторами: << и >>.
С помощью оператора вывода << можно вывести данные любого базового типа Си++. Вот некоторые примеры.
cout << “Эта строка выводится на экран.\n”
cout << 100.99;
Для считывания значения с клавиатуры, используйте оператор ввода >>. Например, в этом фрагменте целая величина вводится в num.
int num.
cin >> num;
Рассмотрим несколько вариантов использования приведенных операторов ввода/вывода.
Листинг 2 |
/*Программа вывода строки, двух целых
чисел и одного числа с плавающей запятой*/
#include <iostream.h> // Подключение стандартной
// библиотеки ввода/вывода
void main( void )
{
int i, j; // Объявление трех переменных
double d; // i, j, d
i = 10; //
j = 20; // Их инициализация
d = 99.101; //
// Вывод данных на экран
cout << “Вот несколько чисел: ”;
cout << i;
cout << ‘ ‘;
cout << j;
cout << ‘ ‘;
cout << d
}
|
Ниже представлен результат работы программы.
Вот несколько чисел: 10 20 99.101
В одном выражении ввода/вывода можно выводить более одной величины. Например, программу представленную в листинге 2 можно модифицировать следующим образом:
Листинг 3 |
/*Модифицированная программа вывода строки,
двух целых чисел и одного числа с плавающей запятой*/
#include <iostream.h> // Подключение стандартной
// библиотеки ввода/вывода
void main( void )
{
int i, j; // Объявление трех переменных
double d; // i, j, d
i = 10; //
j = 20; // Их инициализация
d = 99.101; //
// Вывод данных на экран
cout << “Вот несколько чисел: ” << i << ‘ ‘ << j << ‘ ‘ << d;
}
|
Результат ее работы будет точно таким же, как и для предыдущей программы.
В листинге 4 представлен пример программы, позволяющей пользователю вводить число.
Листинг 4 |
/*Программа, позволяющая осуществить ввод одного числа*/
#include <iostream.h> // Подключение стандартной
// библиотеки ввода/вывода
void main( void )
{
int i; // Объявление переменной
cout << “Введите число: ”;
cin >> i;
cout << “Вот ваше число: ” << i << “\n”;
}
|
В ряде случаев у вас может возникать задача вывода данных в заданном формате. Для этого можно использовать функцию printf(). Так как printf() не является встроенным элементом языка Си++, то до запуска программы к ней необходимо с помощью оператора #include подключить файл-заголовок, содержащий описание функции printf(). В данном случае это файл stdio.h.
Мы уже использовали функцию printf() ранее (см. листинг 1) и теперь рассмотрим ее более подробно.
Прототип:
int printf( const char *format [, argument]... );
Описание:
Осуществляет форматированный вывод.
Параметры:
format – форматная строка;
argument – последовательность аргументов.
Возвращаемое значение:
Каждый вызов этой функции возвращает количество напечатанных символов, либо отрицательное значение в случае возникновения ошибки.
Объявлен в файле-заголовке:
stdio.h
Пример использования:
printf( “One string” );
Вывод:
One string
printf( “%s %s”, “One”, “string” );
Вывод:
One string
printf( “%s\n%s”, “Two”, “string” );
Вывод:
Two
string
printf( “[%d : %d]”, 1, 0 );
Вывод:
[1 : 0]
Форматная строка содержит два вида объектов: обычные символы, копируемые на экран, и спецификации преобразования, которые вызывают преобразование и печать остальных аргументов в том порядке, как они перечислены. Каждая спецификация преобразования начинается с % и заканчивается символом-спецификатором преобразования.
В общем случае спецификация преобразования имеет следующий вид:
%[флаги] [ширина] [.точность] [{h | l | I64 | L}]тип
Подробное описание всех параметров спецификации вы можете найти в приложении В 1.2 конспекта лекций. Мы же будем использовать упрощенный вариант спецификации:
%тип
Символы-спецификаторы и разъяснение их смысла приведены в таблице 1. Если за % нет правильного символа-спецификатора, результат не определен.
Таблица 1. Преобразования printf
Символ |
Тип аргумента; вид печати |
d, i |
int; знаковая десятичная запись |
o |
unsigned int; беззнаковая восьмеричная запись (без 0 слева) |
x, X |
unsigned int; беззнаковая шестнадцатеричная запись (без 0x или 0X слева), в качестве цифр от 10 до 15 используются abcdef для x и ABCDEF для X |
u |
unsigned int; беззнаковое десятичное целое |
c |
int; единичный символ после преобразования в unsigned char |
s |
char *; символы строки печатаются, пока не встретится '\0' или не исчерпается количество символов, указанное точностью |
f |
double; десятичная запись вида [-]mmm.ddd, где количество d специфицируется точностью. По умолчанию точность равна 6; нулевая точность подавляет печать десятичной точки |
e, E |
double; десятичная запись вида [-]m.dddddde±xx или запись вида [-]m.ddddddE±xx, где количество d специфицируется точностью. По умолчанию точность равна 6; нулевая точность подавляет печать десятичной точки |
g, G |
double; используется %e и %E, если порядок меньше -4 или больше или равен точности; в противном случае используется %f. Завершающие нули и точка в конце не печатаются |
p |
void *; печатает в виде указателя (представление зависит от реализации |
n |
int *; число символов, напечатанных к данному моменту данным вызовом printf, записывается в аргумент. Никакие другие аргументы не преобразуются |
% |
никакие аргументы не преобразуются; печатается % |
Чаще всего на печать мы выводим числа и строки. Поэтому из представленного выше списка для вас являются важными символы-спецификаторы d, g и s.
Символ |
То, что выводится на экран |
Пример |
d |
целое число |
printf( “%d”, 5); |
g |
вещественное число (с плавающей запятой) |
printf( “%g”, 5.00); |
s |
строка |
printf( “%s”, “fine!”); |
Пример
Рассмотрим следующий вызов функции printf():
printf( “I am %s\n %d : %d\n”, “fine!”, 1, 0);
В результате выполнения данной строки на экране выведется:
I am fine!
1 : 0
Форматная строка начинается со слов «I am ». Так как, перед этими словами нет «%», они выводятся на экран без каких-либо преобразований. Далее следуют символы «%s». Они означают, что следует вывести в виде последовательности символов переданный аргумент «fine!». Следует отметить, что символ «\n» следующий далее в форматной строке не относятся к символам-спецификаторам форматной строки. Это специальный символ, используемый при выводе текстовой информации. В таблице 2 приведено описание некоторых специальных символов.
Таблица 2. Некоторые специальные символы
Символ |
Назначение |
\n |
Новая строка |
\t |
Табуляция |
\’ |
Одинарная кавычка |
\” |
Двойная кавычка |
\\ |
Обратный слеш |
\? |
Вопросительный знак |
Таким образом, символ «\n» говорит о необходимости начать новую строку. Далее в форматной строке заданы символы «%d : %d». Они говорят о том, что следующие аргументы (в данном случае 1 и 0) являются целыми числами и их следует вывести на экран, разделив последовательностью символов « : ». Заканчивается форматная строка еще одним символом «\n».