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

otvety_ekz_proga

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

24)Использование указателей при обработке массивов в языке программирования с++. Известно, что данные хранятся в ячейках памяти компьютера. Все ячейки памяти пронумерованы. Номера ячеек памяти называются адресами. Указатели используются для работы с адресами. Указатель - это некоторое символическое представление адреса. Это означает, что будем работать с переменными, хранящими эти адреса. Описываются такие переменные следующим образом: <тип> *<идентификатор>; Такое описание синтаксически отличается от описания простой переменной только наличием знака * перед именем переменной. Как видно из описания, указатель всегда связывается с переменной какого-то определенного типа. Это позволяет определить, сколько байт памяти необходимо выделить по указанному адресу. Над указателями можно выполнять следующие операции: - Одному указателю можно присвоить значение другого указателя, если они ссылаются на один и тот же тип: ptr = ptrl; pl=p; - Значение указателя можно увеличить или уменьшить на константную величину: ptr++; ptrl = ptrl-5; pi = pl+2; Очень часто в C++ при работе с массивами вместо индексов используются указатели. Преимущество использования указателей в массивах состоит в том, что арифметические операции над указателями выполняются быстрее, если мы работаем с подряд идущими элементами массива. Если выбор элементов случайный, то быстрее и нагляднее работа с индексами. Имя массива является указателем на первый элемент массива. Элементы массива располагаются в непрерывной области памяти. Эти два положения позволяют перемещаться по элементам массива, используя указатель.

25)Описание функций, фактические и фоpмальные паpаметpы в языке программирования с++. Функции - относительно самостоятельные фрагменты программы, спроектированные для решения конкретных задач и снабженные именем. Функции аналогичны программам в миниатюре и имеют общее название подпрограммы. В общем случае структуру подпрограммы можно представить следующим образом: заголовок функции тело функции Общая форма записи заголовка функции: <тип> <имя> ([<список формальных параметров>]) Здесь <имя> - правильный идентификатор, который используется для обращения к функции; <тип> - тип возвращаемого функцией результата; <список формальных параметров> - включает в себя параметры, необходимые для нормального интерфейса, т. е. позволяет передавать данные в подпрограмму и из подпрограммы. Список формальных параметров необязателен и может отсутствовать. Формальные параметры - это параметры которые мы объявляем в заголовке функции при описании. Фактические параметры - это параметры которые мы подставляем при вызове функции. Определяющим отличием формального от фактического параметра является доступ к самой переменной аргумента (обращение к памяти), в то время как фактический параметр его не имеет, так как копирует в оперативную память его значение, и пользуется именно им. К списку параметров предъявляются следующие требования: количество формальных параметров должно быть равно количеству фактических параметров; порядок следования фактических и формальных параметров должен быть один и тот же; тип каждого фактического должен совпадать с типом соответствующего формального параметра.

26)Передача параметров по значению, по ссылке, по указателю в языке программирования с++. Функции используют память из стека программы. Некоторая область стека отводится функции и остается связанной с ней до окончания ее работы, по завершении которой отведенная ей память освобождается и может быть занята другой функцией. Иногда эту часть стека называют областью активации. Стандартным способом передачи аргументов является копирование их значений, т.е. передача по значению. При этом способе функция не получает доступа к реальным объектам, являющихся ее аргументами. Вместо этого она получает в стеке локальные копии этих объектов. Изменение значений копий никак не отражается на значениях самих объектов. Локальные копии теряются при выходе из функции. Значения аргументов при передаче по значению не меняются. Следовательно, программист не должен заботиться о сохранении и восстановлении их значений при вызове функции. Параметр , передаваемый по указателю, используется для возврата из функции значения, так как в этом случае передается не копия переменной, а её адрес. Таким образом, изменение формального параметра приводит к изменению фактического параметра в вызывающей функции. Параметры, передаваемые по указателю, не требуют дополнительной памяти и дополнительного времени для создания копий параметров. При работе с такими данными, как массивы, структуры, передача параметров возможна только по указателю. передача параметров по ссылке-Ссылочные переменные описываются следующим образом [11]: <тип> &<имя> = <Инициализирующее выражение> Здесь, <тип> - любой тип C++; <имя> - идентификатор переменной ссылочного типа; Инициализирующее выражение> - выражение, определяющее местоположение в памяти.

27)Строки символов в языке программирования с++. В языке C++ нет определенного специального типа для работы со строками. Строка символов рассматривается какмассив элементов типа Char, который заканчивается символом ’\0’ который является символом конца строки. Объявление массива символов: Char <название строки> [длина строки +1]; Для работы со строками существует специальная библиотека, описание которой находится в файле string.h. Рассмотрим наиболее часто используемые функции из этой библиотеки. strlen (s) - определяет длину строки (без нуль-символа), s - указатель на строку символов. strcat (si, s2) - объединяет две строки, si, s2 - указатели на строку символов. Копия второй строки присоединяется к концу первой, и это объединение становится новой первой строкой. Строка s2 остается без изменения, а si должна быть достаточно большой, чтобы разместить две строки, strcmp (si, s2) - сравнивает содержимое двух строк, si, s2- указатели на строку символов. Эта функция возвращает 0, если строки одинаковые. Если строки разные, то функция возвращает разницу в кодах у первой пары несовпадающих символов. strcpy (si, s2) - копирование строки: строка, на которую указывает второй аргумент, копируется в строку, на которую указывает первый. strchr (s, с) - ищет в строке s первое вхождение символа с и возвращает указатель на этот символ, если не обнаружит, то возвращает NULL. strstr (si, s2) - ищет в строке si первое вхождение подстроки s2 и возвращает указатель на найденную подстроку, если не обнаружит, то возвращает NULL.

28) Стpуктуpы и объединения в языке программирования с++. Структуры-тип данных состоящий из фиксированного числа компонентов, называемых полями. Описание структуры Struct <имя типа>{ <сп.полей> } Здесь <имя типа>-правильный идентификатор; <сп.полей>-список полей, представляющий собой последовательность разделов, между которыми ставится точка с запятой. Объединение Служат для сохранения (последовательного) в некоторой области оперативной памяти ПК данных разных типов. Описание union <имя типа>{ <сп.полей> } Правила для описания структур действуют и для объединений

29)Битовые поля в языке программирования с++ Битовые поля - это своеобразная структура, которая позволяет работать с отдельными битами. Назначение битовых полей-обеспечить удобный доступ к отдельным битам данных. Битовые поля не имеют адресов, указателей, ссылок, не могут объединяться в массивы. Синтаксис объявления битовых полей следующий: struct [имя_структуры]  {  тип [имя_битового_поля1]: длина;  тип [имя_битового_поля2]: длина; тип [имя_битового_поляN]: длина; } [имя_объекта];

30)Классы памяти. Область действия имен в языке программирования с++. Класс памяти определяет для каждой переменной область ее действия и время ее существования. Областью действия переменной называется та часть программы где эта переменная известна. Время существования переменной-период в ходе выполнения программы, в течение которого переменная имеет некоторое значение. Области действия переменной и времени ее существования ограничены блоками, функциями и файлами. В языке C++ различают четыре класса памяти: auto-для переменных, описанных внутри функций или блоков, т.е. локальных переменных, по умолчанию назначается класс памяти автоматический. Для автоматической переменной, описанной в начале функции, областью действия будет та функция, где это имя описано. Переменные с этим же именем в других функциях с данной переменной никак не связаны, доступ к таким переменным из внешнего блока не возможен. Это же справедливо и для формальных параметров функции. Память под автоматические переменные отводится при входе в блок, а при выходе из блока-автоматически освобождается. extern-для переменных описанных вне функции, т.е. глобальных переменных, по умолчанию назначается класс памяти extern.Областью действия внешней переменной от точки во входном файле, где она была описана, до конца этого файла. Если внутри блока или функции описана автоматическая переменная, имя которой совпадает с именем глобальной переменной, то внутри блока или функции глобальная переменная маскируется локальной. Это означает, что внутри данного локального блока будет видна именно автоматическая локальная переменная. По умолчанию считается, что все функции внешние. Для внешних переменных память отводится только один раз и остается занятой до окончания выполнения программы. К внешним переменным возможен доступ из других файлов. Для того чтобы внешнюю переменную использовать в другом файле, для неё следует указать спецификатор памяти extern. static-статическая переменная может быть внутренней и внешней. Внутренние статические переменные локальны по отношению к отдельной функции, так же как и автоматические, но в отличии от последних они продолжают существовать, а не возникают и уничтожаются при каждой активизации функции. Это означает, что внутренние статические переменные являются собственной постоянной памятью для функции. Внешние статические переменные известны внутри оставшейся части исходного файла, в котором они описаны, однако в других файлах они не известны. Если необходимо сделать функцию недоступной из других файлов, то ей следует приписать спецификатор static. register-спецификатор register может использоваться только для автоматических переменных. Такой спецификатор говорит о том, что пользователь желает разместить переменные не в оперативной памяти, а в регистрах компьютера. Так как количество регистров ограничено, то в случае избыточности описаний слово register будет игнорировано. Кроме того, нельзя обращаться к адресу таких переменных область действия и время существования регистровых переменных определяется так же, как у автоматических.

31) Текстовые файлы в языке программирования с++. Текстовый файл является файлом последовательного доступа, и его можно представить как набор строк произвольной длины. Каждой программе доступны два стандартных текстовых файла:stdin(клавиатура) и stdout(экpaH) Любые другие файлы становятся доступными после выполнения специальных процедур. Обращение к файлу производится через указатель на файл, который необходимо описать следующим образом: FILE*<имя>; Где <имя>-идентификатор указателя на файл. FILE-имя типа за которым скрывается структура, описывающая некоторые характеристики файла. Функция открытия файла: FILE*fopen(char*filename,char*type) Эта функция возвращает указатель на файл, который открывается. Если файл открыть нельзя, то функция возвращает пустой указатель NULL. сhаг*filename-указатель на строку символов, содержащую имя файла и, если необходимо, путь к нему. chaг*tyре-указатель на строку символов, определяющую тип открываемого файла. Допустимые значения этой переменной: 'r'-открыт уже существующий файл на ввод. "w''-создать новый файл или очистить уже существующий и открыть его на вывод. "а"- создать новый файл для вывода или осуществить вывод в конец уже существующего файла. "г+"-открыть уже существующий файл для обновления, которое будет проводится с начала файла. "w+''-создать новый файл или очистить уже существующий для обновления его содержимого. "а+"-создать новый файл или подстроиться в конец существующего для обновления его содержимого. Для чтения и записи информации из файла или в файл используются такие функции как fprinf, fscanf, fputs, fgets.

32)Структурное программирование в языке программирования с++. Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков. Предложена в 70-х годах XX века Э. Дейкстрой. разработана и дополнена Н. Виртом В соответствии с данной методологией Любая программа представляет собой структуру, построенную из трёх типов базовых конструкций: а)последовательное исполнение — однократное выполнение операций в том порядке, в котором они записаны в тексте программы; б)ветвление - однократное выполнение одной из двух или более операций, в зависимости от выполнения некоторого заданного условия; в)цикл —* многократное исполнение одной и той же операции до тех пор, пока выполняется некоторое заданное условие (условие продолжения цикла). В программе базовые конструкции могут быть вложены друг в друга произвольным образом, но никаких других средств управления последовательностью выполнения операций не предусматривается. Повторяющиеся фрагменты программы (либо не повторяющиеся, но представляющие собой логически целостные вычислительные блоки) могут оформляться в виде т. н. подпрограмм (процедур или функций). В этом случае в тексте основной программы, вместо помещённого в подпрограмму фрагмента, вставляется инструкция вызова подпрограммы. При выполнении такой инструкции выполняется вызванная подпрограмма, после чего исполнение программы продолжается с инструкции, следующей за командой вызова подпрограммы. Разработка программы ведётся пошагово, методом «сверху вниз».

33)Критерии качества программ 1. Корректность: Программа соответствует своему назначению и выполняет заданные функции. 2. Надёжность: При отсутствии внешних по отношению к программе нештатных ситуаций (ошибок выделения памяти, ошибок в библиотечных функциях, аппаратных ошибок, некорректных входных данных и т. д.) она работает правильно. 3.Устойчивость к искажающим воздействиям: Входные данные проверяются на допустимость. 4.Точность вычислений. 5.Эффективность: Количество операций (время работы), зависимость объёма используемой памяти. 6.Эргономичность: При запуске программа выводит на экран краткое описание своего назначения. Выводятся приглашения подсказки для ввода данных, указывающие, какие данные и зачем должны быть введены. В конце работы программа подсказывает, что необходимо сделать для её завершения (нажать любую клавишу). Вывод ответа и вывода ошибки при не верных данных. 7.Читабельность: Исходный код выровнен в соответствии с уровнями вложенности блоков. Каждое выражение, заканчивающееся точкой с запятой, занимает отдельную строку. Длинные текстовые строки разбиты на несколько строк. После запятых, разделяющих параметры функций, поставлены пробелы. Символы операций отделены от операндов пробелами. Отдельные логические блоки в программе разделены пустыми строками. 8.Гибкость: Исходный код снабжён комментариями: прокомментированы программа в целом, переменные и функции. Функциям даны имена, отражающие их назначение. 9.Переносимость: На уровне двоичного кода: возможен перенос только на компьютер 32-битной архитектуры Intel под управлением ОС Windows. На уровне исходного кода: возможен перенос на любой компьютер, если для него есть: 1) отвечающий стандарту языка компилятор C++; 2) реализация стандартной библиотеки ввода-вывода C++; 3) реализация стандартной библиотеки локализации C++; 4) реализация функции getch(). 10)Удобство и простота сопровождения: В программе не используются глобальные переменные и безусловные переходы (оператор goto), которые затрудняют отладку. Вместо директивы using namespace используются объявления using, явно перечисляющие импортируемые объекты. Это позволяет сразу увидеть, что конкретно используется, и избежать засорения области видимости неиспользуемыми объектами.

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