Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Языки программирования.docx
Скачиваний:
28
Добавлен:
17.03.2015
Размер:
50.42 Кб
Скачать

Макрофункции.

Применяются там, где требуется произвести несложные вычисления, и хороши тем, что выполняются с любым типом данных.

Пример:

#include <stdio.h>

#define square(x) x*x

Void main(){

Int y=5;

Printf(“квадрат %d”, square(y));

Printf(“квадрат y+z %”, square(y+z));

Перегрузка функций.

В языке C++ предусмотрена перегрузка функций. Т.е. функция с одним именем описана для разных типов параметров. Позволяет определять несколько функций с одним и тем же именем, возвращая одно и то же значение

Указатели на функции.

В языке C++ сама функция не может быть значением переменной, но можно определить указатель на функцию. Код функции в ПК занимает определенную физическую память, в ней есть точка входа, т.е. определенный адрес ячейки, которая используется для входа в функцию и ее выполнения.

Аргументы функции main.

Функция mainтоже имеет аргументы.

Рекурсия – способ вызова, при которой функция обращается сама к себе. Важным моментом при составлении рекурсивной программы является организация выхода. Пример:

Void up(int );

Int main (){

Up(1);

}

Void up (int n){

Printf(“уровень вверх”, n);

If(n<4)up(n+1);

}

Функция факториал:

Long factorial (int value){

Long result=1;

If (value!=0){

Result= factorial(value-1);

If (result>MAXLONG/(value+1)){

Printf(“очень большое число”);

Exit(1);

Result*=value;

}

Return result;}

ГЕНЕРАТОР СЛУЧАЙНЫХ ЧИСЕЛ

int n=(double)rand()/(RAND_MAX+1)*(max-min)+min;

Структуры.

Задается с помощью слова struct.

Для перечня книг будет выглядеть так:

Struct book{

char title [100];

char outhor[100];

intyear;

}

Данная конструкция это шаблон представления данных, а не сам объект. Чтобы оперировать данной структурой, нужно объявить переменную данного типа:

Structbooklib;

Lib.title

Lib.year- доступ к полям структуры. Если используется указатель, то доступ к структуре осуществляется оператором стрелка.Lib-> title.

Puts(“введите название книги”);

scanf(“%s”,lib.title);

puts(“введите автора книги”);

scanf(“%s”,lib.author);

puts(“введите год выпуска”);

scanf(“%d”, &lib.year)

массив структур задается также как и обычный.

Struct book lib[100];

Int main(){

Int cnt_book=0,ch;

Do {puts(“название книги”)

Scanf(“%s”, lib[cnt_book]title);

Puts(“автор книги”);

Scanf(“%s”, lib[cnt_book]author);

Puts(“год выпуска”);

Scanf(“%d”, &lib[cnt_book]year);

Cnt_book++;

}

While (cnt_book<=100)||(Scanf(“%d”, &ch)==1)

Структуры можно автоматически инициализировать при их объявлении.

Structbooklib={“Евгений Онегин”, “Пушкин А.С.”, 1995}

Вложенные структуры.

Struct tag.fio{

Char last[100];

Char first[100];

Char otch[100];

}

Struct tag.people{

Struct tag_fio fio;

Char job[100];

}

Int main(){

Struct people man=

{{“Иванов”, “Иван”, “Иванович”},

”Электрик”}; printf(“ФИО %s%s%s” , man.fio.last, man.fio.first, man.fio.otch, man.fio.job);

Структуры как и обычные данные можно передавать функциям в качестве аргумента:

Struct tag_people{

Char name[100];

Char job[100];

Int old;};

Void sho_struct(

Int main(){

Struct tag_people

Show_struct(person);

Return 0;

}

Void show_struct(struct tag_people man){

Printf(“Имя %s \n”, man.name);

Printf(“проф %s \n” man.job);

Printf(“Возраст %d”, man.old);}

Функциям в качестве аргумента можно передавать и массивы структур.

Void show_struct(struct people mons[], int size);

#define n 2

Struct tag_people person[n]={

Char name[100];

Char job[100];

Int old;};

Void show(struct tag_people mons[], int size);

Main(){

Struct tag_people

{“иванов”, “электрик”, 30},

{“петров”, “Бухгалтер”, 45},};

Show (person, n);}

Void show (struct tag_people

Объединение.

Это тип данных позволяющий хранить различные типы данных в одной и той же области памяти.

Union var_i;

Float var_f;

Charvar_ch;}

Используется для экономии памяти, но крайне редко используется. В один и тот же момент времени можно использовать только 1 тип из всех. Соответственно нужно ввести счетчик.

Structtag_var{

Uniontag-valuevalue;

Short type_var;}

Main(){

Struct tag_var[3];

Var[0].tag_var=0;

Var[0].value.var_i=i0;

Var[1].type_var=1;

Var[1].value.var_f=2.2;

Var[2].type_var=2;

Перечисляемый тип задается Enum.

Enum tug_type{VK_INT, VK_FLOAT, VK_CHAR}

Enumtag_typevar;