- •Предисловие
- •1.1. Общие сведения о программах, лексемах и алфавите языка
- •1.3. Идентификаторы и служебные слова
- •2. Константы: целые, вещественные (с плавающей точкой), перечислимые, символьные (литерные), строковые (строки или литерные строки)
- •3. Операции. Знаки операций. Унарные, бинарные и тернарные операции. Приоритеты операций.
- •3.1 Знаки операций
- •3.2 Унарные операции
- •3.3 Бинарные операции.
- •3.4 Приоритеты операций
- •4. Переменные. Определения и описания. Спецификатор typedef.
- •4.1 Переменные. Определения и описания.
- •4.2 Класс памяти
- •5. Базовые и производные типы данных. Массивы. Указатели, ссылки и адреса. Структуры. Поля битов. Объединения
- •5.1 Массивы
- •5.2 Указатели, ссылки и адреса объектов
- •5.3 Структуры
- •5.3 Поля битов
- •5.4 Объединения
- •6. Операторы
- •6.1 Оператор выражение
- •6.2 Пустой оператор
- •6.3 Составной оператор
- •6.4 Оператор if
- •If (выражение) оператор-1; [else оператор-2;]
- •6.5 Оператор switch
- •6.6 Оператор break
- •6.7 Оператор for
- •6.8 Оператор while
- •6.8 Оператор do while
- •6.9 Оператор continue
- •6.10 Оператор return
- •6.11 Оператор goto
- •7. Функции
- •7.1 Определения, описания и вызовы функций
- •7.2 Начальные (умалчиваемые) значения параметров.
- •7.3 Функции с переменным количеством параметров
- •7.4 Перегрузка функций.
- •7.5 Ссылки и параметры-ссылки.
- •7.6 Шаблоны функций.
- •8. Технологии программирования.
- •8.1 Введение.
- •8.2 Модульное программирование.
- •8.3 Нисходящее программирование.
- •8.4 Структурное программирование.
- •8.5 Понятия объекта, класса объектов.
- •8.6 Основные понятия объектно-ориентированного программирования: инкапсуляция, наследование и полиморфизм.
- •9.1 Тип данных - класс.
- •9.2 Доступность компонентов класса
- •9.3 Конструктор и деструктор
- •9.4 Компоненты-данные и компоненты-функции. Статические и константные компоненты класса
- •10. Указатели на компоненты класса
- •10.1 Указатели на компоненты- данные.
- •10.2 Указатели на компоненты- функции.
- •10.3 Указатель this
- •11. Друзья классов
- •11.1 Дружественная функция
- •11.2 Дружественный класс
- •12. Наследование
- •12.1 Определение производного класса.
- •12.2 Конструкторы и деструкторы производных классов
- •13. Полиморфизм
- •13.1 Виртуальные функции.
- •13.2 Абстрактные классы
- •14. Шаблоны классов
- •15. Перегрузка операций
- •15.1 Общие сведения о перегрузке стандартных операций
- •15.2 Перегрузка унарных операций
- •15.3 Перегрузка бинарных операций
- •15.5 Перегрузка операции вызова функции
- •15.6 Перегрузка операции присваивания
- •15.7 Основные правила перегрузки операций.
- •16. Обработка исключительных ситуаций
- •16.1 Операторы try, throw, catch
- •16.2 Универсальный обработчик исключений
- •17. Структура Windows-приложения
- •17.2 Структура каркасного Windows-приложения
- •17.3 Главная функция WinMain()
- •17.4 Сообщения Windows
- •17.5 Класс окна. Регистрация и его характеристики
- •17.6 Создание и показ окна
- •17.7 Цикл обработки сообщений
- •17.8 Оконная функция
- •17.9 Завершение выполнения приложения
- •18. Препроцессор
- •18.1 Общие пpеобpазования
- •18.2 Директивы Препроцессора
- •18.3 Подключаемые файлы
- •18.4. Директива '#include'.
- •18.5 Однократно подключаемые файлы
- •18.6 Макросы
- •18.7 Стрингификация
- •18.8 Объединение
- •18.9 Удаление макросов
- •18.10 Условия
- •19. Разработка Windows приложений с использованием библиотеки классов mfc (microsoft foundation class library)
- •19.1 Некоторые сведения о программировании Windows-приложений
- •19.2 Преимущества использования mfc
- •19.4 Библиотека mfc
- •20. Простейшие mfc-приложения
- •20.1 Приложение без главного окна
- •20.2 Приложение с главным окном
- •20.3 Обработка окном сообщений
6. Операторы
Все операторы языка СИ могут быть условно разделены на следующие категории:
условные операторы, к которым относятся оператор условия if и оператор выбора switch;
операторы цикла (for,while,do while);
операторы перехода (break, continue, return, goto);
другие операторы (оператор "выражение", пустой оператор).
Операторы в программе могут объединяться в составные операторы с помощью фигурных скобок. Любой оператор в программе может быть помечен меткой, состоящей из имени и следующего за ним двоеточия.
Все операторы языка СИ, кроме составных операторов, заканчиваются точкой с запятой.
6.1 Оператор выражение
Любое выражение, которое заканчивается точкой с запятой, является оператором. Выполнение оператора выражение заключается в вычислении выражения. Полученное значение выражения никак не используется, поэтому, как правило, такие выражения вызывают побочные эффекты. Заметим, что вызвать функцию, не возвращающую значения можно только при помощи оператора выражения. Правила вычисления выражений были сформулированы выше.
Примеры:
++i;
Этот оператор представляет выражение, которое увеличивает значение переменной i на единицу.
a=cos(b * 5);
Этот оператор представляет выражение, включающее в себя операции присваивания и вызова функции.
a(x,y);
Этот оператор представляет выражение, состоящее из вызова функции.
6.2 Пустой оператор
Пустой оператор состоит только из точки с запятой. При выполнении этого оператора ничего не происходит. Он обычно используется в следующих случаях:
в операторах do, for, while, if в строках, когда место оператора не требуется, но по синтаксису требуется хотя бы один оператор;
при необходимости пометить фигурную скобку.
Синтаксис языка СИ требует, чтобы после метки обязательно следовал оператор. Фигурная же скобка оператором не является. Поэтому, если надо передать управление на фигурную скобку, необходимо использовать пустой оператор.
Пример:
int main (){
{
if (...) goto a; /* переход на скобку */
…;
...;
…;
a:;}
return 0;
}
6.3 Составной оператор
Составной оператор представляет собой несколько операторов и объявлений, заключенных в фигурные скобки:
{
[oбъявление]
оператор;
[оператор];
}
Заметим, что в конце составного оператора точка с запятой не ставится.
Выполнение составного оператора заключается в последовательном выполнении составляющих его операторов.
Пример:
int main ()
{
int q,b;
double t,d;
if (...){
int e,g;
double f,q;
…
}
return (0);
}
Переменные e,g,f,q будут уничтожены после выполнения составного оператора. Отметим, что переменная q является локальной в составном операторе, т.е. она никоим образом не связана с переменной q объявленной в начале функции main с типом int. Отметим также, что выражение стоящее после return может быть заключено в круглые скобки, хотя наличие последних необязательно.
6.4 Оператор if
Формат оператора:
If (выражение) оператор-1; [else оператор-2;]
Выполнение оператора if начинается с вычисления выражения.
Далее выполнение осуществляется по следующей схеме:
если выражение истинно (т.е. отлично от 0), то выполняется оператор-1.
если выражение ложно (т.е. равно 0),то выполняется оператор-2.
если выражение ложно и отсутствует оператор-2 (в квадратные скобки заключена необязательная конструкция), то выполняется следующий за if оператор.
После выполнения оператора if значение передается на следующий оператор программы, если последовательность выполнения операторов программы не будет принудительно нарушена использованием операторов перехода.
Пример:
if (i < j) i++;
else { j = i-3; i++;}
Этот пример иллюстрирует также и тот факт, что на месте оператор-1, так же как и на месте оператор-2 могут находиться сложные конструкции.
Допускается использование вложенных операторов if. Оператор if может быть включен в конструкцию if или в конструкцию else другого оператора if. Чтобы сделать программу более читабельной, рекомендуется группировать операторы и конструкции во вложенных операторах if, используя фигурные скобки. Если же фигурные скобки опущены, то компилятор связывает каждое ключевое слово else с наиболее близким if, для которого нет else.
Примеры:
int main ( )
{
int t=2, b=7, r=3;
if (t>b)
{
if (b < r) r=b;
}
else r=t;
return (0);
}
В результате выполнения этой программы r станет равным 2.
Если же в программе опустить фигурные скобки, стоящие после оператора if, то программа будет иметь следующий вид:
int main ( )
{
int t=2,b=7,r=3;
if ( a>b )
if ( b < c ) t=b;
else r=t;
return (0);
}
В этом случае r получит значение равное 3, так как ключевое слово else относится ко второму оператору if, который не выполняется, поскольку не выполняется условие, проверяемое в первом операторе if.
Следующий фрагмент иллюстрирует вложенные операторы if:
char ZNAC;
int x,y,z;
if (ZNAC == '-') x = y - z;
else
if (ZNAC == '+') x = y + z;
else
if (ZNAC == '*') x = y * z;
else
if (ZNAC == '/') x = y / z;
else ...
Из рассмотрения этого примера можно сделать вывод, что конструкции использующие вложенные операторы if, являются довольно громоздкими и не всегда достаточно надежными. Другим способом организации выбора из множества различных вариантов является использование специального оператора выбора switch.