- •Лабораторная работа 3 Функции
- •Примеры вызовов функций
- •Демонстрация функции без аргументов и не возвращающей значения
- •Демонстрация функции, определенной перед ее вызовом
- •Демонстрация функции с аргументами и не возвращающей значения
- •Демонстрация использования глобальных переменных при обмене данными между функциями
- •Демонстрация использования в функции локальных статических переменных
- •Передача в функцию в качестве параметра переменных разных типов Функция вычисления минимального расстояния между точками плоскости
- •Функция вычисления факториала
- •Функция вычисления хn через умножение
- •Функция определения максимального и минимального из двух чисел
- •Функция с параметром перечисляемого типа
- •Функция, выделяющая целую и дробную части вещественного числа
- •Функция, возвращающая ссылку как результат своей работы
- •Демонстрация inline-функций
- •Демонстрация функции с параметрами по умолчанию
- •Перегрузка функций
- •Перегрузка функций с равным числом аргументов
- •Перегрузка функций с разным числом аргументов
- •Шаблоны семейства функций
- •Рекурсивные функции
- •Рекурсивная функция вычисления факториала
- •Рекурсивная функция вывода на печать символов строки в обратном порядке
- •Рекурсивная функция печати числа в виде строки символов
- •Вычисление нод через итерации и через рекурсивную функцию
- •Вычисление интеграла по методу правых прямоугольников
- •Использование одинаковых вызовов функции для вычисления интеграла разными методами и для разных функций
- •Использование при вычислении интеграла многофайловой компиляции
- •Вычисление корня нелинейного уравнения
- •Правила оформления и вызова функций
- •Элементы оптимизации работы с функциями
Лабораторная работа 3 Функции
(для выполнения лабораторной работы №3 необходимо проработать материал лекций №№ 9-11 и разобрать примеры, приведенные в данной методичке)
Примеры вызовов функций 1
Демонстрация функции без аргументов и не возвращающей значения 4
Демонстрация функции, определенной перед ее вызовом 5
Демонстрация функции с аргументами и не возвращающей значения 5
Демонстрация использования глобальных переменных при обмене данными между функциями 6
Демонстрация использования в функции локальных статических переменных 7
Передача в функцию в качестве параметра переменных разных типов 7
Функция вычисления минимального расстояния между точками плоскости 7
Функция вычисления факториала 8
Функция вычисления хn через умножение 9
Функция определения максимального и минимального из двух чисел 9
Функция с параметром перечисляемого типа 10
Функция, выделяющая целую и дробную части вещественного числа 10
Функция, возвращающая ссылку как результат своей работы 11
Демонстрация inline-функций 11
Демонстрация функции с параметрами по умолчанию 12
Перегрузка функций 12
Перегрузка функций с равным числом аргументов 13
Перегрузка функций с разным числом аргументов 13
Шаблоны семейства функций 14
Рекурсивные функции 16
Рекурсивная функция вычисления факториала 16
Рекурсивная функция вывода на печать символов строки в обратном порядке 18
Рекурсивная функция возведения вещественного числа Х в целую степень N>=0 18
Рекурсивная функция печати числа в виде строки символов 19
Вычисление НОД через итерации и через рекурсивную функцию 19
Рекурсивная функция вычисления чисел Фибоначчи 20
Рекурсивная функция вычисления суммы элементов числовой последовательности 20
Рекурсивная функция реверса последовательности вводимых символов 20
Передача функции в качестве параметра 21
Вычисление интеграла по методу левых прямоугольников 21
Вычисление интеграла по методу правых прямоугольников 24
Использование одинаковых вызовов функции для вычисления интеграла разными методами и для разных функций 25
Использование при вычислении интеграла многофайловой компиляции 27
Вычисление корня нелинейного уравнения 29
Правила оформления и вызова функций 33
Элементы оптимизации работы с функциями 34
Примеры вызовов функций
Проанализируйте примеры вызовов функций, обработки возвращаемых значений, использования локальных, глобальных, статических переменных:
//1
int reset (int); //прототип функции
#define HIGH 5
int main ()
{
int i = HIGH; //локальная переменная i
reset (i/2); //аргумент получает значение 2, но i свое значение не изменяет
//возвращаемое функцией значение пропадает
printf ("%d\n", i); //5
return 0;
}
int reset (int i) //локальная переменная i
{
i = i;
return (i);
}
//2
int reset (int); //прототип функции
#define HIGH 5
int main ()
{
int i = HIGH; //локальная переменная i
reset (i = i/2); //аргумент получает значение 2,i изменяет свое значение на 2
//возвращаемое функцией значение пропадает
printf ("%d\n", i); //2
return 0;
}
int reset (int i)
{
i = i;
return (i);
}
//3
int reset (int i); //прототип функции
#define LOW 0
#define HIGH 5
int i = LOW; //глобальная переменная i
int main ()
{
int i = LOW; //локальная переменная i
i = reset (i/2); //аргумент i/2 получает значение 0, //i изменяет свое значение на значение 5,
// возвращаемое из функции reset
printf ("%d\n", i); //5
return 0;
}
int reset (int i) //локальная переменная i
{
i = HIGH;
return (i);
}
//4
int reset (int i); //прототипы функций
int workover (int i);
#define LOW 0
#define HIGH 5
#define CHANGE 2
int i = LOW; //глобальная переменная i
int main ()
{
auto int i = HIGH; //локальная переменная i
reset (i/2); //вызов функции с аргументом 2, //i свое значение не изменяет
//возвращаемое функцией значение пропадает
reset (i=i/2); //вызов функции с аргументом 2, //i изменяет свое значение на 2,
//значение, возвращаемое функцией, пропадает
printf ("%d\n", i); //2
i= reset (i/2); //вызов функции с аргументом 1, //i изменяет свое значение на
//значение 5, возвращаемое функцией
workover(i); //вызов функции с аргументом 5
printf ("%d\n", i); //5
return 0;
}
int workover (int i)
{ //локальная переменная i
i = (i%i)*((i*i)/(2*i)+4);
return (i);
}
int reset (int i) //локальная переменная i
{
i = i <=CHANGE? HIGH: LOW;
return (i);
}
//5
int reset (int i); //прототипы функций
int workover (int i);
#define LOW 0
#define HIGH 5
#define CHANGE 2
int i = LOW; //глобальная переменная i
int main ()
{
auto int i = HIGH; //локальная переменная i
reset (i/2); //вызов функции с аргументом 2, //i свое значение не изменяет
//возвращаемое функцией значение пропадает
reset (i=i/2); //вызов функции с аргументом 2, //i изменяет свое значение на 2
//значение, возвращаемое функцией, пропадает
i= reset (i/2); //вызов функции с аргументом 1, //i изменяет свое значение на
//значение 5, возвращаемое функцией
printf ("%d\n", i); //5
workover(i); //вызов функции с аргументом 5
printf ("%d\n", i); //5
return 0;
}
int workover (int i)
{
i = (i%i)*((i*i)/(2*i)+4);
return (i);
}
int reset (int i)
{
i = i <=CHANGE? HIGH: LOW;
return (i);
}
//6
int reset(); //прототипы функций
int next(int);
int last(int);
int neww(int);
int i=1; //глобальная переменная i
int main()
{auto int i, j; //локальные переменные
i=reset();
for (j=1; j<=3; j++)
{next(i); last(i);
printf ("%d\n", neww(i+j));
}
return 0;
}
int reset()
{return(i); //глобальная переменная i
}
int next(int j)
{return(j=i++); //глобальная переменная i , локальная переменная j
}
int last(int j)
{ static int i=10; // локальная переменная j, статическая локальная переменная i
return(j=i--);
}
int neww(int i)
{ auto int j=10; //локальные переменные i и j
return(i=j+=i);
}