- •Лекция 8
- •Основные понятия и определения
- •Основные понятия и определения
- •Основные понятия и определения
- •Виды функций
- •Описание функций
- •Прототип функции
- •Параметры функции
- •Прототип функции
- •Заголовок функции
- •Заголовок функции
- •Тело функции
- •Пример
- •Пример
- •Пример
- •Пример
- •Структура программы
- •Пример
- •Пример
- •Функциональная схема программы
- •Пример
- •Возвращаемое значение функции
- •Пример
- •Пример
- •Возврат значений сложных типов
- •Параметры функции
- •Передача параметров по значению и по ссылке
- •Передача по значению
- •Передача по ссылке
- •Передача по ссылке
- •Пример
- •Пример
- •Массивы как параметры функции
- •Массивы как параметры функции
- •Массивы как параметры функции
- •Массивы как параметры функции
- •Массивы как параметры функции
- •Строки как параметры функции
- •Строки как параметры функции
- •Передача параметров
- •Нижний уровень передачи параметров
Заголовок функции
Каждый элемент (формальный параметр) имеет следующий формат объявления:
тип имя
Примеры заголовков функций:
int func(int i, double x, double y) void func(int ind, char *string) double func(void)
Тело функции
Тело функции – часть-реализация, содержащая программный код, выполняемый при вызове функции. Тело функции всегда следует сразу после заголовка функции (разделять их нельзя) и заключено в фигурные скобки.
Пример
Реализация функции вычисления факториала числа.
double factorial(unsigned);
...
double factorial(unsigned num)
{
double fact = 1.0; for(unsigned i=1;i<=num;i++)
fact *= (double)i; return fact;
}
Пример
Вызов функции вычисления факториала представлен в следующем фрагменте программы:
unsigned n = 8; double vals[2] = {0.0};
...
//Константа 5 – фактический параметр vals[0] = factorial(5);
//Переменная n – фактический параметр vals[1] = factorial(n);
...
Пример
Подсчет количества положительных элементов в целочисленном массиве.
unsigned positive(int [], unsigned);
...
unsigned positive(int arr[], unsigned num)
{
unsigned count = 0; for(unsigned i=0;i<num;i++)
if(arr[i] > 0) count++; return count;
}
Пример
Вызов функции подсчета положительных элементов в целочисленном массиве представлен в следующем фрагменте программы:
unsigned n = 10;
int array[n];
...
unsigned cnt = positive(array,n);
...
Структура программы
1:подключение библиотек.
2:объявление глобальных пользовательских типов данных и переменных.
3:объявление прототипов пользовательских функций.
4:реализация функции main.
5:реализация (описание заголовков и тел) пользовательских функций.
Пример
Разработать |
программу, |
которая |
в диалоговом режиме |
|||
запрашивает у |
пользователя |
два вещественных числа |
||||
и вычисляет отношение максимального числа к |
||||||
минимальному |
числу. Определение максимума и минимума |
|||||
двух чисел, а также деления двух чисел |
в |
соответствии с |
||||
заданием |
необходимо |
реализовать |
в |
виде отдельных |
||
функций. |
|
|
|
|
|
|
Пример
#include <stdio.h> #include <string.h>
void division(double,double); int main(int argc, char *argv[])
{
do{
char str[80];
printf("Введите два числа для/ вычислений\nили пустую/ строку для выхода\n>:");
gets(str);
if(strcmp(str,"") == 0) break; double x,y;
sscanf(str,"%lf %lf",&x,&y); division(x,y);
}while(1); return 0;
}
double max(double x, double y)
{
return (x>y)?x:y;
}
double min(double x, double y)
{
return (x<y)?x:y;
}
void division(double x, double y)
{
double res = max(x,y)/min(x,y); printf("Результат: %lf\n",res);
}
Функциональная схема программы
Функция main
Функция I-го уровня |
… |
Функция I-го уровня |
|
|
|
Функция II-го уровня |
… |
Функция II-го уровня |
|
|
|
… |
|
… |