- •Министерство образования и науки российской федерации
- •1. Основы алгоритмизации
- •2. Основы программирования на языке Си
- •Типы данных
- •Функции ввода-вывода
- •Условные операторы
- •If (выражение) оператор1;
- •If (выражение)
- •Операторы цикла
- •Оператор switch
- •Операторы прерывания break и continue
- •Массивы
- •Функции
- •1) Способ.
- •2) Способ.
- •Домашнее задание Алгоритмизация и программирование
Функции
Все программы на языке Си должны содержать одну главную функцию main(), с которой начинается выполнение программы. Функция main() может содержать вызовы других функций, которые в свою очередь могут содержать вызовы следующих функций и т.д.
Нами уже использовались многие функции из стандартных библиотек языка Си, например, математические функции, функции ввода-вывода и др. Теперь мы обратимся к конструкциям языка, с помощью которых и создаются функции.
Определение функции содержит:
тип_функции имя_функции (спецификация_формальных параметров)
{ определения_объектов;
исполняемые_операторы;
}
При этом имеет место следующее:
Формальные параметры могут отсутствовать.
Тело функции – это составной оператор или блок.
Переменные, объявленные в теле функции, являются локальными; переменные, объявленные вне функций, являются глобальными.
Определения функций не могут быть вложенными.
В теле функции может использоваться оператор return для возврата из функции результата. Оператор return может вернуть не более одного значения.
Тип функции определяется типом, возвращаемого ею значения. Если функция не вырабатывает значения, то она должна быть объявлена типом void. Если тип функции не объявлен, то по умолчанию она имеет тип int.
Необходимо различать объявление функции или прототип функции от определения функции. Определение функции задает действия самой функции, а прототип функции только объявляет функцию и не содержит тела функции.
Обращение к функции (иначе говоря, вызов функции) имеет вид:
имя_функции (список фактических параметров)
Фактические параметры – это выражения, которые передаются из вызывающей программы в функцию по значению, то есть вычисляется значение каждого выражения, представляющего аргумент, и именно это значение используется в теле функции вместо соответствующего формального параметра. На сами фактические параметры никакого влияния функция не оказывает, она работает только с их копиями. После выхода из функции освобождается память, выделенная для ее формальных параметров.
Если функция определяется типом void , то такая функция не может входить ни в какие выражения, требующие значения, а должна вызываться в виде отдельного оператора.
Функция может иметь несколько операторов return. Например,
float min (float a, float b)
{ if (a<=b) return a; else return b; }
Пример.
Вычислить среднее значение функции y(x)=5x3 + x2 + x в точках a, b, (a+b)/2, где a = 3, b = 4.
Программу можно составить двумя способами: 1) без использования прототипа функции; 2) с использованием прототипа:
1) Способ.
# include stdio.h
# include math.h
float y( float x )
{ return 5* pow( x, 3 ) + x * x + x ; }
void main( )
{
float a = 3, b = 4, s = 0 ;
s = ( y(a) + y(b) + y((a+b)/2) ) / 3. ;
printf( “среднее значение y(x) равно %f “, s);
}
2) Способ.
# include stdio.h
# include math.h
/*Прототип функции y(x) */
float y( float x ) ;
void main( )
{
float a = 3, b = 4, s ;
s = ( y(a) + y(b) + y((a+b)/2) ) / 3. ;
printf(“среднее значение y(x) равно %f “, s );
}
float y( float x )
{ return 5* pow( x, 3 ) + x * x + x ; }
Блок-схема для каждой функции чертится отдельно. Для вызова функции используется блок «предопределенный процесс».
Пример (параметрами функции являются одномерные массивы).
Заданы три случайные величины X [5] , Y [7], Z [9]. Используя функцию для расчета математического ожидания, найти математические ожидания заданных случайных величин.
Для
расчета математического ожидания
используется следующая формула:
# include stdio.h
float mo( float A[ ], int n )
{
int i;
float s=0;
for ( i=0; i<=n; i++ )
s+=A[ i ] ;
s \ = n;
return s;
}
void main( )
{
float mx, my, mz, X[5] = {3,4,5.3,2,4.1},
Y[7] = {4,5,5,3,4,3,7},
Z[9] = {5,6,5,7,6,7,5,6,4 } ;
mx = mo( X, 5 );
my = mo( Y, 7 );
mz = mo( Z, 9 );
printf ( “мат.ожидание X равно %f “, mx ) ;
printf ( “мат.ожидание Y равно %f “, my ) ;
printf ( “мат.ожидание Z равно %f “, mz ) ;
}
