Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursova_Belyakov.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2.74 Mб
Скачать

1.3. Додаткові функції

Стандартна бібліотека надає широкий вибір різноманітних функцій.

Операції з ланцюжками

Ми вже згадали ланцюжкові функції strlen, strcpy, strcat і strcmp, які ви знайдете в <string.h>. В наступному огляді, s із t — це char *, тоді як c та n — це int.

strcat(s,t) доточує t до кінця s

strncat(s,t,n) доточує n знаків t до кінця s

strcmp(s,t) повертає від'ємне, нуль або додатнє значення для s < t, s == t, s > t

strncmp(s,t,n) те саме, що й strcmp, але тільки для перших n знаків

strcpy(s,t) копіює t до s

strncpy(s,t,n) копіює щонайбільше n символів t до s

strlen(s) повертає довжину s

strchr(s,c) повертає покажчик на перший знайдений символ c у s, або NULL, якщо жодного не знайдено

strrchr(s,c) повертає покажчик на останній знайдений символ c у s, або NULL, якщо жодного не знайдено

Перевірка і перетворення класів символів

Декілька функцій з <ctype.h> здійснюють перевірку символів і перетворення. В наступному, c є типу int, який може бути представленим як unsigned char (беззнаковим символом) або EOF. Функції повертають int.

isalpha(c) повертає ненульове значення, якщо c є літерою алфавіта, 0 - якщо ні

isupper(c) повертає ненульове значення, якщо c є верхнього регістру, 0 - якщо ні

islower(c) повертає ненульове значення, якщо c є нижного регістру, 0 - якщо ні

isdigit(c) повертає ненульове значення, якщо c є цифрою, 0 - якщо ні

isalnum(c) повертає ненульове значення, якщо isalpha(c) або isdigit(c), 0 - якщо ні

isspace(c) повертає ненульове значення, якщо c являється пробілом, табуляцією, символом нового рядка, вертанням каретки, зміною сторінки або вертикальною табуляцією

toupper(c) повертає c, обернене у верхній регістр

tolower(c) повертає c, обернене у нижній регістр

Ungetc

int ungetc(int c, FILE *fp)

проштовхує символ c назад у файл fp і повертає або c, або EOF у випадку помилки. Тільки один символ на файл гарантовано проштовхнути назад. ungetc може використовуватись разом з кожною з ввідних функцій, таких як scanf, getc або getchar.

Виконання команд

Функція system(char *s) виконує команду, що міститься в символьному ланцюжку s, після чого продовжує виконання поточної програми. Вміст s залежить великою мірою від операційної системи. Як тривіальний приклад, на UNIX-системах, вираз

system("date");

спричиняє до запуску програми date; вона видруковує дату і час дня на стандартному виводі. system повертає системозалежне ціле статусу виконаної команди. На UNIX, статус буде значенням, поверненим exit.

Керування пам'яттю

Функції malloc і calloc динамічно добувають відрізки пам'яті.

void *malloc(size_t n)

повертає покажчик на n байтів неініційованої пам'яті, або NULL, якщо запит неможливо задовольнити.

void *calloc(size_t n, size_t size)

повертає покажчик на досить вільного місця для масиву з n об'єктами вказаного розміру size, або NULL, якщо запит неможливо задовольнити. Місце зберігання ініціюється нулем.

Покажчик, повернений malloc або calloc, матиме відповідне вирівнювання для даного об'єкту, але його необхідно звести до підходящого типу, як скажімо

int *ip;

ip = (int *) calloc(n, sizeof(int));

free(p) звільняє місце, на яке вказує p, де p попередньо отримано викликом malloc або calloc. Немає обмежень щодо послідовності в якій звільнюється простір, але виникне жахлива помилка, якщо звільнити щось, що не було отримано викликом malloc або calloc.

Помилкою буде також використати щось після того, як воно було звільнено. Типовий код з помилкою, в цьому циклові, що звільняє елементи зі списку:

for (p = head; p != NULL; p = p->next) /* НЕПРАВИЛЬНО */

free(p);

Правильним буде зберегти те, що потрібно перед тим як звільнювати:

for (p = head; p != NULL; p = q) {

q = p->next;

free(p);

}

Математичні функції

Існує більш ніж двадцять математичних функцій, оголошених в <math.h>; ось декілька з найчастіше використовуваних. Кожна з них візьме один або два аргументи типу double (подвійного) і повертає теж double.

sin(x) синус x, x в радіанах

cos(x) косинус x, x в радіанах

atan2(y,x) арктангенс y/x, в радіанах

exp(x) показникова функція ex

log(x) натуральний логаритм x (x>0) (при основі e)

log10(x) десятковий (звичайний) логаритм x (x>0)

pow(x,y) xy

sqrt(x) квадратний корінь x (x>0)

fabs(x) абсолютне значення x

Генератор випадкових чисел

Функція rand() обчислює послідовність псевдовипадкових цілих в діапазоні від нуля до RAND_MAX, означеного в <stdlib.h>. Одним з способів здобуття випадкових чисел з рухомою точкою більших або рівних нулю але менших одиниці, це

#define frand() ((double) rand() / (RAND_MAX+1.0))

(Якщо ваша бібліотека передбачає функцію для випадкових чисел з рухомою точкою, вона ймовірніше матиме кращі статистичні властивості ніж навеведена вище.)

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