Равноправность функций в языке Си.
Все функции в программе, написанной на языке Си, равноправны: каждая из них может вызывать любую другую функцию и в свою очередь каждая может быть вызвана любой другой функцией. Это делает функции языка Си несколько отличными от процедур Паскаля, поскольку процедуры в Паскале могут быть вложены в другие процедуры (причем, процедуры, содержащиеся в одном гнезде, являются недоступными для процедур, расположенных в другом).
Нет ли у функции 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);
}