
- •1 Структура пэвм. Размещение данных и программ в памяти пэвм. Биты, байты. Программа, машинная команда.
- •2. Состав программного обеспечения техн. Средств. Среда програм-я.
- •3.Среда программирования. Программные модули: исходный, объектный, загрузочный. Трансляторы, интерпретаторы, компоновщик, отладчик.
- •4.Трасляторы,интерпреторы,компоновщик,отладчик. Режимы компиляции и компоновки.
- •5.Особенности программирования и отладки встроенных систем.
- •6. Компоновка программных модулей и запись программной кодировки в целевое устройство.
- •7. Понятие структурного и модульного программирования.
- •8. Функциональная и модульная декомпозиции в программировании
- •9. Операционная система. Файловая система хранения информации.
- •10. Понятие алгоритмов и способы их описания
- •11. Графическое описание алгоритма. Основные символы схемы алгоритма
- •12. Стандартизация графического представления алгоритмов. Программная документация.
- •13. Базовые элементы языка Си. Алфавит. Лексемы. Знаки операций. Литералы. Комментарии.
- •14. Виды и характеристики языков программирования. Виды программных ошибок.
- •15. Идентификаторы и ключевые слова языка Си.
- •16. Структура программы на языке Си.
- •17. Декларация объектов. Основные типы данных
- •18. Категории типов данных (символьные, целые, с плавающей точкой).
- •19.Символьные и целые типы данных
- •20. Вещественные типы данных(с плавающей точкой).
- •21. Преобразование типов (явное и неявное). Приведение типа
- •22. Использование модификаторов при декларации типов данных
- •23 Система счисления. Кодовая таблица ascii. Классификация и преобразование символов
- •24. Константы. Целые константы. Константы с плавающей точкой. Символьные константы. Строки. Null.
- •Константы вещественного типа Данные константы размещаются в памяти в формате double, а во внешнем представлении могут иметь две формы:
- •25. Операции, выражения языка си
- •26.Арифметические операции. Аддитивные и мультипликативные операции
- •27. Условный оператор if.
- •28. Тернарная условная операция ?:.
- •29. Оператор выбора альтернатив switch.
- •30. Составление циклических алгоритмов. Операторы цикла с предусловием и с постусловием.
- •Оператор цикла с постусловием do – while Цикл с постусловием реализует структурную схему, приведенную на рис. 7.1, б.
- •31. Оператор цикла с предусловием и коррекцией for.
- •32. Операторы передачи управления (break, continue, return, goto).
- •33. Побитовые логические операции, операции над битами
- •34. Операции сравнения. Логические операции. Унарные операции.
- •Логические операции
- •35. Операция присваивания. Сокращенная запись операции присваивают.
- •Сокращенная запись операции присваивания:
- •36. Стандартная библиотека языка Си. Математические функции.
- •37. Строки в языке Си. Функции работы со строками.
- •38. Стандартная библиотека языка Си. Ввод данных.
- •39. Стандартная библиотека языка Си. Вывод данных.
- •40. Управляющая строка функций ввода/вывода
- •41. Ввод-вывод потоками.
- •42. Препроцессор. Директивы #include, #define, #if.
- •43. Одномерные массивы. Инициализация одномерных массивов. Ввод и инициализация массива символов.
- •44. Многомерные массивы. Инициализация многомерных массивов
- •Void main()
- •45. Структуры. Вложенные структуры
- •46. Массивы структур. Битовые поля
- •Int day, month, year;
- •47. Объединения. Перечисления
- •Void main(void)
- •Перечисления – средство создания типа данных посредством задания ограниченного множества значений.
- •48. Указатели. Указатели и адреса объектов. Указатели и массивы.
- •49. Операции с указателями: присваивание адреса, определение значения по адресу, присваивание указателей.
- •50. Операции с указателями: сложение и вычитание, инкремент и декремент, сравнение указателей
- •52.Операции typedef и sizeof.
- •53.Функции.Определение функции. Объявление функции и вызов функции. Возвращаемое значение функции.
- •Id_функции (список аргументов);
- •54.Функции. Типы передачи параметров функции (по значению, по адресу).
- •56. Функции. Массивы в качестве параметров функции
- •Void f1(int m[3][4]) {
- •Void fun( int m[ ][3]) {
- •57 Указатели на функции
- •58. Перегрузка функций
- •59 Классы памяти. Области действия объектов
- •60.Работа с файлами.Типы файлов (текстовый и бинарный)
- •61.Работа с файлами. Открытие файла в различных режимах и закрытие файла.
- •62.Работа с файлами. Чтение и запись данных в файл. Посимвольный и построчный ввод-вывод
- •63.Работа с файлами. Чтение и запись данных в файл. Блоковый ввод-вывод
- •Блоковый ввод-вывод.
- •64.Работа с файлами. Чтение и запись данных в файл. Форматированный ввод-вывод
- •65. Работа с файлами. Указатель текущей позиции в файле, его перемещение к нужной позиции.
- •66. Графический режим. Функции черчения и Заполнения
- •67. Графический режим. Функции вывода текста, функции управления цветом (outtext, outtextxy…..)
- •68. Среда разработки программ для микроконтроллеров, особенности написания программ для микроконтроллеров и программирования их периферийных устройств.
- •69. Средства записи программ и отладки для микроконтроллеров. Программаторы, симуляторы и внутрисхемные отладчики.
- •70. Интерфейс программирования jtag
52.Операции typedef и sizeof.
Операция typedef. Любому типу данных, как стандартному, так и определенному пользователем, можно задать новое имя с помощью операции typedef <тип> <новое_имя>;
Введенный таким образом новый тип используется аналогично стандартным типам, например, введя пользовательские типы:
typedef unsigned int UINT;
typedef char M_s[100];
декларации идентификаторов введенных типов имеют вид
UINT i, j; → две переменные типа unsigned int;
M_s str[10]; → массив из 10 строк по 100 символов. Операция sizeof
Данная операция позволяет определить размер объекта по его идентификатору или типу, результатом является размер памяти в байтах (тип
результата int). Формат записи:
sizeof (параметр);
где параметр – тип или ID объекта (не ID функции).
Если указан идентификатор сложного объекта (массив, структура, объединение), то получаем размер всего сложного объекта. Например:
sizeof(int) → размер памяти 2 байта,
int b[5];
sizeof(b) → размер памяти 10 байт.
Наиболее часто операция sizeof применяется при динамическом распределении памяти.
53.Функции.Определение функции. Объявление функции и вызов функции. Возвращаемое значение функции.
В языке Си любая подпрограмма – функция, представляющая собой отдельный программный модуль, к которому можно обратиться в любой момент и (в случае необходимости) передавать через параметры некоторые исходные данные и который (в случае необходимости) способен возвращать один или несколько результатов своей работы. Объявление функции пользователя, т.е. ее декларация, выполняется в двух формах – в форме описания и форме определения. Полное определение функции имеет следующий вид:
тип_результата ID_функции (список параметров) {
код функции return выражение;
}. Вызов функции имеет следующий формат:
Id_функции (список аргументов);
где в качестве аргументов можно использовать константы, переменные, выражения (их значения перед вызовом функции будут определены компилятором).
54.Функции. Типы передачи параметров функции (по значению, по адресу).
В языке Си аргументы при стандартном вызове функции передаются по значению. Это означает, что в стеке, как и в случае локальных данных, выделяется место для формальных параметров функции. В выделенное место при вызове функции заносятся значения фактических аргументов, при этом проверяется соответствие типов и при необходимости выполняются их преобразования. При несоответствии типов выдается диагностическое сообщение. Затем функция использует и может изменять эти значения в стеке.
При выходе из функции измененные значения теряются, т.к. время жизни и зона видимости локальных параметров определяется кодом функции. Вызванная функция не может изменить значения переменных, указанных как фактические аргументы при обращении к данной функции.
В случае необходимости функцию можно использовать для изменения передаваемых ей аргументов. В этом случае в качестве аргумента необходимо в вызываемую функцию передавать не значение переменной, а ее адрес.
При передаче по адресу в стек заносятся копии адресов аргументов, а функция осуществляет доступ к ячейкам памяти по этим адресам и может изменить исходные значения аргументов. Для обращения к значению аргумента-оригинала используется операция «*».
Пример функции, в которой меняются местами значения x и y:
void zam(int *x, int *y)
{ int t = *x;
*x = *y;
*y = t; }
Участок программы с обращением к данной функции:
void zam (int*, int*);
void main (void)
{ int a=2, b=3;
printf(" a = %d , b = %d\n", a, b);
zam (&a, &b);
printf(" a = %d , b = %d\n", a, b); }
При таком способе передачи данных в функцию их значения будут изменены, т.е. на экран монитора будет выведено
a = 2 , b=3
a = 3 , b=2
Если требуется запретить изменение значений какого-либо параметра внутри функции, то в его декларации используют атрибут const, например:
void f1(int, const double);
Рекомендуется указывать const перед всеми параметрами, изменение которых в функции не предусмотрено. Это облегчает, например, отладку программы, т.к. по заголовку функции видно, какие данные в функции изменяются, а какие нет.
55.Функции. Переменные в качестве параметров функции.
Имя функции строится по стандартным правилам записи идентификаторов. Список формальных параметров - это заключенная в круглые скобки последовательность объявлений формальных параметров, разделенных запятыми. Формальные параметры - это переменные, используемые внутри тела функции и получающие значения при вызове функции путем копирования в них значений соответствующих фактических параметров.
Список формальных параметров может заканчиваться многоточием (…) – это означает, что число аргументов функции переменное. Однако предполагается, что функция имеет, по крайней мере, столько обязательных аргументов, сколько формальных параметров задано перед последней запятой в списке параметров.
Такой функции может быть передано большее число аргументов, но над дополнительными аргументами не проводится контроль типов, например,
void fn(unsigned c,float b,int a,…); т. е. число аргументов функции fn³3.
Если функция не имеет параметров, то наличие круглых скобок обязательно, а вместо списка параметров рекомендуется указать слово void.
Порядок и типы формальных параметров должны быть одинаковыми в определении функции и во всех ее объявлениях. Тип формального параметра может быть любым основным типом, структурой, объединением, перечислением, указателем или массивом. Типы фактических аргументов при вызове функции должны быть совместимы с типами соответствующих формальных параметров. Фактические аргументы функции при ее вызове помещаются в специальную область памяти программы, которая называется стек. Память в стеке выделяется в соответствии с типами формальных параметров. Несоответствие типов фактических аргументов и формальных параметров может быть причиной ошибки.
Параметры функции бывают двух видов: параметры-значения и параметры-ссылки. Параметры-значения функции могут рассматриваться как локальные переменные, для которых выделяется память в стеке при вызове функции и производится копирование значений фактических аргументов. При завершении работы функции происходит очистка стека от данных, принадлежащих этой функции, при этом значения переменных теряются. Такой способ передачи параметров в функцию не изменяет значения переменных в вызывающей функции, являющихся фактическими параметрами.
Пример передачи в функцию параметров-значений b и c:
int fn1(int b,float c);
Второй способ передачи параметров представляет собой передачу в функцию адреса фактического аргумента. Обращение к фактическому аргументу по адресу позволяет вызванной функции изменить его значение в вызвавшей эту функцию подпрограмме.
В качестве такого параметра можно использовать указатель на некоторую переменную:
int fn2(int* pb);
Используя операцию косвенной адресации в теле функции, можно изменить значение этой переменной: *pb=6.
Другой способ передачи в функцию адреса переменной – передача параметра по ссылке, при этом в вызванной функции создается псевдоним исходной переменной, форма обращения к такому параметру-ссылке такая же, как и к обычной переменной, а сам параметр передается с помощью адреса, например, int fn3(int &ab); при этом обращение к переменной ab в теле функции fn3() такое же, как к обычной переменной типа int.
Тело функции – это составной оператор, содержащий объявления переменных (если необходимо), и операторы.
Все переменные, объявленные в теле функции без указания класса памяти, по умолчанию имеют класс памяти auto, т. е. являются локальными. При вызове функции локальным переменным отводится память в стеке и производится их явная инициализация. Управление передается первому оператору тела функции и начинается выполнение функции, продолжающееся до тех пор, пока не встретится оператор return или последний оператор тела функции. Управление при этом возвращается в точку, следующую за точкой вызова функции, а локальные переменные становятся недоступными. При новом вызове функции для локальных переменных память распределяется вновь, и поэтому старые значения локальных переменных теряются.