Функция – это логически самостоятельная часть программы, имеющая имя, которой могут передаваться параметры и которая может возвращать какое-то значение.



Министерство образования Республики Беларусь

Учреждение образования «Гомельский государственный технический университет имени П.О. Сухого»

Кафедра «Информационные технологии»

 

 

ПОДПРОГРАММЫ И ПРОГРАММИРОВАНИЕ С ИХ ИСПОЛЬЗОВАНИЕМ НА ЯЗЫКЕ С

 

ПОСОБИЕ

по одноименным курсам для студентов дневной и заочной форм обучения специальностей 1-36 04 02 всех специальностей "Промышленная электроника", 1-40 01 02 "Информационные системы и технологии"

 

 

Гомель 2007


УДК [004.45+004.3](075.8)

ББК 32.973.26-018.2 я73

 

 

Рекомендовано научно-методическим советом
факультета автоматизированных и информационных систем
ГГТУ имени П.О. Сухого

 

Авторы-составители: О.А.Кравченко, Д.А.Литвинов

Рецензент: Канд.техн.наук, доцент кафедры "Промышленная электроника" Вяхирев Н.И.

 

 

Подпрограммы и программирование с их использованием на языке С. Пособие по одноименным курсам для студентов дневной и заочной форм обучения специальностей 1-36 04 02 всех специальностей "Промышленная электроника", 1-40 01 02 "Информационные системы и технологии". Авт.- сост. Кравченко О.А., Литвинов Д.А. – Гомель: ГГТУ им. П.О. Сухого, 2007. – с.

 

В пособии рассматриваются вопросы разработки и конструирования программ с использованием подпрограмм на языке С. Дается понятие подпрограммы (в языке С – это функция). Рассматривается синтаксис описания, объявление и вызов функции в программе. Излагаются способы доступа к данным, подлежащим обработке: прямой доступ к глобальной переменой и передача параметров.

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

В пособии дается определение и примеры разработки рекурсивной функции. Рассматривается понятие перегрузки функций и шаблоны функций.

Для студентов дневной и заочной форм обучения специальностей 1-36 04 02 всех специальностей "Промышленная электроника", 1-40 01 02 "Информационные системы и технологии".

ã Учреждение образования «Гомельский государственный технический университет имени П.О. Сухого», 2007


СОДЕРЖАНИЕ

1. Функции

1.1. Общие сведения.

1.2 Описание функции

1.3 Объявление функций

1.4 Вызов функции

1.4 Область действия переменных

2. Механизм передачи параметров в функцию

2.1 Основные определения

2.2 Структуры– параметры функции

2.3 Массивы – параметры функции

3 Передача функции в качестве параметра в функцию

3.1Указатель на функцию

3.2 Пример передачи имени функции в функцию

4. Рекурсии

4.1 Основные понятия

4.2 Примеры рекурсивных функций

4.2.1 Пример рекурсивной функции (strk), к раз выводящую одну и ту же фразу

4.2.2 Пример рекурсивной функции (Fact) вычисления факториала числа N (N!=1∙2∙3∙…∙N)

4.2.3 Пример рекурсивной функции (sum) вычисления суммы элементов одномерного массива

ПРИЛОЖЕНИЕ

 

 


1. Функции

1.1. Общие сведения

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

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

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

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

Внимание! Не бойтесь написать функции, которые вызываются один раз. Не пытайтесь запихнуть всю программу в одну функцию main . Это очень плохой стиль. Наоборот, старайтесь разбить программу на небольшие единицы – функции, которые соответствуют логическим частям программы.

В графической схеме алгоритма обращение к вспомоготельному алгоритму оформляется в виде блока :

В программе на языке С вспомогательному алгоритму соответствует подпрограмма – функция.

Пример. Вычислить значение

Решение. Разработаем вспомогательный алгоритм возведения числового значения (x) в квадрат. Назовем алгоритм sqr. На рис. 1.1. изображена графическая схема этого алгоритма.

 

 

Рис.1.1 Вспомогательный алгоритм

 

Здесь x – формальный параметр – исходное данное, t – локальный параметр – результат.

 

Основной алгоритм будет иметь вид, изображенный на рис. 1.2.

Рис. 1.2. Основной алгоритм

 

При выполнении основного алгоритма будет три раза вызываться вспомогательный алгоритм sqr. Первый раз формальный аргумент х будет заменен значением а. Функция sqr возвратит значение а2, затем это значение присваивается переменной а1. Второй раз формальный аргумент х будет заменен значением b. Функция sqr возвратит значение b 2, затем значение b 2 присваивается переменной b 1. При вызове  sqr в третий раз формальный аргумент х будет заменен предварительно вычисленным значением a 1+ b 1, затем значение ( a 1+ b 1)2 присваивается переменной z .

Забегая вперед, покажем, как будет выглядеть программа на языке Си, использующая подпрограмму, разработанную пользователем.

/* Программирование с использованием подпрограмм. Пример 1 */

#include <stdio.h>

void main()          

{

float sqr(float x); // Объявление функции (Прототип функции)

float a,b,z,a1,b1;

puts("Введите значения a и b");

scanf("%f %f",&a,&b);

a1=sqr(a); b1=sqr(b);

z=sqr(a1+b1);

printf("z=%.3f при a=%.3f b=%5.3f\n",z,a,b);

puts("******");

fflush(stdin); getchar();

} // Отсутствует return, т.к. main() описана как функция

// без возвращающего значения

 

/* Описание функции sqr(x) */

float sqr(float x)

{

float t;

t=x*x;

return t; // или return(t);

}

 

 Приведенная программа состоит из двух функций: main () и sqr ( x ) (основной и разработанной пользователем). Первая вызывает вторую для выполнения. Вызов осуществляется по имени функции с использованием фактического аргумента. В вызванной функции формальный аргумент заменяется фактическим, выполняются описанные в ней вычисления и осуществляется возврат значения по оператору return в точку вызова функции.

 

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

Функция – это логически самостоятельная часть программы, имеющая имя, которой могут передаваться параметры и которая может возвращать какое-то значение.

Можно представлять функцию как некоторую машину или «черный ящик», в который Вы вкладываете данные и из которого получаете результат. Внутренне устройство и способ действия функции невидимы и неизвестны для остальной части программы. Внешний мир должен знать о некоторой функции лишь только то, что в нее вводится, что из нее выводится и какие необычные эффекты вызывает выполнение этой функции.

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

Библиотеки функций позволяют:

- использовать одни и те же функции разными программистами.

- повысить структурированность и наглядность программ.

- облегчить чтение, освоение и корректировку программы.

 

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

 

1.2 Описание функции

 

Описание (определение) функции – это ее текст на языке С. В нем определяется имя, формальные параметры, операторы тела функции и тип возвращаемого результата.

Синтаксис описания:

//Заголовок функции

[тип]<имя_функции>([список формальных параметров или void ])

{ // Начало тела функции

<описание данных>

<операторы>

[return(выражение)]

} // Конец тела функции

 

В квадратных скобках записано то, что может быть опущено. {…} – тело функции ( совокупность действий в фигурных скобках).

 

Заголовок функции имеет вид:

[тип]<имя_функции>([список формальных параметров или void ])

Здесь тип – задает тип возвращаемого значения с помощью оператора return.

Тип – имя одного из простых допустимых типов данных (арифметический, символьный, указатель на любой допустимый тип (в том числе на скаляр, массив, структуру, файл или функцию)). Если тип отсутствует, то считается, что функция возвращает значение int с помощью оператора return.

Если <тип> - это слово void, то функция не возвращает никакого значения. Использование void при описании возвращаемого значения позволяет получить более короткий и производительный код программы. Это возможно тогда, когда функция действительно не должна возвращать значений или для возврата значений используются указатели либо внешние переменные.

 

Имя функции.

<имя_функции> - идентификатор, с помощью которого функция вызывается на выполнение.

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

Например sqr, sin, printf, …

 


Дата добавления: 2020-12-12; просмотров: 86; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!