Равноправность функций в языке Си.

Все функции в программе, написанной на языке Си, равноправны: каждая из них может вызывать любую другую функцию и в свою очередь каждая может быть вызвана любой другой функцией. Это делает функции языка Си несколько отличными от процедур Паскаля, поскольку процедуры в Паскале могут быть вложены в другие процедуры (причем, процедуры, содержащиеся в одном гнезде, являются недоступными для процедур, расположенных в другом).

Нет ли у функции main() какой-то специфики? Безусловно, есть. Она заключается в том, что после «сборки» программы, состоящей из нескольких функций, ее выполнение начинается с первого оператора функции main(). Но этим ее исключительность и ограничивается. Даже функция main() может быть вызвана другими функциями.

 

Аргумент типа void.

В соответствии с ANSI С, отсутствие списка аргументов функции должно быть указано явно при помощи ключевого слова void. В C++ использование void пока не обязательно, но считается целесообразным. В следующей программе имеется простая функция voutput(), не имеющая параметров и не возвращающая никакого значения. Функция main() вызывает voutput(). При выходе из voutput() управление возвращается функции main(). Трудно придумать более простую функцию

 

/*08FVOID.C

Программа на С печатает сообщение при помощи функции.

В функции используются параметр типа void и стандартная

библиотечная функция С sqrt()*/

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdio.h>

#include <process.h>

#include <ctype.h>

#include <stdlib.h>

#include <math.h>

using namespace std;

 

void voutput(void);

 

main()

{

/* Программа определяет квадратный корень */

printf("This programm will find the square root\n\n\n");

voutput();

 

printf ("\n\nPress any key to finish\n");

_getch();

return(0);

}

 

void voutput(void)

{

double dt=12345.0;

double du;

du=sqrt(dt);

printf("The squre root of %lf is %lf\n",dt,du);

}

 

Обратите внимание, что функция voutput() вызывает библиотечную функцию С, называемую sqrt(). Прототип sqrt() находится в файле math.h. У функции один параметр в формате числа двойной длины, и возвращает она результат извлечения квадратного корня тоже в виде числа двойной длины.

 

Символьные параметры.

Функции можно передавать символьные значения. В следующем примере в функции main() одиночный символ считывается с клавиатуры и передается функции voutput(). Символ считывается функцией getch(). В стандартной библиотеке С имеются другие функции, тесно связанные с функцией getch(): getc(), getcharQ и getcheQ Эти функции можно использовать и в C++, однако во многих случаях предпочтительнее пользоваться cm. Функция getch() получает символ от стандартного устройства ввода (клавиатуры) и возвращает символьное значение, не отображая его на экране:

//08FCHAR.C

/*Программа на С считывает символ с клавиатуры, передает его функции

и печатает сообщение, использующее этот символ*/

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdio.h>

#include <process.h>

#include <ctype.h>

#include <stdlib.h>

#include <math.h>

using namespace std;

 

void voutput(char c);

 

main()

{

char cyourchar;

/* Введите один символ с клавиатуры */

printf("Enter one character from the keyboard. \n");

cyourchar=getch();

voutput(cyourchar);

 

printf ("\n\nPress any key to finish\n");

_getch();

return(0);

}

 

void voutput(char c)

{

int j;

for(j=0;j<=16;j++)

/* Введен символ ... */

printf("The character typed is %c \n",c);

}

Целочисленные параметры.

В следующем примере одно целое число вводится с клавиатуры при помощи функции С scanf() и передается функции vside(), в которой на основе полученного значения, означающего длину стороны, вычисляются и печатаются площадь квадрата, объем куба и площадь поверхности куба.

//08FINT.C

/*Программа на С вычисляет значения на основании введенной длины.

Функция получает параметр типа int, введенный с

клавиатуры при помощи функции scanf()*/

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <stdio.h>

#include <process.h>

#include <ctype.h>

#include <stdlib.h>

#include <math.h>

using namespace std;

 

void vside(int is);

 

main()

{

int iyourlength=0;

/* Введите с клавиатуры длину как целое число */

printf("Enter the length, as an integer from the keyboard. \n");

scanf("%d",&iyourlength);

vside(iyourlength);

 

printf ("\n\nPress any key to finish\n");

_getch();

return(0);

}

 

void vside(int is)

{

int iarea, ivolume,isarea;

iarea=is*is;

ivolume=is*is*is;

isarea=6*iarea;

/* Длина стороны равна */

printf("The lenth of a side is %d \n",is);

/* Квадрат будет иметь площадь */

printf("The square would have an area of %d \n",iarea);

/* Куб будет иметь объем */

printf("The cube would have a volume of %d \n",ivolume);

/* Площадь поверхности куба */

printf("The surface area of the cub would have a square of %d \n",isarea);

}