Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы по информатике1.docx
Скачиваний:
1
Добавлен:
15.04.2019
Размер:
99.25 Кб
Скачать

10 Билет.

Структура программы на C/C++. Пример программы.

Структура прогр. на С/C++

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

Препроцессор реализует 1 этап обработки программ ( <имя.CPP >) он выполняет директиву препроцесора ( включает в текст программы специальные текстовые файлы (заголовочные файлы), содержащие некоторое описание и далее использующиеся в этой программе. Препроцессор объединяет полный текст программы, который поступает на вход компилятора. Результатом работы компилятора является объектный код программы, в кодах машины. На следующем этапе обработки компоновщик формирует exe-файлы, подключая к программе объектные модули стандартных библиотек и библиотек программиста.

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

Комментарий - текст, не влияет на выполнение программы, но помогающий её понимать. Комментарий может занимать целую строку или часть строки.

Определение функции - основной текст программы, может быть одна или несколько функций, определения которых записаны последовательно. Одна из функций должна иметь имя main- головная функция, с неё начинается выполнение программы.

В языке C/C++ существует один тип подпрограмм, который реализуется с помощью функций, но существует 2 типа функций: возвращающая значение и не возвращающая значение. Функция возвращающая аналогична функциям в Паскале, обращением к ней является указатель функции который может быть операндом в выражении или элементом списка вывода. Функция не возвращающая значение в качестве результата вычисляет значения выходных параметров, аналогично процедуре в Паскале. Обращение к функции является самостоятельным оператором и после обращения к ней можно использовать значения выходных параметров.

Используя BNF-нотацию можно записать

<функция>::=<заголовок><блок>

Так как {} являются символами языка, то [] означают необязательные выражения внутри них, поэтому заголовок по определению есть типовое значение функции или слово void, затем имя функции, и в () формальные параметры, которые могут отсутствовать.

<заголовок>::=<тип значения функции|void><имя функции>([формальные параметры])

<формальные параметры>::=<тип><имя>,<тип><имя>..

<блок>::= {<описания локальных величин><операторы>}

Перед именем выходного параметра в заголовке и в теле функции записывается *, определяет передачу параметра по адресу, а перед соответствующем ему фактическим параметром в обращении к функции записывается знак &, к параметрам массива это не относится.

Функция возврата.

return <выражение>, значение возврата присваивается имени функции и используется на месте указателя функции. Функция не возвращающая значение может быть просто return, а может и не быть совсем. Если обращение к функции должно содержаться перед обращением к функции, то перед обращением следует записать прототип функции.

В отличие от полного заголовка функции в прототипе можно не задавать имена формальных параметров, достаточно указать их типы.

Прототипом может быть полный заголовок, а может быть частичный. Программа может использовать стандартные функции, определения которых содержатся в системных библиотеках stdio.h и math.h . Прототипы таких функций добавляются в программу с помощью #include <имя>.

11 Билет. Типы операторов в С/C++, оператор пустой, составной, оператор-выражения, оператор-возврата.

Операторы управляют процессом выполнения программы. Набор операторов языка C++ содержит все управляющие конструкции структурного программирования.

Составной оператор ограничивается фигурными скобками. Все другие операторы заканчиваются точкой с запятой.

Пустой оператор – ;

Пустой оператор – это оператор, состоящий только из точки с запятой. Он может появиться в любом месте программы, где по синтаксису требуется оператор. Выполнение пустого оператора не меняет состояния программы.

Составной оператор – {...}

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

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

Оператор выражение

Любое выражение, которое заканчивается точкой с запятой, является оператором.

Выполнение оператора-выражение заключается в вычислении выражения. Полученное значение выражения никак не используется, поэтому, как правило, такие выражения вызывают побочные эффекты. Заметим, что вызвать функцию, невозвращающую значения можно только при помощи оператора выражения.

Оператор возврата

return [<выражение>];

Оператора возврата заканчивает выполнение функции, в которой он содержится, и возвращает управление в вызывающую функцию. Управление передается в точку вызывающей функции, непосредственно следующую за оператором вызова. Значение <выражения>, если она задано, вычисляется, приводится к типу, объявленному для функции, содержащей оператор возврата, и возвращается в вызывающую функцию. Если <выражение> опущено, то возвращаемое функцией значение не определено.

12 билет. Оператор условной передачи управления в C++. Примеры.

if (<выражение>) <оператор>;

[else <оператор>]

if (c=a+b) d=d+c;

[else d=d-c)];

13 билет. Оператор цикла с параметром в С/C++. Его использование, примеры.

for (<выражение1>;<выражение2>;<выражение3>) <оператор>;

for (j=2 ; j<=k ; j++) f = f*j;

Выражение1 и выражение3 могут состоять из нескольких выражений, разделенных запятыми, однако выход из цикла определяется одним выражением.

14 билет. Операторы цикла с предусловием и постусловием, особенности использования.

Любой цикл состоит из 4 этапов.

1) присваивание начального значения.

2) исследование цикла на конец.

3) тело цикла.

4) изменение параметра цикла.

Оператор цикла с предусловием

while (<выражение>) <оператор>

i=0;s=0; while (i<10) s+=a[i++];

Оператор цикла с постусловием

do <оператор> while <выражение>;

i=0;s=0; do s+=a[i++] while (i<10);

В языке C++ этот оператор отличается от классической реализации цикла с постусловием тем, что при истинности <выражения> происходит продолжение работы цикла, а не выход из цикла.

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

goto <метка>;

<метка>:=<идентификатор>

метка может быть перед любым оператором, отделяется двоеточием и используется для обращения к нему.

Оператор продолжения continue позволяет обойти операторы следующие за continue и передать управление на повторение цикла. Используется только в операциях цикла.

while (...)

{...

continue

...........

m: ;

};

Оператор завершения break осуществляет досрочный выход из цикла, или в операцию переключателя.

while (...)

{ ....

break

........

};

m: ;

16 билет. Оператор-переключатель в C++. Примеры.

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

{case (<константное выражение>): <оператор>;break;

case (<константное выражение>): <оператор>; break;

..........................

default : <> ;

} (если default, то выполняется оператор следующий за switch)

Синтаксис - Оператор может быть простым и составным.

Семантика - вычисляется значение выражения, записанного после switch и последовательно сравнивается со значениями константных выражений, как только эти значения совпадут выполняется оператор соответствующий варианту выбора. Если значение выражения не совпало ни с одним из константных выражений то выполняется оператор следующий за default, если он есть, а если его нет то выполняется оператор следующий за оператором switch.

Каждый вариант выбора заканчивается оператором завершения break; который передает управление оператору следующему за оператором switch, и если же в варианте выбора отсутствует break; то будет выполняться оператор этот и следующий, и так до выхода из switch.

switch (z)

{case '+' : z='*';break;

case '-' : z= '+';break;

case '*' : z='-';

}

17 билет. Базовые типы данных в C/C++, преобразование типов, стандартные функции.

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

Числа - целые и действительные, внутри они различаются по диапазону значений.

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

Операции с целыми должны давать целый результат , если это возможно.

Если результат не помещается то возможны различные реакции системы:

1) Возможно, что результат оказывается искаженным.

2) Результат рассматривается как след диапазона или как вещественный.

3) Сообщение об ошибке.

Вещественные числа вычисляются с некоторой погрешностью даже для самых простых операций.

Величина ошибки зависит от значения операндов в выражении, от диапазонов, которым принадлежат операнды и от архитектуры процесса, который и определяет представление данных в памяти.

целый - int

символьный - char

вещественный - float

вещественный удвоенной точности - double

short - короткий

long - длинный

signed - знаковый

unsigned - беззнаковый

Преобразование типов.

Явное

(<тип>) <операнд>

Пример int n

sqrt ((double)n)

Автоматическое преобразование.

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

При передаче параметров:

char, short => int

float => double

поэтому формальные параметры у программы следует описывать int и double, если фактическими параметрами являются char и float.

Стандартные функции

Во всех языках программирования есть стандартные функции к которым обращаются без определения, в C/C++ таких более двухсот.

У всех функций кроме abs результат типа double

18 билет. Операции, используемые в С/C++. Перечислимый тип в C/C++.

Приоритет Операция Описание

17 :: контекст

16 -> операция непрямого доступа к членам класса

16 . операция точки (доступ к полю)

16 [] индекс массива

16 () вызов функции

15 ++ -- инкремент и декремент

15 ~ поразрядное НЕ

15 ! логическое НЕ

15 - унарный минус

15 * операция разыменования

15 new delete выделение памяти из кучи

14 .* доступ к указателю-члену

13 * / % умножение, деление и взятие остатка

12 + - сложение и вычитание

11 >> << поразрядный сдвиг вправо и влево

10 > >= <= < условные операции

9 == != операции проверки на равенство

8 & поразрядное И

7 ^ поразрядное исключающее ИЛИ

6 | поразрядное ИЛИ

5 && логическое И

4 || логическое ИЛИ

3 ?: условная операция

2 = *= /= %= += -= операции присваивания

2 <<= >>= поразрядные операции сдвига с присваиванием

2 &= |= ^= поразрядные логическоие операции с присваиванием

1 , запятая

Инкремент ++ и декремент -- это унарные операции, первая увеличивает а вторая уменьшает на единицу значение операнда. Имеют две формы: префиксную ++/-- перед операндом или постфиксную ++/-- после операнда.

Операция sizeof - определение размера операнда в байтах.

Операция отрицания: унарный (-), логическое отрицание (!). Операндом для (!) может быть величина целого, вещественного типа или указатель.

Бинарные операции

Умножение(*) деление (/) ( для целых операндов целый результат)

Остаток от деления (%) - только для целых операндов.

(+) (-) стандартные операции.

Операции отношения ( <, <=, ==,!=, >> ). Операции (== )и( !==) имеют меньший приоритет. Результатом является истина или ложь.

Битовые операции - поразрядные логические операции.

Битовое отрицание (~), битовая и (&) битовое или (|) и битовое исключающее или (^).

Арифметический логический сдвиг влево и вправо (<<;>>). Для знаковых чисел сдвиг называется африфметическим и отличается от логического тем, что при сдвиге вправо освобождающийся левый разряд заполняется знаками, а при логич - 0.

Сдвиг вправо на n разрядов - деление на .

Сдвиг - влево на n разрядов - умножение на .

Логические операции && и ||.

Условные операции (:?) это тернарные операции, т.е. имеющие 3 операнда.

Общий вид <операнд1>?<операнд2>:<операнд3>

Операции с присваиванием:(*=), /=, %=, +=, -=, >>=. &>, ^=, |= обозначают соответствующие операции с присваиванием.

Перечислимый тип.

Тип, определяемый программистом.

Описывается с помощью BNF-нотации.

enum <имя типа>{<список значений>}

Пример:

1)

enum <color> {red, black, green, white, grey, blue}

enum color c1;c2;

c1=red; c2=green;

Значения переменных перечислимого типа хранятся в памяти как последние элементы числа ( как числа 0 1 2, тип int).

2)

enum boolean {true,false} L1,L2;

enum boolean a,b;

Переменные L1,L2 могут принимать значения true/false и использоваться в логических выражениях.

L1=true;

if (!L1 || L2 && a) ...

3)

enum day_of_the_week {pn,vt,sr,ch,pt,sb,vs} x,y;

if (x>sb) ..... /*x-рабочий день*/