Скачать презентацию Рейтинг языков программирования www tiobe com index php content paperinfo tpci index html Скачать презентацию Рейтинг языков программирования www tiobe com index php content paperinfo tpci index html

Лекция-02.ppt

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

Рейтинг языков программирования (www. tiobe. com/index. php/content/paperinfo/tpci/index. html ) Лекция 09. 13 г. 1 Рейтинг языков программирования (www. tiobe. com/index. php/content/paperinfo/tpci/index. html ) Лекция 09. 13 г. 1

Язык программирования С Лекция 09. 13 г. 2 Язык программирования С Лекция 09. 13 г. 2

Общие сведения Язык C был создан в 1972 г. Дэннисом Ритчи, который работал в Общие сведения Язык C был создан в 1972 г. Дэннисом Ритчи, который работал в компании Bell Telephone Laboratories. Родословная языка С берет свое начало от языка Алгол и включает в себя Паскаль и ПЛ/1. C был разработан как язык для программирования в новой по тем временам операционной системе Unix. ОС Unix была написана на языке ассемблера для ЭВМ PDP-7 и перенесена затем на PDP-11. На язык C оказал значительное влияние его предшественник, язык В, созданный Кэном Томпсоном, а язык В, в свою очередь, является последователем языка BCPL. Язык ВСРL (Basic Combined Programming Language) был создан в 1969 г. Мартином Ричардсом в рамках проекта "Комбинированный язык программирования" в Кэмбриджском университете в Лондоне. Вскоре Unix была переписана на языке C, и в 1974 - 75 гг. OC Unix фирмы Bell Laboratories стала первым коммерческим продуктом, реализующим идею о том, что операционная система может быть успешно написана на языке высокого уровня, если этот язык является достаточно мощным и гибким. Лекция 09. 13 г. 3

Краткая характеристика языка С Ø Популярный компактный язык общего назначения; изначально создавался как язык Краткая характеристика языка С Ø Популярный компактный язык общего назначения; изначально создавался как язык системного программирования (для ОС UNIX) Ø «Низкоуровневый» язык, типы данных и управляющие структуры которого близки архитектуре большинства компьютеров Ø Примечательные особенности языка С: • адресная арифметика с использованием указателей • чрезвычайно широкий набор операций • все функции используют передачу аргументов по значению • простая двухуровневая структура областей видимости • отсутствуют средства ввода/вывода и управления памятью (они обеспечиваются подпрограммами из библиотеки) • гибкая структуры типов Лекция 09. 13 г. 4

Деннис Ритчи (Dennis Mac. Alistair Ritchie) [09. 1941, Mount Vernon, New York (USA)] • Деннис Ритчи (Dennis Mac. Alistair Ritchie) [09. 1941, Mount Vernon, New York (USA)] • Разработчик (совместно с Брайаном Керниганом) языка программирования С [1972] • Разработчик (совместно с Кеном Томпсоном) операционной системы UNIX [1969 -73]. Б. Кергниган, Д. Ритчи Язык программирования С. — М. : «Вильямс» , 2011. — 304 с. Лекция 09. 13 г. 5

Брайан Керниган (Brian Wilson Kernighan) [January 1942, Toronto] • Разработчик (совместно с Денисом Ритчи Брайан Керниган (Brian Wilson Kernighan) [January 1942, Toronto] • Разработчик (совместно с Денисом Ритчи ) языка программирования С [1972] Лекция 09. 13 г. 6

Кеннет Томпсон Кен Томпсон (англ. Kenneth Thompson; род. 4 февраля 1943) — пионер компьютерной Кеннет Томпсон Кен Томпсон (англ. Kenneth Thompson; род. 4 февраля 1943) — пионер компьютерной науки, известен за свой вклад в создание языка программирования C и операционной системы UNIX Лекция 09. 13 г. 7

Стандартизация языка С Первый стандарт языка C был опубликован американским институтом ANSI. Через некоторое Стандартизация языка С Первый стандарт языка C был опубликован американским институтом ANSI. Через некоторое время он был принят международной организацией по стандартизации ISO, продолжившей выпускать следующие версии стандарта, которые стали приниматься как стандарт и институтом ANSI. Несмотря на это стандарт до сих пор чаще называют ANSI C, а не ISO C. C 89 В 1983 году Американский национальный институт стандартов сформировал комитет X 3 J 11 для создания спецификации стандарта C. В 1989 году, после длительного и напряжённого процесса, стандарт был завершён и утверждён как ANSI X 3. 159 -1989 «Язык программирования C» . Именно эту версию часто называют «ANSI C» , или «C 89» (чтобы отличить её от C 99). C 90 В 1990 году, стандарт ANSI C (с небольшими изменениями) был принят Международной организацией по стандартизации (ISO) как ISO/IEC 9899: 1990. Эту версию иногда называют C 90. Однако, термины C 89 и C 90 относятся в сущности к одному языку. C 99 В марте 2000 года ANSI принял стандарт ISO/IEC 9899: 1999. Этот стандарт обычно называют C 99. Это и есть современный стандарт языка программирования C, однако его не поддерживает полностью ни один компилятор. C 11 В декабре 2011 г. ISO опубликовала новый международный стандарт языка программирования C: ISO/IEC 9899: 2011, ранее известный как C 1 X. Лекция 09. 13 г. 8

Стандартизация языка С Опубликован новый стандарт языка C: C 11 Международная организация по стандартизации Стандартизация языка С Опубликован новый стандарт языка C: C 11 Международная организация по стандартизации (ISO) опубликовала новый международный стандарт языка программирования C: ISO/IEC 9899: 2011, ранее известный как C 1 X. Основные изменения: • поддержка многопоточности; • улучшенная поддержка юникода; • обобщенные макросы (type-generic expressions, позволяют статичную перегрузку); • анонимные структуры и объединения (упрощают обращение ко вложенным конструкциям); • управление выравниванием объектов; • статичные утверждения (static assertions); • удаление опасной функции gets (в пользу безопасной gets_s); • функция quick_exit; • спецификатор функции _Noreturn; • новый режим эксклюзивного открытия файла. Кроме того, определен ряд необязательных для реализации возможностей, включая новый набор безопасных функций (в т. ч. для работы с массивами с проверкой границ). В этот список также попали возможности, которые в предыдущем стандарте считались обязательными: комплексная арифметика, массивы переменной длины. Некоторые возможности нового стандарта уже поддерживаются компиляторами GCC и Clang. Стоит, однако, отметить, что полной поддержки предыдущего стандарта C 99 в этих и большинстве других компиляторов нет. Лекция 09. 13 г. 9

Эволюция языка С BCPL → B → C → K&R C → ANSI C Эволюция языка С BCPL → B → C → K&R C → ANSI C → C 99 → C 11 ≈1960 ≈1972 ≈1978 ≈1988 ≈1999 2011 Лекция 09. 13 г. 10

Последний стандарт языка С Лекция 09. 13 г. 11 Последний стандарт языка С Лекция 09. 13 г. 11

Компактность языка С Лекция 09. 13 г. 12 Компактность языка С Лекция 09. 13 г. 12

Пример программы на С – «Калькулятор» #include <stdio. h> 1 #include <stdlib. h> #define Пример программы на С – «Калькулятор» #include 1 #include #define PROMPT ': ' 2 int main(){ 3 float a, b, result; 4 char opr; 5 while(putchar(PROMPT), scanf("%f%c%f", &a, &opr, &b) != EOF){ switch(opr){ 6 case '+': result = a + b; break; case '-': result = a - b; break; 7 case '*': result = a * b; break; case '/': result = a / b; break; default: 8 printf("ERROR **** wrong sign of the operationn"); 9 exit(EXIT_FAILURE); 10 } printf("Result = %gn", result); } exit(EXIT_SUCCESS); } Лекция 09. 13 г. 13

Последовательность изучения языка С Типы данных, операции и выражения Управляющие конструкции (поток управления) Функции Последовательность изучения языка С Типы данных, операции и выражения Управляющие конструкции (поток управления) Функции и структура программы Указатели и массивы Структуры Ввод и вывод Препроцессор Стандартная библиотека Обзор расширений языка в новых стандартах Лекция 09. 13 г. 14

Переменные, константы и типы данных Фундаментальные объекты данных, с которыми работает программа – это Переменные, константы и типы данных Фундаментальные объекты данных, с которыми работает программа – это переменные и константы. Переменная имеет имя, тип и текущее значение. Имя для переменной выбирается программистом произвольно с учетом следующих ограничений: -имя должно начинаться с буквы и может состоять из букв и цифр; знак «подчеркивание» считается буквой; -буквы в верхнем и нижнем регистре различаются; -в качестве имен не разрешается использовать зарезервированные слова языка (for, while, int и т. п. ); -длина имени не может быть более 31 символа для внутренних переменных и более 6 символов для внешних переменных. Замечание. Кроме имен переменных в программах могут использоваться символические имена (символические константы), которые определяются с помощью директивы препроцессора #define и задают правило подстановки: #define имя текст_для_подстановки Например: #define STEP 20 Лекция 09. 13 г. 15

Типы данных Каждая переменная относится к определенному типу данных. Такая принадлежность устанавливается при объявлении Типы данных Каждая переменная относится к определенному типу данных. Такая принадлежность устанавливается при объявлении переменной: int k; Все переменные одного типа данных имеют одинаковый размер, одинаковое «внутреннее устройство» и одинаковый набор операций, которые можно к ним применить. В языке С определены 4 базовых типа данных: char - один байт, содержащий один символ, int - целое число стандартной длины (для данной системы), float - вещественное число одинарной точности с плавающей точкой, double - вещественное число двойной точности с плавающей точкой. Кроме того, имеется 4 модификатора: short - «короткий» : short int, long - «длинный» : long int, long double, signed - «со знаком» , т. е. величина имеет знаковый разряд, unsigned - «без знака» , т. е. величина не имеет знакового разряда. Лекция 09. 13 г. 16

Представление чисел. Системы счисления Система счисления — это символический метод записи чисел, позволяющий представить Представление чисел. Системы счисления Система счисления — это символический метод записи чисел, позволяющий представить числа с помощью письменных знаков (цифр). Наибольшее распространение получили позиционные системы счисления (ПСС), в которых положение цифры в записи числа однозначно определяет то количество, которое представляет эта цифра, например: 274 = 2*102+7*101+4*100=200+70+4 Важнейшими характеристиками любой ПСС являются: • основание системы счисления и • набор цифр, используемых для записи чисел. Так, основанием десятичной СС является 10, а набором цифр – множество {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Для компьютеров используется двоичная СС с основанием 2 и цифрами 0 и 1. Пример числа в двоичной СС: 10102 = 1*23+0*22+1*21+0*20=8+2=10 Также распространены восьмеричная СС (осн. =8, цифры={0, 1, 2, 3, 4, 5, 6, 7}) и шестнадцатеричная СС (осн. =16, цифры={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f}). Примеры: 3758 = 3*82+7*81+5*80 = 3*64+7*8+5 = 192+56+5 = 25310 1 f 7 a 16 = 1*163+15*162+7*161+10*160 = 1*4096+15*256+7*16+10 = 4096+3840+112+16 = 805810 Лекция 09. 13 г. 17

Биты, байты и машинные слова В современных компьютерах любая информация представляется комбинацией 0 и Биты, байты и машинные слова В современных компьютерах любая информация представляется комбинацией 0 и 1. Поэтому наименьшей порцией данных является 1 бит, способный хранить либо 0, либо 1. На практике наряду с битами используют боле крупные единицы – байты и машинные слова. Размер 1 байта = 8 битов, а размер машинного слова зависит от архитектуры компьютера. Для 32 -разрядной архитектуры 1 машинное слово = 32 бита, или 4 байта. Изображать значения, хранящиеся в байтах и машинных словах, в двоичном коде громоздко, поэтому используют восьмеричную или шестнадцатеричную запись, например: 101010112 = 2538 = ab 16 = 17110 В языке С допускается записывать целые числа в десятичной, восьмеричной и шестнадцатеричной системах счисления: • Десятичная запись – обычная (но первой цифрой не может быть 0) • Восьмеричная запись – начинается с 0, например: 0253 • Шестнадцатеричная запись – начинается с 0 x, например: 0 xab Лекция 09. 13 г. 18

Беззнаковые числа и числа со знаком В языке С допускается использовать целые числа без Беззнаковые числа и числа со знаком В языке С допускается использовать целые числа без знака (они всегда ≥ 0) или числа со знаком (положительные и отрицательные). Для беззнаковых чисел все разряды (биты) используются для представления величины числа. Например, если все биты у байта =1, то мы имеем: 0 xff = 255. Для чисел со знаком правила более сложные. У положительных чисел старший бит (крайний левый) всегда =0, а остальные биты выражают само число, например: 0 x 7 f = 127 и это будет максимальное положительное число, которое можно записать в 1 байт. Отрицательные числа записываются в так называемом дополнительном коде и у них всегда старший бит будет =1. Чтобы получить число в дополнительном коде, нужно взять сначала соответствующее положительное число, а затем применить к нему 2 операции: • Инвертировать двоичную запись этого числа (единицы заменить нулями, а нули – единицами) • Добавить к полученному коду 1 (сложение выполнять по правилам двоичной арифметики) Пример: 116 = 0 x 74 = 01110100; -116 = 10001011 + 1 = 10001100 = 0 x 8 c Замечание: 116 + (– 116) = 0 x 74 + 0 x 8 c = 0 Лекция 09. 13 г. 19

Пример Пусть для компьютера с 32 -разрядной архитектурой текущее значение некоторой переменной таково: 1 Пример Пусть для компьютера с 32 -разрядной архитектурой текущее значение некоторой переменной таково: 1 1 1 … … 1 1 1 32 или в формате шестнадцатеричной константы: 0 xffff Тогда, если считать эти байты значением переменной типа signed int, будем иметь значение -1. Если же в этой области памяти хранится переменная типа unsigned int, её значением будет 232 -1 = 4 294 967 295. Другой пример: 1 0 0 … … 0 32 0 0 или в формате шестнадцатеричной константы: 0 x 80000000 Для переменной типа signed int имеем значение -2 147 483 648. А для переменной типа unsigned int: 231 = 2 147 483 648. Лекция 09. 13 г. 20

Иллюстрация к примеру #include <stdio. h> int main() { printf( Иллюстрация к примеру #include int main() { printf("0 xffffffff printf("0 x 80000000 getchar(); return 0; } (signed) = (unsigned) %d n", 0 xffff ); = %u n", 0 xffff ); %d n", 0 x 80000000 ); = %u n", 0 x 80000000 ); Лекция 09. 13 г. 21

Числовые константы Константы, в отличие от переменных, не имеют имён. Запись константы в виде Числовые константы Константы, в отличие от переменных, не имеют имён. Запись константы в виде цепочки символов одновременно является и значением этой константы. Для каждого типа данных существуют свои правила записи констант. Целочисленные константы записывают, как правило, с помощью десятичных цифр, хотя возможна их запись в восьмеричной и шестнадцатеричной системах: 123, 67543, 037, 07777, 0 xabf 7, 0 XFFFF, … Допускается использование суффиксов l или L (long), а также u или U (unsigned): 123456789 L, 0 XFUL (это просто число 15). Вещественные константы содержат десятичную точку, а также степенную часть (экспоненту) или и то, и другое: 1234. 5, 1 e-2, 12. 3 E 1, … Такие константы имеют тип double, однако имеется возможность записи констант float и long double : 1. 2 f, 23. 45 F, 1 e-1 L, … Лекция 09. 13 г. 22

Определение символических констант в limits. h #define CHAR_BIT 8 #define #define SCHAR_MIN (-128) SCHAR_MAX Определение символических констант в limits. h #define CHAR_BIT 8 #define #define SCHAR_MIN (-128) SCHAR_MAX 127 UCHAR_MAX 255 CHAR_MIN SCHAR_MIN CHAR_MAX SCHAR_MAX #define INT_MAX 2147483647 #define INT_MIN (-INT_MAX-1) #define UINT_MAX 0 xffff #define SHRT_MAX 32767 #define SHRT_MIN (-SHRT_MAX-1) #define USHRT_MAX 0 xffff #include #include int main() { printf("INT_MAX = %d n", INT_MAX); printf("UINT_MAX = %u n", UINT_MAX); printf("SHRT_MAX = %d n", SHRT_MAX); printf("USHRT_MAX = %u n", USHRT_MAX); printf("LONG_MAX = %ld n", LONG_MAX); printf("ULONG_MAX = %lu n", ULONG_MAX); getchar(); return 0; } #define LONG_MAX 2147483647 L #define LONG_MIN (-LONG_MAX-1) #define ULONG_MAX 0 xffff. UL Лекция 09. 13 г. 23

Символьные константы Символьная константа – это целое число, записываемое в форме одиночного символа в Символьные константы Символьная константа – это целое число, записываемое в форме одиночного символа в одинарных кавычках: ‘x’, ‘ 0’ и т. п. Значением символьной константы является числовое значение кода символа. Например, значением константы ‘ 0’ является число 48. Символьные константы могут участвовать в арифметических операциях. Для записи «неграфических» символов используют управляющие последовательности: a – подача звукового сигнала, b – возврат назад и затирание f – прогон страницы, n – конец строки r – возврат каретки, t – горизонтальная табуляция v – вертикальная табуляция, \ - обратная косая черта ? – вопросительный знак, ’ – одинарная кавычка ” – двойная кавычка 00 – восьмеричное число xhh – шестнадцатеричное число – нулевой байт Лекция 09. 13 г. 24