- •2.2.Функции, возвращающие значение
- •Void main ()
- •Void Sum(float *s,float *X, int n)
- •Void main ()
- •Void Sumstmatr ( float (*mz)[m], float *mx, int n1, int m1); //прототип функции Sumstmatr
- •Void main ()
- •Void Sumstmatr (float (*mz)[m], float *mx, int n1, int m1)
- •Void main ()
- •Void main()
- •2.3. Функции обработки строк
- •Void strcpy ( char *s, char *t)
- •Void strcpy ( char *s, char *t)
- •Int strcmp ( char * s, char * t)
- •Unsigned strlen (const char *str );
- •Void strcpy (char *s,char *t);
- •Void main ()
- •Int Vs(char *s, char *sl, int d);
- •Int Vs(char *s,char *sl, int d) // функция формирования очередной строки
- •2.4. Рекурсивные функции
- •Void main()
- •3.Классы памяти и области действия описаний
- •Автоматические переменные
- •Внешние переменные
- •Void main ()
- •Void main ()
- •Int a[4]; // указано, что а – локальный массив целого типа
- •Void main ()
- •Статические переменные
- •Void f();
- •Void main ()
- •Void f()
- •Регистровые переменные
- •4.Элементы структурного программирования
- •4.1.Нисходящая разработка
- •4.2.Основные структуры, пошаговая детализация
- •Void main ()
- •Void main ()
- •Void Smog (long mz[][n2]);
- •Void main ()
- •Void Smog (long mz[][n2])
- •4.3.Сквозной структурный контроль
- •Элементы, которые должны проверяться на контрольных сессиях
2.2.Функции, возвращающие значение
Функция, возвращающее значение- это такая функция, которая возвращает значение в точку вызова. Та же программа, но с функцией, возвращающей значение, представлена ниже.
#include<stdio.h>
#include<conio.h>
float Sum (float *X, int N); //прототип функции Sum
Void main ()
{
int i;
float A[10], B[15];
float s1,s2;
clrscr();
for (i = 0; i < 10; i++)
{
printf("A[%d]=", i );
scanf("%f", &A[i]);
}
printf("**************\n");
for (i = 0; i < 15; i++)
{
printf("B[%d]=", i );
scanf("%f", &B[i]);
}
printf("**************\n");
s1 = Sum (A, 9); //вызов функции Sum и формирование s1
printf("s1 = %7.2f \n",s1);
s2 = Sum (B,14); //вызов функции Sum и формирование s2
printf("s2 = %7.2f \n",s2);
getch();
}
float Sum(float *X, int N) //заголовок функции Sum
{//начало тела функции Sum
float s;
int k;
s =0;
or (k =0; k <=N; k++)
s += X[k];
return s;
} // конец тела функции Sum
Что изменилось в этой программе?
Во-первых, уменьшилось количество формальных параметров, их осталось два: float *Xи int N.
Во-вторых, в теле функции появилась новая локальная переменная, которая используется для накопления суммы элементов массива.
В-третьих, появился оператор return s;, который пересылает (возвращает) в точку вызова значениеs. А где эти точки вызова? Всего их две в операторах:s1 = Sum (A, 9); иs2 = Sum (B,14);. Первая – этоSum (A, 9). При выполнении этого выражения осуществляется переход к функцииSum, замена формальных параметров фактическими, а после завершения выполнения функции вместо выраженияSum (A, 9)подставляется (возвращается) значениеs. В результатеs1 становиться равным сумме элементов массиваА. Аналогично происходит и с точкой вызоваSum (B,14).
В четвертых, в прототипе функции появился тип возвращаемого значения (float): float Sum (float *X, int N); , что означает, что функцияSum должна возвращать значение и это значение должно быть типаfloat.
Ну а что собственно дало нам использование функции, возвращающей значение? Ну, во-первых, уменьшилось количество формальных параметров, что само по себе неплохо. Во- вторых, обращение к функции стало более наглядным (в операторе s1 = Sum (A, 9); явно видно, что вычисляетсяs1, в отличие от оператора Sum (&s1, A, 9);). А, в-третьих, дело вкуса программиста, какую из форм записи ему он будет использовать для собственных функций, но знать он должен и ту и другую форму.
А теперь давайте несколько улучшим нашу программу. Во-первых, текст функции перепишем в следующем виде:
Void Sum(float *s,float *X, int n)
{int k;
*s =0;
for (k =0; k < N; k++)
*s += X[k];
}
В этом тексте N – количество элементов в массиве, а не последний номер, как было в предыдущем тексте. Допустим, что мы планируем часто использовать эту функцию в разных программах, и не хотим каждый раз набирать текст этой функции для новой программы, а желаем хранить этот текст в собственной библиотеке. Для этого в директории С:\ВORLANDCсоздадим свою директориюMY_PROGRи сохраним файл с текстом нашей функции с именемFSUM.CPP. Это позволит нам включать в текст наших программ функциюSum оператором#include “C:\ВORLANDC\MY_PROGR\FSUM.CPP” Этот оператор включает весь текст, содержащийся в файлеFSUM.CPP, т. е. текст всей программы собирается из двух файлов: исходного иFSUM.CPP, а затем производится компиляция. Поскольку в файлеFSUM.CPP содержится текст функцииSum, то прототип этой функции писать не нужно. Кроме того сделаем массивыА иВ динамическими и объявим переменные:Na – количество элементов массиваАиNb - количество элементов массиваВ.Тогда текст нашей улучшенной программы может иметь такой вид:
#include<stdio.h>
#include<conio.h>
#include “C:\BORLANDC\MY_PROGR\FSUM.CPP”// включение // функции FSUM.CPP из собственной библиотеки