Основы языка C
Идеи, которые мы изучили в Scratch с помощью блоков, теперь переносим в настоящий текстовый код. C — быстрый и точный язык, лежащий в основе почти всех современных языков. На этом уроке мы шаг за шагом пройдём путь от первой программы до переменных, условий, циклов и функций, рассматривая каждое в живом отладчике кода в стиле IDE.
Что вы узнаете на этом уроке
3.1 Что такое язык C?
C — язык программирования, созданный в 1972 году, и до сих пор один из самых используемых и влиятельных языков. Операционные системы (Windows, ядро Linux), браузеры и даже другие языки программирования часто построены на основе C.
В Scratch мы соединяли блоки. А в языке C мы пишем код, то есть текст, написанный по особым правилам. Поначалу это кажется сложнее, но взамен язык работает очень быстро и очень близко к компьютеру.
Почему мы начинаем именно с C?
- Он простой и точный: вы сами пишете только то, что нужно, ничего не скрыто
- Он учит глубоко понимать, как работают память и компьютер
- Его идеи (типы, циклы, функции) есть и в Python, JavaScript, Java и других
Самое главное: если вы поймёте C, другие языки станут для вас намного легче. Поэтому он настоящий фундамент.
3.2 Первая программа
Первая программа каждого программиста обычно выводит на экран «Привет». Вот полная программа на языке C, всего шесть строк:
Итак, любая программа на C начинается с функции main: когда компьютер запускает программу, он начинает читать именно отсюда. А printf выводит текст на экран.
;). Это сообщает C «эта команда завершена», подобно точке в конце предложения.3.3 Компиляция
Компьютер не понимает написанный нами код на C напрямую. Он знает только машинный код, состоящий из 0 и 1. Поэтому наш код мы переводим в машинный код с помощью компилятора (для C обычно gcc). Запустите этот процесс пошагово ниже:
Итак, путь всегда один и тот же: напиши код → скомпилируй (gcc) → запусти программу. Если в коде есть ошибка, компилятор не создаст программу, а скажет, в какой строке ошибка.
3.4 Переменные и типы
Программа должна где-то хранить данные. Для этого мы используем переменную (variable), то есть именованную ячейку в памяти. Это точно то же самое, что «переменная» в Scratch, только здесь у каждой переменной есть ещё и тип (type).
Под типом понимается, какие данные хранит переменная: целое число, дробное число или один символ. Мы заранее сообщаем C тип, и тогда он знает, сколько памяти выделить.
Каждый тип занимает в памяти разное место. Нажмите на карточку, чтобы рассмотреть подробнее:
3.5 printf и ввод
printf выводит текст на экран. Но не только обычный текст, он может выводить и значения переменных. Для этого используются специальные символы, спецификаторы формата:
%dдля целого числа (int)%fдля дробного числа (float, double)%cдля одного символа (char)\nдля перехода на новую строку
Ниже выберите тип и введите значение, посмотрите, как выводит printf:
scanf, например scanf("%d", &yosh);. Он записывает введённое с клавиатуры число в переменную yosh.3.6 Операторы
Под оператором понимается знак, выполняющий действие над значениями. В C есть три основные группы:
- Арифметические:
+сложение,-вычитание,*умножение,/деление,%остаток - Сравнения:
==равно,!=не равно,>больше,<меньше - Логические:
&&и,||или,!не
Важный тонкий момент: в C при делении целых чисел результат тоже целый. Например, 7 / 2 даёт 3 (дробная часть отбрасывается), а 7 % 2 даёт 1 (остаток). Попробуйте ниже:
3.7 Условия: if / else
Блок «если ...» из Scratch в C записывается как if. Программа проверяет условие: если условие верно (истинно), идёт одним путём, иначе через else идёт другим путём.
if ... else if ... else или switch. Внимание: при проверке равенства ставится не один, а два знака равно (==). Один = — это присваивание, два == — это сравнение.3.8 Циклы: for / while
Чтобы повторить одно действие много раз, мы используем цикл, как блок «повторить» в Scratch. В C чаще всего используется цикл for. Он состоит из трёх частей: начальное значение, условие продолжения и изменение на каждом шаге.
Программа ниже складывает числа от 1 до 5. Пройдите её по шагам и понаблюдайте, как меняются переменные и результат, словно в отладчике:
Результат: 1, 3, 6, 10, 15. Цикл while работает точно так же, но условие задаётся заранее, и тело повторяется, пока условие истинно.
Сделайте прогноз
Что этот цикл выведет в терминал?
3.9 Функции
В Scratch мы создавали «свой блок». В C это называется функцией: мы даём имя куску кода и вызываем его в любом месте. Функция может принимать данные (параметр) и возвращать результат (return).
Теперь, если вызвать kvadrat(4), он вернёт 16. Ниже выберите число и понаблюдайте за вызовом функции:
3.10 Глубже advanced
Вы освоили основы. Теперь кратко познакомимся ещё с тремя важными понятиями C. Их мы изучим глубоко в следующих неделях, а сейчас получим общее представление.
Массивы
Под массивом понимается хранение нескольких значений одного типа под одним именем. Каждый элемент берётся по своему номеру (индексу), и индекс начинается с 0.
Строки (string)
Под строкой понимается последовательность символов. В C строка на самом деле массив из char. Слово, имя или предложение хранятся именно так.
Указатели (pointer)
Под указателем понимается переменная, хранящая адрес другой переменной в памяти. То есть он хранит не само значение, а информацию «где оно находится». Это самое мощное и одновременно самое тонкое понятие C, и мы изучим его полностью на 6-й неделе.
Словарь терминов
3.11 Тест знаний
16 вопросов. Чтобы завершить неделю, ответьте правильно как минимум на 11 из них.
Поздравляем! Неделя 3 завершена
Теперь вы умеете писать настоящий код на C: вы познакомились с переменными, типами, printf, операторами, условиями, циклами и функциями. Это основные кирпичики любой большой программы.
Следующая неделя: Массивы и строки (хранение множества значений, индекс, строки и нулевой терминатор).
Перейти к следующему модулю