Процедурное программирование на языке С. Часть 1. Основные понятия языка С: Методические указания к лабораторным работам по курсам «Алгоритмические языки и программирование» и «Процедурное программирование», страница 8

     printf("\n Coefficient = %f",fact(n)/fact(m)/fact(n-m));

точки вызова

}                                                                                                   функции fact()

int fact(int k)

 {  int i,j=1;

     for (i=1;i<=k;i++)  j=j*i;

return j;

 }

Правило 2.7. Если возвращаемое функцией значение предполагается использовать в вызывающей функции в качестве значения некоторой переменной, то следует использовать оператор присваивания, причем слева от знака «=»  –  имя этой переменной, а справа – вызов функции с фактическими параметрами. При этом тип переменной должен совпадать с типом возвращаемого функцией значения.

Например, можно объявить переменные rz1, rz2, rz3. После присваивания им значений факториалов можно получить результат в соответствии с приведенной формулой и вывести его  на экран:

int rz1, rz2, rz3 ; float rez; 

rz1 = fact(n);  rz2 = fact(m); rz3= fact(n-m);

rez = rz /rz2/rz3;

printf("\n Coefficient = %f",rez);


КОНТРОЛЬНЫЕ ВОПРОСЫ И ЗАДАНИЯ

1. Какую информацию о функции можно получить по ее заголовку?

2. Какие действия можно выполнить с функцией?

Функция

с именем

function

 
3.   par_1

     par_2

                                                                                 rezult

         …

     par_m

Функция с именем functionпри вызове должна получить m значений. Для этого используются идентификаторы par_1, par_2, … par_mРезультат работы функции ассоциируется с идентификатором result.  Поставить в соответствие всем идентификаторам понятия: формальные и фактические параметры, аргументы,  возвращаемое значение,  –  с точки зрения всех действий, которые можно осуществлять с функцией function().

4. Сформулируйте основные правила работы с функцией.

5. Найдите соответствия между записями из левого и правого столбцов

а) voidip(a,h)

а)   описание функции

б) {do {k++; a*=k;

           if (k>f) return a;}}

б)  фактические параметры        

в) int sum (int a, int b)

      { return (a+b);}

в) объявлена функция типа float, которая не имеет       параметров

г)  if (a = f) return n;

г) заголовок функции с 2-мя параметрами

д) float tt (void)                     

д)  прототип функции     

е) { for (; a[i]; i++)

     if (a[i]<0) continue;

     else return(sqrt(a[i]));}

е)  заголовок функции

ж) вызов функции                

ж) такая запись синтаксически неверна

з) float tt (void);

з) тело функции

и) char  ip(int, int );          

6. Опишите функцию типа int с 2-мя аргументами – символами. Результат работы функции – сумма кодов этих символов.


ЛАБОРАТОРНАЯ  РАБОТА  3

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

ЗАДАНИЕ

В главной функции с клавиатуры ввести k  – размер массива, объединяющего переменные  (  –  из лабораторной работы  2), динамически выделить память под этот массив и ввести значения всех элементов массива. Передать все элементы массива в функцию fun(), параметрами которой являются и переменные k,  n, m ….

В функции fun() динамически выделяется память под массив переменных, соответствующих   , вычисляются их значения с использованием функций fun1() и fun2() из лабораторной работы  2,  также определяется элемент с максимальным значением.  Результаты работы функции fun(), т.е. значения и номер элемента с максимальным значением, выводятся на экран в главной функции.


ТЕОРЕТИЧЕСКИЙ   МАТЕРИАЛ

3.1. ПОНЯТИЕ «УКАЗАТЕЛЬ»

Рассмотрим расположение в памяти переменных следующего фрагмента программы.

inta = 10, f;