- •Экзамен 374 Предварительные рассуждения Вступительное слово
- •Исторические факты
- •Начнем!
- •Проба пера
- •Открытие сохраненного проекта
- •Вывод данных
- •Типы данных
- •Хороший стиль программирования
- •Переменные и константы
- •Практический пример
- •Ввод данных
- •Например:
- •Пример:
- •Арифметические операции с числами
- •Литералы
- •Некоторые примеры
- •Домашнее задание
- •Напишите программу, которая вводит число из трех цифр, разделяет число на отдельные цифры и печатает их отдельно друг от друга с тремя пробелами между ними. Преобразование типов
- •Перечисляемые типы
- •Типичная ошибка
- •Хороший стиль программирования
- •Типичная ошибка
- •Выражения
- •Оператор if
- •Структура программы
- •Логические операции
- •Структура множественного выбора switch
- •Практический пример
- •Цикл for
- •Практический пример
- •Цикл do-while
- •Домашнее задание
- •Вызов функции
- •Прототипы функций
- •Разбор программы
- •Область видимости
- •Аргументы по умолчанию
- •Встраивание
- •Перегрузка функций
- •Учебный пример перегруженных функций. Иллюстрация перегрузки
- •Результат работы программы
- •Практические примеры
- •Домашнее задание
- •Примеры домашней работы урока 1 Пример №1
- •Как работает программа
- •Пример №2
- •Как работает программа
- •Примеры домашних работ на создание функций Пример №1
- •Как работает программа
- •Пример №2
- •Как работает программа
- •Массивы
- •Объявление массивов
- •Примеры использования массивов
- •Программа 1
- •Программа 2
- •Обратите внимание!
- •Типичная ошибка программирования
- •Типичная ошибка программирования
- •Программа 3
- •Типичная ошибка программирования
- •Замечание по технике программирования
- •Программа 4
- •Программа 5
- •Программа нахождения минимального и максимального элементов массива
- •Сортировка массивов
- •Домашнее задание
- •Что такое указатели?
- •За кулисами...
- •Как работать с указателями?..
- •Зачем нужны указатели?
- •Указатели и Массивы.
- •Примеры задач
- •Пример 1
- •Пример 2
- •Пример 3
- •Указатели - аргументы функций.
- •Ссылочные параметры
- •Примеры решения задач
- •Домашнее задание
- •Операторы свободной памяти new и delete
- •Функции работы со строками из библиотеки обработки строк
- •Пример 1.
- •Пример2
- •Пример 3
- •Пример задачи на новый материал
- •Домашнее задание
- •Двухмерные массивы, как частный случай многомерных массивов
- •Программа.
- •Результаты работы программы.
- •Многомерные динамические массивы
- •Пример на многомерные динамические массивы
- •Домашнее задание
- •Рекурсия
- •Рекурсии или итерации
- •Указатели на функции
- •Пример №1
- •Результат выполнения программы:
- •Пример №2
- •Результат выполнения программы
- •Пример №3
- •Результаты выполнения программы
- •Определения структур
- •Пример #1 на использование структур
- •Пример #2 на использование структур
- •Оператор указателя на структуру
- •Домашнее задание
- •Тест по c Группа ___________________ф. И. О. ______________________
- •Объектно-ориентированное программирование.
- •Наследование (Inheritance).
- •Инкапсуляция (Encapsulation).
- •Определение класса
- •Конструкторы и деструкторы Инициализация объектов класса: конструкторы
- •Основное назначение конструкторов - инициализация объектов.
- •Использование конструкторов с аргументами по умолчанию
- •Если параметры не передаются конструктору, в определении объекта не нужно включать пустые круглые скобки.
- •Использование деструкторов
- •Когда вызываются конструкторы и деструкторы.
- •Домашнее задание
- •Конструктор копирования
- •Синтаксис конструктора копирования
- •Памятка
- •Пример использования конструктора копирования.
- •Перегруженные конструкторы
- •Экскурс в историю
- •Послесловие к примеру
- •Маленькое замечание
- •Домашнее задание
- •Создание класса ''строка''
- •Перегрузка операций.
- •Общие принципы перегрузки операторов.
- •Преобразования, определяемые классом
- •Пример строкового класса с перегруженными операторами
- •Домашнее задание
- •Дружественные функции (Friend Functions)
- •Пример строкового класса с перегруженными операторами и дружественными функциями
- •Перегрузка операторов new и delete
- •Перегрузка оператора индексирования
- •Класс вектор. Часть1.
- •Класс вектор. Часть 2.
- •Класс вектор. Часть 3.
- •Домашнее задание
- •Наследование (Inheritance). Часть 1.
- •Наследование (Inheritance). Часть 2.
- •Множественное наследование (multiple inheritance)
- •Пример множественного наследования
- •Домашнее задание
- •Статические члены данных
- •Раннее и позднее связывание
- •Виртуальные функции
- •Пример.
- •Абстрактные классы
- •Виртуальный базовый класс
- •Практический пример
- •Домашнее задание
- •Потоки ввода-вывода.
- •Iostream.H: stream - поток, "I" - сокр. Input - ввод, "o" - сокр. Output - вывод.
- •Предопределенные потоки.
- •Операции помещения в поток и извлечения из потока.
- •Файловый ввод-вывод с применением потоков.
- •Конструкторы файловых потоков.
- •Функции для открытия и закрытия файлов.
- •Функции для обмена с потоками.
- •Часто применяемые функции потока.
- •Ввод/вывод массива в/из файл(-а).
- •Практический пример: перекодировка файла.
- •Домашнее задание
- •Немного о файлах...
- •И снова файлы...
- •Пример "Телефонная книга"
- •Файл abonent.H
- •Форматирование данных при обменах с потоками.
- •Состояние потока.
- •Использование аргументов командной строки.
- •Ввод/вывод в с.
- •Домашнее задание
- •Определение шаблонов функций
- •Переопределение шаблонов функций
- •Шаблоны классов
- •Шаблонный класс вектор
- •Шаблонный класс вектор
- •Шаблонный класс вектор
- •Введение
- •Обработка исключительных ситуаций
- •Практический пример
- •Программа
- •Домашнее задание
- •Экзамен
Вызов функции
Программа на C++ составляется из одной или более функций, одна из которых — main (). Выполнение программы всегда начинается с функции main (). Когда при выполнении программы встречается имя функции, происходит обращение к этой функции (она вызывается). То есть управление программой передается функции. После того как функция выполнила свою работу, управление возвращается в то место, откуда функция была вызвана — в вызывающее окружение (calling environment).
Обычно функция, которая вызывает какую-либо другую функцию, называется вызывающей функцией, а функция, которую вызывают на выполнение, называется вызываемой функцией.
Для вызова функции необходимо указать имя функции и список параметров, которые необходимо ей передать. Список передаваемых параметров должен быть заключен в круглые скобки.
Например вызов функции ожидания нажатия произвольной клавиши на клавиатуре - функция getch(), объявление которой находится в библиотеке conio.h, можно произвести следующим образом
....
getch();
....
Некоторые функции возвращают значения, как, например, функция, вычисляющая квадратный корень от числа, возвращает значение этого корня. Если функция возвращает значение, Вы должны принять это значение в какую-либо переменную, вывести на экран либо использовать в составном выражении. Например, в библиотеке math.h определена функция извлекающая квадратный корень sqrt, которая принимает как параметр значение, из которого следует извлечь корень, и возвращает значение этого корня. Как ее можно использовать
....
int i=2;
double dbl=sqrt(i);
cout << sqrt(5);
....
Вызов функции на самом деле является выражением, поэтому его можно использовать как составную часть более сложного выражения. Например:
....
cout << 2*sqrt(3)+1;
float res=sqrt(sqrt(7)/2)+10;
....
Вызвать функцию можно только после объявления функции (то есть ниже объявления).
Объявление функции из стандартной библиотеки выполняется при помощи подключения библиотеки директивой препроцессора #include.
Как объявить и определить свою функцию рассмотрим в следующем разделе.
return
Существует несколько способов возврата управления к точке, из которой была вызвана функция:
- Если функция не должна возвращать результат, управление возвращается либо просто при достижении правой фигурной скобки, завершающей функцию, либо
- при выполнении оператора return.
- Если функция должна возвращать результат, то оператор return выражение; возвращает значение выражение в обращение к функции.
Таким образом, оператор возврата имеет две формы:
return;
В этом случае, когда выполняется оператор возврата, управление программой немедленно передается обратно в вызвавшую среду. Используется когда функция не возвращает значение.
return выражение;
В этом случае, в вызвавшую среду возвращается также значение выражения, которое следует за ключевым словом return. Это значение должно быть конвертируемым к возвращаемому типу из заголовка определения функции.
Например:
return; |
не возвращает значения; |
return 3; |
возвращаемое значение = 3; |
return (a + b); |
возвращаемое значение = значению выражения (а + b); скобки необязательны, используются для улучшения читаемости кода. |
В качестве иллюстрации небольшой пример программы.
/* Программа для введеных с клавиатуры трех чисел предлагает выполнить след. действия: проверить на четность, вычислить сумму, вычислить сред. арифметическое нечетных чисел */
#include < iostream.h >
// прототипы функции bool IsEven(int ); /* функция проверяет число на четность*/
int abcMultiple (int, int, int); /* функция вычисляет сумму трех чисел */ float ArithMean(int, int, int); /* функция вычисляет среднее арифметическое нечетных чисел*/ // описания функций void OutputMenu() /* функция выводит на экран меню программы*/ { cout << "1. Ввод чисел \n" "2. Проверка чисел на четность \n" "3. Вычислить произведение \n" "4. Вычислить среднее арифметическое нечетных чисел \n"; cout << "\n \n Выберите пункт меню \n"; return; }
int InputNumber() /* функция ввода числа в заданном диапазоне */ { int number = 0; do { cout << "\n Введите целое число в диапозоне от 0 до 500: "; cin >> number; } while( number < 0 || number > 500); return number; }
void main() { int a = 0, b = 0, c = 0, /* объявление и инициализация переменных целого типа для хранения чисел, введенных пользователем с клавиатуры*/ menuVal = 0; /* объявление и инициализация переменной целого типа для хранения значения выбранного пункта меню */
do { OutputMenu(); /*вызов функции OutputMenu*/ cin >> menuVal; switch (menuVal) { case 1: /* Метка соответствует задаче первого пункта меню */ a = InputNumber(); cout << " \n a = " << a; b = InputNumber(); cout << " \n b = " << b; c = InputNumber(); cout << " \n c = " << c; break; case 2: /* Метка соответствует задаче второго пункта меню */ if ( IsEven(a) ) cout << "\n а = " << a << " - четное"; if ( IsEven(b) ) cout << "\n b = " << b << " - четное"; if ( IsEven(c) ) cout << "\n c = " << c << " - четное"; break; case 3: /* Метка соответствует задаче третьего пункта меню */ cout << "\n Произведение a*b*c = " << abcMultiple(a, b, c); break; case 4: /* Метка соответствует задаче четвертого пункта меню */ cout << "\n Среднее арифметическое нечетных чисел = " << ArithMean(a, b, c); break; default: /* В случае, если пользователь ввел значение вне диапозона 1-4 */ cout << "\n Будьте внимательней." " Имеется всего 4 пункта меню :)"; } cout << "\n\n Дальше? " "\n 0 - Нет, 1 - Да "; cin >> menuVal; }while(menuVal); return; }
// описания функций, прототипы функций объявлены выше
bool IsEven(int val) { bool valIsEven = val%2 ? false : true; return valIsEven; }
int abcMultiple (int a, int b, int c) { return a*b*c; }
float ArithMean(int val1, int val2, int val3) { int Sum = 0, count = 0; /* объявляем вспомогательные переменные для вычисления среднего арифметического Sum/count */ if ( !IsEven(val1) ) { count ++; Sum += val1; } if ( !IsEven(val2) ) { count ++; Sum += val2; } if ( !IsEven(val3) ) { count ++; Sum += val3; } if ( count ) return float(Sum)/count; else return 0; } |