- •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
Void main(void)
{
W s, *p = &s;
s.a = 4;
printf(“\n Integer a = %d, Sizeof(s.a) = %d”, s.a, sizeof(s.a));
p –> b = 1.5;
printf(“\n Double b = %lf, Sizeof(s.b) = %d”, s.b, sizeof(s.b));
strcpy(p–>s, “Minsk”);
printf(“\n String a = %s, Sizeof(s.s) = %d”, s.s, sizeof(s.s));
printf(“\n Sizeof(s) = %d”, sizeof(s));
}
Результат работы программы:
Integer a = 4, Sizeof(s.a) = 2
Double b = 1.500000, Sizeof(s.b) = 4
String a = Minsk, Sizeof(s.s) = 5
Sizeof(s) = 5
Перечисления – средство создания типа данных посредством задания ограниченного множества значений.
Определение перечисляемого типа данных имеет вид
enum ID_перечисляемого_типа {
список_значений };
Значения данных перечисляемого типа указываются идентификаторами, например:
enum marks {
zero, one, two, three, four, five };
Компилятор последовательно присваивает идентификаторам списка значений целочисленные величины 0, 1, 2,... . При необходимости можно явно задать значение идентификатора, тогда очередные элементы списка будут получать последующие возрастающие значения.
Основные операции с данными перечисляемого типа:
– присваивание переменных и констант одного типа;
– сравнение для выявления равенства либо неравенства.
Практическое назначение перечисления – определение множества различающихся символических констант целого типа.
48. Указатели. Указатели и адреса объектов. Указатели и массивы.
При обработке декларации любой переменной, например double x=1.5; компилятор выделяет для переменной участок памяти, размер которого определяется ее типом (double – 8 байт), и инициализирует его указанным значением (если таковое имеется). Далее все обращения в программе к переменной по имени заменяются компилятором на адрес участка памяти, в котором будет храниться значение этой переменной. Разработчик программы на языке Си имеет возможность определить собственные переменные для хранения адресов участков оперативной памяти. Такие переменные называются указателями.
Итак, указатель – это переменная, которая может содержать адрес некоторого объекта. Простейшая декларация указателя имеет формат
тип * ID_указателя;
Например: int *a; double *f; char *w;
Здесь тип может быть любым, кроме ссылки или битового поля.
Символ «звездочка» относится непосредственно к ID указателя, поэтому для того, чтобы декларировать несколько указателей, ее нужно записывать перед именем каждого из них.
Например, в декларации:
int *a, *b, с;
определены два указателя на участки памяти для целочисленных данных, а также обычная целочисленная переменная с.
Значение указателя равно первому байту участка памяти, на который он ссылается.
Указатели предназначены для хранения адресов областей памяти. В языке Cи имеются три вида указателей – указатели на объект известного типа, указатель типа void и указатель на функцию. Эти три вида различаются как своими свойствами, так и набором допустимых операций. Указатель не является самостоятельным типом данных, так как всегда связан с каким-либо конкретным типом, т.е. указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа.
Указатель типа void применяется в тех случаях, когда конкретный тип объекта, адрес которого требуется хранить, не определен (например, если в одной и той же переменной в разные моменты времени требуется хранить адреса объектов различных типов).
Указателю типа void можно присвоить значение указателя любого типа, а также сравнивать его с любыми другими указателями, но перед выполнением каких-либо действий с участком памяти, на которую он ссылается, требуется явно преобразовать его к конкретному типу.
Указатель может быть константой или переменной, а также указывать на константу или переменную.
С указателями-переменными связаны две унарные операции & и *.
Операция & означает «взять адрес» операнда. Операция * имеет смысл – «значение, расположенное по указанному адресу» (операция разадресации).
Таким образом, обращение к объектам любого типа как операндам операций в языке Cи может производиться:
– по имени (идентификатору);
– по указателю (операция косвенной адресации):
ID_указателя=&ID_объекта; – операция разыменования;
*ID_указателя – операция косвенной адресации.
Операция разадресации, или разыменования, предназначена для доступа к величине, адрес которой хранится в указателе. Эту операцию можно использовать как для получения, так и для изменения значения величины (если она не объявлена как константа).
Унарная операция получения адреса & применима к переменным, имеющим имя (ID), для которых выделены участки оперативной памяти. Таким образом, нельзя получить адрес скалярного выражения, неименованной константы или регистровой переменной (типа register).
Отказ от именования объектов при наличии возможности доступа по указателю приближает язык Си по гибкости отображения «объект – память» к языку ассемблера.
Указатели, как и переменные любого другого типа, могут объединяться в массивы.
Объявление массива указателей на целые числа имеет вид:
int *a[10], y;
Теперь каждому из элементов массива указателей a можно присвоить адрес целочисленной переменной y, например: a[1]=&y;
Чтобы теперь найти значение переменной y через данный элемент массива а, необходимо записать *a[1].
В языке Си можно описать переменную типа «указатель на указатель». Это ячейка оперативной памяти (переменная), в которой будет храниться адрес указателя на некоторую переменную. Признак такого типа данных – повторение символа «*» перед идентификатором переменной. Количество символов «*» определяет уровень вложенности указателей друг в друга. При объявлении указателей на указатели возможна их одновременная инициализация. Например:
int a=5;
int *p1=&a;
int **pp1=&p1;
int ***ppp1=&pp1;
Если присвоить переменной а новое значение, например 10, то одинаковые результаты будут получены в следующих операциях:
a=10; *p1=10; **pp1=10; ***ppp1=10;
Для доступа к области ОП, отведенной под переменную а, можно использовать и индексы. Эквивалентны следующие выражения:
*p1 ~ p1[0] ;
**pp1 ~ pp1[0][0] ;
***ppp1 ~ ppp1[0][0][0] .
Используя указатели на указатели, мы имеем дело с многомерными мас-ми
