Л1_введение в си.pptx
- Количество слайдов: 37
Основы алгоритмизации и программирования
Литература В. А. Цикоза, Т. Г. Чурина. Методическое пособие к курсу “Методы программирования” (часть первая). Новосибирск: ВКИ НГУ, 1999. Т. В. Нестеренко. Методическое пособие к курсу «Методы программирования» (часть 1) Лабораторные работы. Новосибриск, 2008 Вирт Н. Алгоритмы и структуры данных. М. : Мир, 1989. – 360 с. А. Ахо, Д. Хопкрофт, Д. Ульман. Структуры данных и алгоритмы. М. : Издательский дом “Вильямс”, 2000 – 384 с. . Хэзфилд Р. , Кирби Л. Искусство программирования на C: Фундаментальные алгоритмы, структуры данных и примеры приложений (пер. с англ. ) {Энциклопедия программиста} К: Диа. Софт`01 - 736 с. Подбельский В. В. , Фомин С. С. Программирование на языке Си: учеб. пособие. –М. : Финансы и статистика, 2007. -600 с. Павловская Т. А. С/С++. Программирование на языке высокого уровня – СПб. : Питер, 2005. - 461 с.
Лекция 1 Введение в язык Си
ANSI C — стандарт языка Си, опубликованный Американским национальным институтом стандартов (ANSI). Следование этому стандарту помогает создавать легко портируемые программы.
Тип данных определяет - множество значений, - набор операций, которые можно применять к таким значениям, - возможно, способ реализации хранения значений и выполнения операций.
Типы данных: простые и структурированные. Простые - это целые и вещественные числа, символы (относятся к целым), перечислимые и указатели (адреса объектов в памяти). Целые, символы и перечислимые – порядковые типы. Структурированные данные это массивы и структуры.
В языке Cи различают понятия "тип данных" и "модификатор типа" (со знаком или без знака). Целое со знаком будет иметь как положительные, так и отрицательные значения, а целое без знака только положительные значения.
Переменные Все переменные до их использования должны быть определены (объявлены). При этом задается тип, а затем идет список из одной или более переменных этого типа, разделенных запятыми. Например: int a, b, c; char x, y;
Базовые типы в Си В языке Си можно выделить пять базовых типов, которые задаются следующими ключевыми словами: 1) int - целый; целые 2) char - символьный; float - вещественный; 4) double – вещ. двойной точности; вещественные 3) 5) void не имеющий значения.
Характеристика базовых типов 1. 2. Переменная типа char обычно имеет размер 1 байт, ее значениями являются различные символы из кодовой таблицы, например: 'ф', ': ', 'j' (при записи в программе они заключаются в одинарные кавычки). Размер переменной типа int в стандарте языка Си не определен. В большинстве систем программирования размер переменной типа int соответствует размеру целого машинного слова. Например, в компиляторах для 16 -разрядных процессоров переменная типа int имеет размер 2 байта. В этом случае знаковые значения этой переменной могут лежать в диапазоне от -32768 до 32767. В современных компьютерах – 4 и 8 байт.
3. Ключевое слово float позволяет определить переменные вещественного типа. Их значения имеют дробную часть, отделяемую точкой, например: -5. 6, 31. 28 и т. п. Вещественные числа могут быть записаны также в форме с плавающей точкой, например: 1. 09 e+4. Число перед символом "е" называется мантиссой, а после "е" порядком или экспонентой. Переменная типа float занимает в памяти 4 байта. Она может принимать значения в диапазоне от 3. 4 е-38 до 3. 4 e+38.
4. 5. 4. Ключевое слово double позволяет определить вещественную переменную двойной точности. Она занимает в памяти в два раза больше места, чем переменная типа float. Переменная типа double может принимать значения в диапазоне от 1. 7 e-308 до 1. 7 e+308. Ключевое слово enum позволяет определить переменную перечислимого типа. Ключевое слово void используется для нейтрализации значения объекта, например, для объявления функции, не возвращающей никаких значений.
Перечислимый тип определяется как набор идентификаторов, с точки зрения языка играющих ту же роль, что и обычные именованные константы, но связанные с этим типом. Переменная, которая может принимать значение из некоторого списка значений, называется переменной перечислимого типа или перечислением. enum week { Monday, /* 0 (= 6)*/ Tuesday, /* 1 */ Wednesday, /* 2 */ Thursday, Friday, Saturday, Sunday } rab_ned ; rab_ned = Sunday;
Модификаторы Объект некоторого базового типа может быть модифицирован. С этой целью используются специальные ключевые слова, называемые модификаторами. В стандарте ANSI языка Си имеются следующие модификаторы типа: unsigned short (обычно 2 байта ≤ размер int) long (≥ размер int)
Модификаторы записываются перед спецификаторами типа, например: unsigned char. Если после модификатора опущен спецификатор, то компилятор предполагает, что этим спецификатором является int. Таким образом, следующие строки: long а; long int а; являются идентичными и определяют объект а как длинный целый.
Инициализация переменных Переменные в языке Си могут быть инициализированы при их определении: int a = 25, h = 6; char g = 'Q', k = 'm'; float r = 1. 89; long double n = r*123;
Константы • • вещественные, например 123. 456, 5. 61 е-4. Они могут снабжаться суффиксом F или f, например 123. 456 F, 5. 61 e-4 f; целые, например 125; короткие целые, в конце записи которых добавляется суффикс H или h, например 275 h, 344 H; длинные целые, в конце записи которых добавляется суффикс L или l, например 361327 L; беззнаковые, в конце записи которых добавляется суффикс U или u, например 62125 U; восьмеричные, в которых перед первой значащей цифрой записывается 0, например 071; шестнадцатеричные, в которых перед первой значащей цифрой записывается два символа 0 x, например 0 x 5 F;
символьные - единственный символ, заключенный в одинарные кавычки, например 'О', '2', '. ' и т. п. Символы, не имеющие графического представления, можно записывать, используя специальные комбинации, например n (код 10), (код 0). Допускается и шестнадцатеричное задание кодов символов, которое представляется в виде: 'х2 В', 'х. З 6' и т. п. ; • строковые - последовательность из нуля символов и более, заключенная в двойные кавычки, например: "Это строковая константа". Кавычки не входят в строку, а лишь ограничивают ее. Строка представляет собой массив из перечисленных элементов, в конце которого помещается байт с символом ' '. Таким образом, число байтов, необходимых для хранения строки, на единицу превышает число символов между двойными кавычками; • константное выражение, состоящее из одних констант, которое вычисляется во время трансляции (например: а = 60 + 301); • типа long double, в конце записи которых добавляется буква L или l, например: 1234567. 89 L. •
Примеры const long int k = 25; const m = -50; /* подразумевается const int m = -50 */ const n = 100000; /*подразумевается const long int n = 100000 */
Преобразование типов Если в выражении появляются операнды различных типов, то они преобразуются к некоторому общему типу, при этом к каждому арифметическому операнду применяется такая последовательность правил: Если один из операндов в выражении имеет тип long double, то остальные тоже преобразуются к типу long double. В противном случае, если один из операндов в выражении имеет тип double, то остальные тоже преобразуются к типу double. В противном случае, если один из операндов в выражении имеет тип float, то остальные тоже преобразуются к типу float.
В противном случае, если один из операндов в выражении имеет тип unsigned long, то остальные тоже преобразуются к типу unsigned long. В противном случае, если один из операндов в выражении имеет тип long, то остальные тоже преобразуются к типу long. В противном случае все операнды преобразуются к типу int. При этом тип char преобразуется в int со знаком; тип unsigned char в int, у которого старший байт всегда нулевой; тип signed char в int, у которого в знаковый разряд передается знак из сhar; тип short в int (знаковый или беззнаковый).
Приведение типа В языке Си можно явно указать тип любого выражения. Для этого используется операция преобразования ("приведения") типа. Она применяется следующим образом: (тип) выражение здесь можно указать любой допустимый в языке Си тип. Пример: int a = 30000; float b; . . . . b = (float) a/17;
Приоритеты операций и порядок вычислений В языке Си операции с высшими приоритетами вычисляются первыми. Операции с одинаковым приоритетом выполняются слева направо в порядке следования.
Операции и приоритеты Прио ритет Знак операции Типы операции Порядок выполнения 1 - ~ ! * & ++ sizeof Унарные Справа налево 2 приведение типов () []. > Выражение Слева направо 3 * Мультипликатив. Слева направо 4 + Аддитивные Слева направо 5 << Сдвиг Слева направо 6 < > >= Отношение Слева направо 7 == Отношение Слева направо / % >> <= !=
8 & Поразрядное И Слева направо 9 ^ Поразрядное исключающее ИЛИ Слева направо 10 | Поразрядное ИЛИ Слева направо 11 && Логическое И Слева направо 12 || Логическое ИЛИ Слева направо 13 ? : Условное Слева направо 14 = *= /= %= += = &= |= >>= <<= ^= Простое и составное присваивание Справа налево 15 , Последовательное вычисление Слева направо
Примеры b += a; // эквивалентно b = b + a a /= b+1; // эквивалентно a = a/(b+1) f++; // эквивалентно f = f + 1 max = (d <= b) ? b : d; а=1; v = ++a; // v=2 а=1; v = a++; // v=1
Условный оператор if (Условие) Действие Условие + Действие if (Условие) Действие 1 else Действие 2 + Действие 1 Условие Действие 2
Условный оператор, примеры if (i != n 1) i++; if (x > x else { y x } y) = y--; += x; = 1; if (!a) { x = 1; y = 2; } else a = x + y;
Операторы цикла Три вида циклов: Цикл while (с предусловием) Цикл do while (с постусловием) Цикл for (параметрический)
Цикл while (с предусловием) while (Условие) Тело цикла Пример: вычисление 5! int i, n=5, s=1; i = 1; while (i <= n) { s *= i; i++; } // в s - результат Условие + Тело цикла
Цикл do while (с постусловием) do Тело цикла while (Условие) Тело цикла + Пример: вычисление 5! int i, n=5, s=1; i = 1; do { s *= i; i++; } while (i <= n) // в s - результат Условие
Цикл for (параметрический) for (Выражение_1; Условие; Выражение_2) Тело цикла Выражение_1 Пример: вычисление 5! int i, n=5, s=1; for (i = 1; i <= n; i++) s *= i; // в s - результат Условие + Тело цикла Выражение_2
Операторы прерывания исполнения цикла Оператор break прекращает выполнение оператора цикла и передает управление следующему за этим циклом оператору. Наиболее естественна следующая форма тела цикла: { операторы break; операторы } Оператор continue позволяет в любой точке тела цикла прервать текущую итерацию и перейти к проверке условия выполнения следующей итерации.
Схемы работы операторов break и continue Условие Тело цикла … break; … continue; … + Условие
Схемы работы операторов break и continue Выражение_1 Условие + Тело цикла … break; … continue; … Выражение_2
Общий вид программы на си директивы препроцессора описание глобальных переменных и функций int main () { описание объектов исполняемые операторы return 0; }
Пример #include