Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GRIGOREV.DOC
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
608 Кб
Скачать
☆

Int sprintf(char* s,char* формат [ , список вывода ] )

которая работает подобно функции printf, но вместо устройства вывода использует строку s.

Для преобразования строки в число служат функции, описанные в файле stdlib.h :

double atof(char* s) - преобразует строку s в вещественное число;

int atoi(char* s) - преобразует строку s в целое число;

long atol(char* s) - преобразует строку s в длинное целое число.

Функции возвращают результат преобразования строки до первого ошибочного символа или до нуль-символа. Они не предоставляют средств контроля за правильностью записи числа в исходной строке.

Для проверки принадлежности отдельного символа некоторому множеству символов и преобразования символов используются макроопределения (см. 1.14), описанные в файле ctype.h . Макроопределения проверки символов возвращают ненулевое значение, если символ входит в множество, и 0 - в противном случае:

isalpha(c) - латинская буква

islower(c) - малая латинская буква

isupper(c) - заглавная латинская буква

isdigit(c) - цифра

isxdigit(c) - 16-ричная цифра '0'..'9','A'..'F','a'..'f'

isalnum(c) - латинская буква или цифра

isspace(c) - пробел или управляющий символ \f,\n,\r,\t,\v

iscntrl(c) - невидимые символы

ispunct(c) - печатаемый символ, кроме пробела, букв и цифр

isgraph(c) - печатаемый символ, кроме пробела

isprint(c) - печатаемый символ, включая пробел

Макроопределения преобразования символов:

toupper(c) - для малой латинской буквы возвращает соответствующую большую букву, в остальных случаях возвращает c ;

tolower(c) - для большой латинской буквы возвращает соответствующую малую букву, в остальных случаях возвращает c .

1.14. Макроопределения

Макроопределения задаются, подобно символическим константам (ко­торые являются простейшими макроопределениями), директивой препроцессора #define в виде:

#define имя ( список параметров ) строка замещения

где имя - некоторый идентификатор, список параметров - список идентификаторов, разделенных запятыми, строка замещения - это, как правило, некоторое выражение или последовательность операторов, куда входят параметры, указанные в скобках. В программе макроопределения, подобно функциям, используются со списком аргументов (аргументами могут быть любые правильно записанные выражения). Препроцессор проделывает с встреченными им в тексте программы макроопределениями следующие манипуляции :

1) каждое вхождение параметра в строку замещения заменяется на соответствующий аргумент (если только параметр в строке замещения не находится внутри “ ”);

2) параметры, предваряемые символом # в строке замещения макроопределения, заменяются на соответствующий аргумент в “ “;

3) подготовленная таким образом строка замещения подставляется в текст программы.

В отличие от функций, предварительного вычисления значений аргументов не происходит, все операции выполняются только над текстом. В качестве примера запишем макроопределение SQR для вычисления квадрата числа :

#define SQR(x) ((x)*(x))

и макроопределение, предоставляющее удобное средство отладочной печати:

#define OUTPUT(x,f) printf("\n"#x"=%"#f,(x))

Отметим, что использование макроопределений иногда приводит к побочным эффектам, которые возникают при многократном использовании аргументов-выражений. Например, int x=2; y=SQR(x++); В результате выражение x++ * x++ установит x в 4 вместо 3, а y в 6=2*3 вместо ожидаемого значения 4. Кроме того, текстовые подстановки не позволяют применять в качестве аргументов арифметические выражения, поскольку они вычисляются в теле макроподстановки многократно, что замедляет выполнение программы. Еще один недостаток макроопределений - невозможность отличить вызовы функций от вызовов макроопределений в тексте программы.

В языке C++ существует возможность вставки фрагмента кода (а не текста) функции, чтобы не выполнять переход к коду функции при ее вызове. Для этого перед описанием функции ставится ключевое слово inline. Например, inline int sqr(int x) {return x*x;} Наиболее эффективно использовать подставляемые функции в тех случаях, когда тело функции состоит всего из нескольких операторов, хотя при многократных вызовах подставляемой функции размеры программы могут увеличиться, однако исключаются затраты на передачу управления к вызываемой функции и возврат из нее. Так как компилятор встраивает код подставляемой функции вместо ее вызова, то определение функции со спецификатором inline должно находиться в том же файле, что и обращение к ней, и размещаться до первого вызова. Функция со спецификатором inline не может быть рекурсивной и не может содержать операторов goto , switch , do , for , while.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]