Компиляция программы на языке C/C++: ![Компиляция программы на языке C++](../Pictures/02_01.%20Компиляция%20программы%20на%20языке%20C++.png) Простейшая программа на языке C/C++: ```cpp int main() { return 0; } ``` Любая программа на языке C состоит из одной или нескольких функций. Обязательно должна присутствовать функция `main`, с команд которой и начинается выполнение программы. Любая функция в первом приближении выглядит так: ```cpp { тело функции; } ``` Пример программы "Hello, world" на языке C: ```c #include #include int main() { printf("Hello, world!\n"); system("pause"); return 0; } ``` Пример программы "Hello, world" на языке C++: ```cpp #include using namespace std; int main() { cout << "Hello, World!\n"; system("pause"); return 0; } ``` ## Переменные и типы данных **Данные** - это константы, переменные, выражения, значения функций, с которыми оперирует программа. **Переменная** - ячейка в памяти компьютера, которая имеет имя и хранит некоторое значение. Значение переменной может меняться во время выполнения программы. При записи в ячейку нового значения старое стирается. **Тип данных** - это те значения, которые данные могут принимать, + операции, которые с этими значениями допустимы. ![Хранение переменной в памяти](../Pictures/02_02.%20Хранение%20переменной%20в%20памяти.png) #### Простые типы данных - **bool**: true, false (1 байт) - **int**: $-2^{31}$; $2^{31}$ (4 байта) - **char**: 0; 255 (1 байт) - **float**: $3.4∗10^{-38}$; $3.4∗10^{38}$ (4 байта) - **double**: $1.7∗10^{-308}$; $1.7∗10^{-200}$ (8 байт) ## Ввод-вывод данных в языке C Функция вывода: ```c int printf(const char* format, arg-list) ``` Пример: ```c printf("Hi %s %d %c", "with", 26, 'u'); ``` | Формат | Значение | | ------ | --------------------------- | | `%d` | Вывод целого числа | | `%f` | Вывод действительного числа | | `%c` | Вывод одного символа | | `%s` | Вывод строки символов | | `\n` | Перевод строки | Функция вывода `printf` первым обязательным параметром включает в себя строку, все символы которой, кроме управляющих, выводятся в консольное окно. Управляющие символы либо задают тип данных в следующем листе аргументов, либо управляют выводом на консоль (перевод строки, табуляция и т. д.). Аргументы, указанные после строки формата, будут выводиться в том месте строки, где указан их формат. ```c #include using namespace std; int main() { char a = 'A', b = 'B', c = a + b; printf("Hello, world!\n"); system("pause"); return 0; } ``` ```c #include using namespace std; int main() { char a = 'A', b = 'B', c = a + b; printf("Hello,\n%s\n", "world!"); system("pause"); return 0; } ``` ```c #include using namespace std; int main() { char a = 'A', b = 'B', c = a + b; printf("Hi %s %d %c\n", "with", 26, 'u'); system("pause"); return 0; } ``` Функция ввода: ```c int scanf(const char* format, arg-list) ``` Пример: ```c scanf("%d%c", &a, &c); ``` | Формат | Значение | | ------ | -------------------------- | | `%d` | Ввод целого числа | | `%f` | Ввод действительного числа | | `%c` | Ввод одного символа | | `%s` | Ввод строки символов | В строке формата указываются типы данных всех переменных из списка аргументов. Вместо имен переменных указываются адреса ячеек памяти, относящихся к каждой переменной. Операция взятия адреса - `&` (амперсанд). ```c #include using namespace std; int main() { int a, b; printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); printf("a * b = %d\n", a * b); system("pause"); return 0; } ``` ## Поточный ввод-вывод в C++ `cin` - стандартный входной поток. `cout` - стандартный выходной поток. Операции: - `>>` - получить из входного потока - `<<` - поместить в выходной поток ```cpp #include cout << 'значение 1' << 'значение 2' << ... << 'значение n'; cin << 'переменная 1' << 'переменная 2' << ... << 'переменная n'; ``` В C++ с вводом-выводом связано понятие потока байтов, и для любого устройства (консоль, файл, сетевой канал и др.) этот поток выглядит одинаково. Поэтому определены всего 2 операции для любого потока. С консолью связаны потоки `cin`-`cout`, которые программно являются объектами, а значит к ним применимы их методы, вызываемые через точку. ```cpp #include using namespace std; int main() { int a, b; cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << "a * b = " << a * b << endl; system("pause"); return 0; } ``` ## Операции в языке C | Операция | Назначение | | ------------------------------------------ | ----------------------------------- | | `!` | Логическое отрицание | | `++` | Инкремент | | `--` | Декремент | | `&` | Взятие адреса (`&a`) | | `*` | Обращение по адресу (`a*`) | | `(тип)` | Преобразование типа | | `sizeof()` | Размер в байтах | | `*` | Умножение | | `/` | Деление | | `%` | Остаток от деления | | `+` | Сложение | | `-` | Вычитание | | `<<`, `>>` | Битовые сдвиги влево и вправо | | `<`, `>`, `<=`, `>=`, `==`, `!=` | Логические операции сравнения | | `&&` | Логическое И | | `\|` | Логическое ИЛИ | | `?` | Условная операция | | `=` | Присваивание | | `+=`, `-=`, `*=`, `/=`, `%=`, `<<=`, `>>=` | Бинарные операции | | `.` | Обращение к полям и методам объекта | ```cpp #include using namespace std; int main() { int a = 5; cout << a++ << endl; cout << a << endl; cout << 2 / 3.0 << endl; cout << (double)2/3 << endl; a = 5; a *= 10; cout << a << endl; a = 5; a <<= 3; cout << a << endl; system("pause"); return 0; } ``` Битовые сдвиги: ![Битовые сдвиги](../Pictures/02_03.%20Битовые%20сдвиги.png) ## Стандартные математические функции | Математическая функция | ID функции в C | | ----------------------------- | -------------- | | $\sqrt{x}$ | `sqrt(x)` | | $\|x\|$ | `fabs(x)` | | $e^x$ | `exp(x)` | | $x^y$ | `pow(x, y)` | | $\ln{(x)}$ | `log(x)` | | $\lg{(x)}$ | `log10(x)` | | $\sin{(x)}$ | `sin(x)` | | $\cos{(x)}$ | `cos(x)` | | $tg\ (x)$ | `tan(x)` | | $\arcsin{(x)}$ | `asin(x)` | | $\arccos{(x)}$ | `acos(x)` | | $arctg\ (x)$ | `atan(x)` | | $sh\ (x) = 0.5(e^x-e^{-x})$ | `sinh(x)` | | $ch\ (x) = 0.5(e^x+e^{-x})$ | `cosh(x)` | | $tgh\ (x)$ | `tanh(x)` | | Остаток от деления $x$ на $y$ | `fmod(x)` | | Наименьшее целое $>=x$ | `ceil(x)` | | Наибольшее целое $<=x$ | `floor(x)` | ## Последовательность вычисления арифметических выражений Сначала вычисляются значения всех функций и выполняются действия в скобках. Затем умножение и деление в порядке их следования. Наконец, сложение и вычитание, также в порядке следования: ```cpp 10 / 2 * 5 = 25 10 / (2 * 5) = 1 ```