Факториал без рекурсии:
int n=5; int res=1; for(int i=n; i>1; i--) res *=i; int F(int n) { if (n<=1) return 1; else { int x=F(n-1); return n*x; } }
Структуры Си.
В большом количестве случаев удобно обращаться к совокупности переменных Структура языка Си – средство для укрупнения данных.
Объявление структуры – описание компилятором шаблона, по которому он будет создавать объект данного типа.
struct имя { список полей структуры } struct student { char name[30] unsigned int cource, bool sex; int age; … }
Создание объектов структуры.
Создание объектов пользовательского типа выглядит так же, как создание переменной базового типа.
student vasya;
Си: struct student vasya;
Присваивание значений полям структуры.
vasya. age=20; vasya. sex=1; vasya. cource=1; strcpy(vasya. name, “Vasiliy”); [struct] student g_182_4[20]; g_182.4[0]. age=18;
Создание структур – типов данных.
Применяется при программировании на языке Си и используется для создания своих собственных типов данных.
typedef struct { char name[30] ... int age; } student; student pety;
Инициализация структур.
[struct] student Ira ={“Irina”, 2, 0, 19, …};
Замечание: инициализация указывается в том порядке, в котором соответствующие поля объявлены в структуре.
Инициализация массивов структур похожа на инициализацию многомерных массивов.
{ “Masha”, 1, 0, 18… }
Действия со структурами.
Компилятор умеет создавать копии существующих объектов и присваивать одному, уже существующему объекту, значение другого.
[struct] student Balabanov1={“Anton”, 2, 0, 19, …}; [struct] student Balabanov2=Balabanov1; strcpy(Balabanov2. Name, “Vladimir”); Balabanov2=Balabanov1;
Указатели и структуры.
[struct] student *man1=new[struct] student;
Для обращения к полям структуры посредством указателя используется селектор
->(минус больше)
strcpy(man1->name, “Yan”); man1->sex=1; man1->age=25; man1->course=1;
Оператор sizeof. Размерность объекта.
struct A {int ma;;} size_n n=sizeof(A); //4 struct AA {int ma; char m_c;}; size_n n=sizeof(AA); //8 struct AAA {int;char;double;}; size_t n=sizeof (AAA); //16
Структуры и функции.
Структуры значительно облегчают процесс обмена данными между функциями. Если требуется передать в функцию большее количество данных (разных по типу, а не по смыслу), то длинный список аргументов:
Делает программу нечитаемой;
Увеличивает время на формирование параметров (создания копий в стеке);
Занимает место в стеке.
Так как структура может передаваться и по значению, и по адресу, значительно эффективнее передать адрес одного объекта типа структура.