Типы функции используемые в программах на языке си

Кроме вызова функций из стандартных заголовочных файлов, в языке программирования С++ предусмотрена возможность создания собственных функций. В языке программирования С++ есть два типа функций:

  1. Функции, которые не возвращают значений
  2. Функции, возвращающие значение

Определение и вызов функций

В отличие от других языков программирования высокого уровня в языке СИ нет деления на процедуры, подпрограммы и функции, здесь вся программа строится только из функций.

Функция — это совокупность объявлений и операторов, обычно предназначенная для решения определенной задачи. Каждая функция должна иметь имя, которое используется для ее объявления, определения и вызова. В любой программе на СИ должна быть функция с именем main (главная функция), именно с этой функции, в каком бы месте программы она не находилась, начинается выполнение программы.

При вызове функции ей при помощи аргументов (формальных параметров) могут быть переданы некоторые значения (фактические параметры), используемые во время выполнения функции. Функция может возвращать некоторое (одно!) значение. Это возвращаемое значение и есть результат выполнения функции, который при выполнении программы подставляется в точку вызова функции, где бы этот вызов ни встретился. Допускается также использовать функции не имеющие аргументов и функции не возвращающие никаких значений. Действие таких функций может состоять, например, в изменении значений некоторых переменных, выводе на печать некоторых текстов и т.п..

Функции в языке Си

С использованием функций в языке СИ связаны три понятия — определение функции (описание действий, выполняемых функцией), объявление функции (задание формы обращения к функции) и вызов функции.

Определение функции задает тип возвращаемого значения, имя функции, типы и число формальных параметров, а также объявления переменных и операторы, называемые телом функции, и определяющие действие функции. В определении функции также может быть задан класс памяти.

int rus (unsigned char r) < if (r>=’А’ c

В данном примере определена функция с именем rus, имеющая один параметр с

именем r и типом unsigned char. Функция возвращает целое значение, равное 1,

если параметр функции является буквой русского алфавита, или 0 в противном

В языке СИ нет требования, чтобы определение функции обязательно

предшествовало ее вызову. Определения используемых функций могут следовать за

определением функции main, перед ним, или находится в другом файле.

Однако для того, чтобы компилятор мог осуществить проверку соответствия

типов передаваемых фактических параметров типам формальных параметров до вызова

функции нужно поместить объявление (прототип) функции.

Объявление функции имеет такой же вид, что и определение функции, с той лишь

разницей, что тело функции отсутствует, и имена формальных параметров тоже

могут быть опущены. Для функции, определенной в последнем примере, прототип

Язык Си для начинающих / #6 — Функции в Си

может иметь вид

int rus (unsigned char r); или rus (unsigned char);

В программах на языке СИ широко используются, так называемые, библиотечные

функции, т.е. функции предварительно разработанные и записанные в библиотеки.

Прототипы библиотечных функций находятся в специальных заголовочных файлах,

поставляемых вместе с библиотеками в составе систем программирования, и

включаются в программу с помощью директивы #include.

Если объявление функции не задано, то по умолчанию строится прототип функции

на основе анализа первой ссылки на функцию, будь то вызов функции или

определение. Однако такой прототип не всегда согласуется с последующим

определением или вызовом функции. Рекомендуется всегда задавать прототип

функции. Это позволит компилятору либо выдавать диагностические сообщения, при

неправильном использовании функции, либо корректным образом регулировать

несоответствие аргументов устанавливаемое при выполнении программы.

Объявление параметров функции при ее определении может быть выполнено в так

называемом «старом стиле», при котором в скобках после имени функции следуют

только имена параметров, а после скобок объявления типов параметров. Например,

функция rus из предыдущего примера может быть определена следующим образом:

int rus (r) unsigned char r; <. /* тело функции */. >

В соответствии с синтаксисом языка СИ определение функции имеет следующую

[спецификатор-класса-памяти] [спецификатор-типа] имя-функции ([список-формальных-параметров])

Читайте также:
Отключить запрос на запуск программы

Необязательный спецификатор-класса-памяти задает класс памяти функции,

который может быть static или extern. Подробно классы памяти будут рассмотрены

в следующем разделе.

Спецификатор-типа функции задает тип возвращаемого значения и может задавать

любой тип. Если спецификатор-типа не задан, то предполагается, что функция

возвращает значение типа int.

Функция не может возвращать массив или функцию, но может возвращать

указатель на любой тип, в том числе и на массив и на функцию. Тип возвращаемого

значения, задаваемый в определении функции, должен соответствовать типу в

объявлении этой функции.

Функция возвращает значение если ее выполнение заканчивается оператором

return, содержащим некоторое выражение. Указанное выражение вычисляется,

преобразуется, если необходимо, к типу возвращаемого значения и возвращается в

точку вызова функции в качестве результата. Если оператор return не содержит

выражения или выполнение функции завершается после выполнения последнего ее

оператора (без выполнения оператора return), то возвращаемое значение не

определено. Для функций, не использующих возвращаемое значение, должен быть

использован тип void, указывающий на отсутствие возвращаемого значения. Если

функция определена как функция, возвращающая некоторое значение, а в операторе

return при выходе из нее отсутствует выражение, то поведение вызывающей функции

после передачи ей управления может быть непредсказуемым.

Список-формальных-параметров — это последовательность объявлений формальных

параметров, разделенная запятыми. Формальные параметры — это переменные,

используемые внутри тела функции и получающие значение при вызове функции путем

копирования в них значений соответствующих фактических параметров.

Список-формальных-параметров может заканчиваться запятой (,) или запятой с

многоточием (. ), это означает, что число аргументов функции переменно.

Однако предполагается, что функция имеет, по крайней мере, столько обязательных

аргументов, сколько формальных параметров задано перед последней запятой в

списке параметров. Такой функции может быть передано большее число аргументов,

но над дополнительными аргументами не проводится контроль типов.

Если функция не использует параметров, то наличие круглых скобок

обязательно, а вместо списка параметров рекомендуется указать слово void.

Порядок и типы формальных параметров должны быть одинаковыми в определении

функции и во всех ее объявлениях. Типы фактических параметров при вызове

функции должны быть совместимы с типами соответствующих формальных параметров.

Тип формального параметра может быть любым основным типом, структурой,

объединением, перечислением, указателем или массивом. Если тип формального

параметра не указан, то этому параметру присваивается тип int.

Для формального параметра можно задавать класс памяти register, при этом для

величин типа int спецификатор типа можно опустить.

Идентификаторы формальных параметров используются в теле функции в качестве

ссылок на переданные значения. Эти идентификаторы не могут быть переопределены

в блоке, образующем тело функции, но могут быть переопределены во внутреннем

блоке внутри тела функции.

При передаче параметров в функцию, если необходимо, выполняются обычные

арифметические преобразования для каждого формального параметра и каждого

фактического параметра независимо. После преобразования формальный параметр не

может быть короче чем int, т.е. объявление формального параметра с типом char

равносильно его объявлению с типом int. А параметры, представляющие собой

действительные числа, имеют тип double.

Преобразованный тип каждого формального параметра определяет, как

интерпретируются аргументы, помещаемые при вызове функции в стек.

Несоответствие типов фактических аргументов и формальных параметров может быть

причиной неверной интерпретации.

Тело функции — это составной оператор, содержащий операторы, определяющие

Все переменные, объявленные в теле функции без указания класса памяти,

имеют класс памяти auto, т.е. они являются локальными. При вызове функции

локальным переменным отводится память в стеке и производится их инициализация.

Управление передается первому оператору тела функции и начинается выполнение

функции, которое продолжается до тех пор, пока не встретится оператор return

или последний оператор тела функции. Управление при этом возвращается в точку,

следующую за точкой вызова, а локальные переменные становятся недоступными.

При новом вызове функции для локальных переменных память распределяется вновь,

и поэтому старые значения локальных переменных теряются.

Параметры функции передаются по значению и могут рассматриваться как

локальные переменные, для которых выделяется память при вызове функции и

производится инициализация значениями фактических параметров. При выходе из

функции значения этих переменных теряются. Поскольку передача параметров

происходит по значению, в теле функции нельзя изменить значения переменных в

вызывающей функции, являющихся фактическими параметрами. Однако, если в

Читайте также:
Лучшая программа для проверки жесткого диска victoria

качестве параметра передать указатель на некоторую переменную, то используя

операцию разадресации можно изменить значение этой переменной.

/* Неправильное использование параметров */ void change (int x, int y)

В данной функции значения переменных x и y, являющихся формальными

параметрами, меняются местами, но поскольку эти переменные существуют только

внутри функции change, значения фактических параметров, используемых при вызове

функции, останутся неизменными. Для того чтобы менялись местами значения

фактических аргументов можно использовать функцию приведенную в следующем

/* Правильное использование параметров */ void change (int *x, int *y)

При вызове такой функции в качестве фактических параметров должны быть

использованы не значения переменных, а их адреса

Если требуется вызвать функцию до ее определения в рассматриваемом файле,

или определение функции находится в другом исходном файле, то вызов функции

следует предварять объявлением этой функции. Объявление (прототип) функции

имеет следующий формат:

[спецификатор-класса-памяти] [спецификатор-типа] имя-функции

В отличие от определения функции, в прототипе за заголовком сразу же следует

точка с запятой, а тело функции отсутствует. Если несколько разных функций

возвращают значения одинакового типа и имеют одинаковые списки формальных

параметров, то эти функции можно объявить в одном прототипе, указав имя одной

из функций в качестве имени-функции, а все другие поместить в

список-имен-функций, причем каждая функция должна сопровождаться списком

формальных параметров. Правила использования остальных элементов формата такие

же, как при определении функции. Имена формальных параметров при объявлении

функции можно не указывать, а если они указаны, то их область действия

распространяется только до конца объявления.

Источник: cyberpedia.su

Функции в языке Си.

Функция — это самостоятельная единица программы, которая спроектирована для реализации конкретной подзадачи.
Функция является подпрограммой, которая может содержаться в основной программе, а может быть создана отдельно (в библиотеке). Каждая функция выполняет в программе определенные действия.

Определение функции

  • тип возвращаемого значения;
  • имя функции;
  • информация о формальных аргументах;
  • тело функции.

ТипВозвращаемогоЗначения ИмяФункции(СписокФормальныхАргументов)

Пример: Функция сложения двух вещественных чисел

float function(float x, float z)

Различают системные и собственные функции. Системные функции хранятся в стандартных библиотеках, и пользователю не нужно вдаваться в подробности их реализации. Достаточно знать лишь их сигнатуру. Примером системных функций, являются функции printf() и scanf().

Собственные функции — это функции, написанные пользователем для решения конкретной подзадачи.

Вызов функции

Общий вид вызова функции

Переменная = ИмяФункции(СписокФактическихАргументов);

Фактический аргумент — это величина, которая присваивается формальному аргументу при вызове функции. Таким образом, формальный аргумент — это переменная в вызываемой функции, а фактический аргумент — это конкретное значение, присвоенное этой переменной вызывающей функцией. Фактический аргумент может быть константой, переменной или выражением.

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

Математические функции хранятся в стандартной библиотеке math.h. Аргументы большинства математических функций имеют тип double. Возвращаемое значение также имеет тип double. Углы в тригонометрических функциях задаются в радианах. Основные математические функции стандартной библиотеки.

Функция Описание
int abs( int x) Модуль целого числа x
double acos( double x) Арккосинус x
double asin( double x) Арксинус x
double atan( double x) Арктангенс x
double cos( double x) Косинус x
double cosh( double x) Косинус гиперболический x
double exp( double x) Экспонента x
double fabs( double x) Модуль вещественного числа
double fmod( double x, double y) Остаток от деления x/y
double log( double x) Натуральный логарифм x
double log10( double x) Десятичный логарифм x
double pow( double x, double y) x в степени y
double sin( double x) Синус x
double sinh( double x) Синус гиперболический x
double sqrt( double x) Квадратный корень x
double tan( double x) Тангенс x
double tanh( double x) Тангенс гиперболический x

Источник: it-black.ru

Основной ввод и вывод в языке Си

Язык программирования C включает стандартные библиотеки, которые обеспечивают ввод и вывод данных в программах. Указатели файлов обеспечивают доступ к файлу для чтения и записи.

Стандартный файл Указатель файла Устройство
Стандартный ввод stdin Клавиатура
Стандартный вывод stdout Экран
Стандартная ошибка stderr Ваш экран

Библиотека stdio.h или библиотека стандартного ввода вывода в языке C содержит методы ввода и вывода. Заголовочный файл stdio.h расшифровывается как Standard Input Output. В нем содержится информация, связанная с функциями ввода/вывода.

Функция Описание
printf() Используется для печати строк, целых чисел, символов и т.д. на экране вывода.
scanf() Считывает символ, строку, целое число и т.д. с клавиатуры.
getc() Считывает символ из файла.
putc() Записывает символ в файл.
fopen() Открывает файл, все функции работы с файлами определены в заголовочном файле stdio.h.
fclose() Закрывает открытый файл.
remove() Удаляет файл.
fflush() Промывает файл.
Читайте также:
Как установить программу компас

функции putchar(), getchar() в языке Си

Метод putchar() в языке программирования C используется для записи символа на стандартный вывод/экран. Метод getchar() извлекает/читает символ с клавиатурного ввода. Ниже приведено объяснение и синтаксис вышеупомянутого метода работы с файлами.

putchar(0

Объявление: int putchar(int char)

Функция putchar() используется для записи символа на стандартный вывод/экран. В программе на языке Си мы можем использовать функцию putchar, как показано ниже.

где char — символьная переменная/значение.

getchar()

Объявление: int getchar(void)

Функция getchar() используется для получения/чтения символа с клавиатуры. В программе на языке Си мы можем использовать функцию getchar следующим образом.

где char — символьная переменная/значение.

#include int main( ) int c; printf( «Enter a value :»); c = getchar( ); printf( «nYou entered: «); putchar( c ); return 0; >
Вход в полноэкранный режим Выход из полноэкранного режима

Согласно приведенному выше примеру, метод int getchar(void) возвращает следующий доступный символ с экрана в виде целого числа. Эта функция считывает только один символ за раз. Если вы хотите считывать с экрана более одного символа, вы можете использовать этот метод в цикле.

Метод int putchar(int c) выводит на экран предоставленный ему символ и возвращает тот же символ. Эта функция вставляет только один символ за раз. Если вы хотите вывести на экран более одного символа, вы можете использовать этот прием в цикле.

Но когда мы используем более одного символа в программе, нам необходимо использовать функции gets() и puts().

#include int main( ) char str[100]; printf( «Enter a value :»); gets( str ); printf( «nYou entered: «); puts( str ); return 0; >
Вход в полноэкранный режим Выход из полноэкранного режима

Функции scanf() и printf()

Метод scanf() в языке C считывает значение с консоли в соответствии с указанным типом. Функция scanf(const char *format,…) получает входные данные из стандартного потока ввода stdin и сканирует их, используя указанный формат.

Метод printf() в C печатает значение, переданное в качестве параметра, на экране консоли. Функция printf(const char *format,…) выводит данные в стандартный выходной поток stdout и приводит их в соответствие с заданным форматом.

Использование функций scanf() и printf() с основными типами данных в C.

  • Целое число

Input: scanf(«%d», Output: printf(«%d», intVariable);
Вход в полноэкранный режим Выйти из полноэкранного режима
# include int main(void) int fahrenheit, celsius; printf(«Please enter fahrenheit as a integer: «); scanf(«%d», printf(«You have entered: %d as the temperature in fahrenheit», fahrenheit); celsius = (fahrenheit — 32) /1.8 ; printf(«n %d fahrenheit is %d celsius n», fahrenheit, celsius); return 0; >
Вход в полноэкранный режим Выход из полноэкранного режима

  • Поплавок

Input: scanf(«%f», Output: printf(«%f», floatVariable);
Войти в полноэкранный режим Выход из полноэкранного режима
#include int main() float speed; printf(«n********************************»); printf(«nEnter Your Speed: «); scanf(«%f», printf(«You have entered: %f as the Speed», speed); if (speed 60) printf(«nYour Speed is Normal»); > else printf(«nYour Speed is Too High»); > return 0; >
Войти в полноэкранный режим Выход из полноэкранного режима
Input: scanf(«%c», Output: printf(«%c», charVariable);
Вход в полноэкранный режим Выход из полноэкранного режима
#include int main() char ch; printf(«nnEnter the Character: «); scanf(«%c», printf(«nEntered character is: %c», ch); >
Войти в полноэкранный режим Выход из полноэкранного режима
Input: scanf(«%s», stringVariable); Output: printf(«%s», stringVariable);
Ввести полноэкранный режим Выйти из полноэкранного режима
#include int main() char str[50]; printf(«Enter the Word: «); scanf(«%sn», str); printf(«nEntered Word is: %s», str); printf(«nnEnter the Sentence: «); scanf(«%[^n]ns», str); printf(«nEntered Sentence is: %s», str); return 0; >
Ввести полноэкранный режим Выйти из полноэкранного режима

  • Всякий раз, когда мы пишем ^n в функции scanf , мы сможем записать строку с пробелами, а также сохранить в определенной переменной (здесь, переменная str ), пока не встретится n (здесь, n — это клавиша Enter).

Источник: procodings.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru