- •1.Скалярные типы данных
- •Unsigned int 2/4 байта
- •2.Векторные типы данных
- •3. Неявное и явное преобразование типов.
- •Преобразования при вычислении выражений
- •4. Понятие истины и логические операции. Сравните с Паскалем, приведите примеры.
- •5. Типы циклов Оператор for
- •7. Указатели и операции над указателями
- •Оператор do while
- •6. Операторы ветвления
- •8. Массивы и указатели
- •9. Классы памяти
- •10. Структура и объединение. Доступ к полям. Сходства и отличия. Приведите примеры.
- •Объединения (смеси)
- •11. Объявление, прототип и определение функций. Приведите примеры.
- •12. Список формальных и фактических параметров.
- •13. Механизмы передачи формальных параметров в функцию. Приведите примеры.
- •14. Возвращаемое значение функции
- •15 Препроцессор языка с. Как и когда происходит макроподстановка.
- •16 Статистические и динамические объекты. Динамический захват памяти. Локальный и глобальный heap.
- •17. Потоковый и префиксный доступ к файлам.
- •18 Основные понятия текстового и графического режимов.
- •19. Использоване модификаторов near, far, huge. Приведите примеры.(аЯиП)
Оператор do while
Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:
do тело while (выражение);
Схема выполнения оператора do while
1. Выполняется тело цикла (которое может быть составным оператором).
2. Вычисляется выражение.
3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор. Если выражение истинно, то выполнение оператора продолжается с пункта 1.
Чтобы прервать выполнение цикла до того, как условие станет ложным, можно использовать оператор break.
Операторы while и do while могут быть вложенными.
В Паскале: repeat [тело] until [усл]; while [усл] do [тело]; for i:=1 to [усл] do [тело];
6. Операторы ветвления
Условный оператор
Есть два вида условных операторов
if ( выражение ) оператор
if ( выражение ) оператор else оператор
В обоих случаях вычисляется выражение, и если оно не ноль, то выполняется первый подоператор. Во втором случае второй подоператор выполняется, если выражение есть 0.
Оператор switch
Оператор switch вызывает передачу управления на один из нескольких операторов в зависимости от значения выражения. Он имеет вид
switch ( выражение ) оператор
Выражение должно быть целого типа или типа указателя. Любой оператор внутри оператора может быть помечен одним или более префиксом case следующим образом:
case константное_выражение :
где константное выражение должно иметь тот же тип что и выражение- переключатель; производятся обычные арифметические преобразования. В одном операторе switch никакие две константы, помеченные case, не могут иметь одинаковое значение. Может также быть не более чем один префикс оператора вида default :
Когда выполнен оператор switch, проведено вычисление его выражения и сравнение его с каждой case константой. Если одна из констант равна значению выражения, то управление передается на выражение, следующее за подошедшим префиксом case. Если никакая case константа не соответствует выражению, и есть префикс default, то управление передается на выражение, которому он предшествует. Если нет соответствующих вариантов case и default отсутствует, то никакой из операторов в операторе switch не выполняется. Префиксы case и default сами по себе не изменяют поток управления, который после задержки идет дальше, перескакивая через эти префиксы. Для выхода из switch используется break, Обычно зависящий от switch оператор является составным. В голове этого оператора могут стоять описания, но инициализации автоматических и регистровых переменных являются безрезультатными.
Оператор goto
Можно осуществлять безусловную передачу управления с помощью оператора
goto идентификатор ;
Идентификатор должен быть меткой , расположенной в текущей функции.
7. Указатели и операции над указателями
Указатель - это адрес памяти, распределяемой для размещения идентификатора (в качестве идентификатора может выступать имя переменной, массива, структуры, строкового литерала). В том случае, если переменная объявлена как указатель, то она содержит адрес памяти, по которому может находится скалярная величина любого типа. При объявлении переменной типа указатель, необходимо определить тип объекта данных, адрес которых будет содержать переменная, и имя указателя с предшествующей звездочкой (или группой звездочек). Формат объявления указателя:
спецификатор-типа [ модификатор ] * описатель .
Спецификатор-типа задает тип объекта и может быть любого основного типа, типа структуры, смеси (об этом будет сказано ниже).
Для того, чтобы можно было выполнить арифметические и логические операции над указателями или над объектами, на которые они указывают, необходимо при выполнении каждой операции явно определить тип объектов. Такие определения типов может быть выполнено с помощью операции приведения типов.
В качестве модификаторов при объявлении указателя могут выступать ключевые слова const, near, far, huge. Ключевое слово const указывает, что указатель не может быть изменен в программе. Размер переменной объявленной как указатель, зависит от архитектуры компьютера и от используемой модели памяти, для которой будет компилироваться программа. Указатели на различные типы данных не обязательно должны иметь одинаковую длину.
Для модификации размера указателя можно использовать ключевые слова near, far, huge.
Примеры:
unsigned int * a; /* переменная а представляет собой указатель на тип unsigned int (целые числа без знака) */
double * x;/* переменная х указывает на тип данных с плавающей точкой удвоенной точности */
Над указателями можно выполнять унарные операции: инкремент и декремент. При выполнении операции ++ и – значение указателя увеличивается или уменьшается на длину типа, на который ссылается используемый указатель. Пример:
int *ptr, a[10];
ptr = &a[5];
ptr++; /равно адресу элемента a[6]/
ptr--; /равно адресу элемента a[5]/
В бинарных операциях сложения и вычитания могут участвовать указатель и величина типа int. При этом результатом операции будет указатель на исходный тип, а его значение будет на указанное число элементов больше или меньше исходного.
Пример:
int *ptr1, *ptr2, a[10];
int i=2;
ptr1=a[i+4]; /* равно адресу элемента a[6] */
ptr2=ptr1-i; /* равно адресу элемента a[4] */
В операции вычитания могут участвовать два указателя на один и тот же тип. Результат такой операции имеет тип int и равен числу элементов исходного типа между уменьшаемым и вычитаемым, причем если первый адрес младше, то результат имеет отрицательное значение.
Пример: int *ptr1, *ptr2, a[10];
int i;
ptr2=a+4;
ptr1=a+9;
i=ptr1-ptr2; /* равно 5 */
i=ptr2-ptr1; /* равно -5 */
Значения двух указателей на одинаковые типы можно сравнивать в операциях ==, !=, <, <=, >, >= при этом значения указателей рассматриваются просто как целые числа, а результат сравнения равен 0 (ложь) или 1 (истина). Пример: int *ptr1, *ptr2, a[10];
ptr1=a+5;
ptr2=a+7;
if (prt1>ptr2) a[3]=4;
В данном примере значение ptr1 меньше значения ptr2 и поэтому оператор a[3]=4 не будет выполнен.
