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

1. Классификация языков и систем программирования.

По своему уровню языки программирования классифицируются на:

низкоуровневые (приближенные к машинным инструкциям) - мнемокод, ассемблер; одной инструкции такого языка чаще всего соотетсвует одна машинная команда; низкоуровневые языки манипулируют непосредственным содержимым ячеек памяти;

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

Языки высокого уровня можно разделить на на две группы:

процедурные (не поддерживающие концепций классов и объектной ориентации); примерами таких языков являются FORTRAN, BASIC, ALGOL-68, PASCAL, C, PL/1, MODULA-2;

· объектно-ориентированные, такие как Smalltalk, C++, Object Pascal, Java, C# и т.д.

2. Лексема С++.

Исходный текст на С++ состоит из лексем.

Лексемы (tokens), в свою очередь, делятся на группы: ключевые (зарезервированные) слова, идентификаторы, литералы, знаки операций и разделители.

Набор ключевых слов ограничен. В стандартном С++ имеется 63 ключевых слова. Еще 11 слов зарезервировано для альтернативного представления операций. В некоторых реализациях С++ к ним могут быть добавлены специфические ключевые слова. Ключевые слова нельзя использовать в качестве идентификаторов.

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

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

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

3. Ключевые слова С++, их классификация, сортировка, группировка.

1. Заголовки: Asm, Case, Default, template;

2. Инструкции: Break, Catch, continue, do, else, for, Goto, if, return, switch, throw, try, using, while,delete, new, sizeof, static_cast

3. Модификаторы: Auto, Const, extern, inline, mutable, private, protected, public, register, static, volatile, bool, const_cast, dynamic_cast, export,

4. Спецификаторы: Class, Enum, Explicit, Friend, namespace, operator, struct, union, virtual, typename, false, true,

5. Функции: main, void,,

6. Типы данных: Char, double, float, int, long, short, signed, unsigned, reinterpret_cast, typedef,

4. Алгоритм обработки исходного текста.

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

  • Препроцессорная обработка, на которой происходит включение файлов и макроподстановка. Работа препроцессора управляется с помощью команд, являющихся строками, первый символ которых отличный от пробела есть # (перед ним могут идти пробелы и символы горизонтальной табуляции). Такие строки называются командами препроцессора, и их синтаксис определяется независимо от остального языка. Команды препроцессора могут находиться в любом месте программы.

  • Обработка единиц трансляции. Файл после препроцессорной обработки, называют единицей трансляции (translation unit). Результатом трансляции этих единиц в общем случае являются объектные модули (файлы с расширением .obj).

  • Компоновка. Разрешение вызовов внешних имен (объектов, функций) осуществляется на этапе компоновки (редактирования связей, linking). Компоновка может быть внешней (имена используются в других единицах трансляции) и внутренняя (на имя можно ссылаться лишь в той единице трансляции, в которой оно определено).

5. Особенности написания исходного кода С++.

Для имен (идентификаторов) следует использовать английскую мнемонику с соблюдением грамматики (по возможности). Идентификаторы должны начинаться со строчной буквы или знака "_". Если идентификатор составлен из нескольких слов, начиная со второго слова их можно выделять заглавными буквами или знаком "_".

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

Отдельные инструкции должны быть размещены на отдельных строках. Все отступы должны иметь фиксированный размер (2 / 4 пробела или табуляция). Дополнительные отступы появляются после операторных скобок, а также если в теле циклов и условных операторах реализуется только одна инструкция. В циклах for, while, в конструкциях switch, if и т.д. перед скобками следует размещать пробел. Открывающиеся и закрывающиеся операторные (блочные) скобки должны размещаться строго друг под другом.

Между определениями функций пропускается строка.

6. Создание проекта в Вижуал Студио (Ве. 10)

Ключевым понятием разработки приложения в Visual C++ является проект (project). Проект - это набор взаимосвязанных исходных файлов, компиляция и компоновка которых позволяет создать исполняемую программу или DLL (Dynamic link library).

Новый проект может быть создан несколькими способами:

· с использованием стартовой страницы;

· с использованием главного меню;

· с использованием кнопки быстрого доступа (speed button).

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

· на панели "Project Types" выбрать тип проекта Visual C++ Projects;

· на панели "Templates" выбрать "Win32 Project";

· в строке ввода "Name" обязательно нужно ввести имя проекта. Расположение проекта по умолчанию предлагается автоматически, однако его можно изменить;

· нажать кнопку "OK" для запуска мастера проекта (Project Wizard);

· в окне мастера проекта следует выбрать закладку "Установки приложения" (Application Settings);

· на закладке "Установки приложения" установить флажки "Console application" (консольное приложение) и "Empty project" (пустой проект);

· нажать кнопку "Finish".

Следующим этапом необходимо создать новый файл с исходным текстом. Для этого нужно выполнить следующее:

· в подменю "Project" главного меню выбрать "Add New Item";

· на панели "Templates" окна "Add New Item" выбрать тип файла C++ File; нужно также ввести имя файла с исходным текстом в строке ввода "Name";

· нажать "OK", после чего открывается новый пустой файл.

7. Отладка программы и ее запуск в среде Вижуал Студио.

Отладчик используется для поиска и исправления ошибок времени выполнения. Для запуска отладчика используется функция Debug | Start (F5). Предварительно в исходном тексте расставляются точки прерывания (функция Debug | New Breakpoint или Ctrl-B). Для выполнения программы по строкам используются функциональные клавиши F11 (Step Into, отладка с заходом в функции) и F10 (Step Over, отладка без захода в функции).

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

В окнах Autos, Locals и Watch можно просматривать изменение значений переменных. Если поместить курсор мыши на скалярную переменную, отладчик покажет ее значение в маленьком окошке.

8. Основные типы данных С++

Базовые типы данных объединены в две группы

  • данные целого типа

  • данные с плавающей точкой (вещественные).

Данные целого типа могут быть обычными целыми со знаком (signed) и целыми без знака (unsigned). По числу разрядов различают обычные целые (int), (short int), (long int). Вещественные числа: float, double, long double.

9. Работа с константами в С++

10. Отличия между объявлениями и определениями переменных

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

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

11. Выражения С++

Выражение составляется из одной или нескольких операций. Объекты операций называются операндами

12. Виды операций

Операции бывают унарными (один операнд), бинарными (два операнда) и тернарными (три операнда).

13. Операции инкремента-декремента

Операция инкремента ++ обеспечивает увеличение целой переменной на единицу.

Операция декремента -- обеспечивает уменьшение переменной на единицу и правила ее использования аналогичны: имеет две формы префиксную и постфиксную.(16)

14. Арифметические операции

К арифметическим операциям относятся +, - (бинарные и унарные), *, / а также операция взятия остатка %. (применима только к целым). Если / применяется к целым, то результатом деления будет тоже целое, а остаток отбрасывается

15. Операции сравнения

К операциям отношения сравнения на равенство == и на неравенство != и проверки > >= < <=. Операции отношения и логические возвращают значение типа bool (true - если условие истинно, и false - если условие ложно). Тип bool совместим с целым: истиной считается любое ненулевое значение, а ложью - ноль. Любое выражение, приводимое к целому, может использоваться в логических условиях. Логическое отрицание ! преобразует свой операнд в истину (1) если он равен 0 и в ложь (0) если он не равен нулю.

16. Отличия префиксной и постфиксной форм операций

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

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

К логическим операциям относятся логическое И && и ИЛИ ||.

18. Виды операторов

Условные орераторы и операторы цикла

19. Условные операторы. Оператор [switch]

switch ( целое_выражение )

{ case константа_1: инструкции

case константа_2: инструкции

...

default: инструкции }

20. Условные операторы. Оператор [else]

Условная инструкция применяется в двух видах:

if (условное_выражение)

{ инструкция_1}

else

{ инструкция_2}

и

if (условное_выражение)

инструкция_1

21. Операторы цикла. Оператор [For]

Цикл с параметром строится по схеме:

for (E1; E2; E3) инструкция, где E1, E2 и E3 - выражения скалярного типа. Цикл с параметром реализуется по следующему алгоритму:

  • вычисляется выражение E1 (обычно это выражение выполняет подготовку к началу цикла);

  • вычисляется выражение E2 и если оно равно нулю выполняется переход к следующей инструкции программы (выход из цикла);

  • если E2 не равно нулю, выполняется инструкция - тело цикла;

  • вычисляется выражение E3 - выполняется подготовка к повторению цикла, после чего снова выполняется выражение E2.

22. Операторы цикла. Оператор [while]

while (условие)

{

блок инструкций

}

23. Операторы цикла. Оператор [Do while]

do

{

Блок инструкций

}

while (условие);

24. Объявление массива и инициализация массива

1)статический массив: тип имя_массива [кол-во_строк][кол-во столбцов(если есть)] = {перечисление переменных}

2)динамический массив: тип * имя_массива = new тип[кол-во єл-тов массива(может использоваться переменная)];

25. Размер массива и способы (?) его задания

Смотри 24 вопрос

Размер зависит от типа массива и зарезервированной при объявлении массива памяти. Если в массив попытаться ввести больше элементов чем он может принять, то часть выходящая за рамуи массива будет утеряна

26. Понятие указателя Указатель – это объект, содержащий адрес другого объекта и позволяющий косвенно манипулировать этим объектом. Каждый указатель ассоциируется с некоторым типом данных, который определяет тип указателя.

Указатель представляет собой адрес памяти, который указывает (или ссылается) на определенный участок.

int *pi; // Указатель на объект целого тип

27. Константный указатель и особенности Указатель на константу хранит адрес константы. Для этого нужно ко всему определению добавить префикс const.

const double *pd;

Константным является объект, а не указатель, который на него указывает. Указателю на константу можно присвоить адрес обычной переменной. Но такую переменную нельзя изменить через этот указатель. Указатель на const нельзя присвоить указателю типа void*.

Существует константный указатель, которые может указывать на любые объекты. Значения этих объектов можно менять, но сам указатель нельзя изменить после определения. Для описания константного указателя нужно поставить const не перед всем определением, а перед именем указателя справа от *. Такой указатель нужно инициализировать при определении:

int i = 1;

int * const pi = &i;

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

28. Для чего используется массив символов

Для хранения строк символов, не особо имеет смысл, поскольку придуманы строковые переменные типа string.

29. Как работать с массивом символов

Массивы символов могут инициализироваться так называемым строковым литералом. Строковый литерал - это строковая константа . Строка символов хранится в памяти как массив, и доступ к ней осуществляется при помощи указателя типа char*.

Для использования этих функций необходимо включить заголовочный файл: #include<cstring> или #include<string.h> Указатель на char, с помощью которого мы обращаемся к строке, указывает на соответствующий строке массив символов.

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

30. Для чего необходимо динамическое распределение памяти

Динамическое распределение памяти — способ выделения оперативной памяти компьютера для объектов в программе, при котором выделение памяти под объект осуществляется во время выполнения программы

Необходим, чтобы использовать структуры данных, размер которых не известен точно на этапе разработке программы.

31. Использование ссылок

Ссылка представляет собой альтернативное имя объекта. Тип ссылки определяется спецификацией типа, за которой следует операция &. Так же, как и константа, ссылка при определении должна быть инициализирована некоторым существующим объектом:

int i = 10;

int &j = i;

j теперь будет другим именем для i. Ссылка иногда также называется псевдонимом. Любые действия с объектом могут теперь производиться как с использованием основного имени, так и с использованием ссылки.

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

Нельзя определять массив ссылок:

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

int i = 100;

const int &ciref = i;

ciref = 200; // ошибка

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

32. Функции, их объявление/определение

Функции являются основными составляющими программы. Все операторы могут располагаться только внутри функций.

Объявление:

Задает имя, тип возвращаемого значения и список представленных параметров

Определение:

Кроме объявления содержит еще и тело функции

33. Как описывается передача параметров в функциях

Передача параметра по значению

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

Передача параметра по адресу

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

Передача параметра по ссылке

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

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