- •Функции
- •Переменные, объявленные внутри функции, называются локальными
- •int main()
- •int main()
- •Вот как выглядят результаты выполнения этой программы.
- •Локальные переменные не хранят своих значений между
- •Важно!
- •Формальные параметры
- •Глобальные переменные
- •Глобальная переменная создается путем ее объявления вне какой бы то ни было функции.
- •Если глобальная и локальная переменные имеют одинаковые имена, то преимущество находится на стороне
- •// структура объявления функций не возвращающих значений
- •структура объявления функций возвращающих
- •/*область 1 - объявление функций до начала main()
- •// место для объявления прототипов функций
- •// синтаксис объявления прототипа
- •bool palindrom5(int number)
- •// программа-тренажер по выполнению сложения.
- •void drill()
- •■ Глобальные переменные занимают память в течение всего времени выполнения программы, а не
- •// Передача функции указателя.
- •// Передача указателя функции -- исправленная
- •Если массив является аргументом функции, то необходимо понимать, что при вызове такой функции
- •void display(int num[])
- •void display(int *num)
- •Результаты выполнения этой программы
- •Результаты выполнения этой
- •// Одна из версий функции strlen().
- •Длина строки
- •Аргументы функции main():
- •Аргумент командной строки представляет собой информацию, указываемую в команде (командной строке), предназначенной для
- •Параметр argc имеет целочисленный тип и предназначен для хранения количества аргументов командной строки.
- •Параметр argv представляет собой указатель на массив символьных указателей.
- •name Том
- •Чтобы получить доступ к отдельному символу в одном из аргументов командной строки, при
- •Обычно аргументы argc и argv используются для ввода в
- •При передаче программе числовых данных в качестве аргументов командной строки эти данные принимаются
- •Для преобразования аргументов командной строки во внутреннее представление здесь используется стандартная библиотечная функция
- •Чтобы сложить два числа, используйте командную строку такого вида
- •Return
- •Инструкцию return можно использовать с некоторым заданным значением либо без него.
- •void power(int base, int exp)
- •void f()
- •Каждая функция, кроме типа void, возвращает какое-нибудь значение. Это значение явно задается с
- •Если функция, тип которой отличен от типа void, завершается в результате обнаружения закрывающейся
- •int find_substr(char *sub, char *str)
- •Функцию можно объявить так, чтобы она возвращала значение любого типа данных, действительного для
- •Поскольку print_vertical()
- •Функции, которые возвращают
- •char *find_substr(char *sub, char *str)
- •При выполнении этой версии программы получен следующий результат.
- •Прототипы функций
- •Прототипы позволяют компилятору выполнить следующие три важные операции.
- •Общая форма прототипа функции аналогична ее определению за исключением того, что в прототипе
- •void sqr_it(int *i); // прототип функции int main()
- •Рекурсивная функция — это функция, которая вызывает сама
- •// Итеративная версия. int fact(int n)
- •Если рекурсивная функция factr() вызывается с аргументом, равным 1, то сразу возвращает значение
- •Когда функция вызывает сама себя, в системном стеке выделяется память для новых локальных
- •При возвращении каждого рекурсивного вызова из стека извлекаются старые локальные переменные и параметры,
- •Слишком большое количество рекурсивных обращений к функции может вызвать переполнение стека. Поскольку локальные
- •При написании рекурсивной функции необходимо включить в нее инструкцию проверки условия (например, if-инструкцию),
- •// Отображение строки в обратном порядке с помощью рекурсии.
/*область 1 - объявление функций до начала main()
место для объявления функций функциям объявленным в этой области не
нужны прототипы
*/
int main()
{
return 0;
}
// место для объявления прототипов функций
int main()
{
return 0;
}
/*область 2 - объявление функций после main()
место для объявления функций
*/
// синтаксис объявления прототипа
/*тип возвращаемых данных функции*/ /*имя
функции*/(/*параметры функции*/);
#include <iostream> using namespace std;
bool palindrom5(int); // прототип функции нахождения палиндрома пятизначных чисел
int main()
{
cout << "Enter 5zn-e chislo: "; int in_number, out_number;
cin >> in_number; out_number = in_number; if (palindrom5(in_number))
cout << "Number " << out_number << " – palendrom”; else
cout<<"This is not palendrom"<<endl; system("pause");
return 0;
}
bool palindrom5(int number)
{
int balance1, balance2, balance4, balance5; balance1 = number % 10;
number = number / 10; balance2 = number % 10; number = number / 100; balance4 = number % 10; number = number / 10; balance5 = number % 10;
if ((balance1 == balance5) && (balance2 == balance4))
return true;
else
return false;
}
Е
// программа-тренажер по выполнению сложения.
#include <iostream>
#include <cstdlib> using namespace std; void drill();
int count; int num_right; int main()
{
cout << "Сколько практических упражнений: ";cin >> count;
num_right = 0;
do {
drill(); count--;
}while(count);
cout << num_right<< " правильных ответов";
return 0;
}
void drill()
{
int count; /* Эта переменная count — локальная и никак не связана с одноименной глобальной.*/
int а, b, ans;
// Генерируем два числа между 0 и 99.
а = rand() % 100;
b = rand() % 100;
// Пользователь получает три попытки дать правильный ответ.
for(count=0; count<3; count++) {
cout << "Сколько будет " << а << " + " << b << "? ";
cin >> ans;
if(ans==a+b) {
cout << "Правильно\n";
num_right++;
return;
}
}
cout << "Вы использовали все свои попытки.\n";
cout << "Ответ равен " << a+b << '\n';
}
■ Глобальные переменные занимают память в течение всего времени выполнения программы, а не только тогда, когда действительно необходимы. ■ Использование глобальной переменной в "роли", с которой легко бы "справилась" локальная переменная, делает такую функцию менее универсальной, поскольку она полагается на необходимость определения данных вне этой функции.
■ Использование большого количества глобальных переменных может привести к появлению ошибок в работе программы,
поскольку при этом возможно проявление
// Передача функции указателя.
#include <iostream> using namespace std; void f (int *j); int main()
{
int i;
int *p;
p = &i; // Указатель p содержит адрес i.
f(p);
cout << i; // Переменная I содержит число 100.
return 0;
}
void f (int *j)
{
*j = 100; // Переменной, адресуемой указателем j,
присваивается число 100.
}