Назад

Основы языка Си

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


Итак, мы создали файл, теперь нужно написать структуру программы, она всегда должна быть, иначе программа не будет работать. Начнём с того, что нам нужно импортировать основную библиотеку языка. Служебное слово #include поможет в этом, далее в угловых скобках указываем основую библиотеку iostream. Выглядеть это будет вот так: #include <iostream>. Далее нужно использовать стандартное пространство имён, чтобы избавиться от проблем в будущем. Записывается в таком виде using namespace std; точка с запятой обязательна! Её нужно ставить в конце каждой строки. И вот мы плавно подбираемся к главному — телу программы. Тело программы описывается в функции main. Двух main не может быть. Записывается в таком виде: int main(){<тело_программы>}, в конце фигурной скобки точка с запятой не требуется. После написания тела программы, в последней строчке пишем return 0; это служебная запись, говорит, что программа завершена, а ноль значит без ошибок.


Первая программа
Ну что же, от теории переходим к практике, напишем простую программу, которая выводит "Hello, World!" на экран.

1
2
3
4
5
6
7
#include <iostream>
using namespace std;
 
int main(){
    cout << "Hello, World!" << endl;
    return 0;
}


Это самая простейшая программа. Но что такое cout? А что такое endl? Это как раз таки служебные слова, команды. cout выводит на экран текст/значение переменной и так далее. А endl это служебное слово, которое озночает переход на следущую строку. Это можно записать и в самом тексте "Hello, World!", но в другом виде: "Hello, World!\n", где "\n" переход на другую строку.


Полная запись служебного слова cout написано в коде выше, но значков "<<" Может быть несколько, сути этого не меняет.

1
2
3
4
5
6
7
#include <iostream>
using namespace std;
 
int main(){
    cout << "Hello," << " World!" << endl;
    return 0;
}


Ввод данных и переменные
Итак, мы научились выводить слова на экран, а теперь давайте познакомимся с вводом данных, переменнами, операторами.


В языке Си ввод данных производится с помощью служебного слова cin, но стоит отметить, что угловые кавычки, направлены в другую сторону(>>), как бы указывая, что данные будут введены куда-то, в большинстве случаев в переменную. Но что такое переменная? Переменная - это ячейка памяти, которое хранит в себе какое-либо значение, будь то число, или же символ. В языке Си переменная объявляется таким образом: <тип_данных> <имя_переменной> = <значение>;.


Давайте напишем простенькую программу, где мы будем выводить приветствие. Объявим переменную, запишем туда значение с клавиатуры, и наша программа выведет что-то типа "Привет, Вася!"

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main(){
    string name;
    cout << "What's your name: ";
    cin >> name;
    cout << "Hello, " << name << "!" << endl;
    return 0;
}


В 6 строчке, мы объявляем переменную, в нашем случае, это строковый тип данных, далее мы спросили как зовут человека, и вывели приветственное сообщение. В тот момент когда человек набрал своё имя, и нажал на ENTER, его имя записывается в переменную name, вот мы как раз использовали ячейку памяти. Все нужные на период обучения типы данных написаны ниже


int - Числовой тип данных
float - Вещественный тип данных (числа с плавающей точкой)
string - Строковый тип данных
char - Символьный тип данных, в отличие от строки может хранить только ОДИН символ


Операторы. Операции над переменными
Отлично, типы данных знаем, переменные знаем, как вводить данные знаем. Теперь давайте создадим две переменные с числовым типом данных, и сложим два числа, при этом выведем ход решения. Сложение переменных осуществляется абсолютно также как и в математике, знаком плюс "+", а вычитание знаком минус "-", но вот умножение записывается знаком звёздочка "*", а деление правым слешем "/".

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
 
int main(){
    int a,b;
    cout << "Enter 2 numbers: ";
    cin >> a >> b;
    cout << a << " + " << b << " = " << a + b << endl;
    return 0;
}


Если посмотреть на прошлый код и на этот, то разницы почти нет, ввод переменных идёт как удобно человеку, написать сразу два числа через пробел, или же написать каждое отдельно, программа сама поймёт, пока данные не будут введены, программа дальше выполняться не будет.

Ветвления. Условные операторы

Введение. Конструкция if - else
Мы разобрали основы и теперь можем перейти к нечто большему, и курс наш лежит прямо на ветвления. Нам всегда нужно что-то сравнивать с чем-то. Для этого есть ветвления. Алгоритм, в котором есть условия называются разветвляющимися. Они записываются очень просто. if (<условие>) {<действие_если_условие_верно>}
Если перевести дословно то выходит ЕСЛИ (условие) ВЫПОЛНИЛОСЬ ТО {действие}


Так же отметим что есть вариант когда условие не выполнилось, и тут есть оператор else. Он записывается после if без условия. else {<действие_если_условие_неверно>}


Полная конструкция будет выглятеть таким образом:

1
2
3
4
5
if (<условие>) {
    <действие>; // если верно
} else {
    <действие>; // если неверно
}

Примечание: "// текст" это комментарий. Он никак не влияет на код.

Такая конструкция называется ПОЛНЫМ ветвлением, т.к. у нас есть "ЕСЛИ" и "ИНАЧЕ". Дословно можно перевести так: ЕСЛИ это верно - делает это, ИНАЧЕ - делаем это.


Задача. Написать программу которая выводит большее из двух чисел.

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
 
int main(){
    int a,b;
    cout << "Enter 2 numbers: " << endl;
    cin >> a >> b;
    if (a > b) cout << a << endl;
    else cout << b << endl;
    return 0;
}

Циклы

Что такое циклы?
Цикл, это многократное повторение одинаковых действий. В языке Си есть два вида циклов, с известным числом шагов и неизвестным(с условием).


Объявление циклов
Циклы объявляются очень просто. Есть два цикла, for и while
Объявляются они по разному, но у них есть отличительная черта, у них есть своё тело, которое записывается в фигурных скобках. Прям как наш main()
Запись while: <while> (<условие>) {<тело_цикла>}
Запись for: <for> (int <имя_переменной> = 0; <имя_переменной> < <число шагов>; <имя_переменной>++) {<тело_цикла>}
В цикле while главное написать код так, чтобы был выход из цикла, иначе произойдёт зацикливание!! Запись <имя_переменной>++ это скоращение записи <имя_переменной> = <имя_переменной> + 1

Задача. Вывести 5 раз слово "Hello!". Это можно сделать двумя способами.


Первый способ. Цикл с условием:

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;
 
int main(){
    int i = 0;
    while (i < 0 ){
        cout << "Hello!" << endl;
        i++;
    }
    return 0;
}


Второй способ. Цикл с конечным числом шагов:

1
2
3
4
5
6
7
#include <iostream>
using namespace std;
 
int main(){
    for (int i = 0; i < 5; i++) cout << "Hello!" << endl;
    return 0;
}


Как это работает?
В первом случае, мы объявляем пеменную i как счётчик, то бишь число повторений. Отсчёт начинается с нуля! Далее с помощью служебного слова while мы объявляем цикл, а в круглых скобках указываем условие, если перевести дословно запись на русский язык, то выходит: ПОКА i МЕНЬШЕ ПЯТИ. Т.е. мы будет повторяться до тех пор, пока перменная i не будет равна 5 или же выше. И если присмотреться, видим что у нас есть тело цикла, где записан вывод слова, и увеличение счётчика(см. 8 строка).


Во втором случае, мы с помощью for объявили и начальное значение счётчика, то бишь ноль, и сразу же написали условие вместе с увеличением счётчика. Здесь мы сразу знаем сколько раз сработает цикл. Плюсом код стал в разы компактнее.