- •Лекция 1. Введение.
- •Лекция 2-3. Основные понятия. Типы данных.
- •Основные типы данных
- •Лекция 4 Выражения. Классификация операторов
- •Операторы объявлений типов и переменных
- •Операторы вызова функций
- •Математические и логические операции. Условная операция. Математические операции для целочисленных и вещественных вычислений.
- •Математические операции только для целочисленных вычислений
- •Логические операции.
- •Условная операция.
- •Операторы управления.
- •Оператор ветвления.
- •Оператор выбора.
- •Лекция 5. Циклы
- •Цикл while
- •Цикл for
- •Операция "запятая"
- •Цикл с условием на выходе: do while
- •Какой цикл лучше?
- •Другие управляющие операторы: break, continue, goto.
- •Лекция 6. Структуры данных. Массивы. Объединения. Строковые литералы.
- •1. Объявление массива
- •2. Инициализация массивов
- •3. 1 Работа с массивами
- •3.2. Обработка массивов
- •3.3. Ввод/вывод массивов
- •Объединения в c
- •Лекция 7. Функции. Рекурсия. 1 часть.
- •Лекция 8. Функции. Рекурсия. 2 часть.
- •Лекция 9. Указатели.
- •Функции управление памятью
- •Лекция 10. Динамические структуры данных.
- •Лекция 11. Файлы
- •Лекция 13. Объектно-ориентированные модели. Составные части объектного подхода.
- •Лекция 14. Классы. Конструкторы и деструкторы.
- •Лекция 15. Простое наследование классов
- •Лекция 16. Перегрузка функций
- •Лекция 17. Перегрузка операторов
- •Лекция 18. Друзья
- •Лекция 19. Шаблоны. Стандартная библиотека шаблонов
- •Лекция 20. Исключительные ситуации
- •Лекция 3.2. Проектирование структуры приложения. Система меню
- •Лекция 3.3.1. Стандартные и дополнительные компоненты
- •Лекция 3.3.2. Компоненты страницы Win32. Системные компоненты.
- •Лекция 3.4. Проектирование структуры данных
- •Лекция 3.6. Компоненты ActiveX. Графические компоненты
- •3.6.1.Компоненты ActiveX.
- •3.6.2. Графические компоненты
- •Лекция 4.1. Основные понятия языка. Переменные, операции, выражения. Операторы
- •Класс Array
- •Массивы как коллекции
- •Сортировка и поиск. Статические методы класса Array
- •Лекция 4.3. Делегаты, события и потоки выполнения. Работа с файлами библиотеки, атрибуты, директивы
- •Описание делегатов
- •Использование делегатов
- •Паттерн "наблюдатель"
- •Операции
- •Передача делегатов в методы
- •События
- •Многопоточные приложения
- •Класс Thread
- •Асинхронные делегаты
- •Лекция 5.1. Методы конструирования сложных программных систем
- •Inline-ассемблер в Delphi
- •Лекция 5.2. Разработка динамических библиотек
- •Для начала - что это такое ?
- •Далее разберемся: какая может быть польза от dll
Математические и логические операции. Условная операция. Математические операции для целочисленных и вещественных вычислений.
К данным операциям относятся: сложение (+), вычитание (-), умножение (*) и деление (/). Данные операции имеют следующие типы результатов в зависимости от типов операндов:
Тип операндов |
Тип результата |
Целые |
Целый |
Вещественные |
Вещественный |
Смешанные |
Вещественный |
Так как язык «С» является в первую очередь языком системного программирования, то у него упрощена система приведения типов при вычислении. Это накладывает определенные неудобства при вычислении выражений. Рассмотрим пример:
int a,b;
double c;
a = 1; b = 2;
c = a/b;
В данном случае в переменную «с» будет записан ноль, так как операция деления проводится для операндов целого типа, и результат будет иметь целый тип. Для избежания этого необходимо либо вводить дополнительную операцию либо использовать оператор преобразования типа, который имеет следующий синтаксис: (новый_тип)переменная или (новый тип)(выражение). В данном случае предыдущий пример примет вид:
int a,b;
double c;
a = 1; b = 2;
c = (double)a/b;
Следует отметить, что запись c = (double)(a/b); будет ошибочна, так как к вещественному типу будет преобразован результат выражения, а он в данном случае – ноль.
Так как компилятор «С» весьма чувствителен к типам операндов в различных выражениях, то оператор преобразования типов часто используется в программах. Хотя его использование не всегда обязательно. Например, следующие программы можно записать двояко:
int a,b;
double x,y,z;
a = 2; b = 3;
x = a + b; ИЛИ x = (double)(a + b); ИЛИ x = (double)a + b;
y = a – b; ИЛИ y = (double)(a – b); ИЛИ y = (double)a – b;
z = a * b; ИЛИ z = (double)(a * z); ИЛИ z = (double)a * b;
Для сокращения записи на языке С можно использовать усовершенствованные операторы присвоения:
+= - сложить число с заданным числом или выражением;
-= - вычесть из числа заданное число или выражение;
*= - умножить число на заданное число или выражение;
/= - разделить число на заданное число или выражение.
При построении выражений необходимо учитывать приоритет операций и использовать скобки для его изменения.
Математические операции только для целочисленных вычислений
К таким операциям относят:
взятие остатка от деления (%);
операции над битами (&,|,^,!);
операции сдвигов (<<, >>);
операции инкремента (++) и декремента(--).
Операция взятия остатка от деления применима к знаковым и незнаковым целым числам. Она имеет следующий синтаксис:
выражение1 % выражение2;
Присутствует и сокращенная запись оператора присвоения: %=. Ее использование аналогично использованию ранее описанных сокращенных операторов присвоения.
Операции над битами применимы только для незнаковых целых чисел. Операция побитового И (AND) - &, операция побитового ИЛИ (OR) - | и операция побитового ИСКЛЮЧАЮЩЕГО ИЛИ (XOR) - ^ имеют следующий синтаксис:
(выражение1) операция (выражение2)
переменная1 операция переменная2
Операция побитового отрицания (NOT) имеет следующий синтаксис:
~переменная ИЛИ ~(выражение)
Также как и для других операций доступны сокращенные операторы присвоения: &=, |=, ^=, ~=.
Операции сдвигов применимы только для незнаковых целых чисел. Доступны операции нециклических сдвигов влево (<<) и вправо (>>), имеющие следующий синтаксис:
Выражение1 сдвиг выражение2;
Операции инкремента и декремента применимы для знаковых и незнаковых целых чисел и имеют синтаксис:
++переменная; ИЛИ переменная++;
--переменная; ИЛИ переменная--;
В приведенных записях есть различие. Рассмотрим его на примерах:
Пример 1 Пример 2
int a,b; int a,b;
a=2; a=2;
b=a++; b=++a;
printf(“B=%d\n”,b); printf(“B=%d\n”,b);
В первом примере на экран будет выведено число – два, а во втором – три. Это обусловлено тем, что если знак инкремента или декремента стоит перед переменной, то сначала производится ее изменение, а затем присвоение. Если же знак стоит после переменной, то ее изменение производится после присвоения. Эту особенность необходимо учитывать при написании программ. Если операция инкремента или декремента для переменной используется отдельно от других операций, то порядок действий несущественен. Например:
int a; int a;
a=2; a=2;
a++; ++a;
printf(“A=%d\n”,a); printf(“A=%d\n”,a);
В обоих случаях будет выведено одно и тоже значение – три.