- •1. Объявление структуры, обращение к элементам структуры, объявление массива структур.
- •2.Объявление пользовательского (typedef) типа структуры. Объявление переменных и массивов данного типа. Привести примеры.
- •3.Ввод-вывод массива структур. Привести пример программы подсчета среднего арифметического по числовому полю в массиве структур.
- •4.Общий формат объявление функции пользователя. Прототип функции. Типы возвращаемых значений. Привести примеры.
- •5.Формальные и фактические параметры в функции. Основные способы передачи параметров в функцию.
- •6.Способы передать в функцию массивов. Привести примеры.
- •7.Привести примеры функции вывода на печать элемента массива структур по его порядковому номеру.
- •8.Привести пример функции, которая возвращает сумму (произведение, среднеарифметическое) элементов в массиве.
- •9.Рекурсия. Определение рекурсии. Привести примеры рекурсивных функций
- •10.*Указатели на функцию. Примеры указателей на функцию.
- •11. *Пользовательские функции с переменным числом параметров
- •12. Параметры функции main(). Привести примеры обращения к параметрам функции main()
- •13. Понятие сортировки. Основные типы алгоритмов сортировки. Оценка эффективности алгоритмов сортировки
- •14. Схема и алгоритм сортировки методом выбора
- •15. Пузырёк
- •16. Алгоритм вставок
- •17.*Улучшенные алгоритмы сортировки: Шелла, быстрая сортировка
- •18. *Модели динамических структур данных: стек, очередь
- •20. Файл. Понятие и объявление переменной файлового типа
- •21. Понятие файла и потока данных. Стандартные потоки
- •22.Виды файлов. Файлы последовательного доступа.
- •23.Алгоритм и программа создания файла записей (структур).
- •30. *Функции потокового ввода-вывода.
11. *Пользовательские функции с переменным числом параметров
Язык C++ вслед за С позволяет писать функции с переменным числом параметров. Одним из простых примеров может служить функция, вычисляющая среднее арифметическое своих аргументов. Другой уже классический пример — функция сцепления произвольного количества строк, которая является естественным обобщением функции сцепления двух строк.
Переменный список параметров задается в заголовке функции многоточием:
int f(…)
Этот заголовок не вызывает у компилятора протестов. Такая запись означает, что при определении функции компилятору неизвестны ни количество параметров, ни их типы, и он, естественно, не может ничего проверить. Количество параметров и их типы становятся известными только при вызове функции.
Однако у программиста с написанием таких функций сразу возникают проблемы. Ведь имена параметров отсутствуют! Поэтому доступ можно осуществить только одним способом – косвенным, используя указатель. Вспомним, что все параметры при вызове помещаются в стек. Если мы каким-то образом установим указатель на начало списка параметров в стеке, то, манипулируя с указателем, мы, в принципе, можем «достать» все параметры!
Таким образом, список параметров совсем пустой быть не может, должен быть прописан хотя бы один явный параметр, адрес которого мы можем получить при выполнении программы. Заголовок такой функции может выглядеть так:
int f(int k...)
Ни запятая, ни пробел после параметра не обязательны, хотя можно их и прописать.
Есть одно обстоятельство, которое ограничивает применение таких функций: при написании функции с переменным числом параметров помимо алгоритма обработки программист должен разрабатывать и алгоритм доступа к параметрам. Так что список необъявленных параметров не может быть совсем уж произвольным – в языке C++ не существует универсальных средств распознавания элементов этого списка. Это же означает, что передача аргумента не того типа, который задумывался, или не тем способом, который подразумевался при разработке, приведет к катастрофическим последствиям – компилятор-то ничего не проверяет.
double f(double n, ...) //--заголовок с переменным числом параметров
{ double *p = &n; //--установились на начало списка параметров
double sum = 0, count = 0;
while (*p) //--пока аргумент не равен нулю
{ sum+=(*p); //--суммируем аргумент
p++; //--«перемещаемся на следующий аргумент
count++; //--считаем количество аргументов
}
return ((sum)?sum/count:0); //--вычисляем среднее
12. Параметры функции main(). Привести примеры обращения к параметрам функции main()
int main(int argc, char* argv[]) // параметры функции main()
Эта строка - заголовок главной функции main(), в скобочках объявлены параметры argс и argv.
Параметры функции main
int main (int argc, char * argv[ ] ) argv[ ] – массив символьных строк из командной строки DOS
argv[ 0] – полное имя файла с маршрутом к каталогу, где хранится программа.
argv[ 1] первый параметр после имени программы в командной строке,
argv[ 2] – второй и т.д.
Параметр argc определяет количество параметров в командной строке, не может быть меньше 1