Мегаобучалка Главная | О нас | Обратная связь


Cоздание и использование пользовательских функций



2018-07-06 319 Обсуждений (0)
Cоздание и использование пользовательских функций 0.00 из 5.00 0 оценок




 

Весь принцип программирования на Си основан на понятии функции. Выполнение программы начинается с команд, содержащихся в функции main(), затем из неё вызываются другие функции: printf, scanf(), getchar(), putchar(). Это библиотечные функции языка Си.

Как же создать свои функции?

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

Нужно знать как определить функцию и как к ней обратиться. Различают 3 момента работы с функцией:

 

1. Объявление функции или прототип функции.

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

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

 

Задача. Напечатать титульный бланк организации.

#inсlude <stdio.h>

void starbar (void); //объявление функции

void main (void) {

starbar (); // вызов функции

printf ("ПГУ");

printf ("им.Т.Г.Шевченко");

printf ("25 октября, 200");

starbar(); - вызов функции

}

void starbar (void) { //определение функции

int count;

for (count=1; count<=65; count++)

putchar ('*');

putchar ('\n');

}

 

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

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

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

 

Параметры функции

 

Вернёмся к рассмотренной задаче. Пусть функция starbar() печатает любой символ, указанный в вызывающей программе. Он передается в функцию как аргумент.

 

#inсlude <stdio.h>

void starbar (char); // объявление функции

void main (void) {

starbar ('_'); // вызов функции

printf ("ПГУ");

printf ("им.Т.Г.Шевченко");

printf ("25 октября, 200");

starbar('#'); // вызов функции

}

void starbar (char x) { // определение функции

int count;

for (count=1; count<=65; count++)

putchar (x);

putchar ('\n');

}

 

Определение функции начинается с заголовка void starbar (char x) {

Переменная x - является формальным параметром. Это новая переменная и под нее должна быть выделена отдельная ячейка памяти. При вызове функции мы присваиваем формальному аргументу значение фактического аргумента.

starbar (‘-‘); x = '-';

Фактический аргумент может быть константой, переменной или сложным выражением.

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

printnum (int i, int j) {

printf ("Первый аргумент %d, вторй аргумент %d\n", i, j);

}

 

Возвращение значения функцией

 

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

 

void main (void){

int a=5, b=10, c=15, d=-10;

int e,f;

e=max(a, b);

f=max(c, d);

}

int max (int i, int j) {

int y;

y=i>j ? i:j;

return(y);

}

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

 

Inline-функции

 

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

 

#include <stdio.h>

#include <conio.h>

#include <dos.h>

 

inline float Circle(float r) {

return 2*3.14*r;

};

void main(void)

{

float y;

y = Circle(2);

printf(“%.2f\n”,y);

}

 

Это увеличивает код программы, но ведет к увеличению быстродействия работы программы. Inline-функции не должны содержать сложные программные конструкции.

 

Значение формальных параметров функции по умолчанию

 

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

 

#include <stdio.h>

void Name1 (float x, int y, char z='b') {

printf("x = %0.1f y = %d, z = %d \n", x,y, (int)z);

}

void Name2 (float x, int y=16, char z='a') {

printf("x = %0.1f y = %d, z = %d \n", x,y, (int)z);

}

void Name3 (float x=1.3, int y=4, char z='c') {

printf("x = %0.1f y = %d, z = %d \n", x,y, (int)z);

}

void main(void) {

Name1(1.0,2);

Name2(100.0);

Name3();

}

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

 

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

 

#include <stdio.h>

#include <string.h>

int Name (int first) {

return first*first;

}

int Name (unsigned first) {

return first*first;

}

char Name (char first) {

return first*first;

}

int Name (int first,char *second) {

return first*strlen(second);

}

float Name (float r) {

return r*r;

}

double Name (double r) {

return r*r;

}

void main(void) {

printf("%d\n", noName(4));

printf("%d\n", noName((unsigned)4));

printf("%c\n", noName('c'));

printf("%d\n", noName(4,"cлово"));

printf("%0.2f\n", noName((float)1.2));

printf("%0.2lf\n", noName((double)1.2));

}

 



2018-07-06 319 Обсуждений (0)
Cоздание и использование пользовательских функций 0.00 из 5.00 0 оценок









Обсуждение в статье: Cоздание и использование пользовательских функций

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...
Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (319)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)