Объектно-ориентированное программирование: учебное пособие / В. Н. Казагачев.

Казагачев В.Н. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Казагачев В.Н. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ Учебное пособие Алматы, 2022

УДК 530.2 (035) ББК 35.728 я 73 К 56 Рецензенты: Каскина Д.К, к.п.н, кафедры «Информационных коммуникационных технологий, инженерного дела и охраны труда» Казахско-русского международного университета Бекешев А.З, к.ф-м.н, ассоциированный профессор, директор научно- технического центра «Технопарк», Актюбинского регионального государственного университета им.К.Жубанова Казагачев В.Н. К 56 Объектно-ориентированное программирование. Учебное пособие - Алматы: Эпиграф, 2022. - 232 с. ISBN 978-601-240-228-8 Технология объектно-ориентированного программирования является дальнейшим развитием идей структурного и процедурного (модульного) программирования. Объектно-ориентированное программирование (ООП) является новым подходом, предполагает отказ от старых стереотипов и переход от мышления в терминах данных и процедур к мышлению в терминах объектов, наделенных определенными свойствами и поведением. Базируясь на ООП, программа представляется в терминах состояния и поведения объектов, более близких к рассматриваемой предметной области. Поэтому такая программа легко читается и воспринимается. Однако проектирование объектно-ориентированной программы является более трудоемким из-за необходимости разработки иерархии классов и сложности освоения средств ООП Учебное пособие составлено в соответствии с программой дисциплины и уровне начинающего программиста изложены концепция объектно- ориентированного программирования (ООП) и сведения необходимые для быстрого освоения языка программирования C++. Для студентов специальностей 5ВО11100 - Информатика, 6В06112 - "Вычислительная техника и програмное обеспечение", 6В06111 "Информационные системы". УДК 530.2 (035) ББК 35.728 я 73 ISBN 978-601-240-228-8 © Казагачев В.Н., 2022 © Эпиграф, 2022

ПРЕДИСЛОВИЕ 4 ВВЕДЕНИЕ 6 1. Основы языка С. Алфавит. Основные конструкции языка С. 8 Идентификаторы. Переменные. Ввод-вывод. Базовые типы данных языка С. 2. Основные операторы и операции. Функции преобразования. 17 3. Структурные птпы данных. Массивы. Записи. 29 4. Препроцессор. Символические константы. Использование 34 аргументов. Другие директивы. 5. Программы и функции. Указатели. Указатели и функции. Файлы. 36 6. Структуры и другие типы данных. Инициализация структуры. 44 Доступ к элементам структуры. Указатели на структуры. 7. Классы памяти и разработка программ. Классы памяти и область 51 действия. Переменные. 8. Основы C++. Отличия C++ от С. Объектно-ориентированное 56 программирование на C++. 9. Конструкторы и деструкторы. Создание и инициализация в C++. 67 Конструкторы и массивы объектов. Конструктор копирования. 10. Преобразование данных. Виртуальные функции. Техническая 71 реализация виртуальных функций Дружественные функции и перегрузка операций. 11. Производные классы. Одиночное наследование. Множественное 79 наследование. 12. Шаблоны функции и классов. Парометрический полиморфизм. 84 Параметризация класса vect. Классы для ввода-вывода потоков. 13. Исключения. Исключения в C++. Использование assert.Һ. 92 Использование signal.Һ. 14. Основы программирования для Windows. Программная ерюда. 100 Структура и типы данных в Windows - программах. 15. Библиотека MFC. Простейшие MFC приложения. Соглашения для 109 имен. Классы MFC. Приложения с главным окном и без главного окна. ЛАБОРАТОРНЫЕ РАБОТЫ 124 СРСП 146 СРС 217 ЭКЗАМЕНАЦИОННЫЕ ВОПРОСЫ И ТЕСТЫ 221 ГЛОССАРИЙ 228 ЛИТЕРАТУРА 230

ПРЕДИСЛОВИЕ Технология объектно - ориентированного программирования является дальнейшим развитием идей структурного и процедурного (модульного) программирования. Объектно - ориентированное программирование (ООП) является новым подходом, предполагает отказ от старых стереотипов и переход от мышления в терминах данных и процедур к мышлению в терминах объектов, наделенных определенными свойствами и поведением. Базируясь на ООП, программа представляется в терминах состояния и поведения объектов, более близких к рассматриваемой предметной области. Поэтому такая программа легко читается и воспринимается. Однако проектирование объектно- ориентированной программы является более трудоемким из-за необходимости разработай иерархии классов и сложности освоения средств ООП. Цель преподавания дисциплины: является изучение современного подхода к программированию в объектах, приобретение навыков написания программ на объектно-ориентированных языках, знакомства с методами разработки, тестирования, отладки, анализа, обеспечения безопасности и надежности программ. Задачи изучения дисциплины: Дальнейшее углубленное изучение и освоение языков программирования на базе технологии объектно-ориентированного и обобщенного (с использованием стандартной библиотеки) программирования. В качестве базового используется язык программирования высокого уровня C++. По завершении изучения дисциплины студент должен: - освоить основные понятия, свойства и принципы объектно- ориентированного программирования; - уметь проектировать спецификацию класса, выбирать целесообразную иерархию классов; - освоить стандартную библиотеку языка C++; - уметь использовать методику и средства технологии обобщенного программирования;

уметь проектировать, специфицировать и отладить программу с оформлением документации и использованием диаграммной техники языка UML. Пререквизиты: «Экология», Информатика, математики, математический анализ, дискретная математика, линейная алгебра. Постреквизиты: Языки и технологии программирования, численные методы, методы оптимизации и исследование операций.

Язык C++ относится к классу универсальных языков, поскольку с его помощью можно решить очень широкий круг задач, выполняемых на ЭВМ. Среди современных алгоритмических языков язык C++ является, пожалуй, одним из самых популярных и распространенных, но наиболее эффективно его применение в написании системных программ-трансляторов, операционных систем, экранных интерфейсов, в обслуживании инструментальных средств. В большинстве случаев программы, выполненные на языке C++, по быстродействию сравнимы с программами, написанными на Ассемблере. C++ - язык высокого уровня, поэтому программы, подготовленные на нем, более наглядны и просты в сопровождении. Программы на языке C++ легко переносимы с одного типа компьютера на другой. Основные особенности языка C++ следующие: • в нем реализованы некоторые операции низкого уровня; • его базовые типы данных совпадают с типами данных языка Ассемблера; • несмотря на присутствие таких составных объектов, как массивы и структуры, язык не допускает обращения с ними как с единым циклом; • широко использует указатели на переменные и функции; • удобным средством для передачи параметров являются ссылки; • считается языком для профессионалов, поэтому многое «доверяет» программисту: даже на такие важные действия, как преобразование типов, налагаются лишь незначительные ограничения; • несмотря на широкие возможности, невелик по объему за счет того, что практически все выполняемые функции оформлены в виде подключаемых библиотек. Язык С служит базовой платформой для изучения языка С+т. Эти два языка имеют так много общих черт, что с методической точки зрения оказывается целесообразным первые темы данного

конспекта лекций посвятить научению языка С, а затем перейти к рассмотрению возможностей, предоставляемых языком C++. Язык С был разработан в США сотрудниками Bell Laboratories Б. Керниганом и Д. Ритчи и использован для создания ОС UNIX. Во избежание неоднозначных трактовок окончательный вариант был утвержден в качестве стандарта ANSI С. C++ обязан своим появлением сотруднику Bell Laboratories Б. Страуструппу.

Язык С был разработан в 70-е годы как язык системного программирования. Недостатком С оказалась низкая надежность разрабатываемых программ из-за отсутствия контроля типов. На основе С в 80-е годы был разработан язык C++, вначале названный "С с классами". C++ практически включает язык С и дополнен средствами объектно-ориентированного программирования. Программа на С/Си++ представляет собой один или несколько исходных файлов, которые могут транслироваться раздельно. Результаты трансляции (объектные файлы) объединяются в исполняемый файл редактором связей (компоновщиком). Обычно различают два типа исходных файлов: файлы заголовков и программные файлы. Файлы заголовков содержат описания типов данных и прототипов функций и предназначены для включения в программные файлы перед их компиляцией, их имена, как правило, имеют расширеігие .Һ, например, - stdio.h. Программные файлы содержат описания функций и, возможно, глобальных переменных и констант, их имена принято записывать с расширениями .с или .срр, например, myprog.cpp. Один и тот же файл заголовков может включаться в несколько программных файлов. Каждый файл содержит последовательность так называемых "внешних определений", описывающих типы данных, переменные, константы и функции. АЛФАВИТ, БАЗОВЫЕ ТИПЫ И ОПИСАНИЕДАННЫХ. Опр. Алфавит языка включает практически все символы, имеющиеся на стандартной клавиатуре ПЭВМ: - латинские буквы A...Z, a...z; - цифры 0...9; - знаки операций и разделители: { } [ ] ( ) . , - > & * + - - ! / % ? : ; = < > | # л Опр. Имена, которые присваиваются константам, типам данных, переменным и функциям называются идентификаторами. В Си следующие правила создания идентификаторов: должны начинаться с буквы (a...z,A...Z) или с подчеркивания (_), остальная часть идентификатора должна состоять из букв, подчеркиваний и/или цифр(0...9).

Правило. Компилятор Си рассматривает буквы верхнего и нижнего регистра как различные символы. Опр. Базовые (предопределенные) типы данных объединены в две группы: данные целого типа и данные с плавающей точкой (вещественные). Целые числа представляются целыми типами. Целый тип - это обобщенный тип, представление которого зависит от операционной системы и типа процессора. Целый тип Размер Short int 16 битовое целое Int 16 битовое целое Unsigned long 32 битовое целое без знака Long 32 битовое целое Данные целого типа могут быть обычными целыми со знаком (signed) и целыми без знака (unsigned). По числу разрядов, используемых для представления данного (диапазону значений) различают: - обычные целые (int); - короткие целые (short int); - длинные целые (long int); - символьные данные (char) также рассматриваются как целые и могут быть со знаком и без знака; - константы целого типа записываются как последовательности десятичных цифр, тип константы зависит от числа цифр в записи константы и может быть уточнен добавлением в конце константы букв L или I (тип long), U или и (тип unsigned) или их сочетания-. Пример. 32 І - константа типа int, 5326u - константа типа unsigned int, 45637778 - константа типа long int, 2746L - константа типа long int. Целые константы могут записываться в восьмеричной системе счисления, в этом случае первой цифрой должна быть цифра О, число может содержать только цифры 0 ... 7: Пример. 0777 - константа типа int, 0453377 - константа типа long.

Целые константы можно записывать и в шестнадцатеричной системе счисления, в этом случае запись константы начинается с символов Ох или ОХ: Пример. 0х45Ғ - константа типа int, OxFFFFFFFF - константа типа unsigned long. Опр. Типизированные константы бывают: целые, с плавающей запятой, символьные константы и символьные строки. Константы представляются в виде целого десягичного, восьмиричного или шестнадцатиричного числа. Описание констант начинается с ключевого слова const, далее тип и значение, например const int Nalog=2. Опр. Символьный тип -Char предназначен для хранения одного символа, поэтому его размер - один байт. Символьный тип Размер Unsigner char 8 бит без знака Char 8 бит Для представления строки символов в Си используют массивы типа char. Правило: Константы типа char всегда заключаются в одиночные кавычки, значение константы задается либо знаком из используемого набора символов, либо целой константой, которой предшествует обратная косая черта: 'А', '\33', '\042', \xlBV Имеется также ряд специальных символов, которые могут указываться в качестве значений константы типа char: Чп' - новая строка, V - горизонтальная табуляция, V ' - вертикальная табуляция, V ' - перевод каретки, У - перевод страницы, '\а' - звуковой сигнал, V - одиночная кавычка (апостроф), '\п' - двойная кавычка, 'U'- обратная косая черта.

Для храпения чисел с дробной частью используется вещественный тип.____________ _______________________________ Вещественный тип Размер Float 32 битовое плавающее число Double 64 битовое плавающее число Long double 80 битовое плавающее число Диапазон значений каждого из этих типов зависит от используемых ЭВМ и компилятора. Константы вещественных типов могут записываться в естественной или экспоненциальной форме, и по умолчанию имеют тип double, например, 15.31, 1.43Е- 3, 2345.1е4. При необходимости тип константы можно уточнить, записав в конце суффикс f или F для типа float, суффикс 1или L для типа long double. Опр. Внешнее определение, объявляющее переменные, состоит из необязательного спецификатора класса памяти, спецификаторов типа и списка так называемых деклараторов-инициализаторов, каждый из которых объявляет идентификатор одной переменной и, возможно, значение, присваиваемое переменной при ее объявлении. Внешнее определение заканчивается точкой с запятой: - int i, j, k; // Три переменных типа int без явной инициализации -double х=1, у=2; //Две переменных типа double с начальными значениями 1 и 2 - char c l= '0 '; // Переменная типа char, ее значение - код литеры О Опр. Текст, записанный в этих примерах после знаков //, является комментарием и служит только для документирования программы. Такой комментарий может занимать только одну строку текста. Комментарий, занимающий несколько строк, заключается в специальные скобки /* и */. Наряду с показанными выше константами-литералами, значения которых определяются их представлением в программе, в Си и С++ предусмотрены константы, которым присваиваются собственные имена - именованные константы. В описании именованной константы присутствует описатель const, например, const double Pi = 3.141592653;

Правило: Переменной, идентификатор которой объявлен с описателем const, нельзя присвоить иное значение, чем было установлено при объявлении идентификатора. Инициализирующее значение при объявлении константы является обязательным. Наряду с базовыми целыми и вещественными типами различных размеров в программе могут объявляться и использоваться данные типов, определяемых программистом: указатели, ссылки, агрегаты данных и данные перечислимого типа. Опр. Перечислимый тип применяется для данных целого типа, которые могут принимать ограниченный набор значений. Каждому значению соответствует собственное имя-идентификатор и целое число, значение этого имени. Объявление перечислимого типа строится по схеме: епит идентификатор {список перечисления } деклараторы- инициализаторы; Здесь идентификатор задает имя перечислимого типа, список перечисления состоит из перечислителей, разделенных запятыми. Каждый перечислитель задается идентификатором и, возможно, целым значением типа char или int, например, епит color { RED, GREEN, BLUE } en color; enum lex type { CNST, VAR, OPER=3, FUNC }; Если значение перечислителя не задано, первый из них получает значение 0, а каждый следующий - значение, большее на 1. Вообще любой перечислитель по умолчанию имеет значение на 1 больше предыдущего. Правило: В Си/Си-н- принято записывать идентификаторы перечислителей прописными буквами. Имена перечислителей используется либо как именованные константы, либо для присваивания переменным перечислимого типа. Опр. Пробел, табуляция, перевод строки, возврат каретки, новая страница, вертикальная табуляция и новая строка- это символы, называемые пробельными, поскольку они имеют то же самое назначение, как и пробелы между словами и строками на печатной странице. Эти символы разделяют объекты,

определенные пользователем, такие, как константы и идентификаторы, от других объектов программы. Правило: Компилятор Си игнорирует пробельные символы, если они не используются как разделители или как компоненты константы-символа или строковых литералов. Основные констоукиии С Рассмотрим простую программу печати на экране фразы "Привет от ЭВМ" //include <stdio.h> main() // программа { ргіпгі'("Привет от ЭВМ\п"); } Рассмотрим структуру программы: Си программа # Директивы препроцессора Main Операторы Функция 1( ) Операторы Функция п ( ) Операторы Описания Присваивания Функции Управления Пустые Команда #include подключает файл stdio.h к нашей программе. В файле содержится сведения о функциях ввода-вывода. Файл с 13

именем stdio.h содержит информацию о вводе-выводе. Символ # указывает, что прежде чем транслировать программу необходимо включить в нее функции из файла stdio.h - это так называемая препроцессорная обработка, которая осуществляет некоторую предварительную обработку текста программы перед началом компиляции. Строка mainQ содержит название функции, с которой всегда начинается программа. Пустые скобки обозначают, что эта функции, но она без параметров. После символов // стоят комментарии (для одной строки), (комментариями также называются символы, стоящие между /* и */). Фигурные скобки {} отмечают начало и конец тела программы или функции. Они также применяются для объединения нескольких операторов программы в блок. В строке prin tf ("Привет от ЭВМ\п") содержится стандартная функция печати Си. Строка символов, заключенная в скобки (аргумент), является информацией, передаваемой функции prii\tf() из нашей главной функции main(). Когда выполнение функции будет завершено, управление вернется обратно в исходную программу. Символ \п - обозначает перевод строки на новую строку после печати. Ввод-вывод. Для решения задачи в какой-либо проблемной области необходимо написать программу, в которой должны быть команды, позволяющие: • выделять место для хранения данных; • вводить исходные данные; • обрабатывать исходные данные по алгоритму; • выводить выходные данные. Си содержит функции, необходимые для выполнения этих действий. Вывод. Вывод осуществляется на экран, принтер, винчестер (гибкие диски), порт. Рассмотрим функции вывода на экран. Функиия printf предназначена для этой цели. Формат: printf(<формат>[,аргумент//,...). Формат - это строка в двойных кавычках, которая выводится на экран.

Перед выводом printf заменяет все объекты в строке в соответствии со спецификациями аргумента. Например, printf (" В %d М содержится %d cm\n", У ) ; %d в строке формата - это спецификация аргумента. < Спецификации аргумента начинаются с символа процента (%) и одной буквой, обозначающей тип данных. Спецификации формата: - %d целое число; - %и целое число без знака; - %ld длинное целое число; - %р значение указателя; - % f число с плавающей точкой; - %е число с плавающей точкой в экспоненциальной форме; - %>с символ; - %s строка; - %х целое в шестнадцатеричном формате. Пример. Можно задать ширину поля, например %6d -поле шириной 6. Значение будет напечатано сдвинутым вправо (впереди пробелы), так что общая ширина поля равна 6. Пример. Для формата вещественных чисел можно указать дробную часть, например %8.4f - поле шириной 8, десятичная часть 4. В конце форматной строки можно поставить знаки: - \п перевод строки; - \ / (перевод формата или очистка экрана) - \t (табуляция) - \Ь (забой <-) - \xhhh (вставка символа с кодом ASCII ҺҺҺ, где ҺҺҺсодержит от I до 3 16-ричных цифр) Для вывода можно использовать функции: puts иputchar. Функция puts выводит строку на экран. Пример: ^include <stdio.h> main () { puts("npHBeT, студент"); }

Функция pulchar выводит на экран один символ. Ввод. Ввод в Си в основном осуществляется с клавиатуры, из файла и порта. Функция scanJQ аналогична printf(). Формат: scanf(<формата>[,аргумент1],...). В scanfQ используются те же спецификаторы формата, что и у функции printfOПравило: scanf имеет одну особенность: аргументы, следующие за строкой формата, должны быть адресами, а не значениями (это не распространяется на символьные переменные). scanf("%d", &а); & -операция адреса, которая передает scanf() адреса. Пример. При вводе нескольких переменных через запятую можно использовать запятую внутри формата. Пример: scanf ("%d, %d", &а, &b); Правило: Имеются сложности с вводом строки символов из нескольких слов - введутся только данные до первого пробела. Для решения этой проблемы существует функция gets. #include <stdio.h> main О { char name [60]; printf("KaK вас зовут: "); gets (name); printf ("Привет, %s\n", name); } Функция sets читает все, что набирается до тех пор, пока не нажат Ввод. Литература: 1 осн. [1-56], 2 осн. [2-46] Контрольные вопросы: 1. Перечислите основные типы данных. 2. Назовите функции вывода-вывода. 3. Опишите формат функции printfO 4. Опишите формат функции scanfQ 5. Перечислите спецификации формата.

ОПЕРАЦИИ И ВЫРАЖЕНИЯ Опр. Выражение представляет собой последовательность операндов и знаков операций и служит для вычисления некоторого значения. В качестве операндов в выражении выступают идентификаторы переменных, константы, и строковые литералы, являющиеся первичными выражениями. Выражение, заключенное в круглые скобки, также рассматривается как первичное. Каждая операция предполагает использование определенных типов операндов (целых, вещественных, указателей). Результат вычисления выражения зависит от приоритетов операций. Таблица 2. Приоритет операціги Приоритет Знак операции Назначение Схема 1 Доступ к глобальному имени или имени из другой области : : идентификатор (глобальный) имя области : : имя члена структуры 1 -> Обращение к члену структуры по указателю на структуру указатель -> имя члена структуры 1 Обращение к члену структуры по имени структуры имя структуры . имя члена структуры 1 [] Обращение к элементу массива указатель [ индекс ] 1 о Преобразование типа данного имя типа (выражение ) или (тип) выражение 1 о Вызов функции —------1 :__ функция(аргумешы)

і 2 1 1 ++' Автоувеличение ++ L-значение или L-значениеН-і 1 2 1 - Автоуменьшение —L-значение или L-значение— ! 2 ! ~ Битовое инвертирование ~ целое выражение 2 1 ' і Логическое отрицание ! выражение 2 1 Одноместный минус - выражение ! 2 + Одноместный плюс + выражение 2 & Получение адреса & L-значение 12 1 1 ♦ Разыменование указателя * указатель 12 ! new Выделение динамической памяти new тип данного 2 delete Освобождение памяти delete указатель 2 ! і 1 delete [] Освобождение памяти для массива delete [] указатель 2 sizeof Размер данного sizeof выражение ; 2 Размер типа данного sizeof (имя типа) і 3 ♦ Умножение выражение * выражение ! з і / Деление выражение / выражение

3 % 1Остаток от | деления нацело выражение % выражение 4 ->* Обращение к члену структуры по указателю указатель_на_структуру ->* имя члена структуры- указателя 4 * Обращение к члену структуры по имени структуры имя структуры * имя члена структуры- указателя 5 + Сложение выражение + выражение 5 - Вычитание выражение - выражение 6 « Сдвиг влево целоевыражение « целое выражение 6 » Сдвиг вправо целое выражение » целоевыражение 7 < Меньше выражение < выражение 7 <= Меньше или равно выражение <= выражение 7 > Больше выражение > выражение 7 >= Больше или равно выражение >= выражение 8 = Равно выражение = выражение 8 1= Не равно выражение != выражение 9 & Поразрядная конъюнкция выражение & выражение 10 Л Отрицание равнозначности выражение л выражение 11 1 Поразрядная дизъюнкция выражение | выражение

12 && 1Логическое "И" 1 выражение && выражение ! 13 II Логическое "ИЛИ" выражение 11выражение 14 ? ; Условное выражение выражение ? выражение 1 : выражение2 І15 і - Простое присваивание выражение = выражение !1 15 V І @= Составное присваивание, знак @ - один из знаков операций * /% + - « » & л | выражение @= выражение 16 > Операция следования выражение, выражение ОПЕРАТОРЫ Операция присваивания. Самой общей операцией является присваивание, например, с= а/b. В С присваивание обозначается знаком равенства =, при этом значение справа от знака равенства присваивается переменной слева. Возможно, применять также последовательные присваивания, например: с = а = Ь. Арифметические операторы. В Си выполняются следующие группы арифметических операций: Бинарные: сложение(+), вычитание(-), умножение)*), деление(/), целочисленное деление(%) (для типа int получение остатка). - Унарные: унарный плюс (+), унарный минус (-), адресация (&), косвенная адресация (*), определение размера памяти типа (sizeof). -Логические: и (&&), или (!!), не (!=). - Отношения: а) равно (—), не равно(!>); б) меньше чем (<), больше чем (>), меньше или равно (<=), больше или равно (>=);

- Приращения (++) и уменьшения (—). Например, І++ обозначает, что i=i+l, a І—обозначает і=і-1. - Побитовые операции - позволяют производить операции над. битами. - Комбинированные операции. Правило. В Турбо-Си существуют сокращения при написании выражений, содержащих многочисленные операции: а = а + Ь; сокращается до а += Ь; а = а - Ь; сокращается до а -= Ь; а = а * Ь; сокращается до а *= Ь; а = а / Ь; сокращается до а /= Ь; а = а % Ь; сокращаегся до а %= Ь; - Адресные операции: 1. Операция определения адреса (&) 2. Операция обращения по адресу (*). Правило. Операция & возвращает адрес данной переменной; Пример: #include <stdio.h> main() { int X; char *msg; X = 6+ 1; msg = "Привет\п"; printfC X = %d &X = %p \n",X,&X); printf("*msg = %c msg = %p \n", *msg, msg); } При печати в первой функции печатается два значения: значение X 7 и адрес X (назначаемый компилятором). Во второй функции также печатается два значения: символ, на который указывает msg (П), и значение msg, которое является адресом этого символа (также назначен компилятором). Оператор запятая. Для организации множественных выражений, расположенных внутри круглых скобок используется оператор запятая. Выражение внутри скобок вычисляется слева направо, и все выражение принимает значение, которое было вычислено последним.

char X,Y; (X = Ү, Ү = getchO) присваивает переменной X значение Y, затем считывает символ, вводимый с клавиатуры, и запоминает его в Ү. Результатом всего выражения, в итоге, будет значение введенного с клавиатуры символа. Операторы управления. Опр. Оператор If... дает возможность в зависимости от условия выполнять ту или иную ветвь программы. Синтаксис оператора следующий: I f условие выражение! else выражение!; Условие должно давать результат в виде логического значения истинности или ложности. Выражение 1 будет выполняться если условие истинно. Выражение 2 будет выполняться, если условие ложно. Существует сокращенный вариант оператора'. I f условие выражение1 Пример. Определить, является ли введенное число днем недели, т.е. входит ли число в диапазон от 1 до 7. #include <stdio.h> int А; main() { printf("? "); scanf("%d",&A); if((A < 1) || (A >7)) printf("Error %d\n",A); else printf("OK %d\n",A); }

Выражение условия (А<1) || (А>7) будет давать TRUE, если выполняется А<1 или А>7 - в этом случае выполняется ветка printf('Error \А);, иначе ветка printf('OK ',А);. Существует другой вариант записи оператора If... Пример: ^include <stdio.h> main() { int y,t; printf("? "); scanf("%d",&t); y=(t>0)? t*10: t-10; /* if t>0 y=t*10 elsey=t-10;*/ printf("OK %d\n",y); } Оператор switch., case Оператор switch... case используется в случае, когда необходимо анализировать переменную и в зависимости от ее значения производить те или иные действия. Пример. С клавиатуры вводятся буквы латинского алфавиты. В •зависимости ог буквы произвести те или иные действия. ^include <stdio.h> char А; mainQ { printf("? "); scanf("%c",&A); switch (A) { case 'c': printf(" smoll %c\n",A); break; /* выход из блока */ case T': case 'G': printf(" big %c\n",A); break; default: printf("Error %c\n",A); } }

В данном примере если введен символ с, то выполняется printf(" smoll %с\п",А);, если вводится заглавные буквы F или G, то выполняется printf(" big %с\п",А);, если не один из рассмотренных символов не вводится, го выполняется printf("Error %с\п",А);. Оператор do... while. Для повторения некоторого множества команд несколько раз можно использовать оператор do... while. Пример. #include <stdio.h> main() { int A; do { printf("Zifra? "); scanf("%d",&A); pnntf("Error %d\n",A); } while (!(A = 9)); printffOK %d\n",A); } С клавиатуры вводится число. Выполняется оператор printf("Error %d\n",A);. Далее идет анализ - равно число 9 или нет, если не равно, снова выполняется тело цикла: printf("Zifra? "); scanf("%d",&A); printf(”Error %d\n",A). Если число равно 9, то выполняется оператор printf(”OK %d\n",A); и работа цикла заканчивается. Правило. Главной особенностью оператора do... while является тот факт, что тело цикла, заключенное между операторами do и while выполняется хотя бы один раз, т.е. вначале выполняется тело цикла, а затем идет анализ условия. Таким образом, смысл рассматриваемого оператора заключается в следующем: "Выполняй тело цикла до тех пор, пока истинно условие". Оператор while... в отличие от do... while вначале анализирует условие, а затем выполняет тело цикла.

IIpi/MCf). //include <stdio.h> main() { int A; A = 0; while (A != 9) printf("Zifra? "); scanf("%d",&A); printf("Error %d\n",A); t printt'C'OK %d\n",A); } Оператор for... Оператор for... используется когда известно сколько раз необходимо выполнить тело цикла. Пример. //include <stdio.h> int А; mainQ { for (А = 1; A <= 5; A++) /* A++ означает A=A-1 */ printf("Zifra %d\n",A); i В этом примере А хранит состояние счетчика цикла. Первоначально А:=1. Выполняется оператор printf("Zifra %d\n",A). Далее значение А увеличивается на единицу. Идет анализ А<=5 или нет. Если А больше 5, то цикл заканчивает работу. Если нет, то снова выполняется оператор printf("Ziffa %d\n",A). Пример. Начальное значение переменной больше конечного, а переменная во время работы цикла уменьшается на единицу, //include <stdio.h> int Л; inain() {

RkJQdWJsaXNoZXIy MTExODQxMg==