Вызов функции с параметрами по умолчанию
double f;
double sqr (double x) // определение функции
{ return x * x; }
double ff (double x = sqr(f)) // вызов функции для вычисления
// значения
{ return x; }
int main (void)
{ f = 2;
cout << "\n \n f =" < f < endl;
cout << "\n ff (x = sqr(f)) =" << ff (); // вычисляется значение
// по умолчанию
cout << "\n ff(3) = " << ff (3) << endl; // умолчание
// не используется
return 0;
} f = 2
ff (x = sqr(f)) = 4
ff (3) = 3
Вопрос 20. Рекурсия. Привести пример рекурсивной функции в С/C++.
рекурсивной называется такая функция, которая может вызывать сама себя;
для завершения процесса рекурсии в алгоритме рекурсивной функции обязательно должна быть ветка, обеспечивающая непосредственное завершение функции (процедуры).
Рекурсивная функция "Факториал"
#include "stdafx.h"
#include <iostream>
using namespace std;
unsigned int factor (unsigned int); //прототип функции
int main (void)
{
unsigned int n; // число, факториал которого надо вычислить
unsigned int f; // факториал числа n
cout << " Вычисление факториала: \n ";
cout << " Введите число, факториал которого надо вычислить \n";
cin >> n;
f = factor (n);
cout << "Факториал числа “ << n << “равен” << f;
return 0;
}
unsigned int factor (unsigned int k)
{ if (k == 1)
return 1;
else
return k*factor(k-1);
}
Вопрос 21. Область видимости и "время жизни" переменных. Использование статических переменных в функции. Привести примеры.
"Время жизни" —это время существования переменной во время работы программы.
Глобальными в C++ называются переменные, объявленные вне любой функции. Их "время жизни" совпадает с временем работы программы. Имя глобальной переменной видно с момента объявления, т.е. в любой точке программы после объявления.
Все переменные, объявленные в теле функции, как и параметры, передаваемые по значению, являются внутренними локальными переменными функции. Это одно из проявлений принципа инкапсуляции.
l за пределами функции имена объявленных внутри нее переменных не видны, т. е. имя переменной нельзя использовать вне тела функции в других местах программы. Говорят, что область видимости локальных переменных — тело функции.
l до входа в функцию локальных переменных не существует. Они "рождаются" при входе в функцию и "умирают" при выходе из нее. Говорят, что "время жизни" локальных переменных ограничено временем выполнения. функции. То же относится к параметрам. Данный механизм реализуется с помощью стека: локальные переменные и параметры автоматически размешаются в стеке программы при входе в функцию, а удаляются из стека при выходе из нее.
Вопрос 22. Передача параметров в функцию по ссылке. Привести примеры определения и вызова таких функций в С/C++..
При передаче данных по ссылке в функцию, куда передаются данные, создаются синонимы исходных объектов. Поэтому работа в подпрограмме ведётся именно с исходными объектами. Если в подпрограмме ссылочная переменная изменит значение, то это сразу отразится на исходной переменной.
В вызывающей функции параметр, передаваемый по ссылке, может быть только простой переменной любого известного типа.
Вернёмся снова к примеру обмена, только данные передадим по ссылке.
Пример:
void Swap (int &a, int &b) // ссылки в заголовке
{ int t = а; а = b; b = t; }
……………………………….
int х = 5, у = 3;
Swap (x, у);
cout << "х = " << х;
cout << " у = " << у << endl;
……………………………….
x = 3 y = 5
Вопрос 23. Перегрузка функций. Пример реализации перегруженной функции в С/C++.
Использование одного имени для нескольких функций называется перегрузкой (overloading).
Перегрузка функций — это одно из проявлений принципа полиморфизма, присущего объектно-ориентированным языкам программирования.
Функции С++, вычисляющие абсолютное значение своего аргумента:
int abs (int x);
long labs (long x);
double fabs (double x);
long double fabsl (long double x);
Пример:
Перегрузку функций удобно применять там, где ряд функций выполняет однотипную работу над аргументами различных типов.
Основное правило перегрузки заключается в том, что перегруженными считаются функции с различными списками параметров.
Перегруженный вариант функции, вычисляющей абсолютное значение своего аргумента:
int abs (int x);
long abs (long x) { return labs(x);)
double abs (double x) { return fabs(x); }
long double abs (long double x) { return fabsl(x); }
Вопрос 24. Одномерные массивы: объявление, инициализация, обработка, использование массивов в С/C++.
Одномерный массив — массив, с одним параметром, характеризующим количество элементов одномерного массива. Фактически одномерный массив — это массив, у которого может быть только одна строка, и n-е количество столбцов. Столбцы в одномерном массиве — это элементы массива.
Пример объявления:
int month[12]; double mas[32]; char letter[40];
Каждый элемент массива имеет определенный номер, который в программировании обычно называют индексом. В C++ принято нумерацию элементов в массиве начинать с нуля.
Инициализация массивов:
1) int month[7] = { 31, 28, 31, 30, 31, 30, 31 };
При инициализации массива разрешается не указывать количество элементов:
int month[] = { 31, 28, 31, 30, 31, 30, 31, 31 };
Обнуление массива с заданным количеством элементов: int v[10] = {0};
2) массив можно заполнить, вводя элементы массива с клавиатуры:
for (int i = 0; i < 12; ++i) cin >> month [i];
Обработка массива:
получение суммы элементов массива;
поиск максимума, минимума и других задаваемых значений;
сортировка массива;
выполнение однотипных действий над всеми элементами массива.
Пример использования: Вычисление суммы элементов массива вещественных чисел
#include "stdafx.h"
#include <iostream>
using namespace std;
int main (void)
{ double v [10] = { 1, 2, 3, 4, 5, 6 };
unsigned int n = sizeof (v) / sizeof (double);
double s = 0;
for (int i = 0; i < n; ++i) s += v [ i ];
cout << “Summa =“ << s << endl;
return 0;
}
Вопрос 25. Одномерные массивы: последовательный поиск элементов в массивах и его организация на языке С/C++.
Не нашли, что искали? Воспользуйтесь поиском:
|