Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ekzamenatsionnye_Voprosy_Programmirovanie_Sua_2...doc
Скачиваний:
5
Добавлен:
26.11.2019
Размер:
533.5 Кб
Скачать

Экзаменационные вопросы по курсу «Программирование»

Модуль1. «Основы алгоритмизации и программирования на С/С++»

  1. Понятие алгоритма, его свойства

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

Исполнитель — это тот объект (или субъект), для управления которым составляется алгоритм.

 Основной характеристикой исполнителя, с точки зрения управления, является система команд исполнителя (СКИ). Это конечное множество команд, которые понимает исполнитель, т.е. умеет их выполнять.

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

 Другое свойство алгоритма — точность. Всякая команда должна быть сформулирована так, чтобы определить однозначное действие исполнителя.

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

Еще одно свойство, которое отражено в определении алгоритма — конечность. Оно формулируется так: исполнение алгоритма и, следовательно, получение искомого результата должно завершиться за конечное число шагов. Здесь под шагом подразумевается выполнение отдельной команды. Это свойство является предупреждением ситуации, которую программисты называют зацикливанием. Бесконечно исполняемый алгоритм безрезультатен. Поэтому свойство конечности называют еще результативностью алгоритма.

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

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

Другими словами, это можно назвать универсальностью алгоритма по отношению к исходным данным решаемой задачи. Заметим, что данное свойство не является необходимым свойством алгоритма, а скорее определяет качество алгоритма: универсальный алгоритм лучше неуниверсального (алгоритм решения частной задачи — тоже алгоритм!)

  1. Переменная в программировании. Хранение информации в компьютере. Двоичная система счисления. Основные операции

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

 Переменная в программе представлена именем и служит для обращения к данным определенного типа. Конкретное значениепеременной хранится в ячейках оперативной памяти.

 Тип переменной. Тип переменной определяется типом данных, которые могут быть значениями переменной. Значениями переменных числовых типов (ByteIntegerLongSingleDoubleявляются числа, логических (Boolean) – True или Falseстроковых (String– последовательности символов и так далее. Обозначения типов переменных являются ключевыми словами языка и поэтому выделяются.

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

Различные типы данных требуют для своего хранения в оперативной памяти компьютера различное количество ячеек (байтов). Для хранения целых чисел в интервале от 0 до 255 в переменных типа Byte достаточно одного байта; для хранения вещественного числа с двойной точностью в переменных типа Double требуется уже восемь байтов, а для хранения символьных строк в переменных типаString требуется один байт на каждый символ.

Имя переменной. Имя каждой переменной (идентификатор) уникально и не может меняться в процессе выполнения программы. Имя переменной может состоять из различных символов (латинские и русские буквы, цифры и так далее), но должно обязательно начинаться с буквы и не должно включать знак «.» (точка). Количество символов в имени не может быть более 255.

Объявление типа переменной. Важно, чтобы не только разработчик программы (программист) понимал, переменные какого типа используются в программе, но чтобы это мог учесть и исполнитель программы (компьютер). Второе даже еще более важно, так как, если компьютер не будет «знать», переменная какого типа используется в программе, он будет считать ее переменной универсального типаVariant и отведет для ее хранения в памяти 16 или более байтов. Это будет приводить к неэффективному использованию памяти и замедлению работы программы.

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

Цифры 0 и 1, образующие набор {0,1}, обычно называют двоичными цифрами, потому что они используются как алфавит в так называемой двоичной системе счисления. Система счисления представляет собой совокупность правил и приемовнаименования и записи чисел, а также получения значения чисел из изображающих их символов. Количество знаков в алфавите системы счисления обычно отражается в ее названии: двоичная, троичная, восьмеричная, десятичная, шестнадцатеричная и т. д. Вообще говоря, можно рассматривать системы счисления с любым количеством знаков в алфавите. В настоящее время общепринятой является арабская десятичная система счисления, алфавит которой состоит из десяти цифр {0,1,2,3,4,5,6,7,8,9}. Однако для использования в ЭВМ десятичная система слишком сложна, так как для ее применения необходимо подобрать технические способы изображения десяти различных цифр. С точки зрения технической реализации компьютера, гораздо проще работать всего с двумя цифрами двоичной системы {0,1}.

В двоичной системе счисления используются всего две цифры 0 и 1. Другими словами, двойка является основанием двоичной системы счисления. (Аналогично у десятичной системы основание 10.) В десятичной системе счисления мы располагаем десятью знаками-цифрами (от 0 до 9). Когда счет достигает 9, то вводится новый разряд (десятки), а единицы обнуляются и счет начинается снова. После 19 разряд десятков увеличивается на 1, а единицы снова обнуляются. И так далее. Когда десятки доходят до 9, то потом появляется третий разряд – сотни.Двоичная система счисления аналогична десятичной за исключением того, что в формировании числа участвуют всего лишь две знака-цифры: 0 и 1. Как только разряд достигает своего предела (т.е. единицы), появляется новый разряд, а старый обнуляется. Операции делятся на унарные, бинарные и тернарную по количеству участвующих в них операндов. Большинство стандартных операций может быть переопределено (перегружено).

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

Операции присваивания (=, +=, -=, *= и т. д.)

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

Формат операции простого присваивания (=):

операнд_1 = операнд_2

Первый операнд должен быть L-значением, второй — выражением. Сначала вычисляется выражение, стоящее в правой части операции, а потом его результат записывается в область памяти, указанную в левой части (мнемоническое правило: «присваивание — это передача данных «налево»»). То, что ранее хранилось в этой области памяти, естественно, теряется.

#include int main(){ int a = 3, b = 5, с = 7; a = b; b = a; с = с + 1; cout << "a = " << a; cout << "\t b = " << b; cout << "\t с = " << c; return 0; }

Результат работы программы:

a = 5 b = 5 c = 8

Внимание

При присваивании производится преобразование типа выражения к типу L-значения, что может привести к потере информации.

В сложных операциях присваивания ( +=, *=, /= и т п.) при вычислении выражения, стоящего в правой части, используется и L-значение из левой части. Например, при сложении с присваиванием ко второму операнду прибавляется первый, и результат записывается в первый операнд, то есть выражение а += b является более компактной записью выражения а = а + b.

Основные операции языка программирования C++

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

Все приведенные в таблице операции, кроме условной и sizeof, могут быть переопределены (перегружены).

Операция

Краткое описание

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

::

доступ к области видимости

.

выбор

->

выбор

[ ]

индексация

( )

вызов функции

<тип>( )

конструирование

++

постфиксный инкремент

постфиксный декремент

typeid

идентификация типа

dynamic_cast

преобразование типа с проверкой на этапе выполнения

static_cast

преобразование типа с проверкой на этапе компиляции

reinterpret_cast

преобразование типа без проверки

const_cast

константное преобразование типа

sizeof

размер объекта или типа

префиксный декремент

++

префиксный инкремент

~

поразрядное отрицание

!

логическое отрицание

-

арифметическое отрицание (унарный минус)

+

унарный плюс

&

взятие адреса

*

разадресация

new

выделение памяти

delete

освобождение памяти

(<тип>)

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

.*

выбор

->*

выбор

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

*

умножение

/

деление

%

остаток от деления

+

сложение

-

вычитание

<<

сдвиг влево

>>

сдвиг вправо

<

меньше

<=

меньше или равно

>

больше

>=

больше или равно

==

равно

!=

не равно

&

поразрядная конъюнкция (И)

^

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

|

поразрядная дизъюнкция (ИЛИ)

&&

логическое И

||

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

? :

условная операция (тернарная)

=

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

*=

умножение с присваиванием

/=

деление с присваиванием

%=

остаток отделения с присваиванием

+=

сложение с присваиванием

-=

вычитание с присваиванием

<<=

сдвиг влево с присваиванием

>>=

сдвиг вправо с присваиванием

&=

поразрядное И с присваиванием

|=

поразрядное ИЛИ с присваиванием

^=

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

throw

исключение

,

последовательное вычисление

Один и тот же знак может интерпретироваться по-разному в зависимости от контекста.

Рассмотрим основные операции подробнее.

Операции увеличения и уменьшения на 1 (++ и —)

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

#include int main(){ int x = 3. у = 3: printf("Значение префиксного выражения: %d\n", ++х): printf("Значение постфиксного выражения: %d\n", у++); printf("Значение х после приращения: %d\n", х); printf("Значение у после приращения: %d\n", у); return 0; }

Результат работы программы:

Значение префиксного выражения: 4 Значение постфиксного выражения: 3 Значение х после приращения: 4 Значение у после приращения: 4

Операндом операции инкремента в общем случае является так называемое L-значение (L-value). Так обозначается любое выражение, адресующее некоторый участок памяти, в который можно занести значение. Название произошло от операции присваивания, поскольку именно ее левая (Left) часть определяет, в какую область памяти будет занесен результат операции. Переменная является частным случаем L-значения.

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