- •Вопросы к экзамену по дисциплине «программирование технических средств»
- •1 Основные понятия и определения
- •2 В состав базового программного обеспечения входят:
- •3 Программные модули
- •8 Функциональная и модульная декомпозиции
- •9 Операционная система
- •12 В ходе разработки программы должен быть подготовлен следующий графический материал:
- •13 Алфавит языка
- •15 Идентификаторы и ключевые слова
- •14 Различают также следующие виды языков программирования:
- •17 Декларация объектов
- •18 Данные целого типа (int)
- •19 Данные целого типа (int)
- •20 Данные вещественного типа (float, double)
- •21 Преобразование типов (явное и неявное). Приведение типа
- •24 Константы. Целые константы. Константы с плавающей точкой. Символьные константы. Строки.
- •25 Операции, выражения
- •26 Арифметические операции. Аддитивные и мультипликативные операции.
- •28 Условная операция «? :»
- •29 Оператор выбора альтернатив (переключатель)
- •30 Составление циклических алгоритмов. Операторы цикла с предусловием и с постусловием.
- •31 Оператор цикла с предусловием и коррекцией for
- •32 Оператор безусловного перехода goto
- •33 Побитовые логические операции, операции над битами
- •34 Операции сравнения. Логические операции. Унарные операции.
- •35 Операция присваивания. Сокращенная запись операции присваивания.
- •36 Стандартная библиотека языка Си. Математические функции.
- •37 Строки в языке Си. Функции работы со строками.
- •38 Функции ввода информации
- •39 Функции вывода данных
- •40 Управляющая строка функций ввода/вывода.
- •41 Ввод-вывод потоками
- •42 Препроцессор. Директивы #include, #define, #if…
- •43 Одномерные массивы. Инициализация одномерных массивов. Ввод и инициализация массива символов.
- •44 Многомерные массивы
- •45 Структуры. Вложенные структуры
- •46 Массивы структур. Битовые поля
- •47 Объединения. Перечисления
- •48 Указатели. Указатели и адреса объектов. Указатели и массивы.
- •49 Операции с указателями: присваивание адреса, определение значения по адресу, присваивание указателей Операция получения адреса
- •50 Операции с указателями: сложение и вычитание, инкремент и декремент, сравнение указателей
- •51 Работа с динамической памятью. Динамические массивы.
- •52 Операции typedef и sizeof
- •53 Функции. Определение функции, объявление функции и вызов функции. Возвращаемое значение функции.
- •54 Функции. Типы передачи параметров функции (по значению, по адресу, по ссылке).
- •55 Функции. Переменные в качестве параметров функций.
- •56 Функции. Массивы в качестве параметров функций.
- •57 Указатели на функции.
- •58 Перегрузка функций.
- •59 Классы памяти. Области действия объектов
- •60 Работа с файлами. Типы файлов (текстовый и бинарный). Дескриптор файла (“указатель на файл”). Режимы работы с файлами.
- •61 Работа с файлами. Открытие файла в различных режимах и закрытие файла.
- •62 Работа с файлами. Чтение и запись данных в файл. Посимвольный и построчный ввод-вывод
- •63 Работа с файлами. Чтение и запись данных в файл. Блоковый ввод-вывод
- •64 Работа с файлами. Чтение и запись данных в файл. Форматированный ввод-вывод
- •65 Работа с файлами. Указатель текущей позиции в файле, его перемещение к нужной позиции.
- •Заполнение:
- •67 Графический режим. Функции вывода текста, функции управления цветом. (outtext, outtextxy, setbkcolor, setcolor, settextjustify, settextstyle, textheight, textwidth)
- •68 Среды разработки программ для микроконтроллеров. Особенности написания программ для микроконтроллеров и программирования их периферийных устройств.
- •69 Средства записи программ и отладки для микроконтроллеров. Программаторы, симуляторы и внутрисхемные отладчики.
- •70 Интерфейсы программирования и отладки встроенных систем. Интерфейс jtag
52 Операции typedef и sizeof
Операция typedef вводит новое имя (синоним) для существующего типа. С помощью typedef может быть объявлен любой тип, включая типы функции или массива. typedef double (* MATH)(); // MATH - новое имя типа, представляющее указатель на //функцию, возвращающую значения типа double MATH cos; // cos - это указатель на функцию, возвращающую значения типа double
Можно привести эквивалентное объявление - double (* cos)(); typedef char SIMB[40]; //SIMB - массив из сорока символов SIMB person; //переменная person - тоже массив из сорока символов
Это эквивалентно объявлению - char person; Помимо этого, имена типов могут использоваться еще и в списке формальных параметров (в объявлении функций), в операциях приведения типов и в операции sizeof.
typedef способен весьма облегчить нам жизнь. И не только нам...
typedef можно использовать, чтобы значительно упростить синтаксис сложных объявлений (воззаботимся же, братия, о тех бедных программистах, которые приИдут после нас). Используя typedef, можно сделать простым даже объявление стандартной функции set_new_handler:
typedef void (*new_handler)();
new_handler set_new_handler(new_handler);
Операция sizeof
Данная операция позволяет определить размер объекта по его идентификатору или типу, результатом является размер памяти в байтах (тип результата int). Формат записи:
sizeof (параметр); где параметр – тип или ID объекта (не ID функции).
Если указан идентификатор сложного объекта (массив, структура, объединение), то получаем размер всего сложного объекта. Например: sizeof(int) → размер памяти 2 байта,
int b[5]; sizeof(b) → размер памяти 10 байт. Наиболее часто операция sizeof применяется при динамическом распределении памяти.
53 Функции. Определение функции, объявление функции и вызов функции. Возвращаемое значение функции.
В языке Си любая подпрограмма – функция, представляющая собой отдельный программный модуль, к которому можно обратиться в любой момент и (в случае необходимости) передавать через параметры некото-
рые исходные данные и который (в случае необходимости) способен возвращать один или несколько результатов своей работы.
Декларация функции
Как объект языка Си, функцию необходимо объявить. Объявление функции пользователя, т.е. ее декларация, выполняется в двух формах – в форме описания и форме определения.
Описание функции заключается в приведении в начале программного файла ее прототипа. Прототип функции сообщает компилятору о том, что далее в тексте программы будет приведено ее полное определение
(полный ее текст): в текущем или другом файле исходного текста либо находится в библиотеке.
В стандарте языка используется следующий способ декларации функций:
тип_результата ID_функции(тип переменной 1,…, тип переменной N); Заметим, что идентификаторы переменных в круглых скобках прототипа указывать необязательно, так как компилятор языка их не обрабатывает. Описание прототипа дает возможность компилятору проверить соответствие типов и количества параметров при вызове этой функции.
Пример описания функции fun со списком параметров:
float fun(int, float, int, int);
Полное определение функции имеет следующий вид:
тип_результата ID_функции (список параметров) {
код функции
return выражение;
}
Тип результата определяет тип выражения, значение которого возвращается в точку ее вызова при помощи оператора return. Если тип функции не указан, то по умолчанию предполагается тип int.
Список параметров состоит из перечня типов и идентификаторов параметров, разделенных запятыми.
Функция может не иметь параметров, но круглые скобки необходимы в любом случае.
Если функция не возвращает значения, она описывается как функция типа void и в данном случае оператор return не ставится.
В функции может быть несколько операторов return, но может и не быть ни одного. В таких случаях возврат в вызывающую программу происходит после выполнения последнего в функции оператора.
Пример функции, определяющей наименьшее значение из двух целочисленных переменных:
int min (int x, int y) {
return (x<y)? x : y;
}
Все функции, возвращающие значение, должны использоваться в правой части выражений языка Си, иначе возвращаемый результат будет утерян. Если у функции отсутствует список параметров, то при декларации
такой функции желательно в круглых скобках также указать ключевое слово void. Например, void main(void).
В языке Си каждая функция – это отдельный блок программы, вход в который возможен только через вызов данной функции.
Наличие определения функции делает излишним запись ее описания в остатке файла исходного текста.
Вызов функции
Вызов функции имеет следующий формат:
ID_функции (список аргументов);
где в качестве аргументов можно использовать константы, переменные, выражения (их значения перед вызовом функции будут определены компилятором).
Аргументы списка вызова должны полностью совпадать со списком параметров вызываемой функции по количеству, порядку следования и типам соответствующих им параметров. Связь между функциями осуществляется через аргументы и возвращаемые функциями значения. Ее можно осуществить также через внешние, глобальные переменные.
Функции могут располагаться в исходном файле в любом порядке. А сама исходная программа может размещаться в нескольких файлах.
В языке Си аргументы при стандартном вызове функции передаются по значению, т.е. в стеке выделяется место для формальных параметров функции и в это выделенное место при ее вызове заносятся значения
фактических аргументов. Затем функция использует и может изменять эти значения в стеке. При выходе из функции измененные значения теряются. Вызванная функция не может изменить значения переменных, указанных как фактические аргументы при обращении к данной функции.
В случае необходимости функцию можно использовать для изменения передаваемых ей аргументов. В этом случае в качестве аргумента необходимо в вызываемую функцию передавать не значение переменной, а
ее адрес. А для обращения к значению аргумента-оригинала использовать операцию «*».
