1. История создания языка С



жүктеу 0.98 Mb.
бет1/7
Дата03.12.2017
өлшемі0.98 Mb.
  1   2   3   4   5   6   7

1. История создания языка С.

Был разработан в начале 1970-х г. Денисом Ритчи как развитие языка Би. Был создан для использования в операционной системе Юникс. Был разработан в лабораториях Bell Labs в период с 1969 по 1973 г. Согласно Ритчи, самый активный период творчества пришелся на 1972 год. Язык назвали Си, потому что многие его особенности берут начало от старого языка Би. Си является самым популярным языком для создания системного программного обеспечения. Его также часто используют для создания прикладных программ. В дальнейшем синтаксис Си стал основой для многих других языков. Язык Си был создан уже после внедрения стандарта ASCII, поэтому использует почти все его графические символы. Более старые языки (Фортран, Кобол) использовали только круглые скобки, а в Си есть и круглые, и квадратные, и фигурные. Кроме того, в Си различаются заглавные и строчные буквы, а более старые языке использовали только заглавные.

В 1978 году Ритчи и Керниган опубликовали первую редакцию книги «Язык программирования Си». В конце 1970-х Си начал вытеснять Бейсик с позиции ведущего языка для программирования микрокомпьютеров. В 1980-х годах он был адаптирован для использования в IBM PC, что привело к резкому росту его популярности. В то же время сотрудники в лабораториях Bell Labs начали работу по добавлению в Си возможностей объектно-ориентированного программирования. Язык, который они в итоге сделали, С++, в настоящее время является самым распространенным языком программирования. Си остается более популярным в UNIX-подобных системах.
2. Основные характеристики алгоритмического языка Си.

Язык С часто называют языком программирования среднего уровня. Но это не значит, что С менее мощный, менее развитой и более трудный в использовании, чем языки высокого уровня, такие как Basic или Pascal. Это также не значит, что С такой же громоздкий и неудобный, как ассемблер (язык низкого уровня). Языком среднего уровня его называют скорее потому, что он объединяет в себе лучшие черты языков высокого уровня с возможностями ассемблера.

Как язык среднего уровня С позволяет манипулировать битами, байтами и адресами, то есть теми базовыми элементами данных, с которыми работает компьютер. Несмотря на это, программа, написанная на С, обладает высокой переносимостью. Переносимость – это свойство программного обеспечения, созданного для одного типа компьютера или операционной системы, позволяющее легко переделать его для другого типа, т.е. перенести в другую вычислительную среду.

Все языки высокого уровня придерживаются концепции типов данных. Тип данных представляет собой набор значений, хранящихся в переменной, а также набор операций, выполнение которых допускается над этими значениями. Обычные типы данных – это целые числа, символы и числа с плавающей точкой. Язык С имеет несколько встроенных типов данных, однако не является сильно типизированным языком, как Pascal или Ada. В языке С допускается почти все преобразования типов. Например, в выражениях можно свободно смешивать переменные символьного и целого типов.

В отличие от большинства языков высокого уровня, в С почти отсутствует контроль ошибок в процессе выполнения программы. Например, не проверяется нарушение границ массивов. Ответственность за подобные ошибки полностью возлагается на программиста.

С не требует строгой совместимости параметров и аргументов функций. В языках программирования высокого уровня обычно необходимо, чтобы тип аргумента более или менее соответствовал типу параметра. Для С это не характерно, здесь аргумент может иметь почти любой тип, если его можно разумно преобразовать в тип параметра. Более того, компилятор С автоматически осуществляет все виды необходимых преобразований.

Важная особенность С – это малое количество ключевых слов, составляющих команды языка. В С89 определено 32 ключевых слова, причем в С99 добавлено только 5 слов. Языки высокого уровня обычно имеют значительно больше ключевых слов, например, в большинстве версий языка Basic их количество превышает сотню!

Язык С хорошо структурирован. В книгах по программированию используется понятие блочной структурированности языка. Хоть этот термин и нельзя применять в полной мере к языку С, его обычно называют просто структурированным языком.

Отличительной особенностью структурированного языка является отдельное размещение различных частей кода программы и данных. Таким способом программист может «скрыть» часть информации, используемую для выполнения специфической задачи, от тех участков программы, где эта информация не нужна.

Структурированный язык предоставляет программисту много различных возможностей. Например, структурированные языки обычно содержат несколько операторов цикла, таких как while, do-while, for.


3. Область применения и системы программирования языка Си.

Си – универсальный язык программирования. Не рассчитан на какую-то конкретную область применения. Первоначально Си задумывался как заменитель Ассемблера для написания операционных систем. Текст операционной системы оказывался легко переносимым с одной платформы на другую. Первой операционной системой, написанной практически целиком на Си, была система Unix. В настоящее время почти все используемые операционные системы написаны на Си. Тем не менее, область применения языка Си не ограничилась разработкой операционных систем. Язык Си оказался очень удобен в программах обработки текстов и изображений, в научных и инженерных расчетах.

Системы программирования – системы для разработки новых программ.

Системы программирования обычно включают компилятор, осуществляющий преобразование программ на языке программирования в программу в машинных кодах, или интерпретатор, осуществляющий непосредственное выполнение программы на языке программирования, редактор текстовых программ, библиотеки полезных подпрограмм, отладчики и др. Для языка Си имеется множество систем программирования, позволяющих создавать программы, работающие в среде DOS, Windows и др.

Системы программирования языка си: Visual C++, Visual Basic, Турбо-Си, разработанная фирмой Borland.
4. Исходные и объектные модули, процессы компиляции и связывания.

Исходный модуль (source code) – это текст программы на языке программирования.

Объектный модуль (object code) – результат обработки компилятором исходного модуля. Объектный модуль не может быть выполнен. Это незавершенный вариант машинной программы.

Исполняемый модуль создает компоновщик, объединяя в один общий модуль объектные модули, реализующие отдельные части алгоритма. На этом этапе к машинной программе подсоединяются необходимые функции стандартной библиотеки.

Стандартная библиотека – набор программных модулей, выполняющих наиболее часто встречающиеся в программировании задачи: ввод, вывод данных, вычисление математических функций, сортировки и т.д.

Есть два способа выполнения программы компилятором: она может быть подвергнута компиляции или интерпретации. Программа, написанная на любом языке программирования, может как компилироваться, так и интерпретироваться, однако многие языки изначально созданы для выполнения преимущественно одним из этих способов. И хотя интерпретаторы С существуют и доступны для программистов, С разрабатывался преимущественно для компиляции.

В простейшем случае интепретатор читает исходный текст программы по одной строке за раз, выполняет эту строку и только после этого переходит к следующей. Компилятор читает сразу всю программу и конвертирует ее в объектный код, то есть транслирует исходный текст программы в форму, более пригодную для непосредственного выполнения компьютером. Объектный код также называют двоичным или машинным кодом. Когда программа скомпилирована, в ее коде уже нет отдельных строк исходного кода.

В общем случае интерпретируемая программа выполняется медленнее, чем скомпилированная. Необходимо помнить, что компилятор преобразует исходный текст программы в объектный код, который выполняется компьютером непосредственно. Значит, потеря времени на компиляцию происходит лишь единожды, а в случае интерпретации – каждый раз при очередной интерпретации фрагмента программы в процессе ее выполнения.

При вызове библиотечной фукнции компилятор “запоминает» ее имя. Потом компоновщик связывает код исходной программы с объектным кодом, уже найденным в стандартной библиотеке. Этот процесс называется компоновкой.
5. Алфавит языка Си. Лексемы

Алфавит языка программирования С основывается на множестве символов таблицы кодов ASCII. Он включает:

-строчные и прописные буквы латинского алфавита;

- цифры от 0 до 9;

- символ «_» (нижнее подчеркивание);

- набор специальных символов: " { } , | [ ] + - % / \ ; ' : ? < > = ! & # ~ ^ . *

- прочие символы.

Алфавит С служит для построения слов, которые в Си называются лексемами. Различают пять типов лексем:

- идентификаторы;

- ключевые слова;

-знаки (символы) операций;

- литералы (с англ. константа) – запись в исходном коде компьютерной программы, представляющая собой фиксированное значение. 4 типа литералов: целочисленный, вещественный, символьный, строковый. Числовые литералы записываются непосредвенно числом. Строковые литералы представляют собой строку символов, заключенную в кавычки. Символьные литералы включают один символ. ;

- разделители (пробел, символы горизонтальной и вертикальной табуляции, символ новой строки, комментарии).
6. Ключевые слова языка Си.

Ключевые слова – это зарезервированные идентификаторы, которые наделены определенным смыслом. Ключевые слова языка Си зарезервированы, т.е. нельзя использовать их для других целей, такие как задание имени переменной. 32 ключевых слова.

Циклы: for, while, do;

Принятие решения и выбор: if, else, switch, case, default.

Переходы: break, continue, goto;

Тип данных: char, int, short, long, unsigned, signed, float, double, struct, union, typedef, void.

Классы памяти: auto, extern, register, static.

Разное: sizeof, return

Применяемое только в некоторых системах: enum

Квалификатор типа: const, volatile.


7. Знаки пунктуации, специальные символы и знаки операций в языке Си.

Знаки пунктуации и специальные символы:

, запятая

. точка

; точка с запятой



: двоеточие

? знак вопроса

' одинарная цитатная скобка

'' двойная цитатная скобка

( левая круглая скобка

) правая круглая скобка

[ левая прямоугольная скобка

] правая прямоугольная скобка

{ левая фигурная скобка

} правая фигурная скобка



< левая угловая скобка

> правая угловая скобка

! восклицательный знак

| вертикальная черта

/ знак деления

\ знак обратного деления

~ тильда

+ плюс


# номер

% процент

& амперсанд

^ крышечка, домик

* звездочка

- минус


= равно

Язык С содержит большое количество встроенных операций. Существует четыре класса операций: арифметические, логические, поразрядные и операции сравнения. Кроме них, есть также некоторые специальные операторы, например, оператор присваивания.

Общая форма оператора присваивания: имя переменной=выражение;

В одном операторе присваивания можно присвоить одно и то же значение многим переменным. Для этого используется оператор множественного присваивания: х=y=z=0;

Составное присваивание – разновидность оператора присваивания, в которой запись сокращается и становится более удобной в написании. Например, оператор x=x+10; можно записать как x+=10;

Арифметические операции.

- вычитание, так же унарный минус

+ сложение

* умножение

/ деление

% остаток от деления

++ инкремент, или увеличение, прибавляет 1 к значению переменной.

--декремент, или уменьшение

Приоритет выполнения арифметические операторов:

Наивысший: ++, --, - (унарный минус), *, /, %

Наинизший: +, - .

Операции с одинаковым приоритетом выполняются слева направо. Используя круглые скобки, можно изменить порядок вычислений.



Операции сравнения:

> больше


>= больше или равно

< меньше

<= меньше или равно

== равно


!= не равно

Логические операции

&& И


|| ИЛИ

! НЕ, отрицание



Операции над указателями:

& - операция получения адреса: выдает адрес переменной, имя которой стоит за обозначением операции.

* - косвенная адресация: выдает значение записанное по адресу, на который ссылается указатель.

Дополнительные операции:

Операция условия?

Оператор ? часто можно использовать вместо оператора вида if-then-else.

Выражение1 ? Выражение2 : Выражение3;

Сначала вычисляется Выражение1, если оно истинно, то вычисляется Выражение2 и его значение присваивается всему выражение; если Выражение1 ложно, то вычисляется Выражение3 и всему выражению присваивается его значение.

x=10;


y=x>9 ? 100:200; переменной у будет присвоено значение 100.

sizeof выдает размер (в байтах) операнда, стоящего справа.

(type) операция приведения типа: превращает следующее за ней значение в тим, определенный ключевым словом, заключенным в скобки.

Операция «запятая» - связывает два выражения в одно и гарантирует, что левое выражение будет вычислено первым. Типичным примером использования является включение дополнительной информации в управляющее выражение цикла for.



Операции над структурами и объединениями.

. операция принадлежности используется совместно с именем структуры (или объединения) для задания элемента этой структуры (или объединения). Если name является именем структуры, а member – элементов, указанным в структурном шаблоне, то name.member определяет этот элемент структуры.

-> косвенная адресация. Используется совместно с указателем на структуру (или объединения) для идентификации того или иного элемента этих структур (или объединений). Предположим, что ptrstr является указателем на структуру, а member – элементом, указанным в структурном шаблоне. Тогда ptrstr->member определяет, что это элемент структуры, на которую ссылается указатель.
8. Идентификаторы в языке Си.

В качестве идентификатора может быть использована последовательность строчных или прописных букв латинского алфавита и цифр, а также символов подчеркивания. Идентификатор может начинаться только с буквы или символа подчеркивания, но ни в коем случае ни с цифры. Строчные и прописные буквы в идентификаторе различаются.

Важной особенностью является то, что компилятор допускает любое количество символов в идентификаторе, хотя значимыми являются первые 31 символ. Идентификатор создается на этапе объявления переменной, функции, структуры и т.п. после этого его можно использовать в последующих операторах разрабатываемой программы.

Идентификатор не должен совпадать с ключевыми словами, с зарезервированными словами и именами функций из библиотеки компилятора языка С.

Следует обратить особое внимание на использование символа подчеркивания в качестве первого символа идентификатора, поскольку идентификаторы, построенные таким образом, могут совпадать с именами системных функций или переменных, в результате чего они станут недоступны.
9. Виды констант в языке Си.

Константа – это фиксированное значение, которое не может быть изменено программой. Константы также называются литералами. Константы в Си можно задавать двумя способами: 1. с помощью директивы препроцессора #define. #define MILLENIUM 1000 задает символическое имя MILLENIUM для константы 1000. Препроцессор всюду в тексте заменяет это имя на константу 1000.

2. с помощью модификатора const. cons int MILLENIUM = 1000; Модификатор const означает, что переменная MILLENIUM является константой, т.е. менять ее значение нельзя.

5 видов констант: символьные, целые, вещественные, строковые, константы перечисляемого типа.


10. Константы целые и вещественные.

Целые константы определяются как числа без дробной части.

Бывают десятичные, 16-ричные, 8-ричные. Десятичные цифры записываются без префиксов, 16-ричные константы имеют префикс 0х. Префикс – символьная запись, показывающая основание системы счисления константы, 8-ричная константа имеет префикс 0. Под константы выделяется 2 или 4 байта. Двухбайтные константы имеют тип int. Этот тип бывает знаковый и беззнаковый ( signet int, unsigned int). Четырехбайтные константы имеют тип long. Этот тип бывает знаковый и беззнаковый.

Константы в плавающем формате записываются как числа с десятичной точкой, напримре, 11.123. Допускается также экспоненциальное представление чисел ( в виде мантиссы и порядка): 111.23е-1. Всем константам в плавающем формате приписывается тип double.

Определение типов констант по умолчанию является вполне удовлетворительным при разработке большинства программ. Однако, используя суффикс, можно явно указать тип числовой константы. Если после числа в плавающем формате стоит суффикс F, то считается, что константа имеет тип float, а если L, то long double. Для целых типов суффикс U означает unsigned, а L – long. Тип суффикса не зависит от регистра, например, как F, так и f определяют константы типа float. Пример: 35000L – long int, 1.0 – double, 123.23F –float.
11. Символьные константы.

Данные типа char занимают в памяти 1 байт. Код от 0 до 255 в этом байте задает один из 256 возможных символов. Тип char является типом «целое». Данные типа char могут рассматриваться и как данные со знаком (signed char) и без знака (unsigned char). В случае signed char диапазон значений от -128 до 127, а unsigned char от 0 до 255.

Константа типа char – это символ заключенный в одиночные кавычки. Каждому символу ставится в соответствие некоторый код. По этому коду из таблицы описания конфигурации символа выбирается изображение этого символа, которое выводится на экран.

Значением символьной константы является целое число. Например, символ '0' в коде ASCII имеет значение равное 48 в 10с/с. Символьные константы (точнее их коды) могут участвовать в операциях над числами так же, как и существующие другие целые.

Коды цифр и латинских букв идут в порядке возрастания, т.е.

'0'<'1'<'2'<…<’9’…<’A’<’B’<’C’<…<’Z’<’a’<’b’<’c’<…<’z’.

В символьных и строковых константах могут использоваться специальные управляющие знаки:

\n – переход на новую строку;

\t – горизонтальная табуляция;

\v – вертикальная табуляция;

\а – сигнал;

\' – одиночная кавычка;

\» двойная кавычка.
12. Строковые константы.

Строка – это нуль или более символов, заключенных в двойные кавычки. Кавычки не входят в строку. Фактически строковая константа – это массив символов. Во внутреннем представлении строки в конце автоматически помещается нуль-символ ('\0'), поэтому для строки требуется память на один байт больше, чем количество символов между двойными кавычками.

Символьная константа и строка, содержащая один байт не одно и то же, т.е. ‘x’!=”x”. Здесь ”x” – это массив символов, содержащий один символ (х) и '\0', 'x' –это целое значение равное коду буквы х из ASCII.

При инициализации массива символов можно использовать строковую константу:

char s[10]=”Privet”: - инициализирует переменную s как массив символов из семи элементов. Если задается размер массива, а строка длиннее, то выдается сообщение об ошибке. Если строка короче, чем размер массива, то лишние элементы массива содержат «мусор».
13. Типы данных: целый, вещественный, символьный.

Следует различать тип данных и модификатор типа.

Имеются следующие базовые типы: char (символьный), int (целый), float (вещественный), double (вещественный с двойной точностью), void (пустой тип).

К модификатором относятся: unsigned (беззнаковый), signed (знаковый), short (короткий), long (длинный).

Тип данных и модификатор типа определяют:

-формат хранения данных в оперативной памяти;

-диапазон значений, в пределах которого может изменяться переменная;

-операции, которые могут выполняться над данными соответствующего типа.



Данные целого типа (signed char, unsigned char, signed int, unsigned int, signed short int, unsigned short int, signed long int, unsigned short int) . По умолчанию все переменные целого типа считаются signed. Ключевые слова signed и unsigned могут употребляться самостоятельно при определении переменной. В этом случае они рассматриваются соответственно как signed int и unsigned int.

Вещественные типы данных. Для объявления переменных плавающего типа используются ключевые слова float, double, long double. Все числа с плавающей точкой представляются в виде двух частей – мантиссы М и порядка Р числа в двоичной системе счисления:

C=M*2(в степени Р).

Величины типа float занимают 4 байта. Величины типа double занимают 8 байт в памяти. Признаком константы с плавающей точкой является наличие в ее записи точки, символа Е или е.

Символьные данные.

Данные типа char занимают в памяти 1 байт. Код от 0 до 255 в этом байте задает один из 256 возможных символов. Тип char является типом «целое». Данные типа char могут рассматриваться и как данные со знаком (signed char) и без знака (unsigned char). В случае signed char диапазон значений от -128 до 127, а unsigned char от 0 до 255.

Константа типа char – это символ заключенный в одиночные кавычки. Каждому символу ставится в соответствие некоторый код. По этому коду из таблицы описания конфигурации символа выбирается изображение этого символа, которое выводится на экран.

Значением символьной константы является целое число. Например, символ '0' в коде ASCII имеет значение равное 48 в 10с/с. Символьные константы (точнее их коды) могут участвовать в операциях над числами так же, как и существующие другие целые.

Коды цифр и латинских букв идут в порядке возрастания, т.е.

'0'<'1'<'2'<…<’9’…<’A’<’B’<’C’<…<’Z’<’a’<’b’<’c’<…<’z’.

В символьных и строковых константах могут использоваться специальные управляющие знаки:

\n – переход на новую строку;

\t – горизонтальная табуляция;

\v – вертикальная табуляция;

\а – сигнал;

\' – одиночная кавычка;

\» двойная кавычка.
14. Представление данных в оперативной памяти. Размеры данных.

Информация хранится в памяти машины и обрабатывается процессором в двоичном виде. Формат записи данных в памяти называется внутренним представлением информации в ЭВМ. Применение двоичной с/с позволяет использовать для хранения информации элементы, имеющие всего два устойчивых состояния. Одно состояние служит для изображения единицы, другое – для изображения нуля. По такому же признаку изображают знак числа: 0 – для знака +, 1 для знака -.

Существует два основных способа представления чисел, называемых представлениями с фиксированной и плавающей точкой.

Для чисел с фиксированной точкой положение точки зафиксировано после младшей целой цифры числа, дробная часть отсутствует, точка в изображении числа опускается.

Таким образом, с фиксированной точкой могут хранится только целые числа, в памяти машины они записываются в 2 с/с. Для указания, что значение некоторой переменной должно быть записано в 2 с/с с фиксированной точкой, в языке Си применяются атрибуты int, long int, unsigned int.

Двоичное целое число занимает в памяти машины 16 или 32 двоичных разряда (бита). Это зависит от длины числа и способа объявления переменной. Поля памяти ЭВМ имеют специальные названия: 8 бит называют байтом, 16 бит – словом, 32 бита – двойное слово, 1024 байта – лист (обозначают Кбайт).

Все байты памяти пронумерованы, начиная с нуля. Адресом информации считается адрес (номер) самого первого байта поля памяти, выделенного для ее хранения.

Числа, в которых положение точки не зафиксировано после некоторого разряда, а указывается специальным числом называются числами с плавающей точкой.

В общем виде любое число А может быть представлено в виде A=m*N(в степени p), где m – мантисса числа, N- основание системы счисления; P – порядок числа, указывающий положение точки в изображении числа.

Типы данных с плавающей точкой: float, double, long double.

Всякое число, меньшее по абсолютной величине минимального положительного числа, представленного в соответствующем формате, будет в памяти записано в виде нуля. Для данного формата это так называемый «машинный нуль». Кроме того, числа, получающиеся в результате вычислений, не должны превышать по абсолютной величине максимального числа, представленного в соответствующем формате. Иначе старшие биты числа будут потеряны, а результат вычислений искажен. Такая ситуация называется переполнением разрядной сетки, а сами числа – «машинной бесконечностью».

Если количество цифр в числе, записываемом в ПЭВМ или получающемся в процессе вычисления больше выделенного поля памяти, то избыточные цифры отбрасываются, число, записанное в память, будет приближенным. При этом оно округляется с избытком.

Современная ЭВМ обрабатывает не только числовую, но и любую символьную информацию. В ПЭВМ для внутреннего представления символьных данных используется код ASCII, в котором каждому символу соответствует 8-разрядный код, т.е. в байт записывается один символ.



Достарыңызбен бөлісу:
  1   2   3   4   5   6   7


©kzref.org 2017
әкімшілігінің қараңыз

    Басты бет