Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otveti_k_programm.doc
Скачиваний:
0
Добавлен:
26.09.2019
Размер:
1.55 Mб
Скачать
  1. Выражения. Классификация выражений. Правила вычисления выражений.

Основными элементами выражения служат числа, имена

и операции *, /, +, – (унарный и бинарный) и =. Имена

не всегда описываются до использования.

Примеры выражений:

(а + 0.12)/6

х && у || !z

(t * sin(x)-1.05e4)/((2 * к + 2) * (2 * к + 3))

— вычитание или унарный минус;

+ сложение или унарный плюс;

* умножение;

/ деление;

% деление по модулю (аналог Mod в Паскале);

++ унарная операция увеличения на единицу (инкремент);

-- унарная операция уменьшения на единицу (декремент).

По убыванию старшинства арифметические операции расположены в следующем порядке:

++, --

— (унарный минус)

*, /, %

+, -

  1. Операции языка С++. Приоритет операций.

  1. Структура программы на языке С++.

/*Заголовки и комментарии, описывающие программу*/

/*Директивы include*/

#include имя_файла_1

...

#include имя_файла_n

/*Макро*/ 59

#define макро_1 значение_1

...

#define макро_n значение_n

/*Описание глобальных переменных*/

тип_данных глобальная_переменная_1;

...

тип_данных глобальная_переменная_n;

main()

{

/*Описания extern, обеспечивающие ссылку вперед на функции

и используемые в теле функции main*/

/*Описания локальных переменных*/

тип_данных локальная_переменная_1;

...

тип_данных локальная_переменная_m;

/*Тело функции main*/

...

}

/*Функции, используемые в программе main*/

Тип_данных имя_функции_1 (формальные параметры)

{

/*Описания extern, обеспечивающие ссылку вперед на функции

и используемые в теле данной программы*/

/*Описания локальных переменных*/

тип_данных локальная_переменная_1;

...

тип_данных локальная_переменная_u;

/Тело функции – 1*/

...

}

... 60

Тип_данных имя_функции_n (формальные параметры)

{

/*Описания extern, обеспечивающие ссылку вперед на функции

и используемые в теле данной функции n */

/*Описания локальных переменных*/

тип_данных локальная_переменная_1;

...

тип_данных локальная_переменная_r;

/*Тело функции n */

...

}

Структура каждой функции совпадает со структурой главной

программы (main), поэтому функции иногда еще называются п о д -

п р о г р а м м а м и . Подпрограммы решают небольшую и специфи-

ческую часть общей задачи.

  1. Операторы языка С++. Определение, пустой оператор, составной оператор.

Самый простой вид оператора — оператор выра/

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

следует точка с запятой.

К примеру:

a = b*3 + c;

cout << «go go go»; lseek(fd,0,2);

Простейший оператор — пустой оператор:

;

Он не делает ничего. Но он используется тогда, ког/

да синтаксис требует присутствия оператора, а дан/

ный оператор не нужен

Составной оператор представляет собой несколько операторов и объявлений, заключенных в фигурные скобки:

{ [oбъявление] : оператор; [оператор]; : }

Заметим, что в конце составного оператора точка с запятой не ставится.

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

Пример:

int main () { int q,b; double t,d; : if (...) { int e,g; double f,q; : } : return (0); }

Переменные e,g,f,q будут уничтожены после выполнения составного оператора. Отметим, что переменная q является локальной в составном операторе, т.е. она никоим образом не связана с переменной q объявленной в начале функции main с типом int. Отметим также, что выражение стоящее после return может быть заключено в круглые скобки, хотя наличие последних необязательно.

  1. Операторы языка С++. Операторы выбора.

- операторы выбора (ветвлений);

оператор switch - оператор ветвлений

к операторам выбора также относится оператор условия if

if ( expression )

statement1

[else

statement2]

Нельзя использовать в операторе switch вещественные типы

данных (такие как float и double), указатели, строки и другие струк-

туры данных, но разрешается использовать элементы структур дан-

ных, совместимых с целыми значениями.

  1. Операторы языка С++. Операторы цикла.

- операторы организации циклов;

служат для выполнения одной и той же группы операторов итеративно.

Различают циклы с предусловием while, пост условием do и цикл с заданным количеством итераций for

while ( expression )

statement

  1. Операторы языка С++. Операторы передачи управления.

- операторы перехода (передачи управления);

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

break, continue, return, goto

оператор break аналогичен оператору break в delphi - служит для немедленного выхода из цикла for, while и do, кроме того используется для выхода из ветви оператора switch (в delphi для этих целей не применяется)

оператор continue аналогичен оператору continue в delphi - служит для немедленного перехода к следующей итерации цикла for, while и do

оператор return

return [expression]

служит для возврата из функции или процедуры. Если выполняется возврат из функции, то значение выражения expression возвращается в качестве результата. Для функций void (процедур) никакого результата не возвращается.

Для возврата из процедуры (функция с результатом void) специального вызова return не требуется. Выполнение процедуры будет закончено там, где кончаются ее логические скобки.

оператор goto служит для безусловной передачи управления на указанную метку -

goto identifier ;

  1. Адреса и указатели. Понятие адреса, операция получения адреса, понятие указателя, доступ к переменной по указателю, операция разименования.

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

Например:

int *pn, n;

*pn = 5;

n = *pn;

Выражение *pn имеет такой же смысл, как имя целой переменной. Операция <<*>> называется разыменованием.

Действие, обратное к разыменованию, позволяет получить адрес переменной по ее имени. Например, pn = &n;, эта операция называется взятие адреса.

Указатель — элемент программы хранящий адреса памяти некоторого объекта (например, переменной) определённого типа.

Си поддерживает две специальные адресные операции: опера-

цию определения адреса (&) и операцию обращения по адресу (*).

Операция & возвращает адрес данной переменной. Если sum яв-

ляется переменной типа int, то &sum является адресом (расположе-

нием в памяти) этой переменной. С другой стороны, если msg явля-

ется указателем на тип char, то *msg является символом, на кото-

рый указывает msg. Рассмотрим следующую программу:

main()

{

int sum;

char *msg;

sum = 5 + 3;

msg = "Hello, thore\n";

printf(" sum = %d &sum = %p \n", sum, &sum);

printf("*msg = %c msg = %p \n", *msg, msg);

}

В первой строке печатается два значения: значение sum (8) и ад-

рес sum (назначаемый компилятором). Во второй строке также пе-

чатается два значения: символ, на который указывает msg (H), и

значение msg, которое является адресом этого символа (также на-

значен компилятором).

  1. Адреса и указатели. Понятие указателя, обобщенный указатель.

Указатель — элемент программы хранящий адреса памяти некоторого объекта (например, переменной) определённого типа.

  1. Указатели. Инициализация указателей. Операции с указателями.

Способы инициализации указателей

Присваивание указателю адреса существующего объекта:

с помощью операции получения адреса:

int а = 5; // целая переменная

int* р = &а; //в указатель записывается адрес а

int* р (&а); // то же самое другим способом

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

int* r = р;

с помощью имени массива или функции, которые трактуются как адрес:

int b[10]; // массив

int* t = b; // присваивание адреса начала массива

...

void f(int а ){ /* ... * / } // определение функции

void (*pf)(int); // указатель на функцию

pf = f; // присваивание адреса функции

Присваивание указателю адреса области памяти в явном виде:

char* vp = (char *)0хВ8000000;

Здесь 0хВ8000000 — шестнадцатеричная константа, (char *) — операция приведения типа: константа преобразуется к типу «указатель на char».

Присваивание пустого значения:

int* suxx = NULL;

int* rulez = 0;В первой строке используется константа NULL, определенная в некоторых заголовочных файлах С как указатель, равный нулю. Рекомендуется использовать просто 0, так как это значение типа int будет правильно преобразовано стандартными способами в соответствии с контекстом. Поскольку гарантируется, что объектов с нулевым адресом нет, пустой указатель можно использовать для проверки, ссылается указатель на конкретный объект или нет.

Выделение участка динамической памяти и присваивание ее адреса указателю:

с помощью операции new:

int* n = new int; //1

int* m = new int (10); // 2

int* q = new int [10]; // 3

с помощью функции malloc (для того чтобы использовать malloc, требуется подключить к программе заголовочный файл <malloc.h>.)

int* u = (int *)malloc(s1zeof(int)); // 4

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

разадресация, или косвенное обращение к объекту (*)

присваивание,

сложение с константой,

вычитание,

инкремент (++),

декремент (—),

сравнение,

приведение типов.

  1. Функции. Прототип функции, определение функции, вызов функции, встраиваемые функции.

Прототип функции (function prototype) — это объявление функции, но не ее определение. Благодаря явному объявлению возвращаемого типа и списка типов аргументов, в C++ при обращении к функции возможны строгая проверка типов и неявные преобразования типов.

Итак, функция может быть объявлена до того, как она определена. Определение функции может идти позже в этом же файле, браться из библиотеки или из указанного пользователем файла. Прототип функции имеет следующую форму:

тип имя(список_объявлений_аргументов);

Функция printf () из стандартной библиотеки stdio.h имеет следующий прототип:

int printf(const char* cntrl_str, ...);

Функция (в программировании) - это фрагмент кода или алгоритм, реализованный на каком-то языке программирования, с целью выполнения определённой последовательности операций. Итак, функции позволяют сделать программу модульной, то есть разделить программу на несколько маленьких подпрограмм (функций), которые в совокупности выполняют поставленную задачу.

/* Определение функций */

void get_parms(float *p1, float *p2)

{

printf("Введите два числа: ");

scanf("%f %f", p1, p2);

}

float get_ratio(float divident, float divisor)

{

if (divisor == 0.0)

return (INFINITY);

else

return(divident / divisor);

}

void put_ratio(float ratio)

{

if (ratio == INFINITY)

printf("Внимание! Деление на ноль!\n");

else

printf("Результат деления двух чисел: %f\n",ratio);

}

  1. Функции. Механизмы передачи параметров в функцию.

  1. Ссылки. Передача параметров в функцию по ссылке.

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

// структура объявления ссылок

/*тип*/ &/*имя ссылки*/ = /*имя переменной*/;

При объявлении ссылки перед её именем ставится символ амперсанда "&", сама же ссылка должна быть проинициализирована именем переменной, на которую она ссылается.

#include "stdafx.h"

#include <iostream>

using namespace std;

int main(int argc, char* argv[])

{

int value = 15;

int &reference = value; // объявление и инициализация ссылки значением переменной value

cout << "value = " << value << endl;

cout << "reference = " << reference << endl;

reference+=15; // изменяем значение переменной value посредством изменения значения в ссылке

cout << "value = " << value << endl; // смотрим, что получилось, как будет видно дальше значение поменялось как в ссылке,

cout << "reference = " << reference << endl; // так и в ссылочной переменной

system("pause");

return 0;

  1. Функции. Область видимости локальных и глобальных переменных.

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

Глобальные переменные объявляются вне тела какой-либо функции, и поэтому область видимости таких переменных распространяется на всю программу. Обычно глобальные переменные объявляются перед главной функцией, но можно объявлять и после функции main(), но тогда данная переменная не будет доступна в функции main().

#include "stdafx.h"

#include <iostream>

using namespace std;

void example();

int variable = 48; // инициализация глобальной переменной

int main(int argc, char* argv[])

{

int variable = 12; // инициализация локально переменной

cout << "local variable = " << variable << endl; // печать значения содержащегося в локальной переменной

example(); // запуск функции

system("pause");

return 0;

}

  1. Области действия идентификаторов: блок, файл, функция, прототип функции, класс, поименованная область.

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

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

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

Прототип функции. Идентификаторы, указанные в списке параметров прототипа (объявления) функции, имеют областью действия только прототип функции.

Класс. Элементы структур, объединений и классов (за исключением статических элементов) являются видимыми лишь в пределах класса. Они образуются при создании переменной указанного типа и разрушаются при ее уничтожении.

Поименованная область. С++ позволяет явным образом задать область определения имен как часть глобальной области с помощью оператора namespace.

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