- •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. *Функции потокового ввода-вывода.
2.Объявление пользовательского (typedef) типа структуры. Объявление переменных и массивов данного типа. Привести примеры.
typedef-объявление На стадии компиляции производится полная идентификация типов всех входящих в программу выражений. Даже отсутствие имени типа в объявлении как, например, unsigned long MMM; // Вместо имени типа - комбинация модификаторов unsigned long. восстанавливается транслятором в соответствии с принятыми в C++ правилами умолчания. Помимо явного объявления типа в C++ предусмотрены дополнительные средства описания имён типов. Таким средством является typedef-объявление. С его помощью в программу можно ввести новые имена, которые затем используются для обозначения производных и основных типов. typedef-объявление - это инструмент объявления. Средство ввода новых имён в программу, средство замены громоздких последовательностей имён в объявлениях (но не определениях!) новыми именами. Синтаксис typedef-объявления как подмножества объявления представляется внушительным списком форм Бэкуса-Наура. Но при известной степени концентрации это нагромождение БНФ всё же можно разобрать: Объявление ::= [СписокСпецификаторовОбъявления][СписокОписателей]; СписокСпецификаторовОбъявления ::= СпецификаторОбъявления [СписокСпецификаторовОбъявления] СпецификаторОбъявления ::= typedef ::= ***** СписокОписателей ::= [СписокОписателей,] ОписательИнициализатор ОписательИнициализатор ::= Описатель [Инициализатор] Описатель ::= dИмя ::= ***** dИмя ::= Имя ::= ОписанноеИмяТипа ::= ***** ОписанноеИмяТипа ::= Идентификатор СписокСпецификаторовТипа ::= СпецификаторТипа [СписокСпецификаторовТипа] СпецификаторТипа ::= ИмяПростогоТипа ::= СпецификаторКласса ::= ***** Таким образом, typedef-объявление является объявлением, которое начинается спецификатором typedef и состоит из последовательностей разнообразных спецификаторов объявления и описателей. Список описателей (элементы списка разделяются запятыми) может содержать языковые конструкции разнообразной конфигурации. В него могут входить описатели (в конце концов, это всего лишь разнообразные имена) с символами ptrОпераций (* и &), описатели, заключённые в круглые скобки, описатели в сопровождении заключённых в скобки списков объявлений параметров, описателей const и volatile, а также заключённых в квадратные скобки константных выражений (последние, надо полагать, предназначены для спецификации массивов). В качестве примера рассмотрим, следующее typedef-объявление: typedef int Step, *pInteger; Это объявление начинается спецификатором typedef, содержит спецификатор объявления int и список описателей, в который входит два элемента: имя Step и имя pInteger, перед которым стоит символ ptrОперации *. Объявление эквивалентно паре typedef-объявлений следующего вида: typedef int Step; typedef int *pInteger; В соответствии с typedef-объявлениями, транслятор производит серию подстановок, суть которых становится понятной из анализа примера, в котором пара операторов объявления Step StepVal; extern pInteger pVal; заменяется следующими объявлениями: int StepVal; extern int * pVal; На основе этого примера можно попытаться воспроизвести алгоритм подстановки: после возможного этапа декомпозиции списка описателей typedef-объявления, в результате которого может появиться новая серия typedef-объявлений, транслятор переходит к анализу операторов объявлений; в очередном операторе объявления выделяется идентификатор, стоящий на месте спецификатора объявления; среди typedef-объявлений производится поиск соответствующего объявления, содержащего вхождение этого идентификатора в список описателей. Таким образом, транслятор находит соответствующий контекст для подстановки. Мы будем называть этот контекст контекстом замены. Контекст замены оказывается в поле зрения транслятора вместе с оператором объявления, в котором транслятор различает спецификатор объявления и описатель; оператор объявления заменяется контекстом замены, в котором совпадающий со спецификатором объявления идентификатор заменяется соответствующим описателем. //Функция Ввода void Input() { cout << endl; cout << "Imya - "; cin >> Imya; cout << "Kolichestvo - "; cin >> Kol; cout << "Cena - "; cin >> Cena; cout << "Strana - "; cin >>Strana; cout << endl; } //Функция Вывода void Output() { cout << endl; cout << "Imya - : '" << Imya << "'"<< endl; cout << "Kolichestvo - : " << Kol << " shtuk" << endl; cout << "Cena - : $" << Cena << endl; cout << "Strana - : " << Strana << endl; cout << endl
#include "stdafx.h" #include "conio.h" #include "iostream" #include "string" using namespace std; //Создание структуры struct Tovar { string Imya; int Kol;
float Cena; string Strana; //Начальное значение структуры Tovar () { Imya = "NoName"; Kol = 0; Cena = 0; Strana = "None"; } //Функция Ввода void Input() { cout << endl; cout << "Imya - "; cin >> Imya; cout << "Kolichestvo - "; cin >> Kol; cout << "Cena - "; cin >> Cena; cout << "Strana - "; cin >>Strana; cout << endl; } //Функция Вывода void Output() { cout << endl; cout << "Imya - : '" << Imya << "'"<< endl; cout << "Kolichestvo - : " << Kol << " shtuk" << endl; cout << "Cena - : $" << Cena << endl; cout << "Strana - : " << Strana << endl; cout << endl; } }; // Функция определения соответствия заданной и вводимой цены void RaschodTovar (Tovar *mas, int size, float cen) { bool eden = false; for (int i = 0; i cen) { mas[i].Output(); eden = true;} } if (eden == false) cout << "Net tovarov s cenoy vishe ukazannoy" << endl << endl; } //Главная функция int main() { cout << "Vvedite probniy tovar - odin:" << endl; Tovar PervTov; //Обращение к функциям ввода и вывода PervTov.Input(); PervTov.Output(); int p; cout << "Vvedite kolichestvo elementov tipa 'Tovar' - "; cin >> p; Tovar *MnTovar = new Tovar[p]; //Создание динамического массива for (int i=0;i<p;i++) { MnTovar [i].Input(); } for (int i=0;i<p;i++) { MnTovar [i].Output(); } float cen; cout << "Vvedite cenu. Vse tovari, s cenoi vishe ukazannoy? budut vivedeni na ekran - "; cin >> cen; RaschodTovar (MnTovar, p, cen); //Обращение функции отвеч за цену return 0; }