- •1. Краткие теоретические сведения
- •1.1. Знакомство с функциями
- •1.2. Описание функции
- •1.3.1. Тело функции
- •1.3.2. Формальные параметры функции
- •1.3.3. Обращение к функции
- •1.3.4. Фактические параметры.
- •1.4. Формальные и фактические параметры функции
- •1.5. Описание и объявление функции. Прототип функции
- •1 Способ - Перед main().
- •2 Способ - После main ().
- •1.6. Передача параметров в функцию. Изменяемые значения параметров
- •1.6.1. Передача параметров
- •1.6.2. Передача параметров по значению
- •1.6.3. Передача параметров по ссылке
- •1.6.4. Передача параметров по указателю
- •1.7. Механизм обращения к функции и передача данных
- •1.8. Локальные и глобальные переменные. Время жизни и область действия (видимости) переменных
- •1.8.1. Представление об области видимости переменных
- •1.8.2. Объявление локальных переменных
- •1.8.3. О конфликте имен
- •1.8.4. Глобальные переменные
- •1.8.5. Если имена глобальных и локальных переменных конфликтуют
- •1.9. Принцип сокрытия данных внутри функции. Принцип локализации имен
- •1.10. Передача одномерных массивов как параметров функции
- •1.11. Передача многомерных массивов в функцию
- •1.12. Рекурсивные функции
- •1.13. Аргументы по умолчанию
- •1.14. Встраиваемые функции (inline)
- •1.15. Перегрузка функций
- •1.16. Указатель на функцию
- •1.17. Шаблоны функций
- •1.18. Использования библиотеки этапа выполнения
- •1.18.1. Использование функций библиотеки этапа выполнения
- •1.18.2. Изучение функций библиотеки этапа выполнения
- •1.18.3. Использование функций api
- •1.19. Изменение значений параметров функции
- •1.19.1. Почему функции обычно не могут изменить значения параметров
- •1.19.2. Изменение значения параметра
- •1.19.3. Использование ассемблерных листингов для лучшего понимания работы компилятора
- •1.20. Примеры решения задач с использованием механизма функций
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1. Функции пользователя-использование формул
- •2.4.1.1. Условие задания
- •2.4.1.2. Пример для варианта 30
- •2.4.1.3. Программа
- •2.4.1.4. Тестирование
- •2.4.2. Задание 2. Функции пользователя при работе с массивами
- •2.4.2.1. Условие задания
- •2.4.2.2. Пример для варианта 30
- •2.4.2.3. Программа
- •2.4.2.4. Тестирование
- •2.4.3. Задание 3. Функции пользователя при работе с массивами
- •2.4.3.1. Условие задания
- •2.4.3.2. Пример для варианта 30
- •2.4.3.3. Программа
- •2.4.3.4. Тестирование
- •2.4.4. Задание 4. Вычисление выражений с использованием функций
- •2.4.4.1. Условие задания
- •2.4.4.2. Пример для варианта 30
- •2.4.4.3. Программа
- •2.4.4.4. Тестирование
- •2.4.5. Задание 5. Вычисление интеграла методом трапеций
- •2.4.5.1. Условие задания
- •2.4.5.2. Пример для варианта 30
- •2.4.5.3. Программа
- •2.4.5.4. Тестирование
- •2.4.5.5. Типичные ошибки при выполнении работы
- •Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Знакомство с функциями 2
2.4.5.2. Пример для варианта 30
Методом трапеций вычислить интеграл
Для вычисления интеграла
отрезок интегрирования [a, b] делится на n равных частей (n - четное) и используется квадратурная формула
2.4.5.3. Программа
//Численное интегрирование методом трапеций
//Задание № 5
//Вариант 30
//Автор Макова Зося Викторовна, гр. ИНФО-101
//17.05.2012
#include<stdio.h>
#include<iostream.h>
#include<conio.h>
#include<math.h>
/*Главная функция*/
int main()
{float a, b,I; //Описание переменных
int n;
float integral (float a, float b, int n); // Прототип функции
//Ввод исходных данных
cout << "Введите нижнюю границу интеграла a = ";
cin >> a;
cout << "Введите верхнюю границу интеграла b = ";
cin >> b;
cout << "Введите число участков разбиения подинтегральной"<< endl;
cout << "функции n (n - четное): ";
cin >> n;
// Вычисления интеграла
I= integral (a, b, n);
cout <<"\n Значение интеграла равно: " <<I << endl;
cout << "Нажмите любую клавишу..." ;
getch ();
return 0;
}
// --------------------------------------------------------
/*Функция, вычисляющая интеграл */
float integral(float a, float b, int n)
{float S, h;
int i;
float f(float x); //Прототип подинтегральной функции
//Вычисления подинтегрального выражения
h =(b - a)/n;
S = (f(a) +f(b))/2; //Сумма крайних членов ряда
for (i= 1; i<n; i++)
S =S + f(a + h*i); //Вычисление ряда
return h*S; }
// ---------------------------------------------------------------------------
/*Функция, вычисляющая подынтегральное выражение */
float f(float x)
{ return x*cos(x);
}
2.4.5.4. Тестирование
2.4.5.5. Типичные ошибки при выполнении работы
1. Если в последовательности функций вызываемая функция расположена после вызывающей, то последняя обязательно должна содержать прототип вызываемой функции. Ошибка, связанная с нарушением этого правила перехватывается компилятором и, следовательно, не является фатальной.
2. Неправильно описывается подынтегральное выражение.
Вопросы для самоконтроля
1. Что такое подпрограмма и для чего она используется?
2. Что такое модульное программирование?
3. Как определить функцию?
4. Как передавать функции информацию?
5. Каково различие между формальным и фактическим аргументами?
6. Где необходимо описывать аргументы?
8. Где необходимо описывать локальные переменные?
9. Когда и как использовать оператор return?
10. Какие действия следует выполнить, чтобы использовать функцию для решения задачи?
11. Как описывается функция?
12. Как объявляется функция?
13. Роль прототипа?
14. Для чего нужны формальные параметры?
15. Как вызывается функция?
16. Способы передачи параметров?
17. Приемы передачи параметров-массивов?
18. Как передать результаты вычислений из функции?
19. Как используется тип void в описании функций?
20. В каких целях можно использовать оператор return?
21. Передача значений параметров по умолчанию?
22. Что стоит за объявлением функции inline?
23. В каких случаях используется спецификатор const при передаче параметров?
24. Пояснить термин «перегружаемые подпрограммы»? Почему допускается такая возможность?
25. Как формируется заголовок функции?
26. Какие из приведенных заголовков функций содержат ошибки:
voidfl {int i, int *j, double s)
voidf2{int i,j, double a,b, char c)
void {int i, int k,) intf4(int i,
char c)
27. Что представляет собой тело функции?
28. В каких случаях оператор return задается без параметров?
29. Сколько величин можно возвратить из функции с помощью оператора return?
30. Может ли функция содержать оператор return более одного раза?
31. Зачем нужен прототип функции? В каких случаях прототип не является обязательным?
32. Чем отличается синтаксис написания прототипа функции от синтаксиса ее заголовка?
33. Описание и объявление функции с параметрами и без параметров.
34. Оператор return. Использование в функциях.
35. Область действия и область видимости переменных.
36. Параметры и аргументы функций.
37. Передача параметров функции по значению и по ссылке.
38. Использование рекурсивных функций.
39. Функции с переменным числом параметров.
40. Использование указателей на функции.
41. Есть ли ошибка в записи заголовка функции int sum(int a, b)?
42. Есть ли ошибки в описании функции
void sr(int a,int b,int &s);
{ s=a+b; return s;}
43. Отличаются ли результаты двух функций (и изменяются ли аргументы функций):
int value(int a) {return a*=a; }
void ref(int &cref) {cref*=cref; }
44. Напишите заголовки для каждой из следующих функций:
а) Функция hipotenuse, которая принимает два аргумента с плавающей точкой side1и side2 (длины катетов прямоугольного треугольника) и возвращает результат (длину гипотенузы) с плавающей точкой.
б)Функция smallest, которая принимает три целых значения и возвращает наименьшее значение среди трех заданных.
в) Функция InToFloat, которая принимает целый аргумент number и возвращает результат с плавающей точкой.
45. Найдите ошибку в каждом из следующих фрагментов программы и объясните, как можно исправить ошибку:
а) int sum(int i) б) void f(float a)
{ if (n==0) { float a;
return 0; cout<<a<<endl;
else }
n+sum(n-1);
}