Справочник по функциям С++. Подпрограммы классификации Подпрограммы преобразования
![]()
|
pow----------------------------------------------------------------- Назначение Вычисляет значения х в степени y Синтаксис #include double pow(double x, double y); Прототип в math.h y Замечания pow вычисляет x Возвращаемое При успешном завершении pow возвращает ззначение вычисленное значение x в степени y. При некоторых значениях аргументов функции pow при вычислении результата происходит переполнение. В этом случае pow возвращает значение HUGE_VAL. Если в результате получается чрезмерно большая величина, то errno принимает значение: ERANGE Результат выходит за диапазон Если аргумент х функции pow меньше или равен 0, и y - не целое число, то errno принимает значение: EDOM Нарушение области определения функции При этом pow возвращает отрицательную величину HUGE_VAL. Если оба аргумента x и y равны 0, то функция pow возвращает 1. Обработка ошибок функции pow может быть изменена с помощью функции matherr. Переносимость pow доступна в системах UNIX и совместима с ANSI C См. также exp,pow10,sqrt ----------------------------------------------------------------- pow10----------------------------------------------------------------- Назначение Вычисляет значение 10 в степени p Синтаксис #include double pow10(int p); Прототип в math.h p Замечания pow10 вычисляет 10 Возвращаемое При успешном завершении pow10 p возвращает значение вычисленное значение 10 . Тип результата обычно соответствует long double. Допустимы любые аргументы, поэтому могут происходить переполнение или потеря значащих разрядов. Переносимость Доступна в системах UNIX См. также exp, pow ----------------------------------------------------------------- printf----------------------------------------------------------------- Назначение Осуществляет форматный вывод в stdout Синтаксис int printf(const char *format[,argument,...]); Прототип в stdio.h Замечания printf принимает несколько аргументов, применяет к каждому спецификацию формата, содержащегося в форматной строке, задаваемой в format, и выводит форматированные данные в stdout. Должно быть одинаковое количество спецификаций формата и аргументов Форматная строка Форматная строка, присутсвующая при всех вызовах функций ...printf, управляет преобразованием, форматированием и выводом аргументов функций. Должно быть задано достаточное количество аргументов для форматирования; если их будет недостаточно, то результат будет непредсказуемым и, возможно, катастрофическим. Лишние аргументы (если их число больше, чем требуется для форматирования) просто игнорируются. Форматная строка - это строка символов, содержащая два типа объектов - обычные символы и спецификации преобразований. .Обычные символы просто копируются один в один в выходной поток. .Спецификации преобразований извлекают аргументы из списка аргументов и подвергают их форматированию. Спецификации формата Спецификации формата функций ...printf имеют следующую форму: % [флаги] [ширина] [.точность] [F|N|h|l|L] тип Каждая спецификация преобразования начинается с символа процента (%), после чего следуют в при- веденном ниже порядке: - необязательная последовательность флаговых знаков; - необязательный спецификатор ширины; - необязательный спецификатор точности; - необязательный модификатор принимаемого раз- мера; - символ типа преобразования. Необязательные компоненты форматной строки Ниже приводятся сведения об управлении форматным выводом с помощью необязательных символов, спецификаторов и модификаторов входящих в форматную строку. ----------------------------------------------------------------- Символ или Чем управляет или что определяет спецификатор ----------------------------------------------------------------- Флаги выравнивание вывода, числовые знаки, десятичные точки, конечные нули, восьмиричные и десятичные префиксы; Ширина минимальное число печатаемых знаков, дополняемых пробелами или нулями; Точность максимальное число печатаемых знаков; для целых- минимальное число печатаемых знаков; Размер замена размера аргумента, принимаемого по умол- чанию N- указатель типа near F- указатель типа far h = короткое целое l = длинное целое L = длинное целое двойной точности ----------------------------------------------------------------- Символы типа преобразования функций ...printf В следующей таблице приводится список символов типа пре- образования функций ...printf, тип входного аргумента для каждого из этих символов и формат выполняемого вывода. Приводимая информация основана на предположении, что в спецификацию формата не включены флаговые символы, спецификаторы ширины и точности или модификаторы входного размера. Чтобы уви- деть, как влияет на вывод функций ...printf использование до- полнительных символов и спецификаторов,обратитесь к таблице, которая следует за приводимой ниже. ----------------------------------------------------------------- Символ Входной Формат вывода типа аргумент ----------------------------------------------------------------- ----------------------------------------------------------------- d целое знаковое десятичное целое i целое знаковое десятичное целое o целое беззнаковое восьмиричное целое u целое беззнаковое десятичное целое x целое беззнаковое шестнадцатиричное целое (также a,b,c,d,e,f) X целое беззнаковое шестнадцатиричное целое (также A,B,C,D,E,F) f число с плавающей знаковое число в форме точкой [-]dddd.dddd e число с плавающей знаковое число в форме точкой [-]d.dddd e [+/-]ddd g число с плавающей знаковое число в форме e или f точкой в зависимости от заданного значения и точности. Конечные нули и десятичная точка печатаются только в случае необходимости E число с плавающей Аналогично e, но с E для точкой экспоненты G число с плавающей Аналогично g, но с G для точкой экспоненты в случае использо- вания формата е ----------------------------------------------------------------- ----------------------------------------------------------------- Символ Входной Формат вывода типааргумент ----------------------------------------------------------------- Символы ----------------------------------------------------------------- с символ одиночный символ s указатель строки печатаются символы до появле- ния 0-ограничителя либо до достижение требуемой точности % нет печатается символ % ---------------------------------------------------------------- ---------------------------------------------------------------- Символ Входной Формат вывода типааргумент ---------------------------------------------------------------- Указатели ---------------------------------------------------------------- n указатель на целое сохраняется (в ячейке, на ко- торую указывает входной аргу- мент) число символов, напеча- танных к данному моменту p указатель входной аргумент печатается как указатель Указатели типа far печатаются в виде XXXX:YYYY. Указатели типа near печатают- ся в виде YYYY (только смещение) ----------------------------------------------------------------- Соглашения В следующей таблице приведены соглашения, соответствующие раз- личным типам спецификации. ----------------------------------------------------------------- СимволыСоглашения ----------------------------------------------------------------- e или E Аргумент преобразуется в форму [-]d.ddd...e[+/-]ddd, где: - десятичной точке предшествует одна цифра; - количество цифр после десятичной точки соответствует точности; - экспоненциальное представление всегда содержит по крайней мере 2 разряда f Аргумент преобразуется в десятичное представление [-]ddd.ddd..., где число цифр после десятичной точки соответствует точности (если задана ненулевая точность). g или G Аргумент печатается в форме e, E или f с точностью, соответствующей числу значащих чифр. Конечные нули удаляются,а десятичная точка появляется только при необходимости. Аргумент печатается в форме е или f с теми же ограничениями, если символом преобразования является g, и в форме E, если символом преобразования G. Форма e используется в случае, если результат преобразования: а) больше, чем точность или б) меньше, чем -4 x или X Для x преобразования при выводе появятся сим- волы a, b, c,d,e,f; для X преобразования- символы A, B, C, D, E, F. ----------------------------------------------------------------- Примечание: неопределенные числа с плавающей запятой выво- дятся как +INF и -INF. Нечисловые значения IEEE выводятся как +NAN или -NAN. Флаговые символы Флаговыми символами являются: минус(-), плюс(+), диез(#) и пробел ( ). Они могут появляться в произвольном порядке и комбинации. ----------------------------------------------------------------- ФлагЧто определяет ----------------------------------------------------------------- - Выравнивание результата по левому краю и за- полнение правого края пробелами.Если не задан, то осуществляется выравнивание справа, и левый край заполняется пробелами или нулями. + Знаковые результаты преобразования всегда на- чинаются со знаков плюс(+) или минус(-). пробел Если величина неотрицательна, то вывод начина- ется с пробела вместо знака плюс; отрицатель- ные величины начинаются со знака минус. # Определяет, что аргумент преобразуется с испо- льзованием "альтернативной формы". См. следую- щую таблицу. ----------------------------------------------------------------- Замечание: плюс считается старше пробела при одновременном их ис- пользовании. Дополнительные формы Если вместе с символом преобразования используется флаг #, то он воздействует на преобразуемый аргумент следующим образом: ----------------------------------------------------------------- Символ Как # влияет на arg преобразования ----------------------------------------------------------------- c,s,d,i,u Не влияет. 0 Ненулевой аргумент arg будет начинаться с нуля. x или X arg будет начинаться с 0x (или 0X). e, E или f Результат всегда будет содержать десятич- ную точку, даже если за ней не следуют цифры. Обычно десятичная точка появляется только в случае, когда после нее следуют цифры. g или G Аналогично e и E, но конечные нули не добавляются. ----------------------------------------------------------------- Спецификаторы ширины Спецификатор ширины устанавливает минимальную ширину поля для выводимой величины. Ширина определяется одним из двух способов: непосредственно с помощью строки десятичных цифр, или косвенно - с помощью звез- дочки(*). Если вы используете звездочку в качестве спецификатора ширины, то следующий аргумент вызова (который должен быть целым) определяет минимальную ширину выводимого поля. Отсутствие поля для вывода значения или его недостаточная ширина вызывают усечение выводимого значения. Если результат преобразования больше, чем позволяет ширина поля, то поле просто расширяется до размеров результата. ----------------------------------------------------------------- Спецификатор Как влияет на ширину вывода ширины ----------------------------------------------------------------- n Печатается по крайней мере n знаков. Если величина вывода меньше, чем n знаков, то вывод дополняется пробелами (справа - в случае задания флага "-",и слева - в про- тивном случае). 0n Печатается по крайней мере n знаков. Если в выводимой величине меньше,чем n знаков, то она дополняется нулями слева. * Список аргументов используется для полу- чения спецификатора ширины,который должен предшествовать действительному форматируемому аргументу. ----------------------------------------------------------------- Спецификаторы точности Спецификаторы точности всегда начинаются с точки(.), отделя- ющей его от предшествующего спецификатора ширины. Точность, по- добно ширине, определяется либо непосредственно с помощью строки десятичных цифр, либо косвенно с помощью звездочки(*). Ес- ли вы используете звездочку в качестве спецификатора ширины, то следующий аргумент вызова (трактуемый как целое) определяет точность. Если вы используете звездочки для задания ширины или точнос- ти (или того и другого), то непосредственно за аргументом ширины должен следовать аргумент точности, а затем - преобразуемая вели- чина. ----------------------------------------------------------------- Спецификатор Как влияет на точность вывода точности ----------------------------------------------------------------- (не задан) Точность устанавливается по умолчанию: по умолчанию = 1 для d,i,o,u,x,X типов; по умолчанию = 6 для e,E,f типов; по умолчанию = всем значащим цифрам для g и G типов; по умолчанию = печать до первого 0-знака для типов s; не влияет на тип с .0 Для типов d,i,o,u,x точность устанавлива- ется по умолчанию. Для типов e,E,f не печатается десятичная точка. .n Печатается n символов или n десятичных мест. Если величина вывода имеет больше, чем n знаков, то вывод может быть усечен или округлен (произойдет это или нет, за- висит от символа типа). * Список аргументов используется для полу- чения спецификатора точности, который до- лжен предшествовать действительному форматируемому аргументу. ----------------------------------------------------------------- Примечание: если точность явно определена как нулевая, и формат определения поля соответствует одному из целочисленных форматов (т.е. d,i,o,u,x), и выводимым значением является 0, то ни одной цифры не будет выведено в этом поле (т.е. поле будет представ- лено пробелом) ----------------------------------------------------------------- Символ Как спецификатор точности влияет напреобразования преобразования ----------------------------------------------------------------- d .n определяет, что будет напечатано по i крайней мере n цифр.Если входной аргумент o имеет меньше, чем n цифр, то выходная ве- u личина дополняется нулями слева. x Если входной аргумент имеет больше, чем n X цифр, то выходная величина не усекается. e .n определяет, что после десятичной точки E будет напечатано n знаков,а последние пе- f чатаемые цифры округляются. g .n определяет, что будет напечатано самое G большее n значащих цифр. c .n не влияет на вывод s .n определяет, что будет напечатано не более, чем n знаков. ----------------------------------------------------------------- Модификатор размера вводимого значения Символ модификации размера вводимого значения (F,N,h,l или L) задает размер последующего входного аргумента: F = указатель типа far N = указатель типа near h = короткое целое (short int) l = длинное целое (long) L = длинное целое двойной точности (long double) Модификаторы размера (F, N, h, l, и L) влияют на то, как функции ...printf интерпретируют тип данных соответствующего входного аргумента arg. F и N используются только для входных ар- гументов, являющихся указателями (%p, %s и %n). h и l и L исполь- зуются для входных аргументов, являющихся числами (целыми или с плавающей точкой). Как F, так и N переопределяют входной аргумент arg. Обычно аргументы для преобразований типа %p, %s или %n являются указате- лями принятого по умолчанию размера для заданной модели памяти. F обозначает: "Интерпретировать аргумент как указатель типа far". N обозначает: "Интерпретировать аргумент как указатель типа near". Модификаторы h и l и L переопределяют принятый по умолчанию размер входных данных для числовых аргументов: l и L применяется для целых типов (d, i, o, u, x, X) и типов с плавающей точкой (e, E, f,g, G); h используется только для целых типов. Ни h, ни l не влияют на символьные типы (с, s) и на указатели (p, n). ----------------------------------------------------------------- Модификатор входного Как интерпретируется аргумент arg размера ----------------------------------------------------------------- F Аргумент считывается как указатель типа far. N Аргумент считывается как указатель типа near. N не может быть использован ни при каких пре- образованиях в "огромной" (huge) модели. h Аргумент интерпретируется как короткое целое (short int) для d, i, o, u, x, X. l Аргумент интерпретируется как длинное целое (long) для d, i, o, u, x, X; аргумент интерпретируется как удвоенный (double) для e, E, f, g, G. L аргумент интерпретируется как длинное целое двойной точности(long double) для е,E,f,g или G ----------------------------------------------------------------- printf ----------------------------------------------------------------- Возвращаемое Функция printf возвращает число выведенных байт значение В случае ошибки printf возвращаeт EOF. Переносимость printf дoступна в системах UNIX и совместима с ANSI Cи. Определяется в книге Кернигана и Рит- чи. См. также cprintf, ecvt, fprintf, fread, fscanf, putc, puts, putw, scanf, sprintf, vprintf, vsprintf Пример #define I 555 #define R 5.5 main() { int i,j,k,l; char buf[7]; char *prefix = &buf; char tp[20]; printf("prefix 6d 6o 8x 10.2e " "10.2f\n"); strcpy(prefix,"%"); for (i=0;i<2;1++) { for (j=0;j<2;j++) for (k=0;k<2;k++) for (l=0;l<2;l++) { if (i==0) strcat(prefix,"-"); if (j==0) strcat(prefix,"+"); if (k==0) strcat(prefix,"f"); if (l==0) strcat(prefix,"0"); printf("%5s |",prefix); strcpy(tp,prefix); strcat(tp,"6d |"); printf(tp,I); strcpy(tp,""); strcpy(tp,prefix); strcat(tp,"6o |"); printf(tp,I); strcpy(tp,""); strcpy(tp,prefix); strcat(tp,"8x |); printf(tp.I); strcpy(tp,""); strcpy(tp,prefix); strcat(tp,"10.2e |"); printf(tp,R); strcpy(tp,prefix); strcat(tp,"10.2f |"); print(tp,R); printf(" \n"); strcpy(prefix,"%"); } } } Результат выполнения программы prefix 6d 6o 8x 10.2e 10.2f %-+#0 |+555 |01053 |0x22b |+5.50e+00 |+5.50 | %-+# |+555 |01053 |0x22b |+5.50e+00 |+5.50 | %-+0 |+555 |1053 |22b |+5.50e+00 |+5.50 | %-+ |+555 |1053 |22b |+5.50e+00 |+5.50 | %-#0 |555 |01053 |0x22b |5.50e+00 |5.50 | %-# |555 |01053 |0x22b |5.50e+00 |5.50 | %-0 |555 |1053 |22b |5.50e+00 |5.50 | %- |555 |1053 |22b |5.50e+00 |5.50 | %+#0 |+00555 |001053 |0x00022b |+05.50e+00 |+000005.50 | %+# | +555 | 01053 | 0x22b | +5.50e+00 | +5.50 | %+0 |+00555 |001053 |0000022b |+05.50e+00 |+000005.50 | %+ | +555 | 1053 | 22b | +5.50e+00 | +5.50 | %#0 |000555 |001053 |0x00022b |005.50e+00 |0000005.50 | %# | 555 | 01053 | 0x22b | 5.50e+00 | 5.50 | %0 |000555 |001053 |0000022b |005.50e+00 |0000005.50 | % | 555 | 1053 | 22b | 5.50e+00 | 5.50 | ----------------------------------------------------------------- |