1.7. Функции.
В языке “C” функции эквивалентны подпрограммам или функ-
циям в фортране или процедурам в PL/1, паскале и т.д. Функ-
ции дают удобный способ заключения некоторой части вычисле-
ний в черный ящик, который в дальнейшем можно использовать,
не интересуясь его внутренним содержанием. Использование
функций является фактически единственным способом справиться
с потенциальной сложностью больших программ. Если функции
организованы должным образом, то можно игнорировать то, как
делается работа; достаточно знание того, что делается. Язык
“C” разработан таким образом, чтобы сделать использование
функций легким, удобным и эффективным. Вам будут часто вст-
речаться функции длиной всего в несколько строчек, вызывае-
мые только один раз, и они используются только потому, что
это проясняет некоторую часть программы.
До сих пор мы использовали только предоставленные нам
функции типа PRINTF, GETCHAR и PUTCHAR; теперь пора написать
несколько наших собственных. так как в “C” нет операции воз-
ведения в степень, подобной операции ** в фортране или PL/1,
давайте проиллюстрируем механику определения функции на при-
мере функции POWER(M,N), возводящей целое м в целую положи-
тельную степень N. Так значение POWER(2,5) равно 32. Конеч-
но, эта функция не выполняет всей работы операции **, пос-
кольку она действует только с положительными степенями не-
больших чисел, но лучше не создавать дополнительных затруд-
нений, смешивая несколько различных вопросов.
Ниже приводится функция POWER и использующая ее основная
программа, так что вы можете видеть целиком всю структуру.
MAIN() /* TEST POWER FUNCTION */
{
INT I;
FOR(I = 0; I < 10; ++I)
PRINTF(“%D %D %D\N”,I,POWER(2,I),POWER(-3,I));
}
POWER(X,N) /* RAISE X N-TH POWER; N > 0 */
INT X,N;
{
INT I, P;
P = 1;
FOR (I =1; I <= N; ++I)
P = P * X;
RETURN (P);
}
· 30 -
Все функции имеют одинаковый вид:
имя (список аргументов, если они имеются)
описание аргументов, если они имеются
{
описания
операторы
}
Эти функции могут быть записаны в любом порядке и нахо-
диться в одном или двух исходных файлах. Конечно, если ис-
ходная программа размещается в двух файлах, вам придется
дать больше указаний при компиляции и загрузке, чем если бы
она находилась в одном, но это дело операционной системы, а
не атрибут языка. В данный момент, для того чтобы все полу-
ченные сведения о прогоне “C”- программ, не изменились в
дальнейшем, мы будем предполагать, что обе функции находятся
в одном и том же файле.
Функция POWER вызывается дважды в строке
PRINTF(“%D %D %D\N”,I,POWER(2,I),POWER(-3,I));
при каждом обращении функция POWER, получив два аргумента,
вазвращает целое значение, которое печатается в заданном
формате. В выражениях POWER(2,I) является точно таким же це-
лым, как 2 и I. /Не все функции выдают целое значение; мы
займемся этим вопросом в главе 4/.
Аргументы функции POWER должны быть описаны соответству-
ющим образом, так как их типы известны. Это сделано в строке
INT X,N;
которая следует за именем функции.
Описания аргументов помещаются между списком аргументов
и открывающейся левой фигурной скобкой; каждое описание за-
канчивается точкой с запятой. Имена, использованные для ар-
гументов функции POWER, являются чисто локальными и недос-
тупны никаким другим функциям: другие процедуры могут ис-
пользовать те же самые имена без возникновения конфликта.
Это верно и для переменных I и P; I в функции POWER никак не
связано с I в функции MAIN.
Значение, вычисленное функцией POWER, передаются в MAIN
с помощью оператора RETURN, точно такого же, как в PL/1.
внутри круглых скобок можно написать любое выражение. Функ-
ция не обязана возвращать какое-либо значение; оператор
RETURN, не содержащий никакого выражения, приводит к такой
же передаче управления, как “сваливание на конец” функции
при достижении конечной правой фигурной скобки, но при этом
в вызывающую функцию не возвращается никакого полезного зна-
чения.
Упражнение 1-13.
Апишите программу преобразования прописных букв из айла
ввода в строчные, используя при этом функцию OWER©, кото-
рая возвращает значение 'C', если C'- не буква, и значение
соответствующей строчной уквы, если 'C'-буква.
· 31 -
... основаниям. При этом философская абстракция языка оказывается неразрывно связана с основными темами и движениями философии в целом. Более конкретно, на ранние стадии традиционно рассматриваемого в рамках АФ анализа обыденного языка глубокое влияние оказала философия Дж. Э. Мура, особенно его учение о здравом смысле, согласно которому такие понятия, как «человек», «мир», «я», «внешний мир», « ...
... и других странах СНГ, а также облегчение доступа к русской и мировой культуре и науке. Таким образом, судя по данным наших исследований, востребованность русского языка осталась в республике достаточно высокой. Многие представители современной молдавской молодежи продолжают, как их отцы и деды, тянуться к русской культуре, научным и техническим достижениям России. Русский язык остается языком ...
... рисуночное словесно-слоговое письмо). Памятники среднеэламского периода (14—12 вв. до н.э.) выполнены аккадской клинописью. Памятники новоэламского периода относятся к 8—6 вв. до н.э. Был официальным языком в персидском государстве Ахеменидов в 6—4 вв. предполагается, что он, подвергшись влиянию древнеперсидского, сохранился до раннего средневековья. 7. Бурушаски язык Язык бурушаски ( ...
... /диалект), скифский, согдийский, среднеперсидский, таджикский, таджриши (язык/диалект), талышский, татский, хорезмийский, хотаносакский, шугнано-рушанская группа языков, ягнобский, язгулямский и др. Они относятся к индоиранской ветви индоевропейских языков. Области распространения: Иран, Афганистан, Таджикистан, некоторые районы Ирака, Турции, Пакистана, Индии, Грузии, Российской Федерации. Общее ...
0 комментариев