Similar presentations:
Структурное программирование. Функции. Часть 1
1. Структурное программирование
Функции. Часть 12.
Структурное программирование –методология разработки, в основе
которой лежит представление
программы в виде иерархической
структуры блоков (процедур, функций,
модулей).
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)