JavaRush /Курсы /Harvard CS50 /Сравнение Scratch и Си

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

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

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

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

Hello world на Scratch и C

Hello world на Scratch:

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

Hello world на Си:

#include&ltstdio.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 &ltstdio.h>

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

Комментарии (20)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
hidden #2969529 Уровень 1
19 января 2022
Долго не мог понять, в чём же проблема, почему я не могу вывести на экран "hello, world!" 10 раз (repeat 10). Оказывается, условие нужно вносить в тело😅

#include<stdio.h>

int main(void)
{
for(int i = 0; i < 10; i++)
printf("hello, world!\n");
}
Александр Уровень 1
29 августа 2020
Подскажите, пожалуйста, что нужно прописывать сначала, чтобы эти все примеры выполнялись? Пишу, ошибка: #include <stdio.h> while (true) { printf("hello, world\n"); } Я так понимаю нужна главная функция main?
MezoneOrange Уровень 37
6 сентября 2020

#include <stdio.h>

int main(int argc, const char * argv[]) 
{
    while (true)
    {
        printf("hello, world\n");
    }    
    return 0;
}
так же в сигнатуре main параметры можно не прописывать.
Александр Уровень 1
7 сентября 2020
спасибо, еще разбираюсь с массивами... Но на самом деле работает и вот так, намного проще ) int main(void) { while (true) { printf("hello, world\n"); } }
Алексей Уровень 0
9 июля 2020
Подскажите новичку. Что нужно сделать, чтоб самому с кодом поработать. Например, с примерами, что на лекции рассматривались. Зарегался на Гитхабе. Что дальше делать не понятно.
Настя Фокина Уровень 1
5 января 2020
Есть пару вопросов, может кто подскажет: 1. Оператор инкремента носит то же название, что и переменная? Например если я задам название переменной не i, а g, к примеру, тогда оператор инкремента так и останется і++ или будет g++? 2. Можно ли изначально присвоить переменной в цикле с определенным количеством повторений значение, отличное от 0? Если да, то допускаются ли отрицательные числа или только положительные?
Сергей Уровень 16
8 января 2020
1.Да

int i = 5;
int g = 10;
i++;
printf(i); // вывод 6
g++;
printf(g); // вывод 11
2. Да, счетчики могут быть и отрицательными, и положительными. Более того, вы можете считать не только вперед, но и назад и даже формулами!

for (int i = 0; i < 10; i++) // пример из урока
{
// тело цикла
}
for (int i = 10; i > -10; i--) // в обратную сторону
{
// тело цикла
}
for (int i = 0; i < 20; i = i + 2) // с шагом +2
{
// тело цикла
}
Настя Фокина Уровень 1
9 января 2020
Спасибо)
Александр Уровень 0
19 июля 2019
нихера не понятно. не обьясняют толком для начинающих, а просто чешут про то, что сами хорошо знают
Iaroslava Garmash Уровень 0
24 мая 2020
Я соглашусь. По профессии юрист, читаю такого рода "текст" впервые... и ничего не понимаю. Жаль,ч то курс для тех кто с Нуля, на самом деле для тех, кто 1) шарит в математике 2) сталкивался с программированием. Друзья, может кто-то подскажет прям для настоящих нулей ресурс?
Pop_Art Уровень 1
1 июня 2020
Это нормально! )) Главное упёртость и поиск ответов на всё что не понятно! Любое непонятное слово - гуглите. Вбивайте в ютубе. Книги скачивайте. Везде разными способами и примерами объясняют с 0. Джаву начал изучать с книги "Джава для детей, родителей, бабушек" параллельно зайдя сюда. Курс CS50 как раз старается познакомить с программированием с 0 оооочень доступным языком. Ещё раз просмотрите лекцию\лекции. Ставьте где то на паузу. Осмысливайте. )
Victor Уровень 3
1 января 2019
01.01.2019 проехали 1.2 теперь я в курсе что означают слова инкремента и плейсхолдер!
Дарья Шилова Уровень 9
31 августа 2018
В "сишном" варианте кода для условий ошибка - нужно перенести в третьей строки на четвертую все, что после точки с запятой.
Юрій Якимчук Уровень 33
14 сентября 2018
Это стилистическая ошибка, компилятору плевать :) Можно вообще в одну строку программу запихнуть. Но делать так конечно не нужно :)
5 января 2018
В примере условия в Scratch ошибка - блок по форме показан верно, но отсутствует слово "else".
Tigran Уровень 0
15 октября 2017
где скачать ide cloud9?
Миша Небоярски Уровень 16
29 июня 2020
это онлайн-ide https://ide.cs50.io/
5 октября 2017
Ребята у вас в первом примере ошибка, в первой строке сразу после #include должен быть пробел! За курс огромное спасибо, будем постигать!)))
Anonymous #3604180 Уровень 11
4 августа 2025
компилятор не видит пробелов, они нужны только для удобства программиста