Язык программирования С Лекция 13. 09. 11 г. 1
Общие сведения Язык 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 стала первым коммерческим продуктом, реализующим идею о том, что операционная система может быть успешно написана на языке высокого уровня, если этот язык является достаточно мощным и гибким. Лекция 13. 09. 11 г. 2
Краткая характеристика языка С Ø Популярный компактный язык общего назначения; изначально создавался как язык системного программирования (для ОС UNIX) Ø «Низкоуровневый» язык, типы данных и управляющие структуры которого близки архитектуре большинства компьютеров Ø Примечательные особенности языка С: • адресная арифметика с использованием указателей • чрезвычайно широкий набор операций • все функции используют передачу аргументов по значению • простая двухуровневая структура областей видимости • отсутствуют средства ввода/вывода и управления памятью (они обеспечиваются подпрограммами из библиотеки) • гибкая структуры типов Лекция 13. 09. 11 г. 3
Деннис Ритчи (Dennis Mac. Alistair Ritchie) [09. 1941, Mount Vernon, New York (USA)] • Разработчик (совместно с Брайаном Керниганом) языка программирования СИ [1972] • Разработчик (совместно с Кеном Томпсоном) операционной системы UNIX [1969 -73]. Лекция 13. 09. 11 г. 4
Брайан Керниган (Brian Wilson Kernighan) [January 1942, Toronto] • Разработчик (совместно с Денисом Ритчи ) языка программирования СИ [1972] Лекция 13. 09. 11 г. 5
Кеннет Томпсон Кен Томпсон (англ. Kenneth Thompson; род. 4 февраля 1943) — пионер компьютерной науки, известен за свой вклад в создание языка программирования C и операционной системы UNIX Лекция 13. 09. 11 г. 6
Стандартизация языка С Первый стандарт языка 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 1 x - новый стандарт языка, который ещё находится в стадии подготовки. Существует черновой вариант. Основным новшеством стандарта являются потоки. Лекция 13. 09. 11 г. 7
Эволюция языка С BCPL → B → C → K&R C → ANSI C → C 99 → C 1 x ≈1960 ≈1972 ≈1978 ≈1988 ≈1999 ? ? Лекция 13. 09. 11 г. 8
Компактность языка С Лекция 13. 09. 11 г. 9
Пример программы на С – «Калькулятор» #include
Последовательность изучения языка С Типы данных, операции и выражения Управляющие конструкции (поток управления) Функции и структура программы Указатели и массивы Структуры Ввод и вывод Препроцессор Стандартная библиотека Обзор расширений языка в новых стандартах Лекция 13. 09. 11 г. 11
Переменные, константы и типы данных Фундаментальные объекты данных, с которыми работает программа – это переменные и константы. Переменная имеет имя, тип и текущее значение. Имя для переменной выбирается программистом произвольно с учетом следующих ограничений: - имя должно начинаться с буквы и может состоять из букв и цифр; знак «подчеркивание» считается буквой; - буквы в верхнем и нижнем регистре различаются; - в качестве имен не разрешается использовать зарезервированные слова языка (for, while, int и т. п. ); - длина имени не может быть более 31 символа для внутренних переменных и более 6 символов для внешних переменных. Замечание. Кроме имен переменных в программах могут использоваться символические имена (символические константы), которые определяются с помощью директивы препроцессора #define и задают правило подстановки: #define имя текст_для_подстановки Например: #define STEP 20 Лекция 13. 09. 11 г. 12
Типы данных Каждая переменная относится к определенному типу данных. Такая принадлежность устанавливается при объявлении переменной: int k; Все переменные одного типа данных имеют одинаковый размер, одинаковое «внутреннее устройство» и одинаковый набор операций, которые можно к ним применить. В языке С определены 4 базовых типа данных: char - один байт, содержащий один символ, int - целое число стандартной длины (для данной системы), float - вещественное число одинарной точности с плавающей точкой, double - вещественное число двойной точности с плавающей точкой. Кроме того, имеется 4 модификатора: short - «короткий» : short int, long - «длинный» : long int, long double, signed - «со знаком» , т. е. величина имеет знаковый разряд, unsigned - «без знака» , т. е. величина не имеет знакового разряда. Лекция 13. 09. 11 г. 13
Пример Пусть для конкретной вычислительной платформы переменные типа int имеют длину 4 байта и текущее значение некоторой переменной таково: 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. Лекция 13. 09. 11 г. 14
Иллюстрация к примеру #include
Числовые константы Константы, в отличие от переменных, не имеют имён. Запись константы в виде цепочки символов одновременно является и значением этой константы. Для каждого типа данных существуют свои правила записи констант. Целочисленные константы записывают, как правило, с помощью десятичных цифр, хотя возможна их запись в восьмеричной и шестнадцатеричной системах: 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, … Лекция 13. 09. 11 г. 16
Определение символических констант в 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
Символьные константы Символьная константа – это целое число, записываемое в форме одиночного символа в одинарных кавычках: ‘x’, ‘ 0’ и т. п. Значением символьной константы является числовое значение кода символа. Например, значением константы ‘ 0’ является число 48. Символьные константы могут участвовать в арифметических операциях. Для записи «неграфических» символов используют управляющие последовательности: a – подача звукового сигнала, b – возврат назад и затирание f – прогон страницы, n – конец строки r – возврат каретки, t – горизонтальная табуляция v – вертикальная табуляция, \ - обратная косая черта ? – вопросительный знак, ’ – одинарная кавычка ” – двойная кавычка 00 – восьмеричное число xhh – шестнадцатеричное число – нулевой байт Лекция 13. 09. 11 г. 18


