Скачать презентацию Основы алгоритмизации и программирования Литература В А Скачать презентацию Основы алгоритмизации и программирования Литература В А

Л1_введение в си.pptx

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

Основы алгоритмизации и программирования Основы алгоритмизации и программирования

Литература В. А. Цикоза, Т. Г. Чурина. Методическое пособие к курсу “Методы программирования” (часть Литература В. А. Цикоза, Т. Г. Чурина. Методическое пособие к курсу “Методы программирования” (часть первая). Новосибирск: ВКИ НГУ, 1999. Т. В. Нестеренко. Методическое пособие к курсу «Методы программирования» (часть 1) Лабораторные работы. Новосибриск, 2008 Вирт Н. Алгоритмы и структуры данных. М. : Мир, 1989. – 360 с. А. Ахо, Д. Хопкрофт, Д. Ульман. Структуры данных и алгоритмы. М. : Издательский дом “Вильямс”, 2000 – 384 с. . Хэзфилд Р. , Кирби Л. Искусство программирования на C: Фундаментальные алгоритмы, структуры данных и примеры приложений (пер. с англ. ) {Энциклопедия программиста} К: Диа. Софт`01 - 736 с. Подбельский В. В. , Фомин С. С. Программирование на языке Си: учеб. пособие. –М. : Финансы и статистика, 2007. -600 с. Павловская Т. А. С/С++. Программирование на языке высокого уровня – СПб. : Питер, 2005. - 461 с.

Лекция 1 Введение в язык Си Лекция 1 Введение в язык Си

ANSI C — стандарт языка Си, опубликованный Американским национальным институтом стандартов (ANSI). Следование этому ANSI C — стандарт языка Си, опубликованный Американским национальным институтом стандартов (ANSI). Следование этому стандарту помогает создавать легко портируемые программы.

Тип данных определяет - множество значений, - набор операций, которые можно применять к таким Тип данных определяет - множество значений, - набор операций, которые можно применять к таким значениям, - возможно, способ реализации хранения значений и выполнения операций.

Типы данных: простые и структурированные. Простые - это целые и вещественные числа, символы (относятся Типы данных: простые и структурированные. Простые - это целые и вещественные числа, символы (относятся к целым), перечислимые и указатели (адреса объектов в памяти). Целые, символы и перечислимые – порядковые типы. Структурированные данные это массивы и структуры.

В языке Cи различают понятия В языке Cи различают понятия "тип данных" и "модификатор типа" (со знаком или без знака). Целое со знаком будет иметь как положительные, так и отрицательные значения, а целое без знака только положительные значения.

Переменные Все переменные до их использования должны быть определены (объявлены). При этом задается тип, Переменные Все переменные до их использования должны быть определены (объявлены). При этом задается тип, а затем идет список из одной или более переменных этого типа, разделенных запятыми. Например: int a, b, c; char x, y;

Базовые типы в Си В языке Си можно выделить пять базовых типов, которые задаются Базовые типы в Си В языке Си можно выделить пять базовых типов, которые задаются следующими ключевыми словами: 1) int - целый; целые 2) char - символьный; float - вещественный; 4) double – вещ. двойной точности; вещественные 3) 5) void не имеющий значения.

Характеристика базовых типов 1. 2. Переменная типа char обычно имеет размер 1 байт, ее Характеристика базовых типов 1. 2. Переменная типа char обычно имеет размер 1 байт, ее значениями являются различные символы из кодовой таблицы, например: 'ф', ': ', 'j' (при записи в программе они заключаются в одинарные кавычки). Размер переменной типа int в стандарте языка Си не определен. В большинстве систем программирования размер переменной типа int соответствует размеру целого машинного слова. Например, в компиляторах для 16 -разрядных процессоров переменная типа int имеет размер 2 байта. В этом случае знаковые значения этой переменной могут лежать в диапазоне от -32768 до 32767. В современных компьютерах – 4 и 8 байт.

3. Ключевое слово float позволяет определить переменные вещественного типа. Их значения имеют дробную часть, 3. Ключевое слово float позволяет определить переменные вещественного типа. Их значения имеют дробную часть, отделяемую точкой, например: -5. 6, 31. 28 и т. п. Вещественные числа могут быть записаны также в форме с плавающей точкой, например: 1. 09 e+4. Число перед символом "е" называется мантиссой, а после "е" порядком или экспонентой. Переменная типа float занимает в памяти 4 байта. Она может принимать значения в диапазоне от 3. 4 е-38 до 3. 4 e+38.

4. 5. 4. Ключевое слово double позволяет определить вещественную переменную двойной точности. Она занимает 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. Если после модификатора опущен спецификатор, то Модификаторы записываются перед спецификаторами типа, например: unsigned char. Если после модификатора опущен спецификатор, то компилятор предполагает, что этим спецификатором является int. Таким образом, следующие строки: long а; long int а; являются идентичными и определяют объект а как длинный целый.

Инициализация переменных Переменные в языке Си могут быть инициализированы при их определении: int a Инициализация переменных Переменные в языке Си могут быть инициализированы при их определении: int a = 25, h = 6; char g = 'Q', k = 'm'; float r = 1. 89; long double n = r*123;

Константы • • вещественные, например 123. 456, 5. 61 е-4. Они могут снабжаться суффиксом Константы • • вещественные, например 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', '. ' и символьные - единственный символ, заключенный в одинарные кавычки, например 'О', '2', '. ' и т. п. Символы, не имеющие графического представления, можно записывать, используя специальные комбинации, например n (код 10), (код 0). Допускается и шестнадцатеричное задание кодов символов, которое представляется в виде: 'х2 В', 'х. З 6' и т. п. ; • строковые - последовательность из нуля символов и более, заключенная в двойные кавычки, например: "Это строковая константа". Кавычки не входят в строку, а лишь ограничивают ее. Строка представляет собой массив из перечисленных элементов, в конце которого помещается байт с символом ''. Таким образом, число байтов, необходимых для хранения строки, на единицу превышает число символов между двойными кавычками; • константное выражение, состоящее из одних констант, которое вычисляется во время трансляции (например: а = 60 + 301); • типа long double, в конце записи которых добавляется буква L или l, например: 1234567. 89 L. •

Примеры const long int k = 25; const m = -50; /* подразумевается const Примеры 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, то остальные тоже преобразуются к типу 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 - ~ Операции и приоритеты Прио ритет Знак операции Типы операции Порядок выполнения 1 - ~ ! * & ++ sizeof Унарные Справа налево 2 приведение типов () []. > Выражение Слева направо 3 * Мультипликатив. Слева направо 4 + Аддитивные Слева направо 5 << Сдвиг Слева направо 6 < > >= Отношение Слева направо 7 == Отношение Слева направо / % >> <= !=

8 & Поразрядное И Слева направо 9 ^ Поразрядное исключающее ИЛИ Слева направо 10 8 & Поразрядное И Слева направо 9 ^ Поразрядное исключающее ИЛИ Слева направо 10 | Поразрядное ИЛИ Слева направо 11 && Логическое И Слева направо 12 || Логическое ИЛИ Слева направо 13 ? : Условное Слева направо 14 = *= /= %= += = &= |= >>= <<= ^= Простое и составное присваивание Справа налево 15 , Последовательное вычисление Слева направо

Примеры b += a; // эквивалентно b = b + a a /= b+1; Примеры 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 Действие Условный оператор if (Условие) Действие Условие + Действие if (Условие) Действие 1 else Действие 2 + Действие 1 Условие Действие 2

Условный оператор, примеры if (i != n 1) i++; if (x > x else Условный оператор, примеры 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 (с постусловием) Операторы цикла Три вида циклов: Цикл while (с предусловием) Цикл do while (с постусловием) Цикл for (параметрический)

Цикл while (с предусловием) while (Условие) Тело цикла Пример: вычисление 5! int i, n=5, Цикл while (с предусловием) while (Условие) Тело цикла Пример: вычисление 5! int i, n=5, s=1; i = 1; while (i <= n) { s *= i; i++; } // в s - результат Условие + Тело цикла

Цикл do while (с постусловием) do Тело цикла while (Условие) Тело цикла + Пример: Цикл 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 Цикл for (параметрический) for (Выражение_1; Условие; Выражение_2) Тело цикла Выражение_1 Пример: вычисление 5! int i, n=5, s=1; for (i = 1; i <= n; i++) s *= i; // в s - результат Условие + Тело цикла Выражение_2

Операторы прерывания исполнения цикла Оператор break прекращает выполнение оператора цикла и передает управление следующему Операторы прерывания исполнения цикла Оператор break прекращает выполнение оператора цикла и передает управление следующему за этим циклом оператору. Наиболее естественна следующая форма тела цикла: { операторы break; операторы } Оператор continue позволяет в любой точке тела цикла прервать текущую итерацию и перейти к проверке условия выполнения следующей итерации.

Схемы работы операторов break и continue Условие Тело цикла … break; … continue; … Схемы работы операторов break и continue Условие Тело цикла … break; … continue; … + Условие

Схемы работы операторов break и continue Выражение_1 Условие + Тело цикла … break; … Схемы работы операторов break и continue Выражение_1 Условие + Тело цикла … break; … continue; … Выражение_2

Общий вид программы на си директивы препроцессора описание глобальных переменных и функций int main Общий вид программы на си директивы препроцессора описание глобальных переменных и функций int main () { описание объектов исполняемые операторы return 0; }

Пример #include <stdio. h> int main() { int a, b; float c = 0. Пример #include int main() { int a, b; float c = 0. 0; scanf(“%d%d”, &a, &b); if (b!=0) c = a / b; printf(“c = %f”, c); return 0; }