Здравствуйте.Помогите решить задачу минимум 4 чисел.Условие такое:"Напишите функцию int min (int a, int b, int c, int d) (C/C++)"находящую наименьшее из четырех данных чисел."Заранее спасибо! |
Управляющие операторы. Структуры данных языка С
Перечисления (enum)
При написании программ часто возникает потребность определить несколько именованных констант, для которых требуется, чтобы все они имели различные значения. Для этого удобно воспользоваться перечисляемым типом данных. Формат:
enum [ имя_типа ] { список_констант };
Имя типа задается в том случае, если в программе требуется определять переменные этого типа. Компилятор обеспечивает, чтобы эти переменные принимали значения только из списка констант.
Константы должны быть целочисленными и могут инициализироваться обычным образом. При отсутствии инициализатора первая константа обнуляется, а каждой следующей присваивается на 1 большее значение, чем предыдущей:
enum Err { ERR_READ, ERR_WRITE, ERR_CONVERT}; Err error; ... switch (error) { case ERR_READ: /* операторы */ break; case ERR_WRITE: /* операторы */ break; case ERR_CONVERT: /* операторы */ break;}
Константам ERR_READ, ERR_WRITE, ERR_CONVERT присваиваются значения 0, 1 и 2 соответственно.
Структуры (struct)
В отличие от массива, все элементы которого однотипны, структура может содержать элементы разных типов. В языке С++ структура является видом класса и обладает всеми его свойствами, но во многих случаях достаточно использовать структуры так, как они определены в языке С:
struct [ имя_типа ] {тип_1 элемент_1;тип_2 элемент_2;*тип_n элемент_n;} [ список_описателей ];
Элементы структуры называются полями структуры и могут иметь любой тип, кроме типа этой же структуры, но могут быть указателями на него.
Если отсутствует имя типа, должен быть указан список описателей переменных, указателей или массивов. В этом случае описание структуры служит определением элементов списка:
struct { char fio[30]; int date, code; float salary; }stuff[100], *ps; /*определение массива структур и указателя на структуру */
Если список отсутствует, описание структуры определяет новый тип, имя которого можно использовать в дальнейшем наряду со стандартными типами, например:
struct Worker { //описание нового типа Worker char fio[30]; int date, code; float salary; }; //описание заканчивается точкой с запятой Worker stuff[100], *ps; /* определение массива типа Worker */ /* и указателя на тип Worker */
Для инициализации структуры значения ее элементов перечисляют в фигурных скобках в порядке их описания:
Struct { char fio[30]; int date, code; float salary; }worker = {"Страусенко", 31, 215, 3400.55};
Для переменных одного и того же структурного типа определена операция присваивания, при этом происходит поэлементное копирование.
Структуру можно передавать в функцию и возвращать в качестве значения функции. Другие операции со структурами могут быть определены пользователем.
Доступ к полям структуры выполняется с помощью операций выбора . (точка) при обращении к полю через имя структуры и -> при обращении через указатель, например:
Worker worker, stuff[100], *ps; ... worker.fio = "Страусенко"; stuff[8].code = 215; ps->salary = 0.12;
Битовые поля
Битовые поля - это особый вид полей структуры. Они используются для плотной упаковки данных, например, флажков типа "да/нет". При описании битового поля после имени через двоеточие указывается длина поля в битах (целая положительная константа):
struct Options { bool centerX:1; bool centerY:1; unsigned int shadow:2; unsigned int palette:4;};
Доступ к полю осуществляется по имени. Адрес поля получить нельзя.
Объединения (union)
Объединение ( union ) представляет собой частный случай структуры, все поля которой располагаются по одному и тому же адресу. Формат описания такой же, как у структуры, только вместо ключевого слова struct используется слово union.
Длина объединения равна наибольшей из длин его полей. В каждый момент времени в переменной типа объединение хранится только одно значение, и ответственность за его правильное использование лежит на программисте.
Объединения применяют для экономии памяти, а также для разной интерпретации одного и того же битового представления:
struct Options { bool centerX:1; bool centerY:1; unsigned int shadow:2; unsigned int palette:4; }; union { unsigned char ch; Options bit; }option={0xC4}; cout << option.bit.palette; option.ch &= 0xF0; // наложение маски
По сравнению со структурами на объединения налагаются некоторые ограничения:
- объединение может инициализироваться только значением его первого элемента;
- объединение не может содержать битовые поля;
- объединение не может содержать виртуальные методы, конструкторы, деструкторы и операцию присваивания;
- объединение не может входить в иерархию классов.
Переименование типов (typedef)
Для того чтобы сделать программу более ясной, можно задать типу новое имя с помощью ключевого слова typedef:
typedef тип новое_имя [ размерность ];
Размерность может отсутствовать. Примеры:
typedef unsigned int UINT; typedef char Msg[100]; typedef struct{ char fio[30]; int date, code; float salary;} Worker;
Введенное таким образом имя можно использовать таким же образом, как и имена стандартных типов:
UINT i, j; //две переменных типа unsigned int Msg str[10]; //массив из 10 строк по 100 символов Worker stuff[100]; //массив из 100 структур