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

Void main()

{

const int n=5; //Количество строк.

const int m=7; //Количество столбцов.

double array[n][m]; //Основной массив.

for (int i=0;i<n;i++)

for (int j=0;j<m;j++)

array[i][j]=n-i; //Заполнение массива.

double *par[n]; //Массив указателей.

for (i=0;i<n;i++) //Цикл перебора строк.

par[i]=(double*)array[i];

//Печать массива через указатели.

cout << "\n До перестановки элементов массива указателей: ";

for (i=0;i<n;i++)

{ cout<< "\n строка " << i+1 <<": ";

for (int j=0;j<m;j++)

cout << "\t" << par[i][j];

}

//Упорядочение указателей на строки массива.

double si,sk;

for (i=0;i<n-1;i++)

{ for (int j=0, si=0;j<m;j++)

si+=par[i][j];

for (int k=i+1;k<n;k++)

{ for (j=0,sk=0;j<m;j++)

sk+=par[k][j];

if (si>sk)

{ double *pa=par[i];

par[i]=par[k];

par[k]=pa;

double a=si;

si=sk;

sk=a;

}

}

}

//Печать массива через указатели.

cout << "\nПосле перестановки элементов массива:";

for (i=0;i<n;i++)

{ cout << "\n строка " << i+1 <<": ";

for (int j=0;j<m;j++)

cout << "\t" << par[i][j];

}

cout << "\nИсходный массив остался неизменным: ";

for (i=0;i<n;i++)

{ cout << "\nstroka " << i+1 <<": ";

for (int j=0;j<m;j++)

cout << "\t" << array[i][j]; }

}

25) typedef-позволяет задавать новые имена типов. Пример typedef int INT; INT x=5;

Конструкция typedef позволяет задавать новые имена типов.

Tupedef int INT

Т.е теперь типы одинаковы)

Typedef

Int Int *Pint

Pint ptr int *ptr

Pint *ptr int **ptr

typedef позволяет объявить синоним нашей переменной. Вот пример использования

ключевого слова typedef в языке си ( c ):

typedef struct foot_klub f_club;

f_club a, *p, b[5];

Т.е. мы заменили struct foot_klub синонимом f_club, что в разы облегчает понимание

кода. Большинство программистов на языке си ( с ) используют typedef сразу при

объявлении структуры, что заметно уменьшает код. Вот пример:

typedef struct {

char name[20];

int liga;

float ochki;

}f_club;

Т.е. при объявлении вместе двух ключевых слов - typedef struct, мы сразу создаем тип

f_club. Теперь для объявления переменной созданного типа достаточно всего-навсего

воспользоваться одним словом. С основами разобрались!

26) Препроцессор С/С++ — программный инструмент, изменяющий код программы для последующей компиляции и сборки, используемый в языках программирования Си и его потомка - C++. Этот препроцессор обеспечивает использование стандартного набора возможностей:

Замена триграфов ??=, ??(, ??) (и других) символами #, [, ]

Замена комментариев пустыми строками

Включение файла — #include

Макроподстановки — #define

Условная компиляция — #if, #ifdef, #elif, #else, #endif

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

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

27) Макросы в языке Си преимущественно используются для определения небольших фрагментов кода. Во время обработки кода препроцессором, каждый макрос заменяется соответствующим ему определением. Если макрос имеет параметры, то они указываются в теле макроса; таким образом, макросы языка Си могут походить на Си-функции. Распространенная причина использования — избежание накладных расходов при вызове функции в простейших случаях, когда небольшого кода, вызываемого функцией, достаточно для ощутимого снижения производительности.

Например,

#define max(a,b) ((a) > (b) ? (a) : (b))

определяет макрос max, использующий два аргумента a и b. Этот макрос можно вызывать как любую Си-функцию, используя схожий синтаксис. То есть, после обработки препроцессором,

z = max(x,y);

становится

z = ((x) > (y) ? (x) : (y));

Однако, наряду с преимуществами использования макросов в языке Си, например, для определения типобезопасных общих типов данных или отладочных инструментов, они также несколько снижают эффективность их применения и даже могут привести к ошибкам.

Например, если f и g — две функции, вызов

z = max(f(), g());

не вычислит один раз f()и один раз g(), и поместит наибольшее значение в z, как этого можно было ожидать. Вместо этого одна из функций будет вычислена дважды. Если функция имеет побочные эффекты, то вероятно, что её поведение будет отличаться от ожидаемого.

28) #ifdef имя

текст

#endif

Если имя было прежде объявлено с помощью define тогда текст поступает на вход компилятора

#ifтdef имя

текст

#endif

Если имя не было прежде объявлено с помощью define тогда текст компилируется. применяется в заголовочных файлах.

my.h

#ifndef _ _MY_H_FILE_ _

int x;

#define _ _MY_H_FILE_ _

…….

#endif

#if выражение (только константы и +! -! || && != == << = >>)

Текст 1

[#elif выражение 2 текст 2]

……….

[#elif выражение N текст N]

[#else

текст

#endif

Если значение выражения не 0 то компилируется текст1, все остальные нет

#include <stdio.h>

#define STEP 1

int main () {

#if STEP = = 1

printf(‘”zadanie 1\n”);

#elif STEP = = 2

………

#endif

return 0; }

29) Стандартные операции, определенные для препроцесса.

Компилятор языка C++ содержит препроцессор,способный выполнять макроподстано

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

#, относятся к препроцессору.

Смотреть походу препроцессор

30) Предопределённые макросы

Существуют встроенные (заранее определенные) макроимена, доступные препроцессору

во время обработки. Они позволяют получить следующую информацию (таблица 1):

Таблица 1. Общие встроенные макроимена

Макрос Назначение

__LINE__

Десятичная константа - номер текущей обрабатываемой строки файла с программой C++. Принято,

что номер первой строки исходного файла равен 1.

__FILE__

Строка символов - имя компилируемого файла. Имя изменяется всякий раз, когда препроцессор

встречает директиву#include с указанием имени файла. После окончания включения файла по

команде #include восстанавливается предыдущее значение макроимени __FILE__.

__DATE__

Строка символов в формате: "месяц число год", определяющая дату начала обработки исходного

файла.

__TIME__

Строка символов вида "часы:минуты:секунды", определяющая время начала обработки

препроцессором текущего исходного файла.

__STDC__

Константа, равная 1, если компилятор работает в соответствии с ANSI-стандартом. В противном

случае значение макроимени не определено. Проект стандарта C++ предполагает, что наличие

имени __STDC__ определяется реализацией.

__cplusplus

Имя, определенное равным 1 при компиляции программы на языке C++. В остальных случаях этот

макрос не определен.

В конкретных реализациях набор предопределенных имен шире. Например, в

препроцессор BC++ дополнительно включены (таблица 2):

Таблица 2. Дополнительные встроенные макроимена в BC++

Макрос Назначение

__BCOPT__ Имя, определенное равным 1, если в компиляторе имеется оптимизатор.

__BCPLUSPLUS__ Числовое значение соответствует версии компилятора.

__CDECL__

Идентифицирует порядок передачи параметров функциям, значение 1 соответствует

порядку, принятому в языках C и C++ (в отличие от языка Pascal).

__CONSOLE__

Определено для 32-разрядного компилятора и установлено в 1 для программ консольного

приложения.

__DLL__ Соответствует работе в режиме Windows DLL.

__MSDOS__

Равно 1 для 16-разрядных компиляторов BC++, устанавливается в 0 для 32-разрядного

компилятора.

__MT__ Доступен только для 32-разрядного компилятора.

__OVERLAY__ Равно 1 в оверлейном режиме.

__PASCAL__ Противоположен __CDECL__.

__STDC__ Установлен в 1, если компилятор удовлетворяет стандарту ANSI.

__TCPLUSPLUS__ Числовое значение соответствует версии компилятора.

__TEMPLATES__ Означает, что ВС++ поддерживает шаблоны.

__TLS__ Определен как истинный для 32-разрядного компилятора.

__TURBOC__ Числовое значение, равное 0х0400 для компилятора ВС++4.0.

__Windows__ Означает генерацию кода для Windows.

__WIN32__

Определен для 32-разрядного компилятора и установлен в 1 для консольных приложений

и GUI.

31) Тэги Используется для объявления перечислений, структур и объединений. Тег не является

самостоятельным именем типа (в С++ может быть)

. Тег структуры определяется следующим образом:

struct тег { список описаний; };

где тег является идентификатором.

В приведенном ниже примере идентификатор student описывается как тег структуры:

struct student { char name[25];

int id, age;

char prp; };

Тег структуры используется для последующего объявления структур данного вида в форме:

struct тег список-идентификаторов;

Пример:

struct studeut st1,st2;

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

использование рекурсивных тегов структуры.

struct node { int data;

struct node * next; } st1_node;

Тег структуры node действительно является рекурсивным, так как он используется в своем собственном

описании, т.е. в формализации указателя next. Структуры не могут быть прямо рекурсивными, т.е. структура node

не может содержать компоненту, являющуюся структурой node, но любая структура может иметь компоненту,

являющуюся указателем на свой тип, как и сделано в приведенном примере.

Доступ к компонентам структуры осуществляется с помощью указания имени структуры и следующего через

точку имени выделенного компонента, например:

st1.name="Иванов";

st2.id=st1.id;

st1_node.data=st1.age;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]