- •4.Элементы языка Си. Символы, лексемы, знаки операций.
- •1.Символы языка
- •2.Лексемы
- •5.Элементы языка Си. Константы, идентификаторы, ключевые слова, комментарии.
- •6.Типы данных.
- •7.1,Объявление переменных. Массивы.
- •7.2,Объявление переменных. Массивы.
- •9.1,Операции и выражения. Арифметические операции
- •11. Логические операции и операции отношения. Операции присваивания
- •12.Условное выражение. Операция Sizeof. Операции приведения типов type.
- •13.1,Преобразование типов в выражения. Правила приведения типов.
- •13.2,Преобразование типов в выражения. Правила приведения типов.
- •14.1, Управление вычислительными процессами. Конструкции if-else, else-if.
- •14.2, Управление вычислительными процессами. Конструкции if-else, else-if.
- •15.Переключатель
- •16. Операторы цикла.
- •17.1.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •17.2.Инструкции break, continue. Инструкция goto и метки. Пустой оператор
- •Пустой оператор
- •18.1.Классы памяти.
- •18.2.Классы памяти.
- •19.1. Функции. Определение ф-ций.
- •Определение ф-ции
- •19.2. Функции. Определение ф-ций.
- •21. Структура программы на языке Си
- •22. Директивы #define и # undef.
- •24,Директивы препроцессора. Препроцессорные операции.
- •Препроцессорные операции
- •25.1, Указатели.Операции &,*.
- •25.2, Указатели.Операции &,*.
- •26. Указатель на неопределенный тип.
- •27.1,Выражения и операции с указателями. Присваивание указателей
- •Сравнение указателей
- •27.2,Выражения и операции с указателями. Применение арифметических операций к указателям
- •29. Массивы и указатели.
- •30.Операции с указателями на массив. Адресная арифметика.
- •32.Массивы указателей. Указатели на указатели.
- •33.Массивы указателей на строки.
- •34.1,Передача параметров из операционной среды.
- •34.2,Передача параметров из операционной среды.
- •36.1,Динамичное распределение памяти.
- •36.2,Динамичное распределение памяти.
- •37,1,Структуры. Операции над структурами
- •37,2,Структуры. Операции над структурами
- •38.Массив структур. Правило выравнивания структурных переменных в памяти
- •39.1,Переименование типов. Средство typedef.
- •39.2,Переименование типов. Средство typedef.
- •40.Поля битов.
- •41.1,Объединения
- •41.2,Объединения
- •42.Ввод, вывод потока.
- •43.Доступ к файлам через поток ввода/вывода.Открытие потока.Закрытие потока.
- •44.1,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •44.2,Доступ к файлам через поток ввода/вывода.Функция потокового ввода вывода.
- •45,Последовательный и прямой доступ в поток.
Определение ф-ции
Определение ф-ции задает имя, кол-во и тип формальных параметров и тело ф-ции. Оно может определять тип возвращаемого значения и класс памяти ф-ции.
[спецификатор_класса_памяти][спецификатор_типа]
имя([спецификатор_формальных_параметров])
тело ф-ции
Класс памяти ф-ции может быть static или extern. По умолчанию считается extern.Спецификатор типа задает тип возвращаемого ф-цией значения и может быть любого основного типа, типа структуры или объединения. Если спецификатор типа не задан, то считается, что ф-ция возвращает значение типа int. Имя ф-ции может быть задано со *, это означает, что ф-ция возвращает указатель. ф-ция не может возвращать массив или ф-цию. Тип возвращаемого значения в определении ф-ции должен соответствовать типу в объявлении ф-ции. Ф-ция возвращает значение, если ее выполнение заканчивается return[выражение]. Если оператор return не задан или не содержит выражение, то ф-ция не возвращает никакого значения, в этом случае спецификатор типа указывается с помощью слова void. Если ф-ция объявлена со спецификатором типа, а значение не возвращается, то результат не определен. Список формальных параметров- это последовательность объявлений формальных параметров, разделенных запятыми.
[register]спец_типа [имя] Список формальных параметров может быть пустым. В списке формальных параметров указывается слово void. Порядок, типы и число формальных параметров в определении ф-ции должны совпадать с порядками, типами и числом параметров в объявлении и всех вызовах ф-ции. Язык Си позволяет задавать переменное число аргументов. Список формальных параметров заканчивается (,…) Однако предполагается, что ф-ция имеет по крайней мере столько аргументов, сколько задано перед последней запятой. Ф-ции может быть передано большее число аргументов, указанных до(,…), над такими аргументами не производится контроль типов. Тело ф-ции – это составной оператор, соединяющий объявления и инструкции. Запрещается внутри тела ф-ции помещать другие ф-ции. Все переменные, объявленые в теле ф-ции, имеют класс памяти auto. Под
19.2. Функции. Определение ф-ций.
каждую из переменных при вызове ф-ции отводится память в стеке и производится инициализация., после чего управление передается первому оператору ф-ции. Параметры передаются в ф-цию посредством копирования аргументов, потому в теле ф-ции нельзя изменять значения аргументов.
20.Ф-ции. Объявление ф-ции. Вызов ф-ции. Рекурсивный вызов ф-ции.
Любая программа состоит только из ф-ций. Ф-ция – это независимая совокупность объявлений и инструкций, приводящая к решению определенной задачи. Каждая ф-ция имеет имя, для вызова ф-ции. В каждой программе есть только одна ф-ция именем main, с к-рой начинается выполнение программы. При вызове ф-ции ей могут быть переданы параметры посредством переменных. Ф-ция может возвращать значение, это значение- оновной результат ф-ции. С использованием ф-ции в Си связаны: 4)определение ф-ции 5)объявление ф-ции 6)вызов ф-ции
Если ф-ция вызывается до определения ее в программе или определение ф-ции находится в другом исходном файле,то вызов ф-ции необходимо предворять объявлением ф-ции. Прототип позволяет компилятору выполнить проверку аргументов в определении и вызове ф-ции. Прототип имеет такой же формат как и определение ф-ции, он он не имеет тела ф-ции и заканчивается « ; »
Имена параметров в списке формальных параметров могут быть произвольными или отсутствовать. Поскольку такие имена имеют область действия до конца объявления и никакой нагрузки не несут. Если прототип ф-ции не задан, а встретился вызов ф-ции, то компилятор создает неявный прототип. В этом случае ф-ция имеет тип , возвращающий значения int и класс памяти extern. Обычно прототипы помещаются перед main, иногда их выносят в отдельный заголовочный файл, подключаемый директивой #include.
Int rus(unsigned char c)
{ if (c>=’A’)&&(c<=’ё’)
return 1;
else return 0;
}
это сама ф-ция, а е прототип выглядит так :
int rus (unsigned char);
вызов
Любая программа состоит только из ф-ций. Ф-ция – это независимая совокупность объявлений и инструкций, приводящая к решению определенной задачи. Каждая ф-ция имеет имя, для вызова ф-ции. В каждой программе есть только одна ф-ция именем main, с к-рой начинается выполнение программы. При вызове ф-ции ей могут быть переданы параметры посредством переменных. Ф-ция может возвращать значение, это значение- оновной результат ф-ции.
С использованием ф-ции в Си связаны:
определение ф-ции
объявление ф-ции
вызов ф-ции
Вызов ф-ции имеет формат
выр ([список_выр])
Выражение вычисляется как адрес ф-ции. Список_выражений представляет собой список фактических аргументов, к-рый может быть пустым.
Выполнение вызова ф-ции происходит следующим образом:
1.Вычисляется выражение в списке выражений и производится необходимое преобразование
20.2,Ф-ции. Объявление ф-ции. Вызов ф-ции. Рекурсивный вызов ф-ции.
типов. Если известен прототип ф-ции, то тип результирующего выражения сравнивается с типом соответствующего формального параметра и если они не совпадают, то результат приводится к типу формального параметра либо выдается предупреждение. 2.Происходит присвоение значений фактических аргументов формальным параметрам. Они копируются в стек, при этом 1-ый аргумент соответствует 1-ому формальному параметру, и т.д. 3.Управление передается на первый оператор ф-ции. 4.Управление передается в точку вызова после выполнение оператора return
Вывод: Вызываемая ф-ция работает с копией фактически аргументов, поэтому никакое изменение значений формальных параметров на значения аргументов, с которых была сделана копия ???. Т.е. формальные и фактические параметры изолированы друг от друга.
В общем случае существует два стиля передачи параметров ф-ции :
1.call – by – value
(c передачей значений параметров ф-ции)
Используетя когда оьъем передаваемых данных ф-ции не велик и ф-ция не возвращает большой объем данных.
2.call - by – reference
(с передачей адресов переменной)
В качестве параметров ф-ции передаются копии адресов переменных, благодоря чему ф-ция получает доступ к адресам переменных, вызывающихся в программе. Это позволяет внутри ф-ции изменять значения переменных. Этот способ позволяет разрабатывать ф-ции,имеющие доступ к массивам и др. протяженным объектам данных. Если в качестве параметра ф-ции используется имя массива, то в ф-цию передается не сам массив, а адрес начала его расположения в памяти.
Рекурисвные ф-ции.
Любая ф-ция в Си может быть вызвана рекурсивно. При каждом вызове для формальных параметров и переменных с классом памяти auto, register выделяется новая память. Переменные с классом памяти static не требуют новой памяти при каждом рекурсивном вызове. Параметры предыдущих незавершенных вызовов не затираются, но при этом они не доступны. Допустимо любое число рекурсивных ф-ций.
П р: n!= 1 n=0
n(n-1)! n>0
long fact(int n )
{ return (n < = 1)? 1 : n*fact(n-1);
}