Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
билеты информатика.rtf
Скачиваний:
39
Добавлен:
02.05.2015
Размер:
6.9 Mб
Скачать

Функции с параметрами.

Функции языка С могут иметь параметры. Эти параметры передаются в функцию и там обрабатываются.  Ещё раз покажем основную форму описания функциитип <имя функции>(список параметров){        тело функции}В списке параметров для каждого параметра должен быть указан тип. Пример правильного списка параметров:        function(int x, char a, float z)Пример неправильного списка параметров:        function(int x, a, float z)Давайте рассмотрим все это на примере. Пусть у нас будет функция у которой присутствует один параметр x. Функция будет возвращать квадрат значения x.

int square(int x){     x = x * x;          // Символ * это операция умножения     return x;}

Теперь давайте рассмотри пример функции, которая будет выводить значение переменной z типа float на экран. void myout(float z)       // Переменная z является формальным параметром.{     printf("z=%f", z);      // %f  - означает, что выводится число с плавающей точкой}

Формальные и фактические параметры

Формальные параметры - это параметры которые мы объявляем в заголовке функции при описании.

Фактические параметры - это параметры которые мы подставляем при вызове функции.

void myfunc(int x);         // Объявление функцииvoid main(void){    int a;    a=5;    myfunc(a);                // a- фактический параметр}// Описание функцииvoid myfunc(int x)          // x - формальный параметр{    x = x + 10;    printf("Вывод x = %d",x);}

В языке С функция может возвращать несколько значений. Чтобы функция могла вернуть несколько значений необходимо пользоваться указателями. Этот механизм называется - передача параметров по ссылке. Указатели это сложная тема, которую мы подробно распишем на следующих уроках.

22.использование указателей для обмена данными между функциями

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

При изучении работы функций важно понимать, что такое локальная и что такое глобальная переменные. В языке программирования C глобальные (внешние) переменные объявляются вне какой-либо функции. Локальные переменные в языке программирования C называют автоматическими. Область действия автоматических переменных распространяется только на ту функцию, в которой они были объявлены. Параметры функции также являются локальными переменными.

Структурная организация файла программы на языке C, содержащего несколько функций, может выглядеть немного по-разному. Т.к. выполнение начинается сmain(), то ей должны быть известны спецификации (имена, количество и тип параметров, тип возвращаемого значения) всех функций, которые из нее вызываются. Отсюда следует, что объявляться функции должны до того, как будут вызваны. А вот определение функции уже может следовать и до и послеmain(). Рассмотрим такую программу:

#include <stdio.h>

 

float median (int a, int b); // объявление функции

 

main () {

int num1 = 18, num2 = 35;

float result;

 

printf("%10.1f\n", median(num1, num2));

result = median(121, 346);

printf("%10.1f\n", result);

printf("%10.1f\n", median(1032, 1896));

}

 

float median (int n1, int n2) { // определение функции

float m;

 

m = (float) (n1 + n2) / 2;

return m;

}

В данном случае в начале программы объявляется функция median(). Объявляются тип возвращаемого ею значения (float), количество и типы параметров (int a, int b). Обратите внимание, когда объявляются переменные, то их можно группировать: int a, b;. Однако с параметрами функций так делать нельзя, для каждого параметра тип указывается отдельно:(int a, int b).

Далее идет функция main(), а после нее — определение median(). Имена переменных-параметров в объявлении функции никакой роли не играют (их вообще можно опустить, например, float median (int, int);). Поэтому когда функция определяется, то имена параметров могут быть другими, однако тип и количество должны строго совпадать с объявлением.

Функция median() возвращает число типа float. Оператор return возвращает результат выполнения переданного ему выражения; после return функция завершает свое выполнение, даже если далее тело функции имеет продолжение. Функция median() вычисляет среднее значение от двух целых чисел. В выражении (float) (n1 + n2) / 2 сначала вычисляется сумма двух целых чисел, результат преобразуется в вещественное число и только после этого делится на 2. Иначе мы бы делили целое на целое и получили целое (в таком случае дробная часть просто усекается).

В теле main() функция median() вызывается три раза. Результат выполнения функции не обязательно должен быть присвоен переменной.

Вышеописанную программу можно было бы записать так:

#include <stdio.h>

 

float median (int n1, int n2) {

float m;

 

m = (float) (n1 + n2) / 2;

return m;

}

 

main () {

int num1 = 18, num2 = 35;

float result;

 

printf("%10.1f\n", median(num1, num2));

result = median(121, 346);

printf("%10.1f\n", result);

printf("%10.1f\n", median(1032, 1896));

}

Хотя такой способ и экономит одну строчку кода, однако главная функция, в которой отражена основная логика программы, опускается вниз, что может быть неудобно. Поэтому первый вариант предпочтительней