Главная
Дисциплины (2009-2010)
Дисциплины (2010-2011)
Разное
Популярные

Язык программирования Си

Программа на языке Си состоит из одной или нескольких функций. Одну или несколько функций размещают в одном файле - в каждом единственную, так, что программа может размещаться в одном или нескольких файлах с расширением *.c или *.cpp.
Любая функция в языке Си, в том числе и главная, имеет следующую синтаксическую структуру:

[тип значения функции] имя функции([спикок парметров]).

{
список описания;
список операторов (1)
}

Если отсутствует тип значения функции, то по умолчанию - int (целый).
Каждый оператор языка Си завершается «;» (точкой с запятой), но если она случайно отсутствует, то при трансляции предупреждения нет. Каждый оператор в языке Си - это последовательность более мелких единиц программы - лексем.
Определение. Лексема - это минимальная единица программы, наделенная смыслом.
В языке Си есть следующие лексемы: ключевые слова - зарезервированные, символы-разделители, идентинтификаторы (входят латинские буквы, цифрв и знак подчеркивания, к тому же, строчные и прописные буквы различаются), константы и комментарии, «невидимые» символы.
Символы, идентификаторы, константы, ключевые слова нельзя продолжать на следующей строке программы. Любой оператор языка Си может находится в любой позиции любой строки.

Операторы действия.

Тело одной функции состоит из двух списков: списка описаний и списка операторов (операторов-действия), описывающих действие алгоритма. Расмотрим их синтаксис и семантику:

список операторов => оператор (2.1)
список операторов => оператор, список операторов (2.2)
оператор => составной оператор (3.1)
=> выражение (3.2)
=> If (выражение) оператор (3.3)
=> If (выражение) оператор else оператор (3.4)
=> while (выражение) оператор (3.5)
=> do оператор while (выражение) (3.6)
=> for ([выражение1]; [выражение2]; [выражение3]) оператор (3.7)
=> switch (выражение)
=> {
=> case константа выражения_1: оператор_1
=> case константа выражения_2: оператор_2
=> case константа выражения_n: оператор_n
=> default: оператор
=> } (3.8)
=> break (3.9)
=> continue (3.10)
=> return (3.11)
=> return (выражение) (3.12)
=> go to метка (3.13)
=> метка: оператор (3.14)
=> ; - пустой оператор (3.15)
метка => идентификатор (3.16)
оператор_1 => пусто => список операторов (3.17)
составной оператор => { [список описаний] [список операторов] } (4.1)

Из формул (2.1)-(2.2) следует, что список операторов состоит из одного или нескольких операторов действия.
Из формул (3.1)-(4.1) следует, что совокупность операторов описания и операторов действия, заключенная в фигурные скобки, есть составной оператор, который принято считать как один оператор действия.
Составной оператор и операторы (3.3)-(3.8) - не элементарные, а операторы (3.2) и (3.9)-(3.15) - элементарные.

Семантика неэлементарных операторов.

Оператор (3.3) - неполный условный, так как есть только одна ветвь, она выполнятется тогда и только тогда, когда значения выражения не равно нулю.
Оператор (3.4) - полный условный. Если значение выражения не равно нулю, то выполнятется оператор первой ветви, иначе - второй.

Операторы цикла.

Оператор (3.5) называют оператором цикла с предусловием. Перед выполнением оператора тела цикла вычисляется выражения, - если его значение не равно нулю, то выполняется тело цикла и вновь вычисляется выражение. Этот процесс длится до тех пор, пока значение выражение не станет равным нулю. Если равенство нуля не достигает в процессе работы цикла, то имеем бесконечный цикл. Если же значение выражения равно нулю при первом же вычислении, то тело цикла вообщн не выполнятеся.
Оператор (3.6) - оператор цикла с постусловием. Сначала выполняется оператор тела цикла, только затем вычисляется выражение. Тело цикла выполняется повторно до тех пор, пока значение выражения отлично от нуля.
Оператор (3.7) называют оператором цикла типа «арифметическая прогрессия». В этом операторе в круглых скобках три выражения, которые образуют заголовок цикла. Каждое выражение, как видно из формулы, заканчивается «;». Но может выражение отсутствовать. Семантика цикла эквивалентна следующему фрагменту:

Выражение1;
while (выражение2)
{ оператор;
выражение3 }

Или другими словами:
1. Вычисляется выражение_1;
2. Вычисляется выражение_2;
3. Если значение выражения_2 не равно нулю, выполняется оператор тела цикла, иначе цикл прекращает работыу;
4. Вычисляется выражение_3;
5. Переход к пункту 2.
(Если выражение_1 и выражение_3 отсутствуют, то семантика цикла задана формулой №5, в которой опущен оператор выражения_1 и выражения_3. Если отсутствует выражение_2, то вместо него по умолчанию используется константа, равная единице).

Оператор switch.

Вариант default может находится в любом месте. Вычисляется выражения после switch. Далее его значение сравнивается со значениями константных выражений в порядке их следования. Если ни одно значение в опции case не совпадает со значением выражения, то, если присутствует вариант default, выполняется его оператор, иначе ни один оператор switch не выполняется.
Если значение некоторого константного выражения совпало со значением выражения после switch, то выполняется оператор данного варианта.
Замечание: Если в операторе switch выполняется какой-либо вариант, в том числе и default, то следующими выполняются все нижележащие варианты. Чтобы обеспечить выполнение только одного варианта, нужно в конце списка операторов поставить элементарный оператор break.

Элементарные операторы.

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

Оператор break.

Оператор break прерывает выполнение таких конструкторов, как while, do ... while, for, switch. Пример:

while (выражение)
{ ...
if (a==b) break; /* Вечный цикл: когда a станет равным b, то произойдет прерывание.*/
}

Оператор continue.

Оператор продолжения тела цикла. Используется внутри цикла while, do ... while, for. Его назначение - передать управление на условие цикла, игнорируя выполнение оставшихся до конца цикла операторов. Пример:

s=0, i=100;
while (s>=a)
if (i>0) s+=1.0/i--;
else if (i==0) {i=-1; continue }
else s=1.0/i--;
for (;;)
{ ...
if (a==b) break;
...
if (a==1) continue;
if (b==0) continue;
}

Оператор return.

Оператор Return - возврат из функции без передачи значения имени функции. Оператор Return выражение - возврат из функции с передачей значения.
Если нет Return, то выход из функции по ее окончанию. Язык Си позволяет игнорировать значение функции.

Оператор go to метка.

Этот оператор нужен, если его применение упрощает программу не в ущерб ясности. Есть несколько случаев, где оператор go to нужен:

1).
flag=0;
for (i=1; i<=100; i++)
{ for (j=1; j<=100; j++)
{ for (k=1; k<=100; k++)
if (a[i][j][k]) ...
else { flag=1; break; }
if (a[i][j][k]); else { flag=1; break; }
}
if (a[i][j][k]); else { flag=1; break; }
}
if (flag) cout<<"достигнуто нулевого значения";

Если у нас такая программа, ее можно заменить:

flag=0;
for (i=1; i<=100; i++)
for (j=1; j<=100; j++)
for (k=1; k<=100; k++)
if a[i][j][k] ... else { flag=1; go to label1; }
label1: cout<<"достигнуто нулевого значения";

2). Переходы в конец функции
3). Допустимы переходы в такой структуре:
... go to M3;
... go to M2;
... go to M1;
...
M1: ...
M2: ...
M3: ...

Пустой оператор.

Используется там, где не нужны какие-либо действия.
Например: for (i=1, s=100; i<=100, s=i*i)

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


Последнее обновление:
Copyright (C) 2009-2011 by RA0LHS
Hosted by uCoz