- Структура определения:
тип_возвращаемого_значения имя_функции(тип_параметра1 имя_параметра1, ...) { // Тело функции: последовательно исполняемый код инструкция1; инструкция2; // ... return значение; // Если тип возврата не void }
- Внутри
()
находятся параметры, передаваемые в функцию. Если параметров нет, указываетсяvoid
. - Внутри
{}
находится тело функции.
- Внутри
main()
- Главная функция, точка входа в программу. Обязательна.
- Стандартная сигнатура:
int main(void)
илиint main(int argc, char *argv[])
. - Всегда должна возвращать
int
.return 0;
означает успешное завершение программы.
sizeof()
- Оператор (похож на функцию), возвращает размер в байтах, отводимый под тип данных или переменную.
- Пример:
sizeof(int)
,sizeof(my_variable)
.
getchar()
(#include <stdio.h>
)- Читает и возвращает один символ, введенный со стандартного ввода (
stdin
), как значение типаint
(код символа илиEOF
в конце файла/при ошибке).
- Читает и возвращает один символ, введенный со стандартного ввода (
putchar()
(#include <stdio.h>
)- Выводит один символ (переданный как
int
) на стандартный вывод (stdout
) и возвращает выведенный символ какint
.
- Выводит один символ (переданный как
printf()
(#include <stdio.h>
)- Функция форматированного вывода на
stdout
. Выводит текст и значения переменных в соответствии с форматной строкой. Не добавляет перенос строки автоматически (\n
нужно указывать явно). - Возвращает количество реально выведенных символов (или отрицательное значение при ошибке).
- Спецификаторы формата (основные):
%d
,%i
: Целое знаковое десятичное (int
).%u
: Целое беззнаковое десятичное (unsigned int
).%o
: Целое беззнаковое восьмеричное.%x
,%X
: Целое беззнаковое шестнадцатеричное (строчные/прописные буквы).%f
: Вещественное число с плавающей точкой (float
,double
). Стандартное представление.%e
,%E
: Вещественное число в экспоненциальной (научной) нотации.%g
,%G
: Вещественное число (%f
или%e
в зависимости от значения).%c
: Один символ (char
).%s
: Строка (массивchar
, заканчивающийся\0
).%p
: Адрес указателя.%%
: Символ процента (%
).
- Флаги и модификаторы (между
%
и спецификатором):число
(ширина): Минимальная ширина поля вывода. Пример:%10d
.-
: Выравнивание по левому краю в пределах поля. Пример:%-10d
.+
: Всегда выводить знак (+
или-
) для числовых типов. Пример:%+d
.-
для отрицательных. Пример:% d
.0
: Заполнять свободное место в поле нулями (слева). Пример:%010d
.#
: Альтернативная форма вывода (например,0x
для%x
,0
для%o
). Пример:%#x
..число
(точность):- Для
int
: Минимальное количество выводимых цифр (дополняется нулями слева). Пример:%.5d
. - Для
float
/double
: Количество знаков после десятичной точки. Пример:%.2f
. - Для
%s
: Максимальное количество выводимых символов строки. Пример:%.10s
.
- Для
- Модификаторы длины (перед спецификатором):
h
: Дляshort int
(%hd
) илиunsigned short int
(%hu
).hh
: Дляsigned char
(%hhd
) илиunsigned char
(%hhu
,%hhx
).l
: Дляlong int
(%ld
),unsigned long int
(%lu
),double
(%lf
- часто используется, хотя дляprintf
%f
достаточно дляdouble
).ll
: Дляlong long int
(%lld
),unsigned long long int
(%llu
).L
: Дляlong double
(%Lf
,%Le
).- Пример:
long long x = 1234567890987LL; printf("%lld\n", x);
- Функция форматированного вывода на
scanf()
(#include <stdio.h>
)- Функция форматированного ввода со
stdin
. Читает данные в соответствии с форматной строкой и сохраняет их по адресам переданных переменных. - Возвращает количество успешно прочитанных и присвоенных элементов (или
EOF
при ошибке/конце файла до чтения). - Важно: Передавать адреса переменных с помощью оператора
&
(например,scanf("%d", &my_int);
). Для строк (массивовchar
)&
не нужен, так как имя массива само является адресом. - Спецификаторы формата (основные):
%d
: Целое знаковое десятичное (int *
).%i
: Целое число в любом формате (десятичный, 0x-шестнадцатеричный, 0-восьмеричный) (int *
).%u
: Целое беззнаковое десятичное (unsigned int *
).%o
: Целое восьмеричное (int *
илиunsigned int *
).%x
,%X
: Целое шестнадцатеричное (int *
илиunsigned int *
).%f
,%e
,%g
,%E
,%G
: Вещественное число (float *
).%lf
,%le
,%lg
: Вещественное число (double *
). Важно:%lf
дляdouble
!%Lf
,%Le
,%Lg
: Вещественное число (long double *
).%c
: Один символ (char *
). Читает любой символ, включая пробельные.%s
: Строка символов до первого пробельного символа (char *
, массив должен быть достаточно большим!).
- Модификаторы длины (перед спецификатором): Аналогичны
printf
(h
,hh
,l
,ll
,L
). Пример:scanf("%hd", &my_short);
,scanf("%lf", &my_double);
- Другие модификаторы:
число
(ширина): Максимальное количество символов для чтения для данного поля. Пример:scanf("%5s", str);
(прочитает не более 5 символов).*
(подавление присваивания): Прочитать данные в соответствии со спецификатором, но не сохранять их. Пример:scanf("%d %*c %d", &a, &b);
(прочитает число, пропустит символ, прочитает второе число).
- Функция форматированного ввода со
pow(base, exponent)
(#include <math.h>
)- Возводит
base
в степеньexponent
. Оба аргумента и результат типаdouble
.
- Возводит
rand()
(#include <stdlib.h>
)- Генерирует псевдослучайное целое число в диапазоне
[0, RAND_MAX]
(RAND_MAX
- константа, обычно 32767). - Без инициализации (
srand
) будет генерировать одну и ту же последовательность при каждом запуске. - Генерация в диапазоне
[min, max]
:min + rand() % (max - min + 1)
- Генерация
double
в[0.0, 1.0)
:(double)rand() / (RAND_MAX + 1.0)
- Генерирует псевдослучайное целое число в диапазоне
srand(unsigned int seed)
(#include <stdlib.h>
)- Инициализирует (“засеивает”) генератор псевдослучайных чисел значением
seed
.
- Инициализирует (“засеивает”) генератор псевдослучайных чисел значением
time(time_t *timer)
(#include <time.h>
)- Возвращает текущее календарное время как количество секунд, прошедших с начала эпохи (обычно 01.01.1970 UTC).
- Часто используется для инициализации
srand
для получения разных последовательностейrand()
при каждом запуске:srand(time(NULL));
(илиsrand((unsigned int)time(NULL));
).
〰〰〰 𓆝 𓆟 𓆞 𓆝 𓆟 𓆝 𓆟 𓆞 〰〰〰