undefined

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

Harvard CS50
1 уровень , 2 лекция
Открыта

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

На вводной неделе вы уже успели опробовать визуальный язык программирования 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>

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

Комментарии (19)
Чтобы просмотреть все комментарии или оставить свой,
перейдите в полную версию
Александр 1 уровень, Минск
29 августа 2020
Подскажите, пожалуйста, что нужно прописывать сначала, чтобы эти все примеры выполнялись? Пишу, ошибка: #include <stdio.h> while (true) { printf("hello, world\n"); } Я так понимаю нужна главная функция main?
Алексей 0 уровень
9 июля 2020
Подскажите новичку. Что нужно сделать, чтоб самому с кодом поработать. Например, с примерами, что на лекции рассматривались. Зарегался на Гитхабе. Что дальше делать не понятно.
Настя Фокина 1 уровень, Днепр
5 января 2020
Есть пару вопросов, может кто подскажет: 1. Оператор инкремента носит то же название, что и переменная? Например если я задам название переменной не i, а g, к примеру, тогда оператор инкремента так и останется і++ или будет g++? 2. Можно ли изначально присвоить переменной в цикле с определенным количеством повторений значение, отличное от 0? Если да, то допускаются ли отрицательные числа или только положительные?
Александр 0 уровень
19 июля 2019
нихера не понятно. не обьясняют толком для начинающих, а просто чешут про то, что сами хорошо знают
Victor 3 уровень
1 января 2019
01.01.2019 проехали 1.2 теперь я в курсе что означают слова инкремента и плейсхолдер!
Дарья Шилова 9 уровень
31 августа 2018
В "сишном" варианте кода для условий ошибка - нужно перенести в третьей строки на четвертую все, что после точки с запятой.
5 января 2018
В примере условия в Scratch ошибка - блок по форме показан верно, но отсутствует слово "else".
Tigran 0 уровень
15 октября 2017
где скачать ide cloud9?
5 октября 2017
Ребята у вас в первом примере ошибка, в первой строке сразу после #include должен быть пробел! За курс огромное спасибо, будем постигать!)))
Ренат 20 уровень
21 июня 2017
клево! )