- •Московский государственный социальный университет академия информатики и информационных технологий
- •Введение
- •Часть. Основы программирования на Си
- •1.1. Структура простейшей Си-программы
- •1.2. Данные в Си и операции над ними
- •1.2.1. Свойства ячейки памяти. Переменные и константы
- •1.2.2. Типы данных в Си
- •1.2.3. Правила записи констант в Си
- •1.2.4. Описание переменных и именованных констант в Си.
- •1.2.5. Выражения в Си
- •1.3. Операторы преобразования данных
- •1.3.1. Общие положения
- •1.3.2. Функция форматного выводаprintf()
- •1.3.3. Функция форматного вводаscanf()
- •1.4. Разработка программ на Си
- •1.4.1. Понятие о качестве программы и основные технологические принципы разработки программ
- •1.4.2. Алгоритм и способы его записи.
- •1.4.3. Изображение алгоритмов в виде блок-схем
- •1.4.4. Базовые структуры алгоритмов и их кодирование на Си.
- •1. Следование
- •2. Разветвление (развилка)
- •If (условие)
- •If (условие)
- •3. Цикл
- •1.4.4. Примеры разработки программ
- •1.5. Массивы и указатели
- •1.5.1. Понятие массива. Основные правила работы с массивами в Си
- •1.5.2. Примеры программ с массивами.
- •1.5.3. Инициализация массивов
- •1.5.4. Указатели в Си10
- •1.5.5. Связь массивов с указателями в Си
- •Часть. Функции и многофайловые программы в Си
- •2.1. Общие сведения о подпрограммах и функциях
- •2.2. Функции си
- •2.2.1. Описание функции
- •2.2.2. Обращение к функции
- •2.2.3. Место описания функции в программе
- •2.2.4. Примеры программ, использующих функции
- •2.3. Краткие сведения о препроцессоре Си
- •2.3.2.Директива макроопределения #define
- •2.3.3. Директива #include включения файлов
- •2.3.4. Директивы условной компиляции
- •2.415. Многофайловые си-программы
- •2.4.1. Структура программы на Си. Область действия переменных
- •2.4.2. Время жизни и класс памяти переменных
- •Описатели класса памяти
- •2.4.3 Понятие о файле проекта
- •Часть. Обработка символьной информации и документов сложной структуры
- •3.1. Обработка символьной информации на Си
- •3.1.1. Символьный тип
- •3.1.2. Работа со строками символов в Си. Строковые литералы. .
- •3.1.3. Функции и макросы для работы с символьной информацией
- •3.1.4. Примеры программ
- •3.2. Тип "структура" в Си
- •Структура
- •3.3. Файлы в Си
- •3.3.1. Общие понятия.
- •3.2.Функции Си для работы с файлами
- •3.3.3. Примеры программ, использующих файлы
- •Литература
- •Содержание
2.2. Функции си
Как всегда при изучении подпрограмм, рассмотрим два вопроса: описание функций Си и обращение к ним.
2.2.1. Описание функции
Общий вид описания функций:
ТипИмя_Функции(Список_Формальных_Параметров)
{ Описания данных
Операторы
return(выражение, возвращаемое функцией)
}
Конструкция ТипИмя_Функции(Список_Формальных_Параметров) называетсязаголовком, остальная часть -блокомфункции. Для того, чтобы запрограммировать вызов функции, достаточно знать заголовок.
В заголовке тип- тип возвращаемого значения; если он отсутствует, то по умолчанию принимаетсяint. В оператореreturnуказывается выражение, значение которого присваивается имени функции; этот основной или единственный результат функции. В качестве типа может использоваться словоvoid14; в этом случае значение через имя функции не возвращается, т. е. имеем аналог подпрограммы общего назначения; тогда, естественно,returnне нужен.
Имя_Функцииимеет два смысла:
имя алгоритма; более строго, имя функции - это особый указатель (указатель на функцию), его значение - адрес точки входа в функцию;
возвращаемое значение (имя функции можно использовать в выражениях).
Заметим, что использование имени функции внутри ее блока рассматривается как обращение функции к ней самой (рекурсивное обращение). После имени функции обязательно должны идти скобки со списком параметров (если этот список не пустой). Использовать имя функции в выражениях как имя простой переменной нельзя. Если это необходимо по смыслу задачи, например, для накапливания результата, то следует завести промежуточную переменную и использовать ее вместо имени функции, а затем ее значение присвоить имени функции с помощью оператора return (см. пример 2 п.2.2.4).
Если имя функции main, то это главная функция, она первой получает управление после запуска программы;mainобязательно присутствует в программе, и только один раз. В настоящем пособии рассматриваемmainбез параметров, хотя Си позволяет разрабатывать программы с параметрами.
Список формальных параметров.имеет вид: тип1 параметр1, тип2 параметр2,..., типN параметрN
В список формальных параметров во всех алгоритмических языках включаются переменные, которые передаются из главной (или другой вызывающей) функции в вызываемую функцию и из вызываемой функции в вызывающую, т. е. это “вход”и“выход”функции. У массивов-формальных параметров при описании можно не указывать число значений первого индекса.
Если список формальных параметров отсутствует или вместо него стоит слово void, то нет передачи значений в функцию.
Замена формальных параметров на фактические в Си происходит только “по значению”, поэтомуу переменных-результатов функции в список формальных параметров следует включать адрес (вспомните функцию scanf –п. 1.3.3).Имя массива является адресом начала массива, поэтомумассивы в Си передаются только "по имени", передачу массивов“по значению” осуществить невозможно.
2.2.2. Обращение к функции
Существует два способа обращения к функции:
1) как к процедуре общего назначения, т. е. можно для вызова функции использовать оператор Имя_Функции(Список_Фактических_Параметров)
2) как к функции, т. е. можно указатель функции Имя_Функции(Список_Фактических_Параметров) - использовать в выражениях.
Для функции типа voidдопустим только первый способ.
Заметим еще раз, что фактические параметры должны соответствовать формальным по количеству, порядку перечисления и типу.