Состав высокоуровневого языка программирования СИ Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ГОУ ВПО.

Презентация:



Advertisements
Похожие презентации
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ Раздел 1. Базовые конструкции и типы данных языка Си Старший преподаватель Кафедры ВС, к.т.н. Поляков Артем Юрьевич.
Advertisements

Лекция 2 С => C++ => C# Большие и маленькие буквы различаются (main, Main, MAIN, mAin – разные имена) После каждого оператора ставится точка с запятой.
Элементы языка СИ Средства для написания простейших программ.
Данные в программах и алгоритмах Программы и их алгоритмы пишутся для обработки данных. Чтобы реализовать алгоритм, программам необходимо работать с данными.
Матемтааки ЕТ СТ 2 класс Шипилова Наталия Викторовна учитель начальных классов, ВКК Шипилова Наталия Викторовна учитель начальных классов, ВКК.
Идентификаторами в языке Си являются последовательности букв и цифр, начинающиеся с буквы, причем символ подчеркивания рассматривается компилятором как.
Таблица умножения на 8. Разработан: Бычкуновой О.В. г.Красноярск год.
Урок 2. Информационные процессы в обществе и природе.
Разработка программного обеспечения для сигнальных процессоров TMS320C64xx в IDE Code Composer Studio Часть II. Язык программирования С. Основные понятия.
Фрагмент карты градостроительного зонирования территории города Новосибирска Масштаб 1 : 4500 к решению Совета депутатов города Новосибирска от
Объектно-ориентированный язык программирования. Переменная - эта поименованная ячейка памяти, хранящая какое-либо одно значение (одно число, один фрагмент.
Лекция 4 Программирование на Паскале. Элементы языка Турбо Паскаль 7.0. Типы данных. Управляющие конструкции.
Работа учащегося 7Б класса Толгского Андрея. Каждое натуральное число, больше единицы, делится, по крайней мере, на два числа: на 1 и на само себя. Если.
Глава 6. УПРАВЛЯЮЩИЕ СТРУКТУРЫ Оператор присваивания Простой и составной операторы Условный оператор Оператор множественного выбора Оператор цикла с предусловием.
Переменные и операторы УРОК 2. Переменные ПЕРЕМЕННАЯ – ?... контейнер для хранения данных. Переменная имеет имя – это….? последовательность букв, цифр.
Масштаб 1 : Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
Язык программирования Pascal Выполнила: ученица 10А класса Елизавета Тельнова Г. Королев 2012 год.
Язык программирования Pascal. Программа это упорядоченный список команд, необходимых для решения некоторой задачи. Языком программирования называют систему.
Операции Условная операция ? : Если истинно, то результатом будет, иначе. Например, int x = a < b ? a : b вычисляет минимум из a и b.
Масштаб 1 : Приложение 1 к решению Совета депутатов города Новосибирска от
Транксрипт:

Состав высокоуровневого языка программирования СИ Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем ПРОГРАММИРОВАНИЕ ЯЗЫКИ ПРОГРАММИРОВАНИЯ

Состав языка СИ 2 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Естественный язык Естественный язык Алфавит Слова Словосочетания Предложения Лексемы Выражения Операторы Язык программирования Язык программирования Алфавит

Алфавит языка СИ 3 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» прописные и строчные буквы латинского алфавита: A... Z, a... z цифры: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 специальные знаки: ", { } | [ ] ( ) + - / % \ ; '. : ? > < = _ & ! * # ~ ^ неотображаемые символы: пробел, табуляция, переход на новую строку В комментариях, строках и символьных константах могут использоваться другие литеры (например, русские буквы).

Состав языка СИ 4 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Естественный язык Естественный язык Алфавит Слова Словосочетания Предложения Лексемы Выражения Операторы Язык программирования Язык программирования Символы

Лексемы языка СИ 5 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Из символов алфавита составляются лексемы - минимальные единицы языка, имеющие самостоятельный смысл: константы; имена объектов; ключевые слова; знаки операций; разделители (скобки, точка, запятая, пробельные символы). Идентификаторы

Целые константы 6 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ФорматПримеры Десятичные константы: последовательность десятичных цифр (0…9), не начинающаяся с нуля (если это не ноль). 5, 0, Восьмеричная константа: ноль, за которым следуют восьмеричные цифры (0…7) 05, Шестнадцатеричная константа: 0х или 0Х, за которым следуют шестнадцатеричные цифры (0..9, A..F) 0x5, 0x65535, 0xFA15, 0xfcab

Целые константы (вопросы) 7 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» x 10 x2x В какой системе счисления записаны следующие константы: 1)0х120; 2)121; 3)0122. Запись в программе указанных значений в восьмеричной СС: 1) = ? 2) = ? 3) = ?

Целые константы (ответы) 8 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» x 10 x2x В какой системе счисления записаны следующие константы: 1)0х120; - шестнадцатеричное 2)121; - десятичное 3) восьмеричное Запись в программе указанных значений в восьмеричной СС: 1) = = 077 2) = = ) = = 044

Вещественные константы 9 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ФорматПримеры Десятичный формат:. дробная ИЛИ целая часть могут быть опущены 2.5, 2.,.65 Экспоненциальный формат:. {E | e} a.bEc = a.b10 c Могут быть опущены либо целая часть, либо дробная, но не обе сразу. 0.5e2 = E-1 = 10

Вещественные константы (вопросы) 10 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1. Запишите следующие числа в экспоненциальном формате: 1)2,5; 2)1,635; 3)0, ; 4)1, ; 5) ; 2. Запишите следующие числа в десятичном формате: 1)50E-4; 2)5E3; 3)1.345E5; 4)1.1E-5;

Вещественные константы (ответы) 11 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1. Запишите следующие числа в экспоненциальном формате: 1)2,5; - 2.5E0, 0.25E1, 25E-1 2)1,635; E-3,.1635E1 3)0, ; - 1E-8 4)1, ; - 1, E0 5) ; - 1.5E10 2. Запишите следующие числа в десятичном формате: 1)50E-4; )5E3; )1.345E5; )1.1E-5;

Символьные константы 12 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ФорматПримеры Символьные константы: Несколько символов, заключенных в одинарные апострофы. Символьная константа соответствует записи в таблице символьной кодировки! Символ обратной косой черты используется для представления: кодов, не имеющих графического изображения (например, \n – перевод на нов. строку); символов апострофа, обратной косой черты, кавычки; любого символа с помощью его 16-ричного или 8-ричного кода, например, \073, \0xF5. 'a', 'B', '\n', '\'' '\\' '\"' '\x30' ~ '0' '\061' ~ '1' Последовательности, начинающиеся с '\' называют управляющими, или escape-последовательностями.

Перевод символьного представления в численное 13 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» A.B.C.D.E.F : ; ?... Коды цифр располагаются непрерывно друг за другом Если известно, что переменная С содержит код цифры, то получить числовое представление цифры можно отняв от значения С код 0-ля (тип char – целочисленный!): int i = C – '0'; // или i = C – 0x30; i = C – 48; Первый вариант наиболее предпочтителен, так как обладает большей информативностью

Символьные константы (вопросы) 14 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» A.B.C.D.E.F 0.NULSOHSTXETXEOTENQACKBELBSTABLFVTFFCRSOSI 1.DLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS 2. !"#$ %&'()*+,./ : ; ? 5.PQRSTUVWXYZ[\]^_ 6.`abcdefghijklmno 7.pqrstuvwxyz{|}~DEL Какие символы закодированы следующими escape-последовательностями: 1) \x65; 2) \011; 3) \x3C;

Символьные константы (вопросы) 15 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» A.B.C.D.E.F 0.NULSOHSTXETXEOTENQACKBELBSTABLFVTFFCRSOSI 1.DLEDC1DC2DC3DC4NAKSYNETBCANEMSUBESCFSGSRSUS 2. !"#$ %&'()*+,./ : ; ? 5.PQRSTUVWXYZ[\]^_ 6.`abcdefghijklmno 7.pqrstuvwxyz{|}~DEL Какие символы закодированы следующими escape-последовательностями: 1) \x65; - 'e' 2) \011; - TAB 3) \x3C; - '

Строковые константы 16 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ФорматПримеры Строковые константы: Последовательность символов, заключенная в кавычки Строковые константы, отделенные только пробельными символами, при компиляции объединяются в одну. "test " "string" "test string" Длинную строковую константу можно разместить на нескольких строках. Для экранирования переноса на новую строку используется символ '\': "this is a \ test string" "this is a test string" "D=%d" "test" "Hello world"

Идентификаторы 17 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Идентификатором называется имя, сопоставленное объекту языка (например: переменной, функции) или ключевым словам. Идентификатор представляет собой последовательность строчных, прописных букв латинского алфавита, цифр и знака подчеркивания. Причем идентификаторы должны начинаться либо с буквы, либо со знака подчеркивания. Строчные и прописные буквы рассматриваются компиляторами языка Си как несовпадающие. Примеры идентификаторов: int, float a, b, id _test

Идентификаторы (вопросы) 18 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Почему на идентификаторы накладывается следующее ограничение: " идентификаторы должны начинаться либо с буквы, либо со знака подчеркивания " ?

Идентификаторы (ответы) 19 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Почему на идентификаторы накладывается следующее ограничение: " идентификаторы должны начинаться либо с буквы, либо со знака подчеркивания " ? Пусть первый символ идентификатора может быть цифрой. В этом случае возможны конфликты между именами идентификаторов и константами: 1)лексема 1abc 0abc – не конфликтуют, так как в десятичной СС (константы начинающиеся с цифр 1-9) и восмеричной СС (константы, начинающиеся с 0) нет букв. 2)лексема 0xaaa – может быть шестнадцатеричной константой!; 3)лексема 0123 – может быть восьмеричной константой; 4)лексема 123 – может быть десятичной константой;

Служебные слова 20 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» asm * doublegotostruct autoelseifswitch breakendinttypedef caseentry * longunion charenumregisterunsigned constexitreturnunix * continueexternshortvoid defaultfloatsizeofvolatile * doforstaticwhile * Зависит от компилятора; для некоторых компиляторов может не быть служебным словом. Служебные слова представляют собой идентификаторы, имеющие специальное значение для компилятора языка Си. Служебные слова нельзя использовать как имя переменной. Они применяются для использования определенных свойств языка.

Операции (классификация по числу аргументов) 21 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Унарные (работают с одним аргументом): sizeof(var) – возвращает размер var в байтах; z++ – увеличивает значение z на единицу; -z – изменение знака z. Бинарные (требуют 2 аргумента): a - b – разность значений a и b (не унарная!) a > b – сравнение значений a и b, результат – истина, если условие выполняется и лож – в противном случае. Тренарные (требуют 3 аргумента): a > 0 ? 1 : 2 – если a > 0 то операция возвращает значение 1, в противном случае – 2.

Операции (классификация по типу) 22 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Тип операции унарныебинарныетренарные Арифметические +, -+, -, *, /, % Логические !||, && Сравнение, >=, >,

Арифметические операции 23 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Класс Опер.ОписаниеПример Унарная - Изменение знака int k = -z; + Изменение знака (исп. редко) - Бинарная + Аналогичны математическим операциям z = a + b; -z = a – b; *z = a * b; / Деление (для целых – целая часть от деления) z = a / b; % остаток от деления (только целые) z = a % b; 1int i, j, k = 5, l = 2; 2i = k / l; // i == 2 3j = k % l; // j == 1, k = (i * l) + j Пример для операций деления:

Операции сравнения 24 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Класс Опер.ОписаниеПример Бинарная < Меньше a < b > Больше a > b >= Больше или равно a >= b

Логические операции 25 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Класс Опер.ОписаниеПример Унарная ! Логическое НЕ z = !a; Бинарная && Логическое И z = a && b; || Логическое ИЛИ z = a || b; ab!aa && ba || b Для хранения значений ИСТИНА и ЛОЖЬ используются целый тип: ИСТИНА ~ любому ненулевому значению, например 1, 10, -5; ЛОЖЬ ~ нулевому значению: 0.

Логические операции (вопросы) 26 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Опер.Описание ! Логическое НЕ && Логическое И || Логическое ИЛИ ab!aa && ba || b Даны длины отрезков a, b и c. Записать логическое выражение, которое будет истинно, если : 1)из данных отрезков можно построить треугольник (правило треугольника: сумма двух любых сторон больше третьей); 2)из данных отрезков можно построить равнобедренный треугольник; 3)из данных отрезков можно построить прямоугольный треугольник.

Логические операции (ответы) 27 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Даны длины отрезков a, b и c. Записать логическое выражение, которое будет истинно, если из данных отрезков можно построить треугольник (правило треугольника: сумма двух любых сторон больше третьей); (a+b)

Логические операции (ответы) 28 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Даны длины отрезков a, b и c. Записать логическое выражение, которое будет истинно, если из данных отрезков можно построить равнобедренный треугольник. ( (a == b) && 2*a

Логические операции (ответы) 29 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Даны длины отрезков a, b и c. Записать логическое выражение, которое будет истинно, если из данных отрезков можно построить равнобедренный треугольник. ( (a == b) && 2*a

Логические операции (ответы) 30 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Даны длины отрезков a, b и c. Записать логическое выражение, которое будет истинно, если из данных отрезков можно построить прямоугольный треугольник. ( (a*a + b*b == c*c) || ( (a*a + c*c == b*b) || ( (c*c + b*b == a*a)

Операции присваивания 31 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Класс Опер.ОписаниеПример Унарная ++ префиксный инкремент ++i; постфиксный инкремент i++; -- префиксный декремент --i; префиксный декремент i--; Бинарная = присваивание i = j; += присваивание вида: a = b; трактуется как a = a b; например: a += b; эквив. a = a + b; i += j; -=i -= j; *=i *= j; /=i /= j; %=i %= j;...

Операции присваивания (примеры) 32 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» i Префиксная запись предусматривает использование измененного значения, а постфиксная – исходного. Например: int i = 10, j, k; j = ++i; // i = 11, j = 11 k = i++; // i = 12, k = 11 1int i = 20; 2i++; 20 R1 1 R2 ADD Инкремент – увеличение на единицу, декремент – уменьшение.

Операции присваивания (вопросы) 33 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Какие результаты будут распечатаны при выполнении приведенной ниже программы: int i=2, j, k=3; j = ++i; printf("i=%d, j=%d\n", i, j); k += i+++j++; printf("i=%d, j=%d, k = %d\n", i, j, k); j -= k--- --i; printf("i=%d, j=%d, k = %d\n", i, j, k);

Операции присваивания (ответы) 34 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Какие результаты будут распечатаны при выполнении приведенной ниже программы: int i=2, j, k=3; j = ++i; printf("i=%d, j=%d\n", i, j); i=3, j=3 k += i+++j++; printf("i=%d, j=%d, k = %d\n", i, j, k); i=4, j=4, k = 9 j -= k--- --i; printf("i=%d, j=%d, k = %d\n", i, j, k); i=3, j=-2, k = 8

Обмен значений двух ячеек памяти 35 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1int i = 5, j = 10, tmp; 2tmp = i; 3i = j; 4j = tmp; i 56 j X tmp 5 6 Часто встречающаяся задача в программировании – обменять значения двух переменных. Для решения этой задачи можно использовать вспомогательную переменную: 5

Условная операция 36 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Единственная тренарная операция в языке Си. Реализует упрощенную запись конструкции ветвления. Например: i = (a>0) ? i + a : i – a; // i = i + |a| a > 0 i =i+a i=i-a ДАНЕТ Данная запись эквивалентна следующей конструкции ветвления: Читать следующим образом: Если а больше нуля, то увеличить значение i на значение а. В противном случае – уменьшить значение i на значение a.

Лексемы языка СИ (дубл. слайд) 37 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Из символов алфавита составляются лексемы - минимальные единицы языка, имеющие самостоятельный смысл: константы; имена объектов; ключевые слова; знаки операций; разделители (скобки, точка, запятая, пробельные символы). Идентификаторы

Вычисление суммы двух целых чисел 38 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main() { int a = 5, b = 10, с; с = a + b; printf("a + b = %d\n", c ); return 0; }

Вычисление суммы двух целых чисел (лексемы - константы) 39 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main() { int a = 5, b = 10, с; с = a + b; printf("a + b = %d\n", c ); return 0; }

Вычисление суммы двух целых чисел (лексемы - идентификаторы) 40 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main() { int a = 5, b = 10, с; с = a + b; printf("a + b = %d\n", c ); return 0; }

Вычисление суммы двух целых чисел (лексемы - операции) 41 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main() { int a = 5, b = 10, с; с = a + b; printf("a + b = %d\n", c ); return 0; }

Вычисление суммы двух целых чисел (лексемы - разделители) 42 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» #include int main() { int a = 5, b = 10, с; с = a + b; printf("a + b = %d\n", c ); return 0; }

Состав языка СИ 43 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Естественный язык Естественный язык Алфавит Слова Словосочетания Предложения Лексемы Выражения Операторы Язык программирования Язык программирования Символы

Выражения 44 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Выражения строятся из первичных выражений и знаков операций. Первичные выражения вычисляются в первую очередь, они имеют наивысший приоритет. К первичным выражениям относятся: идентификатор; лексическая константа; выражение в скобках; оператор sizeof. ( (a + b) / c – 0x21 ) / ( z*z )

Описание конструкций языка 45 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Под синтаксисом языка программирования понимают правила построения корректных конструкций данного языка. Наиболее распространенными способами описания синтаксиса языков программирования являются: – форма Бэкуса-Наура (БНФ); – расширенная форма Бэкуса-Наура (РБНФ). В рамках данного курса для описания синтаксиса будет использоваться расширенная форма Бэкуса-Наура (РБНФ).

Символы РБНФ 46 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Служебные слова языка, разделители и операции называются терминальными символ и записываются в кавычках. Из РБНФ они переносятся в программу без изменений. Например, "int" – имя целочисленного типа данных. Конструкции языка называются нетерминальными символами и записываются слитно русскими и латинскими буквами. Например, Идентификатор.

Правила РБНФ 47 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Правило РБНФ имеет следующий вид: ИмяСимвола = выражение. где ИмяСимвола имя нетерминального символа, а выражение комбинация терминальных и нетерминальных символов и специальных знаков, удовлетворяющая требованиям РБНФ. Точка в конце специальный символ, указывающий на завершение правила.

Выражения РБНФ 48 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» A = B|C|D. обозначает, что символ A может принимать значения B, либо C, либо D. [A] определяет, что выражение A может повторяться 0 или 1 раз ("AB"["C"] допускает AB или ABC); {A} определяет, что выражение А может повторяться 0 или множество раз. Например, "AB"{"C"} допускает конструкции AB, ABC, ABCC и т.д. (А) используются для группировки выражений. Например A = ("B"|"C")("D"|"E") допускает наличие следующих конструкций: BD, BE, CD, CE.

Выражения РБНФ (2) 49 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» A = B|C|D. обозначает, что символ A может принимать значения B, либо C, либо D. [A] определяет, что выражение A может повторяться 0 или 1 раз ("AB"["C"] допускает AB или ABC); {A} определяет, что выражение А может повторяться 0 или множество раз. Например, "AB"{"C"} допускает конструкции AB, ABC, ABCC и т.д. (А) используются для группировки выражений. Например A = ("B"|"C")("D"|"E") допускает наличие следующих конструкций: BD, BE, CD, CE.

Выражения РБНФ (примеры) 50 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Идентификатор = ( Буква | "_" ){ Буква | Цифра | "_" } Буква = "A" | "B" |... | "Y" | "Z" | "a" | "b" |... | "y" | "z" Цифра = "0" | "1" |... | "9" Идентификатор представляет собой последовательность строчных, прописных букв латинского алфавита, цифр и знака подчеркивания. Причем идентификаторы должны начинаться либо с буквы, либо со знака подчеркивания. Эквивалентное определение идентификатора с помощью РБНФ:

Выражения РБНФ (вопрос) 51 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Идентификатор = ( Буква | "_" ){ Буква | Цифра | "_" } Буква = "A" | "B" |... | "Y" | "Z" | "a" | "b" |... | "y" | "z" Цифра = "0" | "1" |... | "9" Проверить, соответствуют ли следующие строки правилу РБНФ: 1.i 2.Test_string 3.~test 4.test$ 5. i 6. my-var 7. ____aaa 8. 1test

Выражение языка СИ (РБНФ) 52 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Выражение = (Операнд { БинарнОперация, Операнд } ) | (ЛевыйОперанд, Присваивание, Операнд). Операнд = { ПрефОп } Переменная | Переменная ПостфОп | { ПрефОп1 } ( Константа | sizeof(Тип) ) | { ПрефОп1 } "(" Выражение ")". ЛевыйОперанд = Переменная | АдресноеВыражение. ПрефОп1 = + | - | ! | ~ | (тип) ПрефОп = ПрефикснОп1 | ++ | -- ПостфОп = ++ | -- БинарнОперация – все бинарные операции кроме группы присваивания.

Выражения (примеры) 53 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1) y + 1 2) -(y + 1) 3) 1++ 4) (y + 1)++ 5) (y + 1)*(z-1)-k 6) i j 7) (k == a + b*c) 9) (a < b) && (a < c) ЛОГИЧЕСКОЕ ВЫРАЖЕНИЕ возвращает значение ИСТИНА (1) или ЛОЖЬ (0) Выражение = Операнд { БинарнОперация, Операнд } Операнд = { ПрефОп } Переменная | Переменная ПостфОп | { ПрефОп1 } ( Константа | sizeof(Тип) ) | { ПрефОп1 } "(" Выражение ")". ПрефОп1 = + | - | ! | ~ | (тип) ПрефОп = ПрефикснОп1 | ++ | -- ПостфОп = ++ | -- БинарнОперация – все бинарные операции кроме группы присваивания.

Выражения (примеры) 54 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1) x = y + 1; 2) x = -(y + 1); 3) 1 = x; 4) (y + 1) = 12; 5) x = (y + 1)*(z-1)-k; 6) x *= i j; 7) x += (a < b) && (a < c); 8) x += j -= (k = a + b*c); 9) x = (a*=2,a++,a+z); Выражение = (ЛевыйОперанд, Присваивание, Операнд). Операнд = { ПрефОп } Переменная | Переменная ПостфОп | { ПрефОп1 } ( Константа | sizeof(Тип) ) | { ПрефОп1 } "(" Выражение ")". ЛевыйОперанд = Переменная | АдресноеВыражение. ПрефОп1 = + | - | ! | ~ | (тип) ПрефОп = ПрефикснОп1 | ++ | -- ПостфОп = ++ | -- БинарнОперация – все бинарные операции кроме группы присваивания.

Приоритеты и ассоциативность 55 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Группы по убыванию приоритета (сверху – наивысший) ОперацияАссоциативн. ++, -- Слева направо ++, --, +, -, !, ~, (тип), *, &, sizeof Справа налево *, /, % (бинарные) Слева направо +, - (бинарные) Слева направо > Слева направо, >= Слева направо == != Слева направо & ^ | && Слева направо || Слева направо ?: Справа налево =, +=, -=, *=, /=,... Справа налево, Слева направо

Ассоциативность слева направо 56 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ОперацияАссоциативность *, /, % (бинарные) Слева направо Например: i * j / k % s ( (i * j) / k ) % s ОперацияАссоциативность ++, -- Слева направо *, /, % (бинарные) Слева направо Например: ++i * j / ++k % s ~ ( ((++i) * j)/(++k) ) % s Ассоциативность внутри одной группы Ассоциативность и приоритеты

Ассоциативность справа налево 57 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ОперацияАссоциативн. =, +=, -=, *=, /=,... Справа налево Например: 1int i = 5, j = 12, k; 2i += j -= k = 2; В данном примере строка 2 эквивалентна следующей программе: 1k = 2; 2j -= k; 3i += j;

Различные приоритеты и ассоциативность 58 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1int i= 5, j, k, z = 1; 2i += j = 5 + (k = 2) * (z < 5); ОперацияАссоциативн. *, /, % (бинарные) Слева направо +, - (бинарные) Слева направо, >= Слева направо =, +=, -=, *=, /=,... Справа налево ДействиеРезультатДействиеРезультат 1k = z < 515j = * 126i += 712

Состав языка СИ 59 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Естественный язык Естественный язык Алфавит Слова Словосочетания Предложения Лексемы Выражения Операторы Язык программирования Язык программирования Символы

Операторы в языке СИ 60 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ОПЕРАТОР ОПЕРАТОР ОПИСАНИЯ ИСПОЛНЯЕМЫЙ ОПЕРАТОР Выражение, оканчивающееся точкой с запятой, является оператором, т.е. наименьшей элементарной частью программы.

Операторы описания Оператор описания позволяет определить данные, над которыми в программе выполняются действия. 61 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ОператорОписания = Тип " " Объект {"," Объект} ";". Объект = Идентификатор ["=" Значение]. Тип = ЦелыйТип | ВеществТип | СложнТип. ЦелыйТип = ["unsigned"]("char"|"short"|"int"|"long"). ВеществТип = "float"| ["long"] "double". Инициализация 1) int i; 2) char z; x; y; 3) int j = 5, m = 8, k = 10; 4) short (y + 1) = 12; 5) long double k, n, q;

ОператорОписания = Тип " " Объект {"," Объект} ";". Объект = Идентификатор ["=" Значение]. Тип = ЦелыйТип | ВеществТип | СложнТип. ЦелыйТип = ["unsigned"]("char"|"short"|"int"|"long"). ВеществТип = "float"| ["long"] "double". Операторы описания (2) 62 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Примером описания строки 1 на естественном языке может служить предложение: "В памяти следует отвести область для хранения целого числа, для обращения к данной области будет использоваться имя i". 1int i; 2float j, k = 5; 3j=k*3;

Целочисленные типы данных 63 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ИдентификаторРазмер, байтДиапазон значений char1[-128; 127] short2[-32768; 32767] int4[– ; ] long4 или 8[-2 63 ; ] (8 байт) ИдентификаторРазмер, байт Диапазон значений unsigned char1[0; 255] unsigned short2[0; 65535] unsigned int4[0; ] unsigned long4 или 8[0; ] (8 байт) Знаковые целые Беззнаковые целые

1int i; 2char c; 3short z = 10; 4long l; Целочисленные типы данных (примеры) 64 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Знаковые целые Беззнаковые целые 1unsigned int i; 2unsigned char c; 3unsigned short z = 10; 4unsigned long l; Инициализация

Вещественные типы данных 65 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ИдентификаторРазмер, байтДиапазон значений float4 от ±3.4· до ±3.4·10 38 (~ 7 значащих цифр) double8 от ±1.7· до ±1.7· (~ 15 значащих цифр) long double12 от ±1.2· до ±1.2· (~ 30 значащих цифр)

Вещественные типы данных (примеры) 66 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1float f; 2double d = 1.5, d1 = ; 3long double ld, ld1, _ld12bytes; 4f = 1.8; 5d = f + d1;

Исполняемый оператор следования 67 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Оператор = Выражение ";" | { "{" {ОператорОписания} Оператор {Оператор} "}"}. Например: { x = 10; { y = x + 15 * x; z = 10; } x = 10; y = x + 15 * x; { int x = 10; y = x + 15 * x; } В начале блока операторов могут находиться операторы описания

Блок операторов 68 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Несколько операторов может быть заключено в фигурные скобки. В этом случае они образуют блок операторов. C точки зрения синтаксиса блок рассматривается как один (составной) оператор. Группировка операторов необходима для того, чтобы указать компилятору: какие операторы принадлежат функции (например main ); какие операторы следует выполнять в случае выполнения ( if ) или невыполнения ( else ) некоторого условия в условном операторе. какие операторы формируют тело цикла (операторы for, while, do-while ).

Оператор ветвления (условный оператор) 69 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ДАНЕТ Выражение рассматривается как логическое: нулевое значение – ЛОЖЬ, иначе – ИСТИНА Оператор1 выполняется если Выражение ИСТИННО, иначе – Оператор2. УсловныйОператор = "if" "(" Выражение ")" Оператор1 [ else Оператор2 ].

Настройка флага четности 70 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» if ((i % 2) == 0){ j = 1; printf("i–четное"); } else j = 0; Оператор1 данном случае составной и содержит 2 простых оператора. Оператор2 – простой. i%2 j=1 j=0 ДАНЕТ i i УсловныйОператор = "if" "(" Выражение ")" Оператор1 [ else Оператор2 ].

Вложение условных операторов 71 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» if ( i % 2 ){ j = 1; } else{ if( i % 3 ) j = 2; else j = 0; } i%2 j=1 ДАНЕТ j=0 i%3 j=2 НЕТ ДА if ( i % 2 ) j = 1; else if( i % 3 ) j = 2; else j = 0;

Вложение условных операторов 72 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» i%2 j=1 ДАНЕТ j=0 i%3 j=2 НЕТ ДА if ( i % 2 ) j = 1; else if( i % 3 ) j = 2; else j = 0; УсловныйОператор = "if" "(" Выражение ")" Оператор1 [ else Оператор2 ]. Проверить программу по РБНФ

Оператор присваивания внутри оператора ветвления 73 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1if ( (D = b*b – 4*a*c) < 0 ){ 2 printf("Действительных корней нет\n"); 3}else if( D == 0 ){ 4 printf("Корень один: %f\n", -b/(2*a) ); 5}else{ 6 float x1 = (-b – sqrt(D) )/(2*a); 7 float x2 = (-b + sqrt(D) )/(2*a); 8 printf("Корней два: %f, %f\n", x1, x2); 9}

Циклические конструкции 74 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Условие Тело НЕТ ДА Условие Тело НЕТДА Цикл с предусловием ( while, for ) Цикл с постусловием ( do-while )

Цикл while 75 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Выраж Оператор НЕТ ДА ОператорWhile = "while" "(" Выраж ")" Оператор. Выражение – условие продолжения цикла. Рассматривается как логическое: нулевое значение – ЛОЖЬ, иначе – ИСТИНА Оператор выполняется до тех пор, пока Выражение является ИСТИННЫМ.

Цикл while (сумма n входных значений) 76 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ОператорWhile = "while" "(" Выражение ")" Оператор. i

Цикл while (бесконечный цикл) 77 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1while( 1 ){ 2 ТелоЦикла 3} Оператор while может быть использован для организации бесконечного цикла. Такая задача возникает при разработке, например серверных программ. Для организации бесконечного цикла достаточно в качестве Выражения указать ненулевую константу, например – 1. Структура бесконечного цикла на основе оператора while приведена ниже:

Цикл for 78 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ОператорFor = "for" "(" [ Выр1 ] ";" [ Выр2 ] ";" [ Выр3 ] ")" Оператор. Выр1 выполняется ОДИН РАЗ до начала цикла Выр2 – условие продолжения цикла, рассматривается как логическое Выр3 выполняется ПОСЛЕ КАЖДОЙ итерации. Оператор выполняется до тех пор, пока Выр2 является ИСТИННЫМ. Выр2 Оператор НЕТ ДА Выр3 Выр1

Цикл for (сумма n входных значений) 79 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» i

Цикл for (особенности) 80 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Любое управляющее выражение цикла for ( Выр1, Выр2, Выр3 ) может отсутствовать! Наличие ";" обязательно! В случае отсутствия Выр2 считается, что условие продолжения цикла всегда ИСТИННО! Пример бесконечного цикла на основе конструкции for : ОператорFor = "for" "(" [ Выр1 ] ";" [ Выр2 ] ";" [ Выр3 ] ")" Оператор. 1for( ; ; ){ 2 ТелоЦикла 3}

Цикл do-while 81 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ОператорDoWhile = "do" Оператор "while" "(" Выраж ")" ";". Оператор выполняется КАК МИНИМУМ один раз Выраж – условие продолжения цикла, рассматривается как логическое Оператор выполняется до тех пор, пока Выраж является ИСТИННЫМ. Выраж Оператор НЕТДА

Цикл do-while 82 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» ОператорDoWhile = "do" Оператор "while" "(" Выраж ")" ";". 1int n, i, sum, a; 2scanf("%d",&n); 3if(n > 0){ 4 do{ 5 scanf("%d",&a); 6 sum += a; 7 i++; 8 }while(i

Вложенность циклов 83 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1int i, j; 2for(i=1;i

ДОПОЛНИТЕЛЬНЫЙ МАТЕРИАЛ 84 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»

Операции присваивания (побочные эффекты) 85 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» Основной эффект операции: вычисление значения Побочный эффект: изменение объектов. Рассмотрим более конкретный пример: int i, j; i = 5 + (j = 2); Основной эффект j = 2 результат вычисления выражения справа. Он подставляется во внешнее выражение: i = 5 + (j = 2). i = Побочный эффект - изменение значения ячейки j.

Побочные эффекты неопределенное поведение 86 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» int x=0; // ТПВ 1 2x = x++; // ТПВ 2 3printf("x = %d\n", x); В стандарте Си между двумя точками последовательных вычислений (ТПВ) изменение значения переменной возможно не более одного раза. 1y = 4; // ТПВ 1 2x = x + y; // ТПВ 2 3printf("y=%d,x=%d\n",y,x); Пример 1 Пример 2 gcc 3.4.4: x = 0 gcc 4.4.5: x = 1

Побочные эффекты переносимость 87 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1int a = 1, b, c; 2b = (a++)+(++a); 3printf("a=%d,b=%d\n",a,b); 4a = 1; 5c = (a++)+(a++)+(++a); 6printf("a=%d,c=%d\n",a,c); Результат работы: КомпиляторMS Visual C 2008GCC Результаты a = 3, b = 4 a = 4, c = 6a = 4, c = 4

Побочные эффекты переносимость (2) 88 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1c = (a++)+(a++)+(++a); MS Visual C: Пусть a = a(a=a+1) (a=2) 2.c=a+a (c=4) 3.c=с+a (c=6) 4.a++ (a=a+1) (a=3) 5.a++ (a=a+1) (a=4) GCC: Пусть a = 1 1.c=a+a (c=2) 2.++a (a=a+1) (a=2) 3.c=c+a (c=4) 4.a++ (a=a+1) (a=3) 5.a++ (a=a+1) (a=4)

Последовательность выражений операция "," 89 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ» 1int i,j,k; 2i = 5, j = 3, k = i + j; 3printf("1: i=%d,j=%d,k=%d\n",i,j,k); 4k = ++j, i+j; 5printf("2: i=%d, j=%d, k=%d\n",i,j,k); 6k = (++j, i+j); 7printf("3: i=%d, j=%d, k=%d\n",i,j,k); $./sequence 1: i = 5, j = 3, k = 8 2: i = 5, j = 4, k = 4 3: i = 5, j = 5, k = 10

СПАСИБО ЗА ВНИМАНИЕ! 90 © Кафедра вычислительных систем ГОУ ВПО «СибГУТИ»