Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Навроцкий, А. А. Основы алгоритмизации и программирования в среде VISUAL C++_Уч_мет_пос.pdf
Скачиваний:
72
Добавлен:
16.03.2016
Размер:
3.64 Mб
Скачать
11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Окончание табл. 1.1

1

 

 

 

 

 

2

 

 

 

 

 

 

3

 

 

 

 

 

Остаток от

 

 

fmod(x,y)

Функция возвращает действительное значение,

 

деления x на y

 

 

 

 

 

соответствующее остатку от деления x на y.

 

 

 

 

 

 

 

 

 

 

 

Например:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

s = fmod (3, 4) Результат s = 3

 

 

 

 

 

 

 

 

 

 

 

 

s = fmod (8, 3) Результат s = 2

 

 

 

 

 

 

 

 

 

 

 

 

s = fmod (6.4, 3.1) Результат s = 0.2

 

 

ln(x)

 

 

log(x)

 

Вычисление натурального логарифма x

 

 

lg10(x)

 

 

log10(x)

 

Вычисление десятичного логарифма x

 

 

xy

 

 

pow(x, y)

Возведение x в степень y

 

 

 

 

 

sin(x)

 

 

sin(x)

 

Вычисление sin(x)

 

 

 

 

Р

 

sh(x)

 

 

sinh(x)

 

Вычисление синуса гиперболического x

 

 

 

 

 

 

 

sqrt(x)

 

Вычисление квадратного корня x

 

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

И

 

 

tg(x)

 

 

tan(x)

 

Вычисление тангенса x

 

 

 

 

 

 

tgh(x)

 

 

tanh(x)

 

Вычисление тангенса гиперболического x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

У

 

 

 

 

 

 

 

1.9. Форматированный ввод/вывод данных

 

 

 

 

Функции форматированного ввода и

 

 

 

Г

 

 

 

 

 

 

 

 

данных расположены в биб-

 

лиотеке stdio.lib.

 

 

 

 

 

 

Б

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вывода

 

 

 

 

 

 

 

 

 

int scanf( const char * стро а форм тирования [, аргументы]) – чи-

 

тает форматированные данные,

 

с

лавиатруы, и записывает их в ме-

 

сто, указанное аргументом. Каждый каргумент является указателем на перемен-

 

ную такого же типа, что и соо в

с вующий форматирующий символ. В случае

 

 

 

 

 

 

 

 

 

 

 

 

вводимые

 

 

 

 

 

 

 

 

 

ошибки функция возвращает значение –1 (EOF).

 

 

 

 

 

 

 

 

 

Строка форматир вания сос оит из трех видов символов:

 

 

 

 

− спецификаторы ф

 

 

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

рмата

 

 

 

 

 

 

 

 

 

 

 

− символы, не являющиеся разделителями (за исключением символа ‘%’);

 

 

 

 

 

 

 

 

 

о

 

 

 

 

 

 

 

 

 

 

 

 

− симво ы-разде тели (пробел ‘ ’, табуляция ‘\t’, переход на следующую

 

строку ‘\n’).

 

 

и

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Спецификатор формата начинается с символа ‘%’ и определяет тип

 

 

 

 

 

 

л

 

 

 

 

 

 

 

 

 

 

 

 

 

считываемых аргументов. Символы формата для функции scanf приведены

 

в табл. 1.2.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

б

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица 1.2

 

 

Символ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Тип

 

Бформата

 

 

 

 

 

 

 

 

Значение

 

 

 

 

 

 

аргумента

 

1

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

3

 

 

 

c

 

Чтение одного символа

 

 

 

 

 

 

char

 

 

 

d

 

Чтение целого десятичного числа

 

 

 

 

 

 

int

 

 

 

i

 

Чтение целого числа в десятичном, восьмеричном

 

int

 

 

 

 

или шестнадцатеричном формате

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Окончание табл. 1.2

1

2

 

3

e, f , g

Чтение действительного числа

 

float

le, lf , lg

Чтение действительного числа

 

double

о

Чтение восьмеричного числа

 

int

s

Чтение строки символов

 

char *

x

Чтение шестнадцатеричного числа

 

int

u

Чтение десятичного целого числа без знака

 

unsigned int

p

Чтение значения указателя

 

void *

n

Получает число прочитанных символов

 

Р

 

int

 

 

И

Целое число, расположенное между символом ‘%’ и символом формата,

позволяет указать максимальное число считываемых и передаваемых в аргу-

Если очередной символ в строке форматирования Уне является символомразделителем или спецификатором формата, то функция scanf сравнивает его с текущим символом во входном потоке: в случае совпадения – пропускает, ина-

мент символов.

че прекращает свою работу.

 

 

 

Г

 

 

 

 

 

 

 

 

 

 

int printf

( const char * строка форм тирования [, аргументы])

выводит форматированные данные на

н.

Б

 

 

Строка форматирования состоит из:

 

 

 

− символов, которые непоср дств нноавыводятся на экран;

− управляющих символов;

экр

 

 

− спецификаторов формата.

 

 

Управляющие символы приведеныв табл. 1.3.

 

 

 

 

 

 

 

т

 

 

Таблица 1.3

 

 

Символ

о

Действие

 

 

 

 

 

\a

 

С гнал

 

 

 

 

 

 

 

 

\b

 

Шаг назад

 

 

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

 

\f

 

Перевод страницы

 

 

 

 

 

 

л

 

 

 

 

 

\n

Переход на начало следующей строки

 

 

 

 

\t

 

Табуляция

 

 

 

 

 

 

б

 

 

 

 

 

 

 

 

 

 

 

\r

 

Возврат каретки

 

 

 

и

 

\v

 

Вертикальная табуляция

 

 

Б

 

 

 

\\

 

Обратная косая черта

 

 

 

 

 

\’

 

Одиночная кавычка

 

 

 

 

 

 

\”

 

Двойная кавычка

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

\?

 

Знак вопроса

 

 

 

 

 

 

 

 

\0

 

Нулевой байт (каждый символ равен 0)

 

Общий вид этого спецификатора формата:

% [флаг] [ширина] [.точность] <символ_формата>

12

Параметр флаг определяет выравнивание числа при выводе. Возможные значения флага приведены в табл. 1.4.

Таблица 1.4

Флаг

Назначение

Выравнивает выводимое число по левому краю поля

+Всегда будет выводиться знак числа

Пробел

Устанавливает пробел перед положительным числом и минус перед

отрицательным

 

 

#

Выводит 0 перед восьмеричным числом, 0х – перед шестнадцате-

ричным

 

 

 

 

 

Параметр ширина определяет минимальное количество выводимых сим-

волов.

 

У

Р

Параметр точность имеет различное назначение для Иразличных типов выводимых данных. Для действительных чисел, выводимых с использованием

спецификатора «%f» и «%e», точность определяет количество десятичных раз-

рядов, а для спецификатора «%g» – количество значащих цифр. При выводе

строк точность определяет максимальную длину поляГвывода, а при выводе це-

лых чисел − максимальное количество цифр.

 

Символы формата для функции scanf приведеныБв табл. 1.5.

 

 

 

 

 

а

Таблица 1.5

Символ

 

 

 

Значение

 

формата

 

 

 

 

 

 

к

 

c

 

Вывод одного символа

 

 

 

 

 

е

 

 

d

 

Вывод целого деся ичного числа

 

i

 

Вывод цел числа в деся ичном, восьмеричном

 

 

или шестнадцатеричном формате

 

 

 

 

e

 

Вывод ч слагос фиксированной точкой ( x.xx e xx)

 

f

 

Вывод ч с а с плавающей точкой ( xx.xxx)

 

 

 

 

и

 

 

g

 

Вы ирает более короткий вывод из %e и %f

 

о

 

Вывод восьмеричного числа

 

 

 

 

 

л

 

 

s

 

Вывод строки символов

 

 

 

 

б

 

x

 

Вывод шестнадцатеричного числа

 

u

 

Вывод десятичного целого числа без знака

 

и

 

 

 

p

 

Вывод значения указателя ( XXXX : XXXX )

 

n

 

Выводит число прочитанных символов

 

Б

 

 

 

 

 

Операторы scanf и printf были определены в языке Си, и могут использоваться в С++. Однако язык С++ имеет более удобные функции для ввода/вывода данных

13

1.10.Потоковый ввод/вывод данных

Вязыке С++ ввод/вывод данных производится с использованием потоков (библиотека iostream.h). Поток − это логическое устройство, которое осуществляет передачу данных от источника к приемнику. В библиотеке iostream.h определены четыре страндартных потока:

cout − стандартный поток ввода, направлен из оперативной памяти на внешнее устройство (по умолчанию – на экран компьютера);

cin − стандартный поток вывода, направлен от внешнего устройства (по

умолчанию – с клавиатуры) в оперативую память;

Р

 

cerr − поток стандартной ошибки;

И

clog − буферизируемый поток стандартных ошибок.

 

Для работы с потоками применяются операции вставки в поток (<<) и извлечения из потока (>>).

 

 

Введем, например, с клавиатуры переменную x и выведем ее на экран:

 

 

 

cout << "Vvedie x " << endl;

 

 

Г

 

 

 

 

Б

У

 

 

 

cin >> x;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

cout << "x =

" << x << endl;

а

 

 

 

 

 

 

Здесь манипулятор endl

 

 

 

 

 

 

 

 

переводит курсор в начало следующей строки.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

к

 

 

 

 

 

 

 

 

В языке Си для перехода на новую строку использовали управля-

 

 

 

 

 

 

 

е

 

 

 

endl кроме переноса

 

 

 

 

ющий символ ‘\n’. Одна о манипулятор

 

 

 

 

строки производит и сброс буф ров потока вывода, что повышает

 

 

 

 

 

 

т

 

 

 

 

 

 

 

 

 

 

надежность программы, но н сколько снижает скорость ее вы-

 

 

 

 

полнения.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

о

 

 

 

 

 

 

 

 

 

 

Для управления вв д м/выводом используются флаги форматированного

ввода/вывода или ман пулят ры форматирования.

 

 

 

 

 

 

Флаги

устанавл

вают параметры ввода/вывода, которые будут действо-

 

 

 

вать на все пос едующ е операторы до тех пор, пока не будут отменены.

 

 

 

б

 

 

 

 

 

 

 

 

 

Для установкииф ага вывода используется конструкция Еслиcout.setf(ios::флаг)

Для снятия флага используется конструкция

Бcout.unsetf(ios::флаг)

необходимо установить несколько флагов, то можно использовать операцию «или» (|), например:

cout.setf(ios:: флаг1 | ios:: флаг2 | ios:: флаг3)

В табл. 1.6 приведены некоторые флаги для форматированного ввода.

14

 

 

Таблица 1.6

Флаг

 

Описание

right

Выравнивание по правой границе

left

Выравнивание по левой границе (по умолчанию)

boolalpha

Вывод логических величин в текстовом виде

dec

Вывод величин в десятичной системе счисления (по умолчанию)

showpos

Выводит символ ‘+’ для положительных чисел

scientific

Вывод вещественных чисел в экспоненциальной форме

fixed

Фиксированная форма вывода вещественных чисел (по умолча-

 

нию)

Р

 

 

Манипуляторы

И

(библиотека iomanip.lib) помещаются в операторы вво-

да/вывода непосредственно перед форматируемым значением. В табл. 1.7 приведены некоторые манипуляторы форматирования.

 

 

 

 

 

 

 

 

 

 

Таблица 1.7

Манипулятор

 

 

 

 

 

Описание

У

 

setw(n)

 

 

Задает ширину поля вывода в n символов

 

 

 

 

 

 

 

 

 

Г

 

setprecision(n)

 

Задает количество цифр (n–1) в дробной части числа

left

 

 

Выравнивание числа по левой границе (по умолчанию)

 

 

 

 

 

 

 

 

Б

 

 

right

 

 

Выравнивание числа по пр вой границе

 

boolalpha

 

 

Вывод логических величин в текстовом виде

 

 

 

 

 

 

 

 

 

а

 

 

noboolalpha

 

Вывод логических в личин в числовом виде

 

 

 

 

к

 

showpos

 

 

Выводит символ ‘+’ для положительных чисел

 

noshowpos

 

Не выводит символ ‘+’ для положительных чисел

 

 

 

 

 

 

 

 

е

 

 

 

scientific

 

 

Экспоненциальная форма вывода вещественных чисел

fixed

 

 

Фиксир ванная форма вывода вещественных чисел

 

 

 

 

(по

 

лчанию)

 

 

 

 

 

 

 

 

 

 

т

 

 

 

setfill(ch)

 

 

Устан в ть символ ch как заполнитель

 

 

 

 

 

 

 

умо

 

 

 

Установить

 

 

у поля вывода можно также следующим образом:

 

 

 

 

ширин

 

 

 

 

cout.width(n) − устанавливает ширину поля вывода, равную n позиций;

 

 

л

 

 

 

 

 

cout.presicion(m) − определяет m цифр в дробной части числа.

 

б

 

 

 

 

 

 

 

и

 

 

 

 

 

 

 

 

 

Б

 

 

 

 

 

 

 

 

 

 

15