- •Алфавит языка
- •Идентификаторы
- •Структура программы
- •Переменные
- •Константы
- •Типы данных
- •Выражения и операции
- •Арифметические операции.
- •Выражения и операции
- •Операции отношения.
- •Логические операции.
- •Структура программы
- •Форматированный ввод с клавиатуры.
- •Scanf(“форматная_строка”, список_аргументов);
- •Форматированный вывод на экран.
- •Printf(“форматная_строка”, список_аргументов);
- •Операция присваивания.
- •Условный оператор if
- •If (выражение) оператор1; else оператор2;
- •If (выражение) оператор;
- •Оператор выбора (переключатель)
- •Операторы циклов
- •Цикл с предусловием while
- •Операторы циклов
- •Цикл с постусловием do-while
- •Операторы циклов
- •Цикл с параметром for
- •Массивы
- •Массивы
- •Одномерные массивы
- •Массивы
- •Массивы
- •Двумерные массивы
- •Массивы
- •Двумерные массивы
- •Операции над элементами двумерного массива
- •Функции
- •Функции
- •Ввод – вывод строк
- •Ввод – вывод строк
- •Структуры
- •Структуры
- •Функции работы с файлами
- •Указатели
- •Операции над указателями
- •Динамическое выделение памяти
Функции
В языке Cи задача может быть разбита на более простые подзадачи при помощи подпрограмм-функций. Использование подпрограмм в коде программы и ведет к упрощению ее структуры, поскольку функцию записывают один раз, а вызывать ее на выполнение можно многократно из разных точек программы. Кроме того, упрощается процесс отладки программы, содержащей подпрограммы.
В языке Си вся программа строится только из функций. Всякая программа обязательно включает в себя основную функцию с именем main. Если в программе используются и другие функции, то они выполняют роль подпрограмм.
Функция – это именованная последовательность инструкций, выполняющая какое-либо законченное действие. Описывается один раз, а вызываться для выполнения может любое количество раз. Функции могут располагаться в исходном файле в любом порядке.
Объявление функции пользователя, выполняется в двух формах – в форме описания (объявления) и в форме прототипа.
Формат объявления(описания) функции:
тип_результата имя_функции (список формальных параметров)
{тело_ функции}
Пример:
int sum(int a, int b)
{return a+b;}
Тип результата — это тип возвращаемого функцией результата. Если функция не возвращает никакого результата, то для нее указывается тип void.
Имя функции — идентификатор, задаваемый программистом, или main для основной функции.
Список параметров — это список имен формальных параметров функции с указанием типа для каждого из них, разделенных запятыми (может отсутствовать, круглые скобки необходимы в любом случае). Если у функции отсутствует список параметров, то при декларации такой функции желательно в круглых скобках указать void.
Например, void main(void).
Тело функции — это либо составной оператор, либо блок. Признаком блока является наличие описаний программных объектов (переменных, массивов и т.д.), которые действуют в пределах этого блока. Блок, как и составной оператор, ограничивается фигурными скобками.
В Си действует правило: тело функции не может содержать в себе определения других функций.
Оператором возврата из функции в точку ее вызова является оператор return. Он может использоваться в функциях в двух формах:
return; или return выражение;
В первом случае функция не возвращает никакого значения в качестве своего результата. Во втором случае результатом функции является значение указанного выражения. Тип этого выражения должен либо совпадать с типом функции, либо относиться к числу типов, допускающих автоматическое преобразование к типу функции.
В функции может быть несколько операторов return, но может и не быть ни одного, тогда его присутствие подразумевается перед закрывающей тело функции фигурной скобкой. Если функция не должна возвращать значение, указывается тип void, оператор return можно не ставить.
Прототип - предварительное описание функции, задает имя функции, тип возвращаемого результата, количество и типы параметров.
Прототип функции:
тип_результата имя_функции (список);
В списке перечисляются типы параметров данной функции, идентификаторы переменных в круглых скобках прототипа указывать необязательно, т.к. компилятор языка их не обрабатывает.
Точка с запятой в конце прототипа ставится обязательно!
Пример:
int sum(int, int); или int sum(int a, int b);
В определении и в объявлении одной и той же функции типы и порядок следования параметров должны совпадать.
Вызов функции может находиться в любом месте программы, где по синтаксису допустимо выражение того типа, который формирует функция.
Формат обращения к функции (вызов функции):
имя_функции(список_фактических_праметров)
Пример:
Z=sum(x, y);
Функции, определенные пользователем в ЯП Си. Формальные и фактические параметры. Правила соответствия. Передача по значению и по ссылке. Примеры.
