Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Краткие теоретические сведения
В алгоритмическом языке Си кроме использования стандартных функций существует возможность работать с функциями пользователя. Предварительно функцию необходимо объявить. Объявление функции пользователя, т.е. ее декларация возможна в двух формах – в форме описания и в форме определения (реализации). Описание функции – декларация ее прототипа в начале файла. Используется следующий способ декларации функций: < тип результата > <ID функции >(< тип > ID,…< тип > ID); идентификаторы переменных в круглых скобках прототипа указывать необязательно, так как компилятор их не обрабатывает. Пример описания функции fun со списком параметров: float fun (int, float, int, int); Прототип функции сообщает компилятору о том, что далее в тексте программы будет приведено ее полное определение (текст), имеющее следующий вид: < тип результата > <ID функции >(список параметров) { код функции } тип результата определяет тип значения, который возвращается функцией в точку ее вызова при помощи оператора возврата return. Если тип функции не указан, то по умолчанию - int. Список параметров состоит из перечня типов и ID параметров, разделенных запятыми. Функция может не иметь параметров (void), но круглые скобки необходимы в любом случае. Если функция не возвращает значения - void (пустая), например, функция вывода горизонтальной строки на экран: void lin(char a) { // a = ’-‘ или a = ’=’; int k; for(k=0; k<80; k++) printf(“%c”, a); } Оператор return вызывает немедленный выход из данной функции и возврат в вызывающую ее функцию. Этот оператор также используется для возврата результата работы функции. В коде функции может быть несколько операторов return, но может и не быть ни одного, в таком случае возврат в вызывающую ее функцию происходит после выполнения последнего оператора. Пример функции, определяющей наименьшее из двух целых чисел: int min_i(int x, int y) { int t; if (x<y) t=x; else t=y; return t; } Можно написать функцию min_i и таким образом: mini(int x, int y) { return (x<y)? x:y; } здесь тип возвращаемого результата по умолчанию будет int. В языке Си каждая функция – это отдельный блок программы, вход в который возможен только через вызов данной функции. Например, нельзя оператором перехода goto передать управление внутрь функции.
Вызов функции имеет следующий формат: <ID функции >(список аргументов); список аргументов - значения, передаваемые в функцию на место ее параметров (константы, переменные, выражения).
Область действия переменных Область действия переменной – это правила, которые устанавливают, какие данные доступны из текущего места программы. Имеются три типа переменных: глобальные, локальные и формальные. Область действия локальных переменных – это те блоки, где локальные переменные объявлены. При выходе из блока локальная переменная и ее значение теряются. Формальные переменные – это параметры в заголовке функции пользователя. Формальные параметры используются в функции так же, как локальные переменные. Область действия формальных параметров – блок, являющийся кодом функции. Глобальные переменные объявляются вне какой-либо функции. Глобальные переменные могут быть использованы в любом месте программы, но перед их первым использованием они должны быть объявлены и инициализированы. Область действия глобальных переменных - вся программа с момента их объявления. В языке Си каждая переменная принадлежит к одному из четырех классов памяти – автоматическая (auto), внешняя (extern), статическая (static), регистровая (register). Тип памяти указывается ключевым словом (auto, extern, static, register), стоящим перед спецификацией типа переменной. Например, register int a; По умолчанию переменная относится к классу auto и будет размещена в стеке. В языке Си аргументы при стандартном вызове функции передаются по значению, т.е. в функцию передаются не оригиналы аргументов, а их копии. В стеке выделяется место для формальных параметров функции, в которое заносятся значения фактических аргументов. Затем функция использует и может изменять эти значения в стеке. При выходе из функции измененные значения теряются. Вызванная функция не может изменить значения переменных, указанных как фактические аргументы при обращении к данной функции. При необходимости функцию можно использовать для изменения передаваемых ей аргументов. В этом случае в качестве аргумента следует в вызываемую функцию передавать не значение переменной, а ее адрес. А для обращения к значению аргумента-оригинала использовать операцию «*».
Фрагмент программы, использующей функцию, в которой меняются местами значения аргументов x и y: ... void z1(int*, int*); // Описание прототипа void main(void) { int a=2, b=3; … printf(“\n a=%d, b=%d”, a, b); z1(&a, &b); // Обращение к функции printf(“\n a = %d, b = %d”, a, b); … } void z1(int *x, int*y) { // Описание (реализация) функции int t; t = *x; *x = *y; *y = t; return; } При таком способе передачи аргументов их значения будут изменены, т.е. на экран монитора будет выведено: a = 2, b = 3 a = 3, b = 2 Функции могут вызывать сами себя - рекурсивные функции. Пример рекурсивной функции – вычисление факториала n!: int fac (int n) { int b; if (n= =1) return 1; b = fac (n-1)*n; return b; } Вызов функции в рекурсии не создает новую копию функции, а создает новые копии локальных переменных и параметров. Из рекурсивной функции необходимо предусмотреть выход. На функцию можно создать указатель, например, указатель р на функцию, возвращающую значение типа type и имеющую параметры типа type 1, type 2, объявляется следующим образом: type (* p)(type 1, typ e2); Варианты заданий В задании Лабораторной работы 3, вычисление Y(x) и S(x) реализовать в виде функций. В основной программе организовать ввод исходных данных, обращение к функциям и вывод результатов в виде таблицы. Работу программы проверить для a=0,1; b=0,8; h=0,1; n выбрать в зависимости от варианта задания (с факториалом, без факториала). Контрольные вопросы 1. Чем функция пользователя отличается от стандартной функции? 2. Способы передачи аргументов в функцию. 3. Поясните понятие “локальные” и “глобальные” переменные. 4. Для чего применяется оператор return? 5. Поясните понятие «класс памяти» функции. ЗАДАНИЕ 5. Циклические процессы с использованием одномерных массивов и функций пользователя
Цель работы: изучить правила работы с одномерными массивами, связь массивов с указателями.
|
||||||
Последнее изменение этой страницы: 2020-11-28; просмотров: 49; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.33.41 (0.009 с.) |