- •Основные характеристики алгоритмического языка Си
- •Идентификаторы
- •Вопрос 2
- •Константы
- •Целый тип (int)
- •Символьный тип (char)
- •Инициализация переменных
- •Определение именованных констант
- •Унарные операции
- •Бинарные операции
- •Преобразование типов
- •Внимание!
- •Оператор принятия решений switch
- •Оператор цикла while
- •Оператор цикла do/while
- •Оператор continue
- •Оператор goto
- •Указатели
- •Int *a. B, *c; описываются два указателя на целое с именами а и с, а также целая переменная b.
- •Инициализация указателей
- •Массивы
- •Внимание
- •Связь массива с указателем.
- •Многомерные массивы.
- •Функции
- •Объявление и определение функций
- •Локальные и глобальные переменные.
- •Класс памяти
- •Параметры функции
- •Передача массивов в функции
Тема № 1 "Введение в программирование"
Происхождение языка Си.
Сотрудник фирмы Bell Labs Деннис Ритчи создал язык Си в 1972 г. во время совместной работы с Кеном Томпсоном над операционной системой UNIX. Ритчи не выдумал Си просто из головы - прообразом послужил язык Би, разработанный Томпсоном. Отсюда и произошло его на первый взгляд, странное название. И здесь особенно важно то, что язык Си создавался как инструмент для программистов-практиков. В соответствии с этим главной целью его автора было создание удобного и полезного языка.
Очевидно, что критерий полезности принимался во внимание при разработке большинства других языков программирования. Но часто учитывались и другие потребности. Скажем одной из главных целей при создании языка Паскаль, было построение прочных основ обучения принципам программирования. А язык Бейсик создавался так, чтобы его синтаксис был близок к синтаксису английского языка. Такие цели легко объяснить: в то время вычислительная техника только начинала развиваться и было очень важно подключить к процессу ее развития как можно больше специалистов.
Основные характеристики алгоритмического языка Си
За 30 лет своего существования язык Си не только "выжил", но и послужил основой для целого ряда новых языков программирования. Я уж не говорю о непосредственных детях и внуках - языках С++ и С#. Значительное количество его элементов можно найти в других современных языках, таких как Java, PHP4 и ряде других.
Какие же характерные черты языка Си так выгодно отличают его от прочих языков?
Во-первых, язык Си является гибким языком программирования. Он включил в себя те управляющие конструкции, которые рекомендуются теоретическим и практическим программированием. Его структура побуждает программиста использовать в своей работе нисходящее проектирование, структурное программирование и пошаговую разработку модулей. Результатом такого подхода является надежная и читаемая программа.
Во-вторых, язык Си является эффективным языком. Его структура позволяет создавать трансляторы, строящие высокоэффективный исполняемый код. Причем, сохраняя свойство компактности, этот код по быстродействию часто приближается к программам, написанным вручную на ассемблере используемой ЭВМ.
В третьих, язык Си - это мобильный язык. Это означает, что программа, подготовленная в рамках одной вычислительной системы, может быть перенесена с небольшими изменениями на другую вычислительную систему, с одной операционной системы на другую. Свойство совместимости различных версий языка Си, основанное на простоте определения его стандарта, делает язык особенно привлекательным для разработки мультиплатформенных программных комплексов.
Как итог вышесказанного - язык Си является языком создания практически эксплуатируемых программ. В качестве доказательства этого утверждения: большая часть операционных систем семейства UNIX сама написана на языке Си.
И, наконец, в четвертых. Си очень удобный язык. Он достаточно структурирован, чтобы поддерживать хороший стиль программирования, и вместе с тем не связывает нас смирительной рубашкой ограничений.
Область применения
Область применения языка Си практически не ограничена. Значительный объем эксплуатируемого программного обеспечения разработан на этом языке. И хотя в настоящее время он вытесняется еще более развитыми его потомками - С++, например, он не утратил своего значения. Можно сказать, что Си используется там, где требуется высокая эффективность исполняемого кода. В многих программных комплексах особо узкие места закрыты модулями, написанными на Си.
Системы программирования
Как уже было сказано, язык С был реализован на самых разных платформах. Что значит язык "реализован"? Это значит, что существует набор инструментов - система программирования, обеспечивающая фактическое выполнение описанных в программе действий.
Системы программирования основываются на одном из двух подходов реализации языка: интерпретации или компиляции.
Интерпретация предполагает последовательный анализ текста программы с ее одновременным исполнением. Т.е. разобрали какое действие в тексте программы записано - выполнили его, разобрали следующее действие - снова выполнили.
Компиляция предполагает анализ всей программы целиком, по завершению анализа текст программы преобразуется в машинный код, который затем подается на исполнение.
Язык С относится к языкам компилируемого типа. Все известные мне системы программирования с этим языком включают в себя компилятор.
Исходные и объектные модули, процессы компиляции и связывания
Обычно процесс преобразования текста программы в исполняемый код является многоэтапным (по крайней мере - двухэтапным).
На первом этапе реализуется собственно компиляция, при которой тексты исходных модулей программы преобразуются в так называемые объектные модули, которые хотя и состоят в основном из машинных команд, но еще не могут выполняться. Процесс построения исполняемого модуля называется редактированием связейи заключается в установлении связей между отдельными объектными модулями и окончательной привязкой к памяти.
Среда программирования
Здесь надо решить в какой среде работать?
Состав языка
В тексте на любом естественном языке можно выделить четыре основных элемента: символы, слова, словосочетания и предложения. Подобные элементы содержит и алгоритмический язык, только слова называют лексемами (элементарными конструкциями), словосочетания — выражениями, а предложения — операторами. Лексемы образуются из символов, выражения — из лексем и символов, а операторы — из символов, выражений и лексем (рис. 1.1):
- Алфавит языка, или его символы — это основные неделимые знаки, с помощью которых пишутся все тексты на языке.
- Лексема, или элементарная конструкция, — минимальная единица языка, имеющая самостоятельный смысл.
- Выражение задает правило вычисления некоторого значения.
- Оператор задает законченное описание некоторого действия.
Алфавит языка
Алфавитом языка называется совокупность символов, используемых в языке.
В алфавит языка Си входят:
прописные и строчные буквы латинского алфавита (A,B,C,...,Z,a,b,c,...,z)
цифры (0,1,2,3,4,5,6,7,8,9)
специальные знаки " ' {} [] () | + - * / % \ ; . , : ? < > _ ! & # ~ ^
- неизображаемые символы ("обобщенные пробельные символы"), такие как пробел, табуляция, переход на новую строку.
Лексемы (CTokens)
Из символов алфавита формируются лексемы. В программах на языке Си базовые элементы, опознаваемые компилятором, называются лексемами (английский термин - "token).". В их состав входят:
- идентификаторы;
- ключевые (зарезервированные) слова;
- управляющие последовательности;
- знаки операций;
- константы;
- комментарии;
- разделители (скобки, точка, запятая, пробельные символы).
Ключевые слова
Ключевые слова — это зарезервированные идентификаторы, которые имеют специальное значение для компилятора. Их можно использовать только в том смысле, в котором они определены. Список ключевых слов C++ приведен в табл. 1.1.
Таблица 1.1. Список ключевых слов C++
asm |
else |
new |
this |
auto |
enum |
operator |
throw |
bool |
explicit |
- private |
true |
break |
export |
protected |
try |
case |
extern |
public |
typedef |
catch |
false |
register |
typeid |
char |
float |
reinterpretcast |
typename |
class |
for |
return |
union |
const |
friend |
short |
unsigned |
cohstcast |
goto |
signed |
using |
continue |
if |
sizeof |
virtual |
default |
inline |
static |
void |
delete |
int |
staticcast |
volatile |
do |
long |
struct |
wchart |
double |
mutable |
switch |
while |
dynamiccast |
namespace |
template |
|
По смысловой нагрузке служебные слова группируются следующим образом:
Спецификаторы типов:
char символьный
double вещественный двойной точности
enum перечисляемый
float вещественный
int целый
long длинное целый
short короткое целое
struct структура
signed знаковый
union объединение
unsigned беззнаковый
void отсутствие значения
typedef синоним обозначения типа
Квалификаторы типа:
const квалификатор объекта, имеющего постоянное значение
volatile квалификатор объекта, значение которого может измениться без явных указаний программиста.
Классы памяти:
auto автоматический
extern внешний
register регистровый
static статический
Элементы операторов:
break прервать
continue продолжить
do выполнять
for для
goto перейти
if если
return возврат
switch переключатель
while пока
Специальные идентификаторы:
default по умолчанию
case вариант
else иначе
sizeof размер
Управляющая последовательность состоит из из обратной дробной черты , за которой следует буква или комбинация цифр
Управляющая последовательность |
Наименование |
Шестнадцатиричное значение |
\a \b \t \n \v \f \r \” \’ \\ \ddd
\xddd |
Звонок Возврат на шаг Горизонтальная табуляция Новая строка Вертикальная табуляция Перевод формата Возврат каретки Кавычки Апостроф Обратная дробная черта Символ из набора кодов ПЭВМ в восьмиричном представлении Символ из набора кодов ПЭВМ в шестнадцатиричном представлении |
7 8 9 A B C D 22 27 5C
ddd |
Знаки пунктуации и специальные символы используются в программах на языке Си в различных целях, но в основном служат для организации работы транслятора. Они не специфицируют выполняемые операции. Некоторые знаки пунктуации одновременно являются знаками операций. Их конкретное назначение транслятор выявляет по контексту программы.
К знакам пунктуации относятся:
[ ] ( ) { } * , : = ; ... #
Эти символы имеют в Си специальное назначение, которое мы будем раскрывать по мере изучения языка. Заметим здесь лишь, что знак (pound sign (#)) может использоваться только в директивах препроцессора языка Си.
Operators - знаки операций. В качестве знаков операции в языке Си могут выступать:
[ ] ( ) . -> ++ -- & * + - ~ ! sizeof / % << >> < > <= >= == != ^ | && || ? : = *= /= %= += -= <<= >>= &= ^= |= , # ##