Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

otvety_ekz_proga

.docx
Скачиваний:
21
Добавлен:
04.06.2015
Размер:
149.2 Кб
Скачать

1. Структурная схема ЭВМ. Основные функциональные устройства машины. 2. Определение алгоритма. Свойства алгоритмов. 3. Способы записи алгоритмов (словесный, графический, на алгоритмическом языке). 4. Этапы решения задачи на ЭВМ. 5. Структура программы на языке С++. Алфавит языка. 6. Классификация типов, "дерево" типов в языке программирования с++. 7. Вещественные и целые типы в языке программирования с++. 8. Перечисляемый тип в языке программирования с++. 9. Использование указателей в языке программирования с++. 10. Ввод данных (scanf, cin) в языке программирования с++. 11. Вывод данных (printf, cout) в языке программирования с++. 12. Оператор присваивания в языке программирования с++. 13. Преобразование и совместимость типов по присваиванию в языке программирования с++. 14. Условный оператор if, опеpация условия: ? в языке программирования с++. 15. Составной оператор в языке программирования с++. 16. Оператор пеpеключения switch в языке программирования с++. 17. Операторы goto, break, continue в языке программирования с++. 18. Оператор цикла for в языке программирования с++. 19. Оператор цикла do while в языке программирования с++. 20. Оператор цикла while в языке программирования с++. 21. Обработка массивов в языке программирования с++. 22. Динамическое управление памятью (new, delete). 23. Динамические массивы в языке программирования с++. 24. Использование указателей при обработке массивов в языке программирования с++. 25. Описание функций, фактические и фоpмальные паpаметpы в языке программирования с++. 26. Передача параметров по значению, по ссылке, по указателю в языке программирования с++. 27. Строки символов в языке программирования с++. 28. Стpуктуpы и объединения в языке программирования с++. 29. Битовые поля в языке программирования с++. 30. Классы памяти. Область действия имен в языке программирования с++. 31. Текстовые файлы в языке программирования с++. 32. Структурное программирование в языке программирования с++. 33. Критерии качества программ

1)Структурная схема ЭВМ. Основные функциональные устройства машины. Согласно принципам фон Неймана ЭBM должна иметь следующие устройства: а)процессор(осуществляющий арифметические и логические операции, а также организующий б)процесс выполнения программ); в)запоминающее устройство, или память для хранения программ и данных; внешние(периферийные) устройства для ввода/вывода информации. На рисунке одинарные линии показывают управляющие связи, двойные - информационные.

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

3)Способы записи алгоритмов (словесный, графический, на алгоритмическом языке). а)Словесный способ записи алгоритма представляет собой описание последовательных этапов обработки данных. Алгоритм задается в произвольном изложение на естественном языке. Словесный способ не имеет широкого распространения, так как такие описания -строго не формализуемы. -страдают многословностью записей. -допускают неоднозначность толкования отдельных предписаний. б)С помощью алгоритмического языка - так называемый псевдокод( полуформализованные описания алгоритмов на условном алгоритмическом языке, включающие в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и др.);  Псевдокод представляет собой систему обозначения и правил, предназначенную для единообразной записи алгоритмов. Псевдокод занимает промежуточное место между естественным и формальным языками. - Он близок к обычному естественному языку, поэтому алгоритмы могут на нем записываться и читаться как обычный текст. Пример: алг Сумма квадратов(арг цел n, рез цел 5) дано | n>0 надо | S=1*1+2*2+3*3+...+n*n нач цел i ввод n: S=0 нц для i от 1 до n S:=S+i*i кц Вывод "S=", S кон в) графический способ записи алгоритмов - наиболее наглядный и распространенный. Он основан на использовании геометрических фигур(символов), краткого пояснительного текста и соединяющих линий. Схемы могут применяться на различных уровнях детализации, причем число уровней зависит от размеров и сложности задачи обработки данных. Уровень детализации должен быть таким, чтобы различные части и взаимосвязь между ними были понятны в целом. Каждый символ отображает конкретный этап процесса обработки данных. Символы соединяются между собой прямыми линиями, называемыми линиями потока.

4)Этапы решения задачи на ЭВМ. В общем случае решение задачи на ЭВМ можно разбить на следующие этапы: а) Постановка задачи(сбор информации о задачи, формулировка условий задачи, определение конечных целей решения задачи, определение формы выдачи результатов, описание данных(их типов, диапазонов величин, структуры и т.п.) анализ существующих аналогов, анализ технических и программных средств, разработка математической модели, разработка структур данных.) б)разработка алгоритма(выбор метода проектирования алгоритма. выбор формы записи алгоритма(блок-схема, псевдокод и др.), выбор тестов и метода тестирование, проектирование алгоритма) в)составление программы(выбор языка программирования, уточнение способов организации данных запись алгоритма на выбранном языке программирования.) г)трансляция программы(перевод языка программирования в машинный язык) д) отладка и выполнение программы(синтаксическая отладка, отладка семантики и логической структуры, тестовые расчеты и анализ результатов тестирования, совершенствование программы.) е)анализ результатов(анализ результатов решения задачи и уточнение в случае необходимости математической модели с повторным выполнением этапов 2-5)

5)Структура программы на языке С++. Алфавит языка. Программа на языка С++ состоит из функции, описаний и директив препроцессора. а)Функция - носит стандартное имя main и с неё начинается выполнение программы. простейшее определение функции имеет следующий формат: 1 тип возвращаемого значения имя ([параметры]){ 2 операторы, составляющие тело функции 3 } Как правило, функция используется для вычисления какого-либо значения, поэтому перед именем функции указывается его тип. если функция не должна возвращать значение, указывается тип void. тело функции является блоком и, следовательно, заключается в фигурные скобки. функции не могут быть вложенными. каждый оператор заканчивается точкой с запятой(кроме составного оператора). б)директива препроцессора, т.е. сообщение препроцессору. Строки, начинающиеся с символа  "#" обрабатываются препроцессором до компиляции программы.  Синтаксис: #include <имя_файла> или #include "имя_файла" в)Описание - в языке С++, как и в других языках, действует правило: пока переменная, константа и .д. не описаны, он не может использоваться. При описании переменных указывается тип переменных. Описание переменных позволяет определить, сколько бай памяти необходимо выделить под конкретную переменную и какие операции над ней можно выполнить. Идентификаторы(тлили имена) используются в программе для обозначения переменных, меток, типов, функций, констант. На имена накладываются некоторые ограничения. Важным ограничением при выборе имени является невозможность использовать ключевых слов, например main или void/ Имя должно начинаться с буквы и может содержать буквы латинского алфавита, цифры и знаки подчеркивания. Длина имени может быть любой, но значащими являются первые 63 символа. имена могут нести смысловую нагрузку. Алфавит С++ включает:  Прописные и строчные латинские буквы и знак подчеркивания; арабские цифры от 0 до 9; специальные знаки: " {} [] () + - / % * . , ' ^ &  пробельные символы: пробел, символ табуляции, символ перехода на новую строку; Из символов алфавита формируются лексемы языка: идентификаторы, ключевые слова, знаки операций, константы, разделители(скобки, точка, запятая, пробельные символы)

6)Классификация типов, "дерево" типов в языке программирования с++. В языке С++ обрабатываются переменные различных типов. Тип любого объекта определяет множество значений и множество допустимых операций над этим значениями. Любой идентификатор, используемый в исполняемых операторах, должен быть предварительно описан в любом месте программы, но обязательно до начала применения.

7) Вещественные и целые типы в языке программирования с++. а)В таблице приводятся названия целых типов, их длина в байтах и диапазон возможных значений. целые типы относят к порядковым типам. Для порядковых типов характерно то, что такие типы имеют конечное число возможных значений, их можно каким-либо образом упорядочить и каждому поставить в соответствие целое число. Описание переменных целого типа может выглядеть так: int a; long b; Основные операция над целыми числами:  "+" - сложение, "*" - умножение, "/" - деление, "-" - вычитание, "%" - получение остатка от деления. Порядок выполнения операций такой же, как в математике. б) Под данными вещественного типа понимаются числа, записанные с десятичной точкой. Значение числа вещественного типа представляется в ЭВМ лишь с некоторой конечной точностью, коорая зависит от внутреннего формата вещественного числа. В таблице 2 приведены названия вещественных типа, их длина в байтах, а также диапазон возможных значений. Существуют две формы представления вещественных чисел: с фиксированной и с плавающей точкой. Пример: 1.36 - фиксированная 1.36e0 - с плавающей Переменные вещественного типа можно описать так: float a,b; double c,d; Основные функции для обработки данных вещественного типа Таблица 3. Этими функциями можно пользоваться только после подключения файла math.h.выполнения операций такой же, как в математике.

8)Перечисляемый тип в языке программирования с++. Перечислимый тип вводится ключевым словом enum и задает набор значений, определяемый пользователем. Набор значений заключается в фигурные скобки и является набором целых именованных констант, представленных своими идентификаторами. Эти константы называются перечислимыми константами. Например: enum Suit{CLUBS, DIAMONDS, HEARTS, SPADES}; C его помощью создается целочисленный тип набором из четырех названий мастей, именующих целочисленные константы. Перечислимые константы - это кодификаторы CLUBS, DIAMONDS, HEARTS, SPADES, имеющие значения - 0, 1,2 и 3, соответственно. ти значения присвоены по умолчанию. Первой перечислимый константе присваивают постоянное целое значение 0. Каждый  последующий член списка на единицу больше, чем его сосед слева. Переменная типа Suit , определенного пользователем, может быть присвоено только одно из четырех значений, объявленных в перечислении.

9) Использование указателей в языке программирования с++. Указатель - это переменная в С++, значением которой является адрес. Он указывает на начало области оперативной памяти, где хранятся данные.  Синтаксис: <Тип данного>*<название указателя>; Пример: int*nomer Присвоить значение указателю можно следующим образом: <название указателя> = <адрес переменной>; Для получения адреса выполняется команда &<название переменной>. Операции, которые можно выполнить над указателями: ==,!=,>=,<=,<,> эти операции выполняют сравнение двух показателей.

10)Ввод данных (scanf, cin) в языке программирования с++. а)Функция ввода scanf служит для чтения информации с клавиатуры и имеет следующий синтаксис: scanf(управляющая строка, список ввода); Здесь, управляющая строка символов, содержащая спецификации преобразования. Каждому идентификатору из списка ввода должна соответствовать строго одна спецификация преобразования; Список ввода - это последовательность из одного или более идентификаторов переменных строкового типа, а также любого целого типа или вещественного типа. Перед каждым идентификатором должен стоять символ &, который означает, что в функцию передается адрес переменной, а не значение. б)cin имеет тип istream и вводит данные с терминала, подключается с помощью директивы <iostream.h>. Команда ввода имеет вид: cin>><переменная>; int x; cin>>x; введет целое число с терминала в переменную x.

11) Вывод данных (printf, cout) в языке программирования с++. Вывод данных (printf, cout) в языке программирования C++. Функция ввода printf служит для чтения информации с клавиатуры и имеет следующий синтаксис: printf (управляющая строка,список вывода); Список вывода - это последовательность идентификаторов переменных, констант, выражений, вычисляемых перед выводом на печать. Каждому аргументу из списка вывода должна соответствовать одна спецификация преобразования. Управляющая строка - это строка символов, содержащая информацию, печатаемую текстуально, спецификации преобразования и специальные символы. Управляющая строка определяет, каким образом будет распечатана информация. В C++ чаще всего используются следующие специальные символы: \п - перевод курсора на новую строку; \t - символ табуляции; \Ь - шаг назад; cout имеет тип ostream и выводит данные на терминал, подключается с помощью директивы <iostream.h>. Команда вывода имеет следующий вид Cout« <выражение1> « <выражение 2>; Пример: cout «"S="«s«"\n"

12)Оператор присваивания в языке программирования с++. Оператор присваивания является самым важным оператором в любом языке программирования. Этот оператор служит для изменения областей памяти. Оператор присваивания заменяет значение переменной, идентификатор которой стоит в левой части оператора, значением выражения, стоящего в правой части, и имеет следующую форму: идентификатор переменной = выражение. Необходимо учесть, что переменная и выражение должны быть согласованы по типам. Также нужно отметить что старое значение переменной стирается,когда ей присваивается новое значение. Поскольку переменная может хранить только одно число, то выполнение оператора присваивания приводит к потере предыдущего значения переменной. Переменная всегда содержит результат последнего оператора присваивания. Кроме классической записи оператора присваивания, в языке C++ используются операции увеличения и уменьшения . Операция увеличения увеличивает свой операнд на 1, а операция уменьшения уменьшает свой операнд на 1. Существует две формы этих операций: постфиксная и префиксная. Разница между ними заключается в том, что они показывают, в какой момент осуществляется увеличение или уменьшение операнда:  х++, Х-- постфиксная запись; ++х, -X префиксная запись.

13)Преобразование и совместимость типов по присваиванию в языке программирования с++. Как отмечалось, тип переменной позволяет не только устанавливать длину ее внутреннего представления, но и контролировать те действия, которые осуществляются над ней в программе. Ниже приведены схемы преобразования типов, гарантирующие сохранение точности и неизменность численного значения: signed char ==> short ==> int ==> long float ==> double ==> long double unsigned char ==> unsigned short ==> unsigned int ==> unsigned long Кроме автоматических преобразований типов, существуют явные преобразования типов. Синтаксис использования явного преобразования типов имеет две различные формы: (имя__типа) операнд или имя_типа (операнд). Во второй форме не может использоваться составное наименование типа (например, unsigned short). Как и при автоматическом преобразовании типов, ответственность за сохранение значения и точности результата лежит на разработчике программы.

14) Условный оператор if, опеpация условия: ? в языке программирования с++. a)Условный оператор служит для ветвлений в программе и имеет следующий синтаксис: if(условие:») <оператор1>; else <оператор2>. Здесь if, else - ключевые слова:если, иначе; <условие> - это условное выражение типа сравнения (например, a>b, c<=d, f==l); <оператор1> и <оператор2> любые операторы C++. Оператор работает следующим образом: если условие истинно, то выполняется <оператор1> и управление передается на следующий за условным оператор; если условие ложно, то выполняется <оператор2> и управление передается на следующий за условным оператор. Существует сокращенная форма условного оператора, в которой отсутствует ветвь else: if <условие> <оператор1>. Оператор работает следующим образом: если условие истинно, то выполняется <оператор1> и управление передается на следующий за условным оператор; если условие ложно, то управление сразу передается на следующий за условным оператор. Таким образом, в зависимости от условия, <оператор1> либо выполняется, либо не выполняется. б)Операция условия - это короткий способ записи условного оператора. В общем случае синтаксис этого оператора следующий: <выражение1>?<выражение2>:<выражениеЗ> Здесь <выражение1>- условное выражение и, если оно истинно, то вычисляется <выражение2>, которое становится результатом. Если <выражение1>-ложно, то результатом будет <выражениеЗ>. пример: х=(у<0)? -у: у; Выражение возвращает абсолютное значение переменной у.

15) Составной оператор в языке программирования с++. Чтобы последовательность операторов работала как единый оператор, можно помещать эту последовательность между открывающейся и закрывающейся фигурными скобками. Такая конструкция называется составным оператором, или операторными скобками. Каждый оператор, входящий в состав составного оператора, заканчивается точкой с запятой. Пример: if (с>0) { s=s+c; k=k+1;}

16)Оператор пеpеключения switch в языке программирования с++. Оператор выбора предназначен для организации ветвлений в программе, когда возникает необходимость избрания одного из множества различных вариантов дальнейшего хода программы. В общем случае оператор выбора записывается следующим образом-switch (<выражение>) { case <выражение_1>: <операторы>; case <выражение_2>: <операторы>; case <выражение_п>: <операторы>; [default: <операторы>;] } Здесь switch, case, default - ключевые слова: переключатель, случай, невыполнение обязательств. <выражение> - выражение любого целого типа; <выражение_1>, <выражение_2>, <выражение_п> - константа или константное выражение того же типа, что и <выражение>; <операторы> — один или несколько операторов C++. Работа оператора начинается с вычисления <выражения>. Значение этого выражения является критерием для выбора из нескольких вариантов. Если полученное значение выражения совпадает с одной из констант, то выполняется та группа операторов, которой предшествует эта константа, а потом все группы операторов, расположенные ниже. Но так как часто программист использует этот оператор, чтобы выполнить только одну группу, то в конце каждой группы используется специальный оператор break, осуществляющий выход из оператора switch (а также из всех операторов цикла). Если такой константы не обнаруживается, то выполняется оператор, следующий за ключевым словом default. Ветвь default может отсутствовать, и в этом случае управление передается оператору, следующему за оператором switch.

17)Операторы goto, break, continue в языке программирования с++. В языке C++ достаточно управляющих операторов, позволяющих написать любую программу. Тем не менее, в языке имеется оператор безусловного перехода. Безусловный переход приводит к передаче управления из одного места в программе в другое. Структура оператора перехода следующая: goto <метка> Здесь goto - ключевое слово :перейти на Метка - это произвольный идентификатор. Метка ставится перед оператором, получающим управление, и отделяется от него двоеточием. Метки в языке C++ не требуют предварительного описания. Перемещаться с помощью оператора перехода можно только внутри текущей функции. Операторы break и continue применяются для изменения управления в программе. Когда оператор break выполняется в цикле, то досрочно прерывается исполнение оператора цикла, и управление передаётся следующему оператору после цикла. Оператор continue используется только в циклах. В операторах for, while, do while оператор continue выполняет пропуск оставшейся части кода тела цикла и переходит к следующей итерации цикла.

18)Оператор цикла for в языке программирования с++. В циклах со счетчиком выполнение тела цикла должно повторяться заранее определенное число раз. Хотя такой цикл можно организовать с помощью оператора цикла с постусловием или предусловием (они универсальны), в языке C++ имеется специальная конструкция для организации циклов со счетчиком. Синтаксис оператора цикла со счетчиком в общем случае следующий: for (<п.ц.> = <н.з.>; <условие>; скоррекция п.ц.>) <оператор>; Здесь for - ключевое слово:для; <п.ц.> - переменная цикла, которая может быть только простого типа; <н.ц.> - начальное значение, выражение такого же простого типа, как и переменная цикла; <условие>- выражение типа сравнения, используемое для выхода из цикла; скоррекция п.ц.>-оператор присваивания, задающий изменение переменной цикла; <оператор> -любой оператор языка C++, в том числе и составной, являющийся телом цикла. Оператор работает таким образом: сначала вычисляется выражение, соответствующее начальному значению, и присваивается переменной цикла, потом проверяется условие выхода из цикла и, если получается истинное значение, выполняется оператор, являющийся телом цикла. Затем изменяется переменная цикла и снова проверяется условие и т. д. Если значение выражения ложно, то осуществляется выход из цикла. Если начальное значение переменной цикла больше конечного значения, то операторы тела цикла не выполняются. Можно сказать, что оператор цикла со счетчиком - это оператор цикла с предусловием. Следующий оператор не приведет к выполнению каких-либо действий.

19)Оператор цикла do while в языке программирования с++. оператор цикла с постусловием. Синтаксис этого оператора следующий: do <оператор> while( <условие>) Здесь do,while - ключевые слова выполнять и пока; <оператор> - любой оператор языка C++, в том числе и составной (его называют телом цикла); <условие> - условное выражение типа сравнения, используемое для выхода из цикла. Оператор работает следующим образом: сначала выполняются операторы, расположенные в теле цикла, затем вычисляется условное выражение и, если получается ложное значение, осуществляется выход из цикла. Если значение выражения истинно, то выполнение операторов тела цикла повторяется, а затем снова проверяется условие. Итак, операторы тела цикла выполняются хотя бы раз, а потом все зависит от условия выхода из цикла. Очевидно, один из операторов тела цикла должен влиять на значение урювного выражения, поскольку иначе цикл будет повторяться бесконечно.

20)Оператор цикла while в языке программирования с++. В отличие от оператора цикла с постусловием оператор цикла с предусловием вычисляет и проверяет условие до выполнения операторов, составляющих тело цикла. Синтаксис этого оператора следующий: while (<условие>) <оператор>; Здесь while-ключевое слово: пока; <оператор>-любой оператор языка C++, в том числе и составной (этот оператор называют телом цикла); <условие> - условное выражение типа сравнения, используемое для выхода из цикла. Оператор работает следующим образом: сначала вычисляется условное выражение и, если получается истинное значение, выполняется оператор, являющийся телом цикла, а затем снова проверяется условие. Если значение условного выражения ложно, то осуществляется выход из цикла. Таким образом, если условие было ложно при первом входе в цикл, то операторы тела цикла не выполнятся ни разу. Очевидно, один из операторов тела цикла должен влиять на значение условного выражения, поскольку иначе цикл будет повторяться бесконечно.

21) Обработка массивов в языке программирования с++. Массив - не простой тип данных, а структурированный, т. е. имеет один или более компонент и построен на основе других типов. Компоненты массива называют элементами. Все элементы массива имеют общее имя. Обращение к конкретному элементу производится с помощью индекса. Важной отличительной чертой массива является однотипность элементов массива. Одномерные массивы имеют аналогию с таким понятием в математике, как вектор. Описание переменной типа массив задается следующим образом: <тип> <идентификатор массива>[<t>]; Здесь <тип>-тип элементов массива (любой тип языка C++); <имя массива>- правильный идентификатор; <t> - количество элементов массива. При обработке массивов возникают такие задачи, как ввод элементов массива, нахождение суммы, произведения, среднего и т. д., поиск некоторого элемента в массиве, сортировка элементов массива, вывод элементов массива. Двумерные массивы имеют аналогию с таким понятием в математике, как матрица. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы При обработке двумерных массивов возникают такие же задачи, как и при обработке одномерных массивов: ввод элементов массива, нахождение суммы, произведения, среднего и т. д., поиск некоторого элемента в массиве, сортировка элементов массива, вывод элементов массива.

22)Динамическое управление памятью (new, delete). a)Оператор new позволяет выделить память под динамический объект (объект, создаваемый в процессе выполнения программы). Этот оператор исполняет две функции: он автоматически возвращает указатель соответствующего типа и вызывает соответствующий конструктор, если тип данных — класс. Оператор new дает пользователю полный контроль над продолжительностью жизни данных. Если созданный объект уже не нужен, его можно удалить из памяти с помощью оператора delete. Синтаксис: Существует несколько форм записи оператора new:  new type  new type (args)  new type [size] Здесь type — тип выделяемой памяти, args — список необходимых аргументов, size — число элементов, для которых выделяется память. В каждом из нижеперечисленных случаев оператор new возвращает указатель на распределенные в памяти данные, а тип указателя представляется в виде type*. б)Оператор delete используется для удаления динамических объектов, память под которые была предварительно выделена с помощью оператора new. В качестве единственного операнда выступает указатель. Синтаксис: Оператор delete имеет две формы записи:  delete pointer; delete [ ] pointer; Если указатель был предварительно получен с помощью оператора new type [size], то используется вторая форма оператора delete.

23)Динамические массивы в языке программирования с++. Все глобальные переменные и константы, объявленные в программе на языке C++, размещаются в одной непрерывной области оперативной памяти, которая называется сегментом данных. Длина сегмента данных определяется архитектурой процессора 8086 и составляет 64 Кбайта, что может вызвать определенные затруднения при обработке больших массивов данных. С другой стороны, объем памяти ПЭВМ достаточен для успешного решения задач с большой размерностью данных. Выходом из положения может служить использование так называемой динамической памяти. Динамическая память—это оперативная память ПЭВМ, представляемая программе при её работе, за вычетом сегмента данных, стека, и собственно тела программы. Размер динамической памяти может варьировать в широких пределах. Динамическая память - это фактически единственная возможность обработки массивов данных большого размера. Существуют и другие задачи, которые трудно или невозможно решить без использования динамической памяти. Динамическое размещение данных означает использование динамической памяти непосредственно при работе программы. Статическое размещение осуществляется компилятором в процессе компиляции программы. При динамическом размещении заранее не известны ни тип, ни количество размещаемых данных, к ним нельзя обращаться по именам, как статическим переменным.

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