- •Предисловие.
- •1. Введение.
- •1.1. История создания языка си.
- •1.2. Стандарты языка си.
- •2. Основные сведения, необходимые для создания программ на языке си.
- •2.1 Процесс создания исполняемого файла.
- •2.2 Распределение памяти программы.
- •2.3 Некоторые основные понятия.
- •2.4 Данные.
- •2.5 Структура простой программы.
- •3. Определение размеров типов данных и объектов.
- •4. Строки и строковые константы.
- •5. Директива препроцессора # define.
- •6. Функции форматированного ввода – вывода.
- •6.1 Функция форматированного вывода printf().
- •6.2 Функция форматированного ввода scanf().
- •7. Операции и операторы.
- •7.1 Арифметические операции
- •7.4 Порядок выполнения операций.
- •8. Выражения и операторы
- •8.1 Выражения.
- •8.2 Операторы.
- •8.3 Составные операторы.
- •8.4 Преобразование типов.
- •8.5 Операция приведения типов.
- •9. Функции ввода и вывода символов.
- •9.1 Функции getchar() и putchar().
- •9.2 Функции getch() и getche().
- •9.3 Ввод и вывод последовательности символов.
- •9.4 Подсчет символов, вводимых с клавиатуры.
- •9.5 Вывод символов из вводимого с клавиатуры файла.
- •9.6 Переключение ввода-вывода данных.
- •10. Принятие решений.
- •10.1 Оператор если (if).
- •10.2 Оператор если - иначе (if else).
- •10.3 Множественный выбор на основе операторов if, else.
- •10.5 Приоритеты операций отношения.
- •10.6 Логические операции (and, or, not).
- •10.7 Операция условия ?:.
- •10.8 Множественный выбор на основе операторов switch, break, default.
- •11. Циклы.
- •11.1 Цикл пока (while).
- •11.2 Цикл для (for).
- •11.4 Операция запятая ,.
- •11.5 Цикл делай пока (do while).
- •11.6 Вложенные циклы.
- •11.7 Операторы выход из структуры (break), продолжение (continue), безусловный переход (to go).
- •Литература.
- •Оглавление.
2.2 Распределение памяти программы.
Скомпилированная программа Си имеет четыре логически обособленные области памяти:
область стека для хранения переменных (адресов возврата функций, аргументов функций, локальных переменных и др.) |
область динамически распределяемой памяти (куча) |
область глобальных переменных |
область исполняемого кода программы |
2.3 Некоторые основные понятия.
Идентификаторы – это имена переменных, констант, функций, меток и т.п. Внешние идентификаторы (имена функций и глобальных переменных, участвующих в процессе компоновки) согласно ANSI/ISO C99 имеют длину до 31 символа. Внутренние идентификаторы (не участвующие в процессе компоновки) согласно ANSI/ISO C99 имеют длину до 63 символов. В C++ минимальная длина любого идентификатора 1024 символа. Верхние и нижние регистры символов рассматриваются как различные. Следовательно, count, Count и COUNT – это три разных идентификатора. Идентификатор не может совпадать с ключевым словом языка Си или с именем библиотечной функции. По традиции переменные обозначаются строчными буквами, а константы прописными.
Функция main() – функция, с которой всегда начинается выполнение программы.
Круглые скобки () – признак функции. В общем случае в скобках может передаваться входная информация (входные аргументы).
Фигурные скобки {} – отмечают начало и конец тела функции или блока (совокупности) операторов. Фигурные скобки в языке Си аналогичны операторам begin и end в языках Паскаль, Алгол.
Комментарии /* Я комментарий */ Комментарии записываются между символами /* */ и могут занимать отдельную строку или ту же строку, что и операторы.
2.4 Данные.
Базовые типы данных;
-
char- символьные;
-
int - целые;
-
float – с плавающей точкой;
-
double – с плавающей точкой двойной длины;
-
void – пустой, не имеющий значения.
Тип void представляет пустое множество значений и используется для указания типа функций, не возвращающих значения.
Модификаторы типов данных:
-
signed - знаковый;
-
unsigned - беззнаковый;
-
long - длинный;
-
short - короткий.
Основные типы данных получаются путем сочетания базовых типов данных и модификаторов типов данных.
Сложные типы данных:
-
массивы;
-
указатели;
-
struct – структуры;
-
enum – перечисления;
-
union – объединения;
-
typdef – собственные типы данных (переопределения типов данных).
ОСНОВНЫЕ ТИПЫ ДАННЫХ.
ТИП ДАННЫХ |
РАЗМЕР БИТЫ (БАЙТЫ) |
ИНТЕРВАЛ ИЗМЕНЕНИЯ |
|
ОТ |
ДО |
||
сhar |
1(8) |
-128 |
127 |
signed char |
1(8) |
-128 |
127 |
unsigned char |
1(8) |
0 |
255 |
int |
2(16) |
-32768 |
32767 |
signed int |
2(16) |
-32768 |
32767 |
unsigned int |
2(16) |
0 |
65535 |
short int |
2(16) |
-32768 |
32767 |
signed short int |
2(16) |
-32768 |
32767 |
unsigned short int |
2(16) |
0 |
65535 |
long int |
4(32) |
-2147483648 |
2147483647 |
signed long int |
4(32) |
-2147483648 |
2147483647 |
unsigned long int |
4(32) |
0 |
4294967295 |
float |
4(32) |
3.4E-38 |
3.4E+38 |
double |
8(64) |
1.7E-308 |
1.7E+308 |
long double |
10(80) |
3.4E-4932 |
3.4E+4932 |
Целые константы.
-
Десятичные целые константы определены как последовательности десятичных цифр, начинающиеся не с нуля (если это не число нуль). Например: 584, 0, 1024.
-
Восьмеричные целые константы определены как последовательности десятичных цифр, начинающиеся с нуля и не содержащие десятичных цифр, старших семи. Например: 016 (0168=1410).
-
Шестнадцатеричные целые константы определены как последовательности цифр (1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F), начинающиеся с 0x или 0X. Например: 016 (01616=2210).
Вещественные константы.
Вещественные константы представлены в памяти ЭВМ в форме с плавающей точкой. Например: 44., 3.1415E1, 45e0, 0.0.
Перечисляемые константы (enum).
Enumeration – перечисление.
Перечисляемые константы вводят целые именованные константы:
enum DAY{SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY};
enum BOOLEAN{NO, YES};
Если в списке нет ни одного элемента со знаком =, то значения констант начинаются с нуля и увеличиваются на единицу слева направо. Поэтому SUNDAY=0, FRIDAY=5, NO=0, YES=1.
enum {ONE=1, TWO, THREE, FOUR};
Если в списке есть элемент со знаком =, то значения констант начинаются с этого значения и увеличиваются на единицу слева направо. Поэтому TWO=2, THREE=3, FOUR=4.
Символьные константы (символы).
Символьные константы используются для изображения отдельных знаков, имеющих индивидуальные коды. Каждая символьная константа – это лексема (единица текста программы, которая при компиляции программы воспринимается, как единое целое и не может быть разделена на более мелкие элементы), которая состоит из символа и ограничивающих апострофов. Например: ‘A’, ‘a’, ‘8’, ‘+’, ‘,’, ‘&’.
Строковые константы.
Строковые константы определяется как последовательность символов, заключенная в двойные кавычки: ”Строковая константа”.
ПРИМЕЧАНИЕ: См. 4. СТРОКИ И СТРОКОВЫЕ КОНСТАНТЫ.
Константа нулевой указатель (Null – указатель).
Нулевой указатель неарифметическая константа (см. указатели).
Специальные символьные константы.
СПЕЦИАЛЬНЫЕ СИМВОЛЬНЫЕ КОНСТАНТЫ
(символы с обратным слэшем (backslach), управляющие последовательности, ESC – последовательности).
‘\n‘ |
Перевод строки |
|
‘\t‘ |
Горизонтальная табуляция |
|
‘\r‘ |
Возврат курсора к началу строки |
|
‘\\‘ |
Обратная косая черта |
|
‘\‘‘ |
Апостроф (одинарная кавычка) |
|
‘\”‘ |
Двойная кавычка |
|
‘\0‘ |
Нулевой символ |
|
‘\a‘ |
Сигнал –звонок |
|
‘\b‘ |
Удаление предыдущего символа |
|
‘\f‘ |
Перевод страницы |
|
‘\v‘ |
Вертикальная табуляция |
|
\?‘ |
Знак вопроса |
|
‘\ddd‘ |
Восьмеричное представление символьной константы |
d – восьмеричная цифра от 0 до 7 |
‘\xhh‘ ‘\Xhh‘ |
Шестнадцатеричное представление символьной константы |
H – шестнадцатеричная цифра от 0 до F |
Переменные в языке Си должны быть всегда объявлены до их первого использования. Локальные переменные объявляются внутри функций. Формальные переменные объявляются в определении параметров функции. Глобальные переменные объявляются вне всех функций. При объявлении указываются:
-
список переменных,
-
тип переменных,
-
класс памяти переменных.
Инициализаторы.
Для присваивания начальных значений переменным при их определении используются инициализаторы.
Инициализаторы имеют форму:
= значение;
= {список значений}; /* сложные значения */
Например:
int i=0;
int j=0; k=0;
static float eps=0.0001;
int year[12]={31,28,31,30,31,30, 31,31, 30,31, 30,31};
Статическим и внешним переменным по умолчанию присваиваются нулевые значения.
Автоматическим переменным по умолчанию никаких значений не присваивается.
Инициализатор может быть вложенным:
Float matrix[4][3]={
{1.0, 1.0, 1.0}
{2.0, 2.0, 2.0}
{3.0, 3.0, 3.0}
{4.0, 4.0, 4.0}
};
Классы памяти данных:
-
auto – автоматический;
-
static – статический;
-
extern – внешний;
-
register – регистровый.
В некоторых случаях объявление класса памяти необязательно, но всегда желательно. По умолчанию класс памяти – auto.