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

На вводной неделе вы уже успели опробовать визуальный язык программирования Scratch. Давайте сравним одни и те же действия, написанные с помощью Scratch с кодом на Си.

Hello world на Scratch и C

Hello world на Scratch:

Сравнение Scratch и Си - 1

Hello world на Си:

#include<stdio.h>
int main(void)
{
 printf("hello, world\n");
}

Элемент, который вы видите на изображении ниже — это функция, которая печатает «слова» спрайта в облачке комикса в Scratch. В языке Cи есть её аналог — функция printf. Она делает примерно то же самое. Только выводит слова не в «мультик», а в консоль.

Сравнение Scratch и Си - 2

main по-английски значит «главный». В Си функция main представляет собой точку входа в программу. То есть сколько бы ни было в программе разных функций, первым делом будет запущена именно main. Зелёный флажок в Scratch также можно считать main-функцией.

Сравнение Scratch и Си - 3

Бесконечный цикл

Scratch:

Сравнение Scratch и Си - 4

В переводе на Cи:

while (true)
{
printf("hello, world\n");
}

while (true) делает то же самое: цикл продолжает свою работу пока (while) значение true (булевское выражение «правда» или «единичка»). Такой цикл будет выполнятся бесконечно.

Цикл, выводящий фразу на экран 10 раз

Scratch:

Сравнение Scratch и Си - 5

Си:

for (int i = 0; i < 10; i++)
{
printf("hello, world!\n");
}

i — переменная-счетчик, её значение меняет оператор инкремента i++, увеличивая его на 1 при каждом витке цикла. Изначально i присваивается значение 0 с помощью оператора присваивания =.

Внимание! Как и в Java (подробнее об этом в курсе JavaRush), в Cи равенство обозначается ==, оператор присваивания =.
То есть, a = 5 означает, что переменной a присвоили значение 5, в то время как a==5 означает булевское выражение (если а равно 5, то выражение правдиво, если не равно, то ложно).

Цикл остановится, когда i «дорастет» до 9. Несложно посчитать, цикл выполнится 10 раз.
Таким образом, если вам нужно повторить что-то определенное количество раз, в Cи вы задаете цикл for (int i = 0; i < 10; i++).

Ещё один пример:

Сравнение Scratch и Си - 6

И то же самое в переводе на Cи:

int counter = 0;
while (true)
{
    printf("%i\n",  counter);
    counter++;
}
  • counter сохраняет значение в Cи и Scratch. В Си задаем int counter = 0 вместо 

  • Scratch set
  • Помечаем тип переменной как int, тем самым уточняя, что i является целым числом (от англ. integer, целый).
  • Значок %i, который мы используем в printf в четвертой строке — заполнитель (или плейсхолдер), говорящий о том, что мы должны напечатать десятичное целое, точно так же, мы говорим printf заменить заполнитель на значение, которое принимает переменная counter.

Булевы выражения

Scratch булевы выражения

Это то же самое, что

(x < y)
((x < y) && (y < z))

Условия

Scratch условия

И «сишный» эквивалент:

if (x < y)
{
printf(“x is less than y\n”); } else if (x > y)
{
printf(“x is greater than y\n”);
}
else
{
printf("x is equal to y\n");
}

А что насчет первой непонятной фразы в программе hello.c?

#include <stdio.h>

Об этом вы узнаете позднее, в лекции «Библиотеки Си».