Структурное программирование
330.50K
Категория: ПрограммированиеПрограммирование

Структурное программирование. Функции. Часть 1

1. Структурное программирование

Функции. Часть 1

2.

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

3.

Функция – логически завершённый
именованный фрагмент кода;
r = f(x,y)
Процедура – функция, не возвращающая
значения;
Модуль - функционально законченный
фрагмент программы, оформленный в
виде отдельного файла.

4.

main()
Сегмент кода
….
Функция F(x1,s1)
F(2,’q’)
z=F(x,s);
Сегмент кода
….
вычисления…
Сегмент данных+стек
return r
int x=2, z;
Сегмент данных+стек
char s=‘q’;
s1=‘q’; x1=2;
….
возвращаемое значение:
r

5.

Функции бывают:
1) встроенные (read(), write() …);
2) библиотечные (printf(), scanf(), rand()..);
3) пользовательские

6.

Работа с функциями в программе:
• объявление прототипа
• вызов
• определение функции

7.

Прототип (заголовок) – краткая
информация о функции.
Необязателен.
Содержит:
1) Тип возвращаемого функцией
значения
2) Имя функции
3) Типы аргументов в порядке их вызова
Синтаксис объявления прототипа функции:
тип имя(список формальных параметров);

8.

Пример.
Тип возвращаемого
значения
Формальный
параметр
double sin (double x );
void print_tab (float a [ ], int n );

9.

Объявление – описание заголовка или
прототипа функции
Примеры прототипов:
int func(int, double, double);
void func(int, char *);
double func();
Примеры заголовков:
int func(int x, double y, double w);
void func(int ind, char * massive);
double func();

10.

Определение функции = заголовок + тело
Тело – последовательность действий,
выполняемых функцией.
Синтаксис определения:
заголовок {
тело
}

11.

Заголовок
Пример:
float modul (float x, float y, float z )
Тело
{
float u;
u=sqrt(x*x+y*y+z*z);
return u;
}
Возврат из функции

12.

Если функция не имеет возвращаемого
значения:
void print_massiv( char a[], int n) {
int i;
for (i=0; i<n; i++)
printf (“%c ”, a[i]);
return;
}

13.

Вызов функции – обращение к ней по
имени с целью её использования.
Синтаксис вызова:
1. переменная=функция( фактические
параметры);
Если возвращаемое значение отсутствует:
2. функция(фактические параметры);

14.

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

15.

z=10+function(х,у);
x=rand();
alarm(10);
pause();

16.

#include<stdio.h>
/ * объявление прототипа функции */
int summ(int, int);
/* главная функция */
main() {
int x=6,y=8, z;
z=summ(x,y); // вызов функции
printf (“%d ”, z);
}
/*************************************************/
/* описание функции
*/
int summ(int a, int b) {
int c=a+b;
return c;
} // конец описания

17.

#include<stdio.h>
/* Определение функции до вызова*/
int summ(int a, int b) {
int c=a+b;
return c;
}
/***********************************************/
main() {
int x=6,y=8, z;
z=summ(x,y); // вызов
printf (“%d ”, z);
}

18.

Локальные и глобальные переменные
Локальные переменные – это
переменные, доступные в пределах
модуля, в котором они объявлены
Глобальные переменные – доступны во
всей программе

19.

#include<stdio.h>
int k=1; // глобальная переменная
void function (int);
main() {
int x=8; // локальная переменная main()
function (x);
printf (“k=%d, x=%d ”, k, x);
}
/* ******************************************** */
void function (int х) { // х- локальная переменная
k++; x+=k;
}

20.

Результат работы программы
k=2, x=8

21.

Способы передачи параметров в
функцию
1) по значению
2) по адресу
3) по ссылке

22.

Способы передачи параметров в
функцию
1) по значению
void func (int x, char y);
2) по адресу
void func (int *x, char y []);
3) по ссылке
void func (int &x, char &y);

23.

Пример 1. Неправильное
использование параметров
void change (int x, int y) {
int temp=x;
x=y;
y=temp;
}

24.

Пример 2. Правильное использование
параметров
void change (int *x, int *y) {
int temp=*x;
*x=*y;
*y=temp;
}
---------------------------------------------------------Вызов:
change(&x, &y);

25.

Пример 3. Правильное использование
параметров
void change (int &x, int &y) {
int temp=x;
x=y;
y=temp;
}
------------------------------------------------------------------Вызов:
int *px=&x, *py=&y;
change(px,py);

26.

Передача массивов в функцию
void sort(float massive[], int n);
void sort(char *massive, int n);
int find( int m, int n, float matrix[][n]);
int find(char**sentence, int m, int n);

27.

#include <string.h>
#include <ctype.h>
void upper(char *string , int n);
main() {
char s[]=“abcdefghijklmnoprst”;
upper(s, strlen(s)) ;

}
/*************************************************/
void upper(char *string , int n) {
int i;
for(i=0; string[i]; ++i) {
string[i] = toupper(string[i]);
printf(“%c”, string [i]);
}
}

28.

Примеры библиотечных функций
size_t strlen(const char * Str);
int printf(char *format, ...);
int write(int stream, void *buf, int count)
English     Русский Правила