Слайд 2Элементы языка
Язык Си включает следующие элементы:
Ключевые слова — оформляют различные конструкции языка: else,
![Элементы языка Язык Си включает следующие элементы: Ключевые слова — оформляют различные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-1.jpg)
int, return;
Знаки — играют разделительную роль и обозначают некоторые операции: ;, +, &, (;
Литералы (константы) — фиксированные значения: false, 0, 'Z', 25.4E2, ¨Привет¨;
Идентификаторы (имена) — определяют конкретные объекты программы: main, scanf, Temp, atan2;
Директивы препроцессору — определяют, как должен быть обработан код программы перед компиляцией: #include, #define;
Комментарии — любой текст, заключённый между символами /* и */ и не содержащий символов */: /* Вычисление длины окружности */.
Слайд 3Основные типы
Целочисленные:
char
short int
int
long int
long long int
Логический
Вещественные:
float
double
long double
«Пустой»:
void
![Основные типы Целочисленные: char short int int long int long long int](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-2.jpg)
Слайд 4Числовые константы
Литерал — любое фиксированное значение, явно записанное в коде программы.
У компилятора — правило:
«Если что-то
![Числовые константы Литерал — любое фиксированное значение, явно записанное в коде программы.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-3.jpg)
начинается с цифры, то это числовая константа»
Поэтому:
Числовая константа всегда начинается с цифры (не считая знаков +, − и десятичной точки)
Слайд 5Целочисленные типы
Перед указанием типа можно ставить signed (знаковый) или unsigned (беззнаковый).
По умолчанию
![Целочисленные типы Перед указанием типа можно ставить signed (знаковый) или unsigned (беззнаковый).](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-4.jpg)
всё — signed.
«int» можно не писать: unsigned int ~ unsigned; long int ~ long.
Определение разрядности типа — функция sizeof(). Возвращает размер в байтах: sizeof(int).
Слайд 6Целочисленные типы
По умолчанию всё — signed.
![Целочисленные типы По умолчанию всё — signed.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-5.jpg)
Слайд 7Целочисленные типы
Используемые системы счисления:
десятичная: 5, +77, −190, 1000000000;
восьмеричная — начинается с 0: 015, 0100000, −0777;
шестнадцатеричная —
![Целочисленные типы Используемые системы счисления: десятичная: 5, +77, −190, 1000000000; восьмеричная —](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-6.jpg)
начинается с 0x или 0X: 0x9A, 0X294, −0x100000f;
двоичная (только для GCC) — начинается с 0b или 0B: 0b111, 0B100001, −0b1111110.
Слайд 8Целочисленные типы
Константы по умолчанию имеют тип (signed) int.
Тип можно переопределить:
беззнаковый — заканчивается символом u
![Целочисленные типы Константы по умолчанию имеют тип (signed) int. Тип можно переопределить:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-7.jpg)
или U: 5u, 012U, 0x5CAu;
длинное (long) — заканчивается символом l или L: 99l, 0xABCDL, −0315L;
«очень длинное» (long long) — заканчивается символами ll или LL: 5LL; 0XBaLL; −0105ll.
Непротиворечивые указания типа можно комбинировать: 5LU; 2ull.
Слайд 9Вещественные типы
Тип long double:
в Microsoft Visual C++ соответствует типу double;
может занимать 96 или 128 бит;
![Вещественные типы Тип long double: в Microsoft Visual C++ соответствует типу double;](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-8.jpg)
работают всегда 80 бит.
Вещественные числа — это потери точности,−0, NaN, ∞...
Не используйте вещественные числа без необходимости.
Слайд 10Вещественные типы
Обязательна точка, разделяющая целую и дробную части:
−2.0, −0.5, 3.1415927.
Одну из частей
![Вещественные типы Обязательна точка, разделяющая целую и дробную части: −2.0, −0.5, 3.1415927.](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-9.jpg)
можно не указывать: 143., .005, −.0.
Возможна экспоненциальная форма записи:
целая или вещественная мантисса (не обязательно нормализованная);
символ e или E;
целый порядок в десятичной записи (допускаются ведущие нули):
6.02e23; −1.6e-19; 0.042E+09; -.52E+6; 4e4.
Слайд 11Вещественные типы
Константы по умолчанию имеют тип double, но можно указать:
обычной точности (float) — заканчивается
![Вещественные типы Константы по умолчанию имеют тип double, но можно указать: обычной](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-10.jpg)
символом f или F: 7.F, −0.6f, +1.99E+08F;
двойной точности (double) — заканчивается символом d или D: 0.1D, −72.4d, +2.4E−03d;
«длинное» вещественное (long double) — заканчивается символами l, L, dl или DL: 5.03L, 2E0dl, −4.935e+45L;
шестнадцатеричное (только для GCC) — мантисса шестнадцатеричная, порядок целый десятичный. Разделитель — символ p или P, обозначающий степень двойки. Порядок обязателен: 0xAP1, −0x3.Fp+11, −0x2.ap−1 .
0x1P1 = 2.0, 0x0.BP+10 = 704.0, 0x1P1 = 0x8P−2 = 2.0.
Непротиворечивые указания можно совмещать: 0xEP5dl, 10xP3LL.
Слайд 12Логический тип
В стандартах языка Си полная поддержка логического типа отсутствует.
Тип имеет имя
![Логический тип В стандартах языка Си полная поддержка логического типа отсутствует. Тип](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-11.jpg)
_Bool.
Определены два значения данного типа — 1 (истина) и 0 (ложь).
При подключении заголовочного файла stdbool.h можно использовать имя типа bool и литералы true (истина) и false (ложь).
Слайд 13«Пустой» тип
Тип void используется, когда формально тип требуется указать, но на самом деле
![«Пустой» тип Тип void используется, когда формально тип требуется указать, но на](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-12.jpg)
тип не нужен:
при объявлении «процедур»;
при объявлении нетипизированных указателей и т. п.
Не существует значений типа void.
Слайд 14Переменные
Переменная — ячейка памяти, предназначенная для хранения некоторого значения.
Переменная имеет:
значение;
тип — определяет, значения какого
![Переменные Переменная — ячейка памяти, предназначенная для хранения некоторого значения. Переменная имеет:](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-13.jpg)
типа она может хранить;
адрес в памяти, по которому можно обратиться к значению;
имя (как правило), по которому можно обратиться к значению.
Слайд 15Переменные
Чтение значения из переменной — обращение к переменной (к значению переменной).
Запись значения в
![Переменные Чтение значения из переменной — обращение к переменной (к значению переменной).](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-14.jpg)
переменную — присваивание значения переменной.
Имя (идентификатор) — последовательность символов, определяющая переменную (и другие сущности):
может состоять из заглавных и строчных латинских букв, цифр и знаков подчёркивания: A … Z, a … z, 0 … 9, _;
не должно начинаться с цифры;
не должно совпадать с ключевыми словами языка Си.
Желательно не начинать имена с символа _.
Регистр символов в именах различается: main ≠ Main.
Слайд 16Переменные
Переменные необходимо объявлять до их первого использования.
Сначала указывается тип, затем список имён.
Завершается
![Переменные Переменные необходимо объявлять до их первого использования. Сначала указывается тип, затем](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-15.jpg)
объявление точкой с запятой:
char a, b, c; unsigned char d, e, f;
unsigned long long int P;
signed long F;
float Argument, Result;
long double LongDouble;
Слайд 17Переменные
Присваивание значений переменным:
a = –5; b = 0xA; P = 75000L; Result
![Переменные Присваивание значений переменным: a = –5; b = 0xA; P =](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-16.jpg)
= 2.5E6L;
Присваивание переменной начального значения — инициализация переменной.
Инициализация возможна в объявлениях:
int U = 2;
double X = –5.2d, Y = 2.6d, R;
Оператор присваивания может сам возвращать присваиваемое значение, поэтому можно писать так:
a = b = c = 5;
Слайд 18Программа
Программа на языке Си состоит из функций.
Описание функции:
тип имя(список формальных параметров)
{
тело функции
}
Здесь
![Программа Программа на языке Си состоит из функций. Описание функции: тип имя(список](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-17.jpg)
тип — тип возвращаемого функцией значения.
Скобки { и } — начало и конец тела функции.
Слайд 19Программа
Выполнение программы начинается с функции, имеющей имя main.
void main(void)
{
}
main()
{
}
или
![Программа Выполнение программы начинается с функции, имеющей имя main. void main(void) {](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-18.jpg)
Слайд 20Программа
Бывает и так:
int main(int argc, char **argv)
{
return 0;
}
![Программа Бывает и так: int main(int argc, char **argv) { return 0; }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-19.jpg)
Слайд 21Переменные
Переменные могут быть объявлены в любом месте функции (локально) или вне функций
![Переменные Переменные могут быть объявлены в любом месте функции (локально) или вне](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-20.jpg)
(глобально):
int P;
void main(void) {char A;}
void other(void) {char B;}
Глобальные переменные видны всем.
Локальные переменные видны там, где они объявлены (после объявления).
Область видимости переменной — совокупность всех областей программы, в которых значение переменной доступно для чтения и записи.
Слайд 22Переменные
Скобками { и } можно выделить блок:
int main(int argc, char **argv)
{
int Z
![Переменные Скобками { и } можно выделить блок: int main(int argc, char](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-21.jpg)
= 9, P = 2;
{
int Z = 7;
}
return 0;
}
Локальные переменные блока видны только в нём.
Переменные функции видны и в ней, и в блоке.
Локальные переменные временно перекрывают видимость «более глобальных».
Слайд 23Переменные
Переменную можно объявить с классом памяти:
аuto (по умолчанию для локальных);
static — позволяет сохранять
![Переменные Переменную можно объявить с классом памяти: аuto (по умолчанию для локальных);](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/282543/slide-22.jpg)
значения между вызовами функции; инициализируется по умолчанию нулевым значением;
register — попытаться ускорить работу с переменной; работает только для типов с размером, как у int; видимость переменных — как у auto;
extern — переменная уже объявлена в другом файле; делает её видимой в данном файле.