Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Return; // Теперь управление возвращается функции main()




}

Void third_fun (void)

// Последняя функция, вызываемая в программе

{

puts( "Inside third_fun ()");

return;

}

Main()

// main() — ВСЕГДА первая выполняемая функция

{

puts( "First function called main()");

Next fun(); // Здесь вызывается вторая функция

Third fun(); // Третья функция вызывается здесь

puts("main() is completed"); //Управление возвращается сюда

Return 0; // Возврат управления в DOS

}

Результаты выполнения этой программы следующие:

First function called main()

Inside next_fun()

Inside third_fun()

Main() is completed

Функция main( ) определяет, какую функцию вызвать, а также порядок вызова всех функций. Управление сразу же передается в вызывающую функцию, как только отработала вызываемая.

Перед именами функций стоит ключевое слово void, так же, как и в круглых скобках за именем функции. Это необходимо, так как Cи является строго типизированным языком.

Для вызова функции нужно написать ее имя вместе с круглыми скобками, и после этого поставить точку с запятой. Этот знак ставится в конце каждого выполнимого оператора в Cи, а вызов функции является выполнимым оператором. В этом случае выполняется код функции, кото­рую вызывали. Каждая функция может вызвать любую другую функцию. В рассмотренном примере только main () вызывала другие функции.

Нельзя определять одну функцию внутри другой. Тексты всех функций должны быть записаны последовательно, один за другим. Необходимо, чтобы перед началом определения следующей функции была поставлена закрывающая фигурная скобка, заканчивающая тело предыдущей.

Читаемость программы является очень важным свойством. Намного легче читать те программы, которые разбиты на отдельные функции. Можно написать и сразу же полностью проверить каждую функцию. Как только составлен общий план программы, то можно подсчитать количество функций, вызываемых в main( ), и определить их схемы после main().

Первоначально тела функций состоят из операторов return. Поэтому программа может компилироваться даже в таком схематичном виде, Заканчивая каждую функцию, можно компилировать и проверять программу по ходу ее написания. Этот подход приводит к более структурированным программам. Разделение программы на функции позволит позже другим программистам при необходимости модифицировать отдельные ее части, не изменяя ничего больше.

Можно выполнить функцию более, чем один раз, просто вызвав ее из нескольких мест программы. Если функция вызывается в теле цикла, то она будет выполняться многократно до окончания цикла.

Таким образом, вместо того, чтобы писать большие программы в виде одной функции, можно разбить их на несколько. Таким образом, можно скомпоновать программу так, что при рассмотрении отдельной ее части все остальное не будет отвлекать внимание.

 

Задание:

1. Написать программу, в которой объявить глобальную переменную ival и присвоить ей значение 0. Написать в функцию inc_ival (), которая выводит значение ival на экран, инкрементирует эту переменную, а затем вызывает саму себя, если значение ival меньше 10. Когда функция вызывает саму себя, то это называется рекурсией. С позволяет выполнять рекурсивные вызовы. Написать функцию main( ), которая будет вызывать inc_ival().

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

Контрольные вопросы

1. Это истина или ложь: в теле функции последней командой всегда должен быть оператор return?

2. Как называется функция, которая первой выполняется в программе, написанной на C?

3. Что лучше – одна большая функция или несколько меньших? Почему?

4. Как отличить имя функции от имени переменной?

5. Где ошибка в следующем фрагменте программы?

Void cal_ it (void)

{ puts( "Getting ready to calculate the square of 25 ");

Sq_25( )

{

 puts( "The square of 25 is :”);

printf(“%d”, 25 * 25 );

 return; }

puts( "That is a big number! ");

 return;

}

6. Является ли следующий код именем функции, ее вызовом, ее определением или ошибочным выражением?

scan names ();

 


Лабораторная работа №19

 

Видимость переменных. Глобальные и локальные переменные.
Передача значений

 

Цель работы: научиться правильно использовать при программировании локальные и глобальные переменные и передавать в функции переменные по значению и по ссылке.



Теоретические сведения

Понятие области видимости переменных является наиболее важным при написании функций. Область видимости определяет, какие функции имени доступ к определенным переменным. Если функция имеет доступ к переменной, то говорят, что эта переменная доступна для данной функции. Эта концепция защищает переменные от случайного изменения их значений другими функциями. Функция не может модифицировать переменную, к которой она не имеет доступа

Глобальные переменные, к которым программа имеет доступ и может изменить любую из них, заключают в себе опасность. Некоторые части программы могут случайно изменять значение переменной, которая не должна меняться. Глобальные переменные видны из всех функций программы. И такого рода переменные могут быть изменены функцией, даже если они были проинициализированы в другом месте программы.

Лучше в этом случае объявлять локальные переменные. Тогда только те функции, которые должны изменять их значение, смогут это делать. Локальные переменные видимы и могут быть изменены только в пределах тех функций, в которых они определены. Они не могут использоваться и изменяться другими функциями без специального разрешения на это.

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

Определениеобласти видимости переменных:

1. Можно определить переменную в пределах фигурных скобок, между которыми находится код программы (обычно в начале функции).

2. Можно определить переменную перед именем функции, такой как main( ).

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

- Переменная является локальной в том и только в том случае, когда она определена внутри фигурных скобок некоторого блока.

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

Как только функция (или блок) заканчиваются, локальные переменные уничтожаются. Глобальные переменные видимы от точки их определения до конца файла. Поэтому если определяется глобальная переменная, то можно использовать ее в любом месте программы ниже ее определения (не важно, сколько функций и строк программы идет дальше).

Локальная переменная удаляется сразу после завершения блока, в котором она объявлена (то есть при достижении закрывающейся фигурной скобки). С всегда использует переменные, которые он видит как «самые локальные».

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










Последнее изменение этой страницы: 2018-05-10; просмотров: 281.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...