Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 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; просмотров: 128; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.176 (0.006 с.) |