Главная » Все файлы » Просмотр файлов из архивов » Документы » Экзаменационные вопросы ОП

Экзаменационные вопросы ОП, страница 3

2020-02-02СтудИзба

Описание файла

Документ из архива "Экзаменационные вопросы ОП", который расположен в категории "". Всё это находится в предмете "основы программирования" из 1 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. .

Онлайн просмотр документа "Экзаменационные вопросы ОП"

Текст 3 страницы из документа "Экзаменационные вопросы ОП"

*операнд

Операция косвенного доступа (*) является унарной операцией, результат которой — значение объекта, на который указывает операнд. Тип результата определяется типом указателя. Приоритет этой операции определяется по таблице приоритетов операций языка Си (Приоритеты операций). В качестве операнда должно использоваться именующее выражение.

  1. Адресная арифметика.

Адресная арифметика языка Си включает в себя следующие арифметические операции над указателями.

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

  • Целое число можно сложить с указателем или вычесть из него.

  • Указатель можно сравнивать с другим указателем.

  • Указатель можно вычесть из другого указателя.

  • Указателю можно присвоить значение нулевого указателя — константы NULL.

  • Указатель можно сравнивать с нулевым указателем.

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

Тип "указатель на неопределенный тип" (указатель на void) — обобщенный указательный тип. Значение указателя любого типа может быть преобразовано и присвоено указателю на тип void и наоборот без изменения его значения. К такому указателю нельзя применять операцию косвенного доступа. Для применения этой операции указатель на void надо привести к определеннму типу.

  1. Указатель — возвращаемое значение функции.

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

int *f(void)

{

. . .

}

  1. Доступ к аргументам командной строки.

Аргументы командной строки — это множество слов, из которых состоит командная строка.

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

argc (сокращение от argument count)- первый параметр функции main(), имеет смысл счетчика аргументов. Это количество слов, на которые разбивается символами промежутков командная строка.

argv (сокращение от argument vector- вектор аргументов) — второй параметр функции main(). Во время выполнения программы на языке Си слова из командой строки размещены в виде символьных строк в программном адресном пространстве. В этой же памяти запоминается и завершаемый нулем (NULL) массив адресов (указателей) этих строк.

  1. Структуры. Объявление структуры. Инициализация структуры.

Структура — это набор элементов, которые могут иметь различные типы.

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

Агрегатным типом данных называется тип, конструируемый из элементов независимых (возможно различных) типов. Структуры являются одновременно агрегатным и производным типом данных.

Инициализация структуры заключается в присваивании начальных значений элементам структуры. Структуры могут быть проинициализированы при их объявлении.

Инициализирующая запись - это заключенный в фигурные скобки список, элементы которого разделяются запятыми и являются константами. Любые неинициализированные элементы внешних или статических структур по умолчанию равны 0. Значения неинициализированных элементов автоматических структур неопределены.

  1. Доступ к элементу структуры (операция "точка").

Операция доступа к элементу структуры — операция "точка"(.), результат которой — значение элемента структуры.

имя_структуры.имя_элемента_структуры

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

  1. Указатели на структуру. Доступ к элементу структуры (операция "стрелка").

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

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

Ввиду того, что указатели на структуры используются очень часто , в языке Си есть специальная операция доступа к элементу структуры через указатель(->), позволяющая сослаться на элемент структуры, заданный указателем на нее:

имя_указателя->имя_элемента

  1. Массивы структур. Использование структуры как аргумента функции.

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

Для обработки элементов массива структур используется операция доступа к элементу массива (квадратные скобки).

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

  1. Структура - возвращаемое значение функции.

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

Функция может возвращать структурное значение.

  1. Шаги компиляции Си.

Компиляция программы - процесс преобразования исходного текста программы в исполнимый модуль, состоящий из машинных команд.

Компилятор языка Си - составная часть операционной системы, например, ОС UNIX, которая выполняет компиляцию программы, написанной на языке программирования Си.

На рис.1 представлены шаги, через которые проходит программа на Си при ее компиляции.

Рис. 1.  Шаги компиляции Си

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

На следующем шаге программа действительно компилируется и переводится на низкоуровневый язык ассемблера.

Затем ассемблер транслирует ассемблерную программу в объектный код. Хотя объектный код - это машинный код, он еще невыполним.

Исполняемый код строит программа - компоновщик, называемая в ОС UNIX редактором связей. Одна из задач редактора связей состоит в согласовании неразрешенных ссылок.

Неразрешенная ссылка - ссылка на объект, который в данной части программы неопределен. Редактор связей связывает объявления внешних переменных с соответствующими внешними определениями. Другим типом неразрешенной ссылки является вызов функции, не определенной в программе, например, вызов функции printf(). Редактор связей ищет объектный код функции в одной или более библиотеках и включает этот код в исполнимый модуль. Результатом работы редактора связей при отсутствии ошибок является исполнимая программа.

В системе ОС UNIX процесс компиляции может быть остановлен после любого шага путем использования соответствующего флага команды cc, который определяет режим работы команды. Создается файл с тем же именем, что и исходный файл, и окончанием .i, .s или .o, указывающем на тип файла. По умолчанию имя исполнимой программы - a.out.

  1. Препроцессор Си. Поименованные константы.

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

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

Обработка препроцессором выполняется на первом этапе компиляции исходного текста программы.

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

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

#define идентификатор строка-шаблон

  1. Макросы.

Макрос — это короткая процедура, у которой могут быть аргументы.

Макрос определяется с помощью директивы препроцессора #define.

Определение макроса похоже на определение поименованной константы.

#define идентификатор(аргумент[,аргумент]...) строка-шаблон

  1. Файлы заголовков. Организация сложных программ.

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

Файл заголовков projX.h содержит директивы препроцессора define, объявления внешних переменных и оператор переопределения типа typedef, используемые в файлах с расширением .c.

Файл defs.c определяет только внешние переменные, используемые несколькими файлами. Функции не должны включаться в этот файл.

Файл, содержащий функцию main(), часто называют main.c для простоты идентификации.

Функции, определенные в файлах calc.c и bufct1.c взаимосвязаны и являются составными частями программы .

  1. Условная компиляция.

Условная компиляция — это средство препроцессора, которое в зависимости от условия включает в программу операторы языка Си или препроцессора.

Условная компиляция позволяет строить гибкие программы на языке Си. Это средство особенно часто используется при разработке программ, которые должны переноситься на различные процессоры, в различные операционные системы и в прочие операционные среды.

  1. Библиотеки в ОС UNIX.

Библиотека - это набор функций, которые могут быть использованы во многих программах. Компиляторы языка Си оснащены одной или более библиотеками. Кроме того, программист сам может создавать собственные библиотеки. Обычно библиотека - это файл, содержащий объектный код различных функций, представленный в специальном формате.

Ниже приводится список библиотечных функций, которые обычно поставляются вместе с компилятором Си:

  • Ввод-вывод

  • Обработка строк

  • Обработка символов

  • Распределение памяти

  • Функции общего назначения

  • Математические функции

  1. Буферизованный ввод-вывод.

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

При чтении из дискового файла, блок данных копируется с диска в пользовательский буфер. Многими операционными системами используется также промежуточный "системный буфер". Этот блок данных, называемый также физическим блоком или блоком ввода-вывода, имеет объем, заданный поименованной константой BUFSIZ, определенной в файле заголовков stdio.h. Операции чтения из файла фактически читают данные из этого буфера. При исчерпании буфера вновь выполняется чтение с диска, и буфер пополняется. Обращение к диску лишь при необходимости обеспечивает существенную экономию времени. Программисты могут читать из файла множеством способов (посимвольно, построчно и т.д.) и не задумываться о минимизации количества обращений к диску. Стандартный пакет ввода-вывода гарантирует решение этой проблемы.

  1. Файл. Открытие и закрытие файла.

Функция fopen() — функция открытия файла.

FILE *fopen(const char *имя_файла, const char *тип)

Первым аргументом функции fopen() является адрес строки, содержащей путевое имя файла. Второй аргумент—это адрес строки, определяющей тип работы с открываемым файлом.

Заданный именем файл открывается в соответствии с указанным типом. Тип может принимать следующие значения:

  • "r" — текстовый файл открывается для чтения (read);

  • "w"- текстовый файл создается для записи; старое содержимое, если оно было, выбрасывается (write);

  • "a" — текстовый файл открывается или создается для записи в конец файла (add);

  • "r+" — текстовый файл открывается для исправления, т.е. для чтения и записи;

  • "w+"- текстовый файл создается для исправления, старое содержимое, если оно было, выбрасывается;

  • "a+" — текстовый файл открывается или создается для исправления уже существующей информации и добавления новой в конец файла.

  • Функция fclose() - стандартная функция ввода-вывода языка Си, с помощью которой осуществляется закрытие файла.

  • int fclose (FILE *stream)

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

  1. Файл. Функции чтения-записи.

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

Когда аргументом функции является указатель на FILE, этот указатель в описании функции называют потоком.

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

#include

  1. Произвольный доступ к файлу.

Если не выполнялись специальные действия, операции чтения и записи обращаются к последовательным байтам в файле. Позиция в файле для следующей операции чтения или записи хранится во внутреннем указателе — поле в структуре FILE, автоматически устанавливаемом и изменяемом стандартными функциями ввода-вывода. Однако можно изменить место следующего чтения или записи, используя функцию fseek(), модифицирующую внутренний указатель.

Объявление прототипа функции fseek():

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
428
Средний доход
с одного платного файла
Обучение Подробнее