C_Kurs_Lekt / DOC_RAZNOE / Пример программы использующей функции
.pdf/*################################################
Пример программы использующей функции Общая структура такой программы (рекомендуемая)
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