Конспект Скачкова Николая по языку С(С++)

Введение

Язык С(С++) - низкоуровневый компилируемый язык. Это означает, что команды, используемые в нем, близки к процессорным, и сама программа выполняется на машинном коде, что значительно уменьшает время работы по сравнению с программами на других языках.

Список литературы, которую полезно прочитать:
1) Керниган, Ритчи - "Язык программирования С"
2) Бьерн Cтрауструп - язык программирования С++
3) Стивен Прата - язык программирования С++
Все, что мы будем изучать, есть в материалах Д. Кириенко, которые выложены здесь

О любых недоработках просьба сообщать лично.

Создание проектов

Проекты создаются для облегчения работы со сложноустроенной программой, так как в них легко связать главные файлы со вспомогательными.
Для работы с консольными приложениями в Code::Blocks требуется создать проект типа Console Application. После этого у вас создастся проект с файлом main.cpp.
Сама программа описывается именно в файле main.cpp.

Начало работы с С(С++)

Программа обязательно должна начинаться со строк
 #include <iostream> 
 using namespace std; 
(Значение этих строк нам пока не нужны)
Далее идёт основная функция программы - main(). Ее оформление выглядит так:
int main(){
  ...
  <Блок инструкции>
  ...
			
  return 0;
}
Количество пробелов и переносов строки не влияют на работу программы, но всё же требуется соблюдать стандарты программирования.
Так же любая команда должна заканчиваться знаком ";".
Комментарий до конца строки обозначается //.

Ввод и вывод

Будем пользоваться стандартным вводом/выводом языка С++.
Ввод осуществляется так:
cin >> a1 >> a2 >> ... >> an;
где ai - какая-то переменная.
Вывод осуществляется аналогичной функцией:
cout << a1 << ... << an;
где ai - какая-то переменная или ' ' - разделительный пробел (разделительные пробелы нужно описывать вручную), либо endl - функкция перевода строки.
Внимание! При вводе используется оператор '>>', а при выводе - '<<'.
Внимание2! Перед тем как работать с какой-либо переменной (в том числе и ввести ее с клавиатуры), ее нужно объявить. Обявление переменной нужно делать до ее использования и выглядит это как-то так:
int a; // обычное число (пока без значения), теперь можно написать cin >> a;
int b = 0; // число создается и в него сразу записывается 0
long long c; // длинное число
string s; // строка, для использования в начале файла нужно дописать #include 
double f; // нецелое число
bool z; // булево значение (true или false)
Важно! В С(С++) после инициализации переменной ее тип изменить нельзя!
О других типах переменных можно прочитать здесь.

Уловный оператор if и логические операторы сравнения

Синтаксис оператора if выгдядит так:
if (<Условие>){
  <Блок инструкции>
}
else{
  <Блок инструкции>
}
Условием является любое выражение типа bool (если выражение другого типа, то компилятор постарается преобразовать его в bool, что иногда может привеcти к проблемам).
Между if и else не должно быть никаких команд. При нескольких вложенных операторах if, else относится к ближайшему из них перед ним.
Для сравнения чисел с С используются такие операторы:
== - возвращает true, если числа равны
< - оператор "меньше"
> - оперотор "больше"
<= - опреатор "меньше или равно"
>= - оператор "больше или равно"
!= - оператор "не равно"
В C существует несколько логических операторов, вот некоторые из них:
&& - логическое И
|| - логическое ИЛИ
! - логическое НЕ

Циклы for, while, do while

В С существует несколько типов циклов:
1) Цикл while работает очень просто:
while(<Условие>){
  <Тело цикла>
}
Пока условие верно, он выполняется.
2) Похоже работает цикл do while:
do{
  <Тело цикла>
} while(<Условие>);
Работает так же как while, отличие состоит в том, что здесь сначало выполняется тело цикла, а лишь потом проверятся условие.
3) Цикл for работает иначе
Синтаксис такой:
for(<Условие инициализации>; <Условие выполнения цикла>; <Оператор перехода к следующей итерации>){
  <Тело цикла>
}
Здесь разберемся поподробнее:
1. Условие инициализации - это место где мы может описать те переменные, которые будут использоваться в цикле.
2. Условие выполнения цикла - это значение типа bool. Пока значение этого выражения равно true, цикл выполняется.
3. Оператор перехода к следующей итерации - это любое выражение, которое будет выполняться при переходе к следующей итерации.
Пример цикла for:
for(int i = 0; i < 100; i += 2){
  cout << i << ' ';
}
Этот цикл пробежит по всем значениям от 0 до 99 с шагом 2 и выведет их в строчку через пробел.
Для циклов также определены команды break и continue. Первая из них прерывает выполнение цикла, вторая - переводит цикл к следующей итерации.

P.S В С++ есть несколько вариантов обновления переменной (Пусть нам дана переменная a):
1) a = a + x 
В этом случае в переменную a записывается значение a + x
2) a += x
В этом случае обновляется значение a (оно становится равным a + x). Эта операция работает быстрее.
3) a++ / ++a / a-- / --a
В этом случае значение a меняется на 1 (в зависимости от + или -) Разница заключается в том, что a++ возвращает старое значение переменной, а ++a - новое.
int a = 0, b = 0;
b = a++; // b = 0, a = 1;
b = ++a; // b = 2, a = 2;
Эти операции работают еще быстрее.

Массивы

Массивы в С - это простоустроенная конструкция, сложная для понимания.
Инициализируются массивы так:
<Тип данных> <Название массива>[<Длина массива>];
Внимание! Массивы в С хранят информацию только того типа данных, который вы указали при инициализации, то есть нельзя в массив типа int положить объект типа string и т.д. Также невозможно изменить длину массива!
Пример:
int a[100]; // массив a длинной 100 хранит элементы типа int
Обращаться к элементу можно по его номеру вот так:
a[0] = 100;
cout << a[5] + a[10];
В программе допускается неиспользование части выделенной для массива памяти (если вы создали массив длины 10, то вы не обязаны обязательно класть в него 10 чисел), но если вы выйдите за границы массива (напишете a[100], когда длина его всего лишь 10), то последствия будут ужасными. Также важно понимать, что на массиве не определены никакие групповые операции, поэтому вы не можете узнать его длину, добавить к нему элемент в конец и т.д.