Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1.docx
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
364.88 Кб
Скачать

%[Флаги] [Ширина] [.Точность] [{h | l | I | i32 | i64}]тип

где

  • Тип:

Тип

Описание

d

Десятичное целое число

с

Символ с заданным кодом

s

Строка символов (соответствующий параметр указывает на начало строки)

e

Число с плавающей точкой, экспоненциальная запись

f

Число с плавающей точкой, десятичная запись

g

Аналогично форматам %f или %e. Используется наиболее компактный формат для данного выражения.

u

Десятичное целое число без знака

o

Восьмеричное целое число без знака

x

Шестнадцатеричное целое число без знака (строчные буквы)

X

Шестнадцатеричное целое число без знака (заглавные буквы)

  • Флаги – модификаторы форматов:

Флаг

Форматирование с флагом

Форматирование без флага

Выравнивание по левой границе поля заданной ширины.

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

+

Добавляет префикс '+' для положительных чисел (для знаковых форматов)

Печатается только знак '-' для отрицательных чисел.

0

Добавление нулей пока до достижения минимальной заданной длины. Флаг 0 игнорируется в случае целых форматов (i, u, x, X, o, d) или наличия флага -.

Нет добавления нулей

" " (пробел)

Добавляет в начале знак " " (пробел) если печатается положительное значение знакового типа. Флаг " " игнорируется в случае наличия флага +

Нет добавления пробела

#

Добавляет префикс ситемы исчисления для форматов o, x, X или форсирует печать десятичной точки у форматов с плавающей точкой. Для целых форматов это флаг игнорируется.

Нет изменений

  • Ширина – минимальная ширина поля. Если длина печатаемого числа или строки меньше этого значения, то к нему слева или справа (в зависимости от флага и типа) будут добавлены пробелы или нули для увеличения длины до заданного значения. Если же длина печатаемого числа или строки больше заданного значения, то число или строка печатается как есть (не обрезаются из-за несоответствия этому параметру).

  • Точность – точность печатаемого значения:

Тип

Влияние параметра "точность"

c, C

Ни на что не влияет

d, i, u, o, x, X

Если длина печатаемого числа меньше, чем "точность", то слева к нему добавляются нули до длины, заданной параметром "точность". Если больше – то число печатается как есть, без обрезания.

e, E

"Точность" задаёт количество знаков после десятичной точки. Последний печатаемый разряд округляется.

f

"Точность" задаёт количество знаков после десятичной точки. Последний печатаемый разряд округляется.

g, G

"Точность" задаёт количество печатаемых значащих разрядов

s, S

"Точность" задаёт количество печатаемых символов начиная с начала строки. Все остальные символы не печатаются.

По умолчанию для форматов с плавающей точкой точность равна 6, т.е. печатается 6 знаков после десятичной точки.

В качестве примера рассмотрим следующую программу:

main()

{

print ("/%d/\n",336);

print ("/%2d/\n",336);

print ("/%10d/\n",336);

print ("/%-10d/\n",336);

}

Эта программа печатает одно и то же значение 4 раза, но использует при этом 4 различные спецификации преобразования.

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

/336/

/336/

/ 336/

/336 /

Первая спецификация %d не содержит модификатора. Поле печати здесь имеет ширину, равную количеству цифр данного целого числа (этот выбор по умолчанию).

Вторая спецификация %2d, она указывает, что ширина поля должна равняться 2, но, поскольку число состоит из 3 цифр, поле автоматически расширяется до необходимого размера.

Следующая спецификация %10d показывает, что ширина поля равна 10. И действительно между символами (имеется семь пробелов и три цифры, причем число сдвинуто к правому краю поля.)

Последняя спецификация %-10d также указывает ширину поля, равную 10, а флаг "–" приводит к сдвигу всего числа к левому краю.

Рассмотрим теперь некоторые форматы, соответствующие данным с плавающей точкой.

Пример:

main()

{

print("/%/\n",1234.56);

print("/%e/\n",1234.56);

print("/%4.2f/\n",1234.56);

print("/%3.1f/\n",1234.56);

print("/%10.3f/\n",1234.56);

print("/%10.3e/\n",1234.56);

}

Результат работы:

/1234.560000/

/1.234560Е+03/

/1234.56/

/1234.6/

/ 1234.560/

/ 1.234Е+03/

Пояснения по работе использованных спецификаторов:

  1. %f. При форматировании по умолчанию устанавливается значение точности равное 6, т.е. после точки печатается 6 знаков.

  2. . По умолчанию по этой спецификации печатается одна цифра слева от точки и 6 справа.

  3. %4.2f. Две позиции под запись дробной части, и 4- ширина поля. Но т.к. число не помещается в эту ширину, то поле раздвигается до той ширины, при которой можно поместить число 1234.56.

  4. %3.1f. Т.к. указан один знак после точки, то значение 1234.56 округляется до 1234.6

  5. %10.3f Три знака после точки, длина поля 10, число прижимается к правой границе.

  6. %10.3е Один знак слева от точки по умолчанию (правило этого спецификатора), 3 знака справа от точки, ширина поля 10, прижимается к правой границе.

Оператор printf можно также использовать для преобразования чисел из одной системы счисления в другую или печати ASCII-кода символа или символа по его ASCII-коду.

main()

{

printf("%d\n",336);

printf("%o\n",336);

printf("%x\n",336);

printf("%#x\n",336);

printf("%c %d\n", 'A','A');

}

Результат:

336

520

150

0x150

A 65