- •Глава 1. Базовые понятия языка
 - •1.1 Словарь языка си
 - •1.2 Константы и строки
 - •1.3 Переменные
 - •1.4 Операции
 - •1.5 Разделители
 - •1.6 Выражения и приведение арифметических типов
 - •Глава 2. Введение в программирование на языке си.
 - •2.1. Структура и компоненты простой программы
 - •2.2. Элементарные средства программирования
 - •2.3. Операторы цикла
 - •2.4. Массивы и вложение операторов цикла
 - •2.5. Переключатели
 
ЯЗЫК СИ
Глава 1. Базовые понятия языка
1.1 Словарь языка си
Язык СИ оперирует со следующим набором символов:
1) большие и маленькие буквы латинского алфавита A,B,C,..., Z, a,b,c,...,z
2) арабские цифры 0,1,2,...,9;
3) Специальные символы:
“ , { } [ ] ( ) + - / % \ ; ‘ . : ?
< = > _ !  * # ~ ^
4) неизображаемые символы – пробел, табуляция, переход на новую строчку;
5) В комментариях, строках и символьных константах могут использоваться другие символы (например, русские буквы).
6) комбинации специальных символов образуют составленные символы:
/* - комментарий;
/* это комментарий*/
В стандартном языке СИ комментарии запрещено вкладывать друг в друга.
/* текст-1 /* текст-2 */ текст-3 */ текст-3 не считается комментарием.
Лексема – единица текста программы, которая при компиляции воспринимается как единое целое и по смыслу не может быть разделена на более мелкие элементы.
В языке СИ 6 классов лексем: свободно выбираемые и используемые идентификаторы, служебные (ключевые) слова, константы, строки (строковые константы), операции (знаки операций), разделители (знаки пунктуации).
Идентификаторы.
Идентификатором переменной может быть любая последовательность латинских букв, цифр и знака подчеркивания, которое начинается с буквы или знака подчеркивания. Пробелы в идентификаторах не допускаются.
X D8 d8 G_ALT GAMMA128 _X .
Прописные и строчные буквы различаются.
Идентификаторы могут иметь любую длину, но компилятор учитывает не более 31 символа.
В качестве идентификаторов нельзя использовать служебные (ключевые) слова и стандартные имена языка (sin, printf и т.д.).
Служебные (ключевые) слова.
Идентификаторы, зарезервированные в языке, т.е. такие, которые нельзя использовать в качестве свободно выбираемых программистом имен, называют служебными словами. Служебные слова определяют типы данных, классы памяти, квалификаторы типа, модификаторы, псевдопеременные и операторы. В стандарте языка определены следующие служебные слова:
| 
			 auto  | 
			 break  | 
			 case  | 
			 char  | 
			 const  | 
			 continue  | 
			 default  | 
			 do  | 
| 
			 double  | 
			 else  | 
			 enum  | 
			 extern  | 
			 float  | 
			 for  | 
			 goto  | 
			 if  | 
| 
			 int  | 
			 long  | 
			 register  | 
			 return  | 
			 short  | 
			 signet  | 
			 sizeof  | 
			 Static  | 
| 
			 struct  | 
			 switch  | 
			 typedef  | 
			 union  | 
			 unsigned  | 
			 void  | 
			 volatile  | 
			 Wile  | 
По смысловой нагрузке служебные слова группируются следующим образом:
Для обозначения типов данных используются спецификаторы типов и квалификаторы типов.
К спецификаторам типов относятся:
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 - пока (заголовок цикла с предусловием или завершение цикла do).
К служебным словам также отнесены следующие идентификаторы:
default - определяет действия при отсутствии нужного варианта в операторе switch;
case - определяет вариант в операторе switch;
else - входит в оператор if, определяя альтернативную ветвь;
sizeof - операция определения размера операнда (в байтах).
Добавим еще одно соглашение, обычно соблюдаемое авторами компиляторов и стандартных библиотек языка Си. Идентификаторы, начинающиеся с одного или двух символов подчеркивания "_", зарезервированы для использования в библиотеках и компиляторах. Поэтому такие идентификаторы не рекомендуется выбирать в качестве имен в прикладной программе на языке Си. Следующее соглашение относительно имен относится уже не к стандарту и не к реализациям, а отображает стиль оформления текста программы. Рекомендуется при программировании имена констант записывать целиком заглавными буквами.
Стандартные математические функции (файл math.h):
| 
			 Функция  | 
			 Краткое описание  | 
| 
			 abs  | 
			 нахождение абсолютного значения выражения типа int  | 
| 
			 acos  | 
			 вычисление арккосинуса. Аргументы этой и других тригонометрических функций задаются в радианах  | 
| 
			 asin  | 
			 вычисление арксинуса  | 
| 
			 atan  | 
			 вычисление арктангенса х  | 
| 
			 atan2  | 
			 вычисление арктангенса от у/х  | 
| 
			 cabs  | 
			 нахождение абсолютного значения комплексного числа  | 
| 
			 ceil  | 
			 нахождение наименьшего целого, большего или равного х  | 
| 
			 _clear87  | 
			 получение значения и инициализация слова состояния сопроцессора и библиотеки арифметики с плавающей точкой  | 
| 
			 _control87  | 
			 получение старого значения слова состояния для функций арифметики с плавающей точкой и установка нового состояния  | 
| 
			 cos  | 
			 вычисление косинуса  | 
| 
			 cosh  | 
			 вычисление гиперболического косинуса  | 
| 
			 exp  | 
			 вычисление экспоненты  | 
| 
			 fabs  | 
			 нахождение абсолютного значения типа double  | 
| 
			 floor  | 
			 нахождение наибольшего целого, меньшего или равного х  | 
| 
			 fmod  | 
			 нахождение остатка от деления х/у  | 
| 
			 _fpreset  | 
			 повторная инициализация пакета плавающей арифметики  | 
| 
			 frexp  | 
			 вычисляет для х вещественную мантиссу m и целое n так, что x=m*2n  | 
| 
			 hypot  | 
			 вычисление гипотенузы  | 
| 
			 labs  | 
			 нахождение абсолютного значения типа long  | 
| 
			 ldexp  | 
			 вычисление х*2e  | 
| 
			 log  | 
			 вычисление натурального логарифма  | 
| 
			 log10  | 
			 вычисление логарифма по основанию 10  | 
| 
			 matherr  | 
			 управление реакцией на ошибки при выполнении функций математической библиотеки  | 
| 
			 modf  | 
			 разложение х на дробную и целую часть  | 
| 
			 pow  | 
			 вычисление х в степени у  | 
| 
			 sin  | 
			 вычисление синуса  | 
| 
			 sinh  | 
			 вычисление гиперболического синуса  | 
| 
			 sqrt  | 
			 нахождение квадратного корня  | 
| 
			 _status87  | 
			 получение значения слова состояния с плавающей точкой  | 
| 
			 tan  | 
			 вычисление тангенса  | 
| 
			 tanh  | 
			 вычисление гиперболического тангенса  | 
В библиотеке определен также ряд констант, таких как M_PI (число π), M_E (основание натурального логарифма e) и др.
