Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C_Kurs_Lekt / DOC_RAZNOE / Пример программы использующей функции

.pdf
Скачиваний:
11
Добавлен:
13.02.2016
Размер:
107.21 Кб
Скачать

/*################################################

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

1)Прототипы функций

2)Главная функция (main) с вызовами функций

3)Тела функций (определения)

Функции - отдельные ("законченные") фрагменты программы. Примеры функций:

-функция печати вектора

-функция печати матрицы

-функция ввода начальных значений

Каждая функция имеет входные параметры и выходные параметры.

При проектировании ф-й нужно определять: что будет входом, я что выходом.

"Особенности" ф-й в "С": функции в Си могут возвращать значения переменных простых типов данных, структуры, объединения. Если необходимо вернуть из функции значения массива или вернуть другую функцию – необходимо использовать указатель (указатель на массив или указатель на функцию).

Рассмотрим некоторые примеры:

1)Функция находит сумму двух чисел (т.е. вход функции – два числа, а выход – одно число). Пусть числа будут целые, тогда

int

summa( int a,int b)

Заголовок функции

{

return a +b; }

Тело функции

 

 

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

У функции два входных параметра a, b (оба целые числа)

Для того чтобы эту функцию использовать (встроить) в программе «Создаем» прототип функции :

А) берем заголовок функции и «убираем» переменные, в конце ставим «;»

int summa(int a,intb) Т.епрототип - int summa(int,int);

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

Все переменные, которые определены в функции являются локальными, т.е. int a,intb – «не будут видны» в основной программе и наоборот – переменные «a и b» из основной программы будут «перекрываться» локальными переменными (справка – посмотреть область действия, область видимости переменных)

int summa( int a, intb)

{ return a +b; }

Как будет выглядеть программа с этой функцией

// 1) идут include

//2) идут прототипы

int summa( int , int );

//3) главная функция int main(){

int e =5, c = 8, z;

//…используем функцию (вызываем) summa. z =summa(e, c);

printf( “ Otvet z = %d\n”, z); return 0;

}

// 4) определения функций

int

summa( int

a, int

b)

{

return a +b; }

Если функция не возвращает или не принимает параметры – используем void

Например, void function_777(void);

( «Для себя»: функция умеет возвращать только одно значение. Если необходимо передать значения массива или функции – необходимо использовать указатель на массив, указатель на функцию.)

Несколько примеров…

1)Работа с векторами

a. Заполнить случайными значениями вектор (одномерный массив)

i.Вектор из целых чисел:

void init_data(int N,int *mas,int a, int b);

или

void init_data(int N,int mas[], int a,int b);

ii.Вектор из действительных целых чисел:

void init_data(int N, double *mas, double a, doubleb);

или

void init_data(int N, double mas[], double a, doubleb);

Вход:

N – число элементов массива, *mas – указатель на массив,

a, b - для датчика случайных чисел

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

b.Распечатать значения вектора (одномерный массив)

i.Вектор из целых чисел:

void init_data(int N, int *mas);

или

void init_data(int N, int mas[]);

ii.Вектор из действительных целых чисел:

void init_data(int N, double *mas);

или

void init_data(int N, double mas[]);

Вход:

N – число элементов массива, *mas – указатель на массив,

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

c.Вычислить сумму элементов массива вектора (одномерный массив)

i.Вектор из целых чисел:

int init_data(int N, int *mas);

или

int init_data(int N, int mas[]);

ii.Вектор из действительных целых чисел: double init_data(int N, double *mas);

или

double init_data(int N, double mas[]);

Вход:

N – число элементов массива, *mas – указатель на массив,

Выход: int – функция возвращает сумму целых чисел – т.е. целое число. double – функция возвращает суммудействительных чисел – т.е.

действительных число.

Если работать с матрицей то функции изменится… ( нужно добавить еще один индекс и исправить указатель)

int init_data(int N, int *mas); =исправитьна =int init_data(int N,intM, int **mas);

double init_data(int N, double *mas); =исправить на =

double init_data(int N,intM, double *mas);

Примеры функций – распечатка «Функции.часть 3» Пример 2 – лаба №1 , Пример 4 – лаба №2