Печать чисел с плавающей точкой — КиберПедия 

Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...

Типы сооружений для обработки осадков: Септиками называются сооружения, в которых одновременно происходят осветление сточной жидкости...

Печать чисел с плавающей точкой

2020-05-08 234
Печать чисел с плавающей точкой 0.00 из 5.00 0 оценок
Заказать работу

Числа с плавающей точкой выводятся в одном из нескольких возможных форматов, спецификаторы преобразования которых приведены на рис. 3.

Спецификаторы преобразования е и Е выводят значение с плавающей точкой в экспоненциальной нотации. Например, в научной нотации значение 150.4582 представляется как

1.504582х102 а в экспоненциальной нотации компьютера

1.504582Е+02

Значения, которые выводятся с использованием спецификаторов преобразования е, Е, и f, выводятся по умолчанию с точностью 6 разрядов после десятичной точки; другие значения точности могут быть заданы явным образом. Спецификатор преобразования f всегда выводит по меньшей мере одну цифру слева от десятичной точки. Спецификаторы преобразования е и Е печатают соответственно символ е нижнего регистра и символ Е верхнего регистра, после которого следует значение экспоненты, и всегда печатают точно одну цифру слева от десятичной точки.

Спецификатор преобразования g (G) выводит число в формате е (Е) или f без нулей справа (т.е. 1.234000 выводится как 1.234). В формате е (Е) значение числа выводится в том случае, если после его преобразования в экспоненциальную нотацию значение экспоненты оказывается меньше -4, либо когда оно превышает или равно заданной точности представления (6 значащих цифр по умолчанию для g и G). В других случаях для вывода значения используются спецификатор преобразования f. Со спецификаторами g или G нули справа в дробной части выводимого значения не печатаются. Для вывода десятичной точки требуется по меньшей мере одна значащая цифра в дробной части. Со спецификацией преобразования %g значения 0.0000875, 8750000.0, 8.75, 87.50 и 875 печатаются как 8.75е-05, 8.75е+06, 8.75, 87.5 и 875. Значение 0.0000875 использует нотацию е, поскольку после преобразования в экспоненциальный формат значение экспоненты оказывается меньше -4. Для вывода значения 8750000.0 также используется нотация е, так как значение экспоненты равно точности представления, задаваемой по умолчанию.

 

Спецификатор Назначение
е или Е Выводит значение с плавающей точкой в экспоненциальной нотации.
f Выводит значение с плавающей точкой.
g или G Выводит значение с плавающей точкой либо в формате f, либо в экспоненциальном формате е (или Е).
L Помещается перед любым спецификатором преобразования значения с плавающей точкой, чтобы показать, что в данном случае выводится значение типа long double.

Рис. 3. Спецификаторы преобразования значений с плавающей точкой

Точность представления для спецификаторов преобразования g и G показывает максимальное число печатающихся значащих цифр, включая цифру слева от десятичной точки. С использованием спецификации %g значение 1234567.0 будет напечатано как 1.23457е+06. Обратите внимание, что выведенный результат содержит 6 значащих цифр.

 Программа, приведенная на рис. 4, демонстрирует три вида спецификаций преобразования значений с плавающей точкой. Спецификации преобразования % Е и % g выводят округленные значения.

/* Печать чисел с плавающей точкой с использованием спецификаторов преобразования значений с плавающей точкой */

#include <stdio.h>

main () {

printf ("%e\n", 1234567.89);

printf ("%e\n", +1234567.89);

printf("%e\n", -1234567.89);

printf("%E\n", 1234567.89);

printf ("%f\n", 1234567.89);

printf("%g\n", 1234567.89);

printf("%G\n", 1234567.89);

return 0; }

 

Вывод на экран:

1.234568e+06

1.234568e+06

-1.234568e+06

1.234568E+06

1234567.890000

1.23457e+06

1.23457E+06

Рис. 4. Использование спецификаторов

преобразования значений с плавающей точкой

 

 

Печать строк и символов

Для вывода отдельных символов и строк используются соответственно спецификаторы преобразования с и s. Для спецификатора преобразования с требуется аргумент типа char. Для спецификатора преобразования s в качестве аргумента используется указатель на char. Спецификатор преобразования s выводит символы до тех пор, пока не встретится ограничительный символ NULL ('\0'). Программа на рис. 5, выводит символы и строки со спецификаторами преобразования с и s.

 

/* Печать строк и символов */

# include < stdio. h >

main ()

{ char character = 'A';

char string [] = "This is a string";

char *stringPtr = "This is also a string";

printf("%c\n", character);

printf ("%s\n", "This is a string");

printf("%s\n", string);

printf("%s\n", stringPtr);

return 0;

}

 

Вывод на экран:

A

This is a string

This is a string

This is also a string

Рис. 5. Использование спецификаторов преобразования строк и символов

 

6. Другие спецификаторы преобразования

Спецификатор Описание
p Выводит значение указателя в форме, зависящей от конкретной реализации.
n Сохраняет число символов, уже выведенных текущим оператором printf. Соответствующий аргумент является указателем на целое значение. Ничего не выводит.
% Выводит символ процента.

Рис. 6. Другие спецификаторы преобразования

В программе, приведенной на рис. 7, спецификация %р печатает значение ptr и адреса х; эти значения идентичны, поскольку ptr присваивается адрес х. Далее %n сохраняет число выведенных третьим оператором printf символов в целой переменной у, после чего печатается значение у. Последний оператор printf использует спецификацию % %, чтобы напечатать символ % % в строке символов. Каждый вызов printf возвращает или число выведенных символов, или отрицательное значение, если при выводе произошла ошибка.

/* Применение спецификаторов преобразования р, n, и % */

include <stdio.h>

main ()

{ int *ptr;

int x = 12345, у;

ptr = & х;

printf ("The value of ptr is %p\n", ptr);

  printf("The address of x is %p\n\n", &x);

printf("Total characters printed on this line is:%n", &y);

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

у = printf("This line has 28 characters\n");

  printf("%d characters were printed\n\n", y);

  printf ("Printing a %% in a format control stringW);

  return 0; }

 

Вывод на экран:

The value of ptr is 001F2BB4

The address of x is 001F2BB4

Total characters printed on this line is: 41

This line has 28 characters 8 characters were printed

Printing a % in a format control string

Рис. 7. Применение спецификаторов преобразования р, n и %

8. Печать с заданием ширины поля и точности представления

Точный размер поля, в котором печатаются данные, задается шириной поля. Если ширина поля больше, чем необходимо для печати данных, то данные обычно выравниваются внутри поля по его правому краю. Целое число, задающее ширину поля, вставляется в спецификацию преобразования между знаком процента (%) и спецификатором преобразования.

Программа, приведенная на рис. 8, печатает две группы из пяти чисел, выравнивая по правому краю те из них, которые содержат меньшее количество цифр, чем задано шириной поля. Обратите внимание, что для вывода значений, превышающих текущее значение ширины поля, она автоматически увеличивается, и что знак «минус» отрицательного значения занимает одну символьную позицию поля. Ширина поля может использоваться со всеми спецификаторами преобразования.

/* Вывод целых чисел с выравниванием по правому краю */

#include <stdio.h>

main ()

{

printf ("%4d\n", 1);

printf("%4d\n", 12);

printf("%4d\n", 123);

printf("%4d\n", 1234);

printf("%4d\n\n", 12345);

printf("%4d\n", -1);

printf ("%4d\n", -12);

printf("%4d\n", -123);

printf("%4d\n", -1234);

printf ("%4 d \ n ", -12345);

return 0;}

 

Вывод на экран:

1

12

123

1234

12345

-1

-12

-123

-1234

-12345

Рис. 8. Выравнивание целых чисел по правому краю поля

Функция printf дает также возможность задать точность представления, с которой будут напечатаны данные. Точность имеет различный смысл для различных типов данных. Для целых чисел, точность показывает минимальное количество цифр, которое должно быть выведено(по умолчанию равна 1). Если выводимое значение содержит меньше цифр, чем задано точностью, то перед ним будут напечатаны префиксные нули, так чтобы общее количество цифр стало равно заданной точности. Для с плавающей точкой в спецификаторах е, Е и f, то точность — это количество цифр, которое будет напечатано после десятичной точки. Для спецификаторов преобразования g и G точность — это максимальное количество значащих цифр, которое будет выведено. Для спецификатора преобразования s точность — это максимальное число символов строки, которое будет напечатано. Чтобы использовать точность представления, поместите между знаком процента и спецификатором преобразования десятичную точку (.) с последующим целым числом, задающим точность представления данных. Программа на рис. 9, показывает варианты задания точности представления данных в строках управления форматом.

Ширина поля и точность представления могут быть объединены, для чего между знаком процента и спецификатором преобразования нужно вставить значение ширины поля, десятичную точку и последующее значение точности, например:

printf("%9.3f", 123.456789);

Он выводит 123.457с тремя цифрами справа от десятичной точки и выравнивает результат по правому краю поля, шириной 9 цифр.

/* Использование точности представления при печати целых чисел, чисел с плавающей точкой и строк */

#include <stdio.h>

main (){

int i = 873;

float f = 123.94536;

char s[] = "Happy Birthday";

printf ("Using precision for integers\n");

printf ("\t%.4d\n\t%.9d\n\n", i, i);

printf ("Using precision for floating-point numbers\n");

printf ("\t%.3f\n\t%.3e\n\t%.3g\n\n", f, f, f);

' printf ("Using precision for strings\n");

printf ("\t%.lls\n", s);

return 0;

}

 

Вывод на экран:

Using precision for integers

0873

000000873

Using precision for floating-point numbers

123.845

1.239e+02

124

Using precision for strings

Happy Birth

Рис. 9. Использование точности представления для вывода информации различного типа

Ширину поля и точность представления можно задать, используя целочисленные выражения в списке аргументов после строки управления форматом. Для этого ставят * (звездочку) вместо ширины поля или точности (или вместо того и другого). Звездочки при печати будут заменены соответствующими значениями из списка аргументов. Значение аргумента для ширины поля может быть отрицательным, но для точности представления должно быть только положительным. Отрицательное значение ширины поля приводит к выравниванию вывода по левому краю поля, как описано в следующем разделе. Оператор

printf("%*.*f", 7, 2, 98.736);

использует значение 7 для ширины поля, 2 для точности представления и выводит значение 98.74 с выравниванием по правому краю поля.

 


Поделиться с друзьями:

Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...

Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...

Состав сооружений: решетки и песколовки: Решетки – это первое устройство в схеме очистных сооружений. Они представляют...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.