Как сделать функцию в си

Добавил пользователь Алексей Ф.
Обновлено: 28.09.2024

Привет, дорогой читатель! Вам, наверное, приходилось в программе использовать один и тот же блок кода несколько раз. Например, выводить на экран одну и ту же строчку. Для того, чтобы каждый раз не писать одинаковый блок кода в C++, присутствуют функции.

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

Что такое функции

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

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

Мы хотим, чтобы вы обратили внимание на увеличение количества строк в первой программе при выводе этих двух строк 5 раз.

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

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

Чтобы понять, как работают локальные переменные (например, переменные в функциях) и глобальные переменные, можете почитать данную статью.

Как создать функции в C++

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

Давайте разберем эту конструкцию:

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

Но если мы не собираемся ничего передавать, а например, хотим просто вывести строку, то на месте можно указать тип void . Также вы можете указать тип int, это ни на что не повлияет.

  • Имя функции. Нам нужно задать функции имя (исключениями являются зарезервированные слова в C++, имена начинающиеся с цифр, а также имена разделенные пробелом).

Лучше всего задавать такое имя, которое будет говорить вам в будущем, за что отвечает эта функция. И тогда в будущем вам не придется вспоминать, за что она отвечает.

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

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

  • Блок кода. После открывающей скобки идет блок кода, который будет начинать работать при вызове функции.

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

Если вы не знали main() — это тоже функция.

Как вызывать функцию

Для вызова функций вам нужно использовать такую конструкцию:

Например, выше для вызова функции stroka() (эта функция находится выше) нам нужно использовать такую конструкцию:

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

Зачем использовать функции

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

Перегрузка функций

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

Все дело в том, что у каждой функции есть свое полное имя (или по-другому сигнатура). Параметры функции — это вся информация о функции. В эту информацию входят:

  • Имя функции.
  • Число аргументов функции.
  • Типы аргументов.

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

Перегрузка функций — это создание функций с одинаковыми именами, но с разными сигнатурами (полными именами).

понедельник, 9 июля 2012 г.

Занятие 10. Функции определяемые пользователем.Уроки программирования для чайников. Язык Си.

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

Прочитайте улучшенную версию этого урока "Простые пользовательские функции".

  • Ещё более доступное объяснение
  • Дополнительные материалы
  • 10 задач на программирование с автоматической проверкой решения

В домашнем задании к уроку №5 я просил вас, написать программу которая решает уравнение ах=b в целых числах относительно х. Что многие успешно сделали. Разберем теперь другую сторону вопроса. Пусть нам надо проверить одну такую программу. Вот её код.

ах=b следовательно х=b/a. Так как решение в целых числах, то при делении b на a не должно получаться остатка.

Мы можем запустить нашу программу несколько раз и подставить в неё эти данные, но это слишком долго. Отметаем этот способ.

Можем переписать программу добавив в неё цикл на 4 шага и каждый раз вводить значения и смотреть ответы. Программа будет выглядеть следующим образом.


Вроде бы хороший способ. Конечно теперь полегче, не надо каждый раз запускать заново программу. Но всё равно, нам самим приходится постоянно вводить данные. Отметаем и этот способ.

Можно немного извратиться и сделать так, чтобы в при каждой итерации цикла в программу передавались новые значения. Но мы этого делать не будем, а займемся более интересными вещами.

Хорошо было бы написать так программу, чтобы мы туда один раз скопировали текст своей программы, запустили её и она нам сразу выдала бы, правильно работает программа или нет.

Вот здесь-то нам и придут на помощь подпрограммы. Подпрограмма это отдельная программа которая может выполняться внутри основной программы.

Подпрограммы в различных языках программирования делят на два вида. Функции и процедуры. Различие между двумя этими названиями лишь в том, что

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

Функция main, которая есть в каждой нашей программе является именно функцией, так как после того как она выполнится она возвращает в программу которое её вызвала, а в данном случае операционная система, некоторое значение.

В некоторых языках программирования функции и процедуры разграничены синтаксисом языка. Например, в языке программирования Pascal. В языке Си, процедура это любая функция которая возвращает значение типа void. Поэтому, здесь и далее я буду использовать название функция как для функций, так и для процедур.

Написать свою функцию очень просто, и вы уже много раз это делали. Любая функция состоит из двух частей: заголовка и тела функции. Покажем это на примере функции main.

Заголовок функции состоит из трех частей. Сначала нужно указать тип значения которое возвращает функция. В нашем случае это int. То есть когда функция main закончит свою работу она должна вернуть в программу которая её вызвала какое-то целое значение. Если нам не нужно чтобы программа возвращала какое-то значение, то пишем тип void.

После типа возвращаемого значения идет имя функции. В нашем случае это имя main. Но могло быть и какое-нибудь другое.

Следом за именем функции в скобках, пишут типы и количество аргументов (параметров) функции. Т.е. значения которые передаются в функцию. В нашем случае там написано void, это значит то функция не принимает никаких аргументов.

int zadanie_1( void ) //функция с именем zadanie_1, которая не принимает ни одного параметра, и после окончания работы возвращает значение типа int

void func( int,int ) //функция с именем func , которая принимает два параметра каждый из которых целого типа, и после окончания работы не возвращает ничего.

float f_3( int,int,float ) //функция с именем f_3, которая принимает три аргумента, причем первые два типа int, а третий типа float, и возвращает значение типа float.

Здесь описано как должна эта функции работать. Если функция должна возвращать какое-то значение то в теле функции обязательно должна быть инструкция return. В нашем примере, так как функция main должна возвращать значение типа int, после того как программа вывела на экран Hello World, написана строка return (0); Т.е функция возвращает 0, в программу которая её вызвала.

Задавать и описывать функции мы уже научились. Теперь оформим нашу программу, из листинга 10.1 в виде функции, принимающей 2 значение типа int, и которая ничего не возвращает в результате своей работы

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

Чтобы задать собственную процедуру в си необходимо указать

void имя процедуры( тип параметра 1 параметр1, тип параметра2 параметр2 …. )

//набор команд выполняемых процедурой

Процедура в си описывается до основной программы, которая начинается с ключевого слова main()

void ocenka ( int kol, int pr)

if ( (koef>=0.3) && (koef

if ( (koef>=0.6) && (koef

if ( (koef>=0.9) && (koef

Чтобы вызвать процедуру

Необходимо просто написать ее имя и в скобочках указать значения параметров. Значения параметров можно указать явно

В этом случае в процедуре параметры будут kol = 5 и pr =3

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

В этом случае в процедуре параметры будут kol=10 и pr =4

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

перечисление заголовочных файлов

объявление глобальных переменных

Перечисление функций и процедур

Глобальные переменные можно вызывать и изменять в любой процедуре. Локальные переменные объявляются внутри каждой процедуры и могут изменяться только внутри каждой процедуры, другие процедуры не могут использовать локальные переменные.

Пример программы 13. Локальные и глобальные переменные. В программе

int stat; // глобальная переменная, может вызваться и изменяться в любых местах программы

x=3;// переменная поменялась только в рамках процедуры будет выведено 3

stat=stat+1;// изменение глобальной переменной

int x;// локальная переменная

// процедура изменила глобальную переменную stat. будет выведено 2

//процедура не поменяла локальную для основной программы переменную x. будет выведено 10

Для игр и тестов можно использовать следующую структуру программы

Перечисление заголовочных файлов

Объявление глобальных переменных отвечающих за общую статистику теста

Процедура ввода начальных параметров

Процедура стандартного вопроса теста или хода игры

Процедура расчета и вывода статистки игры

Вызов процедуры ввода начальных параметров

// выполняем тест пока ответ на продолжение игры ==1

Вызов процедуры стандартного вопроса теста или хода игры

printf("Хотите продолжить ? 1 -Да. 2 - Нет.\n");

Вызов процедуры расчета и вывода статистки игры

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

// тест на таблицу квадратов

int stat;// счетчик количества вопросов

void ocenka ( int kol, int pr)

// процедура стандартного вопроса теста . Запрашиваем квадрат числа ch

void vopr(int ch)

printf("Введите квадрат числа %d\n", ch);

// проверка правильности ответа

int b; // начальное число

int ans; // ответ на вопрос о завершении теста

// ввод начального числа теста

printf("Введите начальное число ");

// для прохождения первой итерации

// выполняем тест пока ответ на продолжение игры ==1

stat=stat+1;// увеличиваем число вопросов

// вопрос теста спрашиваем квадрат текущего числа b

b=b+1;// увеличиваем текущее число

// запрос на продолжение теста

printf("Хотите продолжить проверку? 1 -Да. 2 - Нет.\n");

// вывод результатов теста

printf("Всего примеров %d Правильных из них %d\n", stat, prav);

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

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

Тип функции Название функции (параметры)

return возвращаемое значение;

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

Пример программы 15. Программа запрашивает значение аргумента x и возвращает значение от данного аргумента введенной собственной математической функции parabola

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

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

Каждая функция в языке Си должна быть определена, то есть должны быть указаны:

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

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

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

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

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

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

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

Читайте также: