Слайд 1Лекция 3
Подпрограммы.
Разработка алгоритмов и программ
сверху вниз
Слайд 2Описание функции (подпрограммы)
Заголовок функции
{
Объявление локальных переменных
Операторы
}
Заголовок функции имеет вид:
тип
имя_функции (список_параметров)
Слайд 3Вызов функции
Чтобы выполнить подпрограмму, нужно ее вызвать (обратиться к ней).
Вызов осуществляется по имени функции и имеет вид:
имя_функции (аргумент1,
аргумент2,…)
Аргументами могут быть константы, переменные или выражения.
Слайд 4Пример программы с подпрограммой
Задача. Даны натуральные числа n
и m (n>m). Определить c =
n! / (m! * (n-m)! )
Слайд 5Схема функции fact - вычисления k!
fact
возврат f
f=1, j=2
j
= f * j
j = j +1
нет
да
Слайд 6Схема главной функции main
начало
ввод n,m
c = fact(n)/
(fact(m)*fact(n-m))
вывод с
конец
Слайд 7Программа
#include
long fact (int k); /* прототип функции */
/*
Главная функция */
void main()
{ int n, m, c;
/* исходные данные и результат */
printf("\nВведите два исходных целых числа (n,m):");
scanf("%d %d", &n, &m);
c = fact(n) / (fact (m) * fact (n-m));
printf ("\n c = %d", c);
}
Слайд 8
/* Функция вычисления k! */
long fact (int
k)
{ long f; // k!
int j; // текущий
множитель
f=1;
for (j=2; j<=k; j++)
f = f * j;
return f; // возврат значения функции
}
Слайд 9
Разработка алгоритмов и программ
сверху вниз
Задача. Дано целое n
и вещественные
X1 X2 ... Xn
Составить программу
печати заданных вещественных чисел в порядке возрастания (не убывания).
Слайд 10 Вход:
Введите количество чисел: 5
Введите числа: 12.5 6 14
-3 10
Выход:
Упорядоченные числа:-3.0 6.0 10.0 12.5 14.0
Слайд 11Функциональная структура программы
Слайд 121 этап.
Разработка алгоритма функции main().
Слайд 13 Алгоритм :
1. n = Vvod(x); /* Ввод n и
массива x */
2. Sort (x,n); /* Сортировка массива
x по возрастанию*/
3. Вывод сортированного по возрастанию массива x
Слайд 15Алгоритм функции ввода данных
int Vvod (float x[])
{
Ввод
n;
for (i=0; i
x[i];
Возврат n;
}
Слайд 16Вывод массива x
Вывод заголовка "Упорядоченные числа:";
for (i=0; i
i++)
Вывод x[i];
Слайд 17Метод последовательного нахождения максимума
2.5 6 14
-3 10 // рассматривается n элементов
2.5 6 10
-3 14
2.5 6 10 -3 // рассматривается n-1 элементов
2.5 6 -3 10
2.5 6 -3 // рассматривается n-2 элементов
2.5 -3 6
2.5 - 3 // рассматривается n-3 элементов
-3 2.5
Слайд 18Алгоритм функции сортировки массива x по возрастанию
void Sort
(float x[], int n)
{ for (k=n-1; k>0; k--)
{ Определение максимума среди
элементов x[0], ... , x[k] и его
индекса imax.
Обмен: x[imax] <--> x[k];
}
}
Слайд 193 этап
Определение максимума среди элементов x[0], ... , x[k]
и его индекса imax.
Слайд 20Фрагмент программы:
imax =0;
for (i =1; i
if (x[i] > x[imax]) imax = i;
Слайд 21Программа:
#include
#define NMAX 100 /* Макс. кол-во чисел */
/* Функция ввода данных * /
int Vvod (float x[])
{
int n; /* Количество чисел */
int i; /* Индекс текущего числа */
Слайд 22
printf ("\nВведите количество чисел\n");
scanf ("%d",
&n);
printf ("Введите числа\n");
for (i=0; i
&x[i]);
return n;
}
Слайд 23/* Функция сортировки массива x по возрастанию */
void Sort
(float x[], int n)
{
int k;
/* Максимальный индекс просмотра*/
float r; /* Для обмена */
int imax; /* Индекс максимального элемента */
int i; /* Индекс текущего числа */
Слайд 24
for (k=n-1; k>0; k--)
{
imax =0;
for (i =1; i
k; i++)
if (x[i] > x[imax]) imax = i;
/* Обмен x[imax] и x[k] */
r = x[imax];
x[imax] = x[k];
x[k] = r;
}
}
Слайд 25/* Главная функция */
void main ()
{ float x[NMAX];
/* Обрабатываемые числа */
int n;
/* Количество чисел */
int i; /* Индекс текущего числа */
/* 1. Ввод массива x */
n = Vvod(x);
/* 2. Сортировка массива x по возрастанию */
Sort(x,n);
Вывод массива x */
printf("Упорядоченные числа:\n");
for (i=0;
i printf (" %.1f", x[i]);
}