Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры по программ(мои).doc
Скачиваний:
19
Добавлен:
01.03.2025
Размер:
970 Кб
Скачать
☆

Билет 33

1.Способы употребления конструкций языка программирования.

Основными конструкциями языка программирования являются циклы, ветвления.

В Си такие конструкции:

фигурные скобки - позволяют объединить несколько элементарных операторов в один составной оператор, или блок.

{ sum+=m; m+=2;}

Для организации циклов используются операторы for, предуслов while, постусл do while

for (i=0;n<=s;i++,n*=x)

{

s-=n;

}

do

{

s-=n;

n*=x;

i++;

}

while(s>=n);

while(s>=n)

{

s-=n;

n*=x;

i++;

}

Ветвление выполнение определённых команд только при истинности некоторого логического выражения, операторы if, if…else и switch.

if (<условие>)

{

<операторы>

}

else

{

<операторы>

}

Switch(выражение)

{

case const1: оператор[ы];

...

case constn: оператор[ы];

default: оператор[ы];

}

2.Моделирование списковых структур: однонаправленные и двунаправленные списки.

Однонаправленный список - это список, который имеет указатель на начало списка, при этом каждый елем. списка имеет указатель на следующий элем, а последний список принимает указатель NULL.

typedef struct snd /* структура элемента хранения */

{ float val; /* элемент списка */

struct snd *n ; /* указатель на элемент хранения */

} DL;

DL *p; /* указатель текущего элемента */

DL *dl; /* указатель на начало списка */

Двунаправленным списком если каждый элемент имеет указатель на предыдущий и последующий элементы го списка).

typedef struct ndd

{ float val; /* значение элемента */

struct ndd * n; /* указатель на следующий элемент */

struct ndd * m; /* указатель на предыдущий элемент */

} NDD;

NDD * dl, * p, * r;

3.Скобочные операторы: оператор вызова функции operator() и оператор индексирования [].

Перегрузка оператора вызова функции operator()

Перегрузка оператора состоит в изменении смысла оператора (например, оператора плюс (+), который обычно в C++ используется для сложения) при использовании его с определенным классом.

В отличие от оператора присвоения, оператор вызова функции operator () перегружается редко и не имеет оператора по умолчанию. Фактически сам по себе оператор довольно необычен. Рассмотрим обобщенный бинарный оператор @. Выражение а @ b транслируется в вызов функции: a.operator@(b)

структура: имя_типа operatorсимвол(список параметров);

Использование перегруженного оператора вызова функции для подддержки многомерных матриц

class A {

int value[10][10] ;

public:

int& operator( )(int, int);

};

Билет 34

1 Стиль оформления выражений

В общем случае логические и арифмитические выражения Любые операторы / знаки операций отделяются пробелами с обоих сторон

a=(*b)*c&2+10

следует писать

a = (*b) * c&2 + 10

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

2 Сохранение в файле списковых структур, вычисление и восстановление смещений в структуре.

Чтобы сохранить список структ в файле, нужно последовательно записать в файл каждую стуктуру по отдельности. Например:

write (fd, start, sizeof ( struct some_struct ));

current = start->next;

while (current != NULL)

{

    write (fd, current, sizeof ( struct some_struct ));

    current = current->next;

}

Сначала мы записываем первую структуру, которая расположена по адресу start. Затем переходим к следующей (start->next), поместив ее адрес в переменную current. Далее следует цикл записи и перехода к следующему эллементу, условием выхода которого является достижение конца списковой стуктуры (current != NULL). Использование счетчиков в циклах является нежелательным.

       Смещение члена структуры можно узнать с использованием макроса offsetof (type, field)..

#define offsetof(s, m) (size_t)&(((s *)0)-›m)

((s *)0) Приводит число ноль к указателю на структуру s. Эта строчка говорит компилятору, что  по адресу 0 располагается структура, и мы получаем указатель на нее.

  • ((s *)0)->m получает член m структуры s, компилятор будет думать, что этот член расположен по адресу 0 + смещение m

  • &(((s *)0)->m) вычисляем адрес члена m.

  • (size_t)&(((s *)0)->m) преобразовываем адрес члена m к целому числу.

3.Особенности перехода от «С» к С++

Переход от C Pure к C++ не должен  вызывать проблем, т.к. любая конструкция, допустимая в обоих языках, должна в каждом из них обозначать одно и то же и приводить к одному и тому же поведению программы. Благодаря этому, программа, написанная на C Pure, будет работать и после сборки на C++-компиляторе. C++ содержит мнодество дополняющих отличий:

* ООП

* Дополнительные типы данных

* inline-функции

* Описатель volatile

* Если описана структура, класс, объединение (union) или перечисление (enum), её имя является именем типа.

* Пространства имён (namespace).

* Добавлены шаблоны (template)

* Перегрузка операторов и функций.

* Расширенные возможности по описантю функций.

* В дополнение к функциям malloc и free введены операторные функции operator new, operator new[], operator delete и operator delete

Билет 35