Скачать презентацию Тема Типы данных операции и выражения языка С Скачать презентацию Тема Типы данных операции и выражения языка С

Лекция-03.ppt

  • Количество слайдов: 13

Тема «Типы данных, операции и выражения языка С» (продолжение) Обзор вопросов прошлой лекции: ü Тема «Типы данных, операции и выражения языка С» (продолжение) Обзор вопросов прошлой лекции: ü Переменная имеет имя, тип и текущее значение ü Символические имена (символические константы) определяются с помощью директивы препроцессора #define и задают правило текстовой подстановки, которая выполняется до компиляции программы ü Все переменные одного типа данных имеют одинаковый размер, одинаковое «внутреннее устройство» и одинаковый набор операций, которые можно к ним применить. ü Имеется 4 базовых типа: char, int, float, double и 4 модификатора типа: short, long, signed, unsigned ü Числовые константы ü Символьные константы ü Управляющие (escape) последовательности Лекция 09. 13 г. 1

Строковые константы Строковая константа – это последовательность из нескольких символов, заключенная в кавычки: “Это Строковые константы Строковая константа – это последовательность из нескольких символов, заключенная в кавычки: “Это строка”, “” (а это – пустая строка) Фактически строковая константа является массивом символов (массивом типа char), причем в конце массива автоматически добавляется нулевой байт (признак конца строки) и поэтому длина массива всегда на 1 больше размера строки. Пустая строка имеет нулевую длину и занимает в памяти 1 байт! Внимание! Нельзя путать символьные константы и строковые константы из одного символа. Например: ‘x’ и “x” – это совершенно разные вещи! Лекция 09. 13 г. 2

Константы перечислимого типа Средства языка С позволяют программисту создавать собственные типы данных с фиксированным Константы перечислимого типа Средства языка С позволяют программисту создавать собственные типы данных с фиксированным множеством целочисленных значений, причем для каждого из значений должно быть задано некоторое имя, которое будет играть роль константы данного типа. Такие типы называются перечислениями. Например: enum boolean {FALSE, TRUE}; enum months {JAN=1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC}; enum escapes {BELL=‘a’, BACKSPACE=‘b’, TAB=‘t’, NEWLINE=‘n’, RETURN=‘r’}; Числовые значения таким константам задаются либо явно путем их инициализации, либо автоматически – значение текущей константы на 1 больше значения предыдущей (первая константа в списке получает значение 0) Перечислимая константа – это просто целая константа! Допустимы анонимные перечисления: enum {FALSE, TRUE}; Можно описывать переменные перечислимого типа: enum months x; Лекция 09. 13 г. 3

Объявления переменных Любая переменная в программе на языке С должна быть объявлена до первого Объявления переменных Любая переменная в программе на языке С должна быть объявлена до первого обращения к ней. При объявлении переменной указывается её тип, имя и, возможно, начальное значение (в этом случае говорят, что переменная инициализируется). Переменные одно типа можно объявлять списком (через запятую): int lower, upper, step; char c, line[1000]; char esc = ‘\’; int limit = MAXLINE + 1; float eps = 1. 0 e-05; К объявлению инициализированной переменной можно добавить модификатор const, который придаст этой переменной свойство “read only” (только для чтения): const double e = 2. 7182845905; const char msg[] = “Warning: “; Попытка присвоить такой переменной (или элементу массива) новое значение вызовет ошибку компиляции. Важно! Модификатор const нельзя использовать для объявления неинициализированных переменных. Лекция 09. 13 г. 4

Операции и выражения Операции определяют преобразования, которые можно производить с объектами программы. В зависимости Операции и выражения Операции определяют преобразования, которые можно производить с объектами программы. В зависимости от количества операндов, участвующих в одной операции, операции делятся на: • унарные (одноместные), которые применяются к одному операнду • бинарные (двуместные), имеющие два операнда) • тернарные (трехместные) с тремя операндами. В результате выполнения операции всегда получается некоторое новое значение (которое можно использовать для последующих вычислений) и, возможно, изменяется значение одного из операндов. Из операций конструируются более сложные объекты программы – выражения. Лекция 09. 13 г. 5

Арифметические операции (бинарные) операция смысл примеры + сложение x=3+2; y+z; x+y+2; - вычитание 3− Арифметические операции (бинарные) операция смысл примеры + сложение x=3+2; y+z; x+y+2; - вычитание 3− 2; int x=y−z; y− 2−z; * умножение int x=3∗ 2; int x=y∗z; x∗y∗ 2; / деление float x=3/2; /∗ x=1 ∗/ float x=3. 0/2 /∗x=1. 5 ∗/ int x=3. 0/2; /∗ x=1 ∗/ % остаток от деления int x=3%2; /∗ x=1 ∗/ int y=7; int x=y%4; /∗ x=3 ∗/ int y=7; int x=y%10; /∗ x=7 ∗/ Лекция 09. 13 г. 6

Операции отношения (бинарные) Операции отношения сравнивают два операнда и выдают «булевский» результат ( «ложь» Операции отношения (бинарные) Операции отношения сравнивают два операнда и выдают «булевский» результат ( «ложь» – 0, «истина» – 1) операция смысл примеры > больше 3>2; /∗ 1 ∗/ 2. 99>3 /∗ 0 ∗/ >= больше или равно 3>=3; /∗ 1 ∗/ 2. 99>=3 /∗ 0 ∗/ < меньше 3<3; /∗ 0 ∗/ ’A’<’B’/∗ 1∗/ <= меньше или равно 3<=3; /∗ 1 ∗/ 3. 99<3 /∗ 0 ∗/ == равно 3==3; /∗ 1 ∗/ ’A’==’a’/∗ 0 ∗/ != не равно 3!=3; /∗ 0 ∗/ 2. 99!=3 /∗ 1 ∗/ Лекция 09. 13 г. 7

Логические операции (две бинарные и одна унарная) операция смысл пример && AND ((9/3)==3) && Логические операции (две бинарные и одна унарная) операция смысл пример && AND ((9/3)==3) && (2∗ 3==6); /∗ 1 ∗/ (’A’==’a’) && (3==3) /∗ 0 ∗/ || OR 2==3 || ’A’==’A’; /∗ 1 ∗/ 2. 99>=3 || 0 /∗ 0 ∗/ ! NOT !(3==3); /∗ 0 ∗/ !(2. 99>=3) /∗ 1 ∗/ Выражения, содержащие логические операции, вычисляются слева направо, и вычисление прекращается, как только установлена гарантированная истинность или ложность результата, например: (3==3) || ((c=getchar())==’y’) – второе выражение не вычисляется. (0) && ((x=x+1)>0) - второе выражение не вычисляется. Лекция 09. 13 г. 8

Операции инкремента и декремента Это – унарные операции, позволяющие увеличить или уменьшить на 1 Операции инкремента и декремента Это – унарные операции, позволяющие увеличить или уменьшить на 1 текущее значение операнда. Каждая из них существует в двух формах – постфиксной и префиксной. Постфиксная форма x++ означает то же самое, что и x=x+1; x−− означает то же самое, что и x=x− 1; y=x++; означает то же самое, что и y=x; x=x+1; x используется до его автоувеличения. y=x−−; означает то же самое, что и y=x; x=x− 1; x используется до его автоуменьшения. Префиксная форма ++x означает то же самое, что и x=x+1; −−x означает то же самое, что и x=x− 1; y=++x; означает то же самое, что и x=x+1; y=x; x используется после его автоувеличения. y=−−x; означает то же самое, что и x=x− 1; y=x; x используется после его автоуменьшения. Лекция 09. 13 г. 9

Иллюстрация к инкременту o n e + � … … … 0 1 2 Иллюстрация к инкременту o n e + … … … 0 1 2 3 4 5 t w o n 0 Следующая программа соединяет две строки. 1 6 2 7 3 8 9 4 //Ex 005. c - конкатенация строк #include int main() { char s[10]="one+"; char t[]="twon"; int i=0, j=0; while (s[i]) i++; /*Поиск конца строки s*/ while (s[i++] = t[j++]); /*Дописываем t в конец s*/ printf("%s", s); getchar(); return 0; } Лекция 09. 13 г. 10

Поразрядные (битовые) операции Эти операции применимы только к целочисленным аргументам типов: char, short, int Поразрядные (битовые) операции Эти операции применимы только к целочисленным аргументам типов: char, short, int и long (как к имеющим знак, так и к беззнаковым). операция смысл пример & AND 0 x 77 & 0 x 3; /∗ 0 x 3 ∗/ 0 x 77 & 0 x 0; /∗ 0 ∗/ | OR 0 x 700 | 0 x 33; /∗ 0 x 733 ∗/ 0 x 070 | 0 /∗ 0 x 070 ∗/ ^ XOR 0 x 770 ^ 0 x 773; /∗ 0 x 3 ∗/ 0 x 33 ^ 0 x 33; /∗ 0 ∗/ << сдвиг влево 0 x 01<<4; /∗ 0 x 10 ∗/ 1<<2; /∗ 4 ∗/ >> сдвиг вправо 0 x 010>>4; /∗ 0 x 01 ∗/ 4>>1 /∗ 2 ∗/ ~ инверсия битов x = x & ~077 /*сбросить в 0 младшие 6 бит*/ Лекция 09. 13 г. 11

Иллюстрация к сдвигу вправо C 9 B signed D C D E 6 1 Иллюстрация к сдвигу вправо C 9 B signed D C D E 6 1 1 0 0 1 1 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 1 1 1 1 0 0 1 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 4 D E 6 0 1 0 0 1 1 1 1 0 0 1 1 0 15 unsigned 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 //Ex 006. c - сдвиг вправо на 1 бит #include #include #define M 0 x. FFFF int main() { short sx = 0 x 9 BCD; unsigned short usx = 0 x 9 BCD; printf("before: sx = %d, after: sx = %dn", sx>>1); printf("before: sx = %x, after: sx = %xn", sx&M, (sx>>1)&M); printf("before: usx = %u, after: usx = %un", usx>>1); printf("before: usx = %x, after: usx = %xn", usx>>1); system("PAUSE"); return 0; } Лекция 09. 13 г. 12

Иллюстрация к битовым операциям Следующая программа извлекает n бит из переменной x, начиная с Иллюстрация к битовым операциям Следующая программа извлекает n бит из переменной x, начиная с p-й позиции. n=4 0 0 0 1 1 0 0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 x = 0 x 1234 p //Ex 007. c – извлечение n бит с p-й позициии #include int main() { int p = 12, n = 4; unsigned short x = 0 x 1234; printf("before = %x n", x); printf("after = %x n", (x >> (p+1 -n)) & ~(~0 << n)); getchar(); вытеснение маска return 0; } Алгоритм: 1. Сдвинуть вправо, вытеснив все биты, находящиеся правее «окна» . 2. На результат наложить «маску» с “ 1” в n младших позициях и “ 0” в остальных. Лекция 09. 13 г. 13