- •Этапы создания исполняемой программы
- •Идентификаторы
- •Ключевые слова
- •Комментарии
- •Структура программы
- •Вывод данных
- •Ввод данных
- •Вопросы для самоконтроля
- •Тема 1.1(2). Типы данных. Константы и переменные
- •Основные (стандартные) типы данных
- •Область действия переменных
- •1.3.1. Математические операции
- •1.3.2. Простое присваивание
- •1.3.3. Составное (сложное) присваивание
- •1.3.4. Операция приведения (преобразования) типов
- •1.3.5. Операции отношения
- •1.3.7. Операция sizeof
- •1.3.8. Операция "запятая" (,)
- •1.3.9. Условная операция (?:)
- •1.3.10. Указатель. Определение адреса переменной
- •1.3.11. Директива define
- •1.3.12. Директива include
- •1.3.13. Примеры программ
- •1.3.14. Вопросы для самоконтроля
- •Тема 1.3. Программирование алгоритмов различной структуры
- •Базовые конструкции структурного программирования
- •Операторы ветвления
- •1.4.1. Условный оператор if
- •If (условие) оператор_1; else оператор_2;
- •If (условие) оператор_1;
- •1.4.2. Оператор выбора switch
- •Операторы цикла
- •1.4.3. Оператор while
- •1.4.4. Оператор do...While
- •1.4.5. Оператор for
- •1.4.6. Функция exit(), операторы break, continue, return
- •Стандартные математические функции
- •Тема 1.4. Ввод-вывод данных
- •Функции get() и put()
- •Функция getch()
- •Функция printf
- •Функция sprintf()
- •Тема 1.5. Функции. Локальные и глобальные переменные. Способы передачи данных.
- •1.5.1. Видимость переменных
- •1.5.2. Определение функции
- •1.5.3. Функция main
- •1.5.4. Вызов функции
- •1.5.5. Способы передачи данных
- •1.5.6. Возвращаемые значения функции
- •1.5.7. Использование прототипов функций
- •Тема 1.6(1). Массивы и указатели
- •Объявление массива
- •Доступ к элементам массива
- •Многомерные массивы
- •Указатели
- •Тема 1.6(2). Структуры и строки
- •1.6.1. Структуры
- •1 Способ – по шаблону.
- •2 Способ – при объявлении (описании) шаблона.
- •1.6.2. Способы реализации строк
- •1.6.3. Строковые константы
- •1.6.4. Указатель на символьную строку
- •1.6.5. Массив символов
- •1.6.6. Некоторые функции для работы со строками
- •1.6.7. Некоторые функции проверки и преобразования символов
- •Тема 1.7. Работа с памятью
- •Функция malloc
- •Функция free
- •Операция new
- •Операция delete
- •Тема 1.10. Динамические структуры
- •Разновидности динамических структур
- •Примеры программ (фрагментов программ) для работы с динамическими структурами
1.5.3. Функция main
С точки зрения функций, main тоже является функцией. Main переводится как главная. Возможны два варианта блока main.
Вариант 1
main ()
{ ...
return 0;
}
Блок main возвращает значение целого типа int.
Вариант 2
void main ()
{ ...
}
1.5.4. Вызов функции
Функция начинает выполняться в момент вызова.
Для вызова функции указывается ее имя, за которым в круглых скобках через запятую перечисляются имена передаваемых параметров.
При вызове функции выполняются все операторы из тела функции до конца (оператора return). Затем происходит возврат в главную функцию.
Пример 6
Программа, содержащая функцию, которая возвращает сумму двух целых величин.
#include <iostream.h>
int sum (int a, int b) // определение функции sum
{
return (a+b); // тело функции
}
int main()
{
int a=2, b=3, c, d;
c=sum(a,b); // вызов функции sum
cin>>d;
cout<<sum(c,d); // вызов функции sum
return 0;
}
В объявлении, определении и вызове одной и той же функции типы и порядок следования параметров должны совпадать.
1.5.5. Способы передачи данных
Механизм параметров является основным способом обмена информацией между вызываемой и вызывающей функциями.
Параметры, перечисленные в заголовке описания функции, называются формальными параметрами (или просто параметрами).
Параметры, записанные в операторе вызова функции, называются фактическими параметрами (или аргументами).
Существует два способа передачи параметров в функцию: по значению (копирование) и по адресу.
1 способ. При передаче по значению в принимающую функцию передается не сама переменная-параметр, а только ее значение – копия. Это уже не одна переменная, а, фактически, две. Первая является локальной по отношению к главной функции, а вторая локальной по отношению к принимающей функции. Если эти переменные имеют одно и тоже имя, конфликта не возникает, т.к. они локальны. При изменении переменной в принимающей функции значение в вызывающей (главной) функции не изменяется.
Пример 7 (передача параметров по значению)
f (int i, int j)
{
i=6; j=16;
cout<<"\n i="<< i<<"\n j="<< j;
return 0;
}
main ()
{
int i=5, j=15;
f (i,j); // вызов функции f ; выводятся i=6, j=16
return 0;
}
В результате выполнения программы в переменных i и j окажутся значения 5 и 15.
2 способ. При передаче параметров по адресу (или ссылке) в принимающую функцию передается адрес переменной-параметра. Поэтому принимающая функция получает доступ к ячейке памяти по этому адресу и может изменить исходное значение аргумента. Измененное значение сохраняется и после выхода из функции.
Пример 8 (передача параметров по адресу)
.....
f (int *ai, int *aj) // функция f получает два адреса переменных типа int: ai, aj
{
*ai=6; // по адресу ai записывается значение 6
*aj=16; // по адресу aj записывается значение 16
cout<<"\n Функция с i="<<*ia<<" \n j"<<*aj;
return 0;
}
void main()
{
int i=5, j=4;
cout<<"\nДо вызова функции i="<< i<<" \nj="<< j;
f (&i, &j); // операция &i позволяет определить адрес переменной i,
// &j – адрес переменной j
cout<<"\n После вызова функции i="<< i<<" \nj="<< j;
}
В результате выполнения программы в переменных i и j окажутся значения 6 и 16.