0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>18 июл 2023</li>
2
<ul><li>18 июл 2023</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Дэвид Малан рассказывает об основах языка С, о хорошем и плохом коде, о работе с Visual Studio Code и разбирает простую программу на C.</p>
4
</ul><p>Дэвид Малан рассказывает об основах языка С, о хорошем и плохом коде, о работе с Visual Studio Code и разбирает простую программу на C.</p>
5
<p>Кадр: фильм "Переводчики"</p>
5
<p>Кадр: фильм "Переводчики"</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
6
<p>Программист, консультант, специалист по документированию. Легко и доступно рассказывает о сложных вещах в программировании и дизайне.</p>
7
<p>CS50 (Computer Science 50) - легендарный курс о компьютерных технологиях Гарвардского университета. Практически в любом разговоре о том, как вкатиться в программирование, опытные ребята упоминают этот курс как необходимый фундамент. В нём последовательно разбираются логика работы компьютера, работа с визуальным программированием в Scratch, основы языка C, массивы, основные алгоритмы, работа памяти, структуры данных, основы языка Python, основы SQL, HTML, CSS, JavaScript, Python-фреймворк Flask и даже эмодзи :)</p>
7
<p>CS50 (Computer Science 50) - легендарный курс о компьютерных технологиях Гарвардского университета. Практически в любом разговоре о том, как вкатиться в программирование, опытные ребята упоминают этот курс как необходимый фундамент. В нём последовательно разбираются логика работы компьютера, работа с визуальным программированием в Scratch, основы языка C, массивы, основные алгоритмы, работа памяти, структуры данных, основы языка Python, основы SQL, HTML, CSS, JavaScript, Python-фреймворк Flask и даже эмодзи :)</p>
8
<p>Изучив материалы курса, вы разберётесь в том, как работает компьютер, узнаете универсальные принципы программирования и сможете понимать и читать код, написанный на разных языках.</p>
8
<p>Изучив материалы курса, вы разберётесь в том, как работает компьютер, узнаете универсальные принципы программирования и сможете понимать и читать код, написанный на разных языках.</p>
9
<p>В этой статье мы разберём основы программирования на примере визуальной среды Scratch - хардкор, C и прочие штуки начнутся со следующей статьи цикла.</p>
9
<p>В этой статье мы разберём основы программирования на примере визуальной среды Scratch - хардкор, C и прочие штуки начнутся со следующей статьи цикла.</p>
10
<p><strong>Содержание</strong></p>
10
<p><strong>Содержание</strong></p>
11
<ul><li><a>Главные условия создания хорошего кода</a></li>
11
<ul><li><a>Главные условия создания хорошего кода</a></li>
12
<li><a>Использование IDE</a></li>
12
<li><a>Использование IDE</a></li>
13
<li><a>Компилирование программы</a></li>
13
<li><a>Компилирование программы</a></li>
14
<li><a>Функции и аргументы</a></li>
14
<li><a>Функции и аргументы</a></li>
15
<li><a>Зачем нужна функция main</a></li>
15
<li><a>Зачем нужна функция main</a></li>
16
<li><a>Заголовочные файлы (header files)</a></li>
16
<li><a>Заголовочные файлы (header files)</a></li>
17
<li><a>Команды Linux</a></li>
17
<li><a>Команды Linux</a></li>
18
</ul><p>CS50 - это самый популярный курс в Гарвардском университете и самый посещаемый массовый открытый онлайн-курс на edX. Все материалы курса<a>доступны бесплатно</a>(в том числе и практические задания), но, если заплатить, можно получить сертификат и <a>разные дополнительные плюшки</a>.</p>
18
</ul><p>CS50 - это самый популярный курс в Гарвардском университете и самый посещаемый массовый открытый онлайн-курс на edX. Все материалы курса<a>доступны бесплатно</a>(в том числе и практические задания), но, если заплатить, можно получить сертификат и <a>разные дополнительные плюшки</a>.</p>
19
<p>Мы перевели видеолекции в текстовый формат, снабдили их иллюстрациями, кое-где дополнили объяснения и выкладываем в открытый доступ. Оригинальный курс доступен по лицензии<a>Attribution-NonCommercial-ShareAlike 4.0 International</a>(CC BY-NC-SA 4.0) - его можно дорабатывать и распространять бесплатно, но только под исходной лицензией. Так что этот цикл материалов вы также сможете использовать в своей работе или общественной деятельности совершенно свободно и бесплатно в рамках той же лицензии.</p>
19
<p>Мы перевели видеолекции в текстовый формат, снабдили их иллюстрациями, кое-где дополнили объяснения и выкладываем в открытый доступ. Оригинальный курс доступен по лицензии<a>Attribution-NonCommercial-ShareAlike 4.0 International</a>(CC BY-NC-SA 4.0) - его можно дорабатывать и распространять бесплатно, но только под исходной лицензией. Так что этот цикл материалов вы также сможете использовать в своей работе или общественной деятельности совершенно свободно и бесплатно в рамках той же лицензии.</p>
20
<p>Каждая статья из цикла CS50 состоит из следующих материалов:</p>
20
<p>Каждая статья из цикла CS50 состоит из следующих материалов:</p>
21
<ul><li>текстовый перевод видео (иногда - половины видео, если тема обширная);</li>
21
<ul><li>текстовый перевод видео (иногда - половины видео, если тема обширная);</li>
22
<li>ссылка на оригинальное видео на английском языке;</li>
22
<li>ссылка на оригинальное видео на английском языке;</li>
23
<li>схемы и пояснения;</li>
23
<li>схемы и пояснения;</li>
24
<li>ссылки на более подробные материалы по теме статьи;</li>
24
<li>ссылки на более подробные материалы по теме статьи;</li>
25
<li>практические задания.</li>
25
<li>практические задания.</li>
26
</ul><p>На этой лекции мы начнём изучать новый язык - C. В отличие от графического Scratch, это традиционный текстовый язык, лежащий в основе многих современных языков, например того же Python.</p>
26
</ul><p>На этой лекции мы начнём изучать новый язык - C. В отличие от графического Scratch, это традиционный текстовый язык, лежащий в основе многих современных языков, например того же Python.</p>
27
<p>Хочу напомнить, что наша цель не в том, чтобы выучили Scratch, C или даже Python, а в том, чтобы научиться программировать. В языке С много деталей, которые могут отвлекать от процесса программирования: синтаксис, странная пунктуация - все эти решётки, угловые, круглые и фигурные скобки, обратная косая черта и многое другое. Но я обещаю, что скоро вы со всем этим разберётесь. Для этого нужно вспомнить, что мы изучали.</p>
27
<p>Хочу напомнить, что наша цель не в том, чтобы выучили Scratch, C или даже Python, а в том, чтобы научиться программировать. В языке С много деталей, которые могут отвлекать от процесса программирования: синтаксис, странная пунктуация - все эти решётки, угловые, круглые и фигурные скобки, обратная косая черта и многое другое. Но я обещаю, что скоро вы со всем этим разберётесь. Для этого нужно вспомнить, что мы изучали.</p>
28
<p>Итак, выполняя задачи на Scratch, мы рассмотрели функции, у которых есть аргументы (входные данные), а также возвращаемые значения (выходные данные) - хотя последние есть не у всех функций.</p>
28
<p>Итак, выполняя задачи на Scratch, мы рассмотрели функции, у которых есть аргументы (входные данные), а также возвращаемые значения (выходные данные) - хотя последние есть не у всех функций.</p>
29
<p>Затем мы немного поговорили об условных выражениях - так сказать, дорожных развилках, - а также о логических выражениях, представляющих собой вопросы с двумя вариантами ответа:<strong>да/нет</strong>или<strong>истина/ложь</strong>.</p>
29
<p>Затем мы немного поговорили об условных выражениях - так сказать, дорожных развилках, - а также о логических выражениях, представляющих собой вопросы с двумя вариантами ответа:<strong>да/нет</strong>или<strong>истина/ложь</strong>.</p>
30
<p>Мы рассмотрели циклы, которые позволяют повторять какое-то действие снова и снова, переменные, временно сохраняющие значения и тому подобное. Всё это нам пригодится.</p>
30
<p>Мы рассмотрели циклы, которые позволяют повторять какое-то действие снова и снова, переменные, временно сохраняющие значения и тому подобное. Всё это нам пригодится.</p>
31
<p>Теперь поговорим о том, как переводить эти идеи на языки программирования. Синтаксис языков программирования проще, чем синтаксис естественного, человеческого языка, ведь и слов в языках программирования гораздо меньше. Однако с языками программирования нужно быть более аккуратными - компьютер не прощает даже малейших ошибок.</p>
31
<p>Теперь поговорим о том, как переводить эти идеи на языки программирования. Синтаксис языков программирования проще, чем синтаксис естественного, человеческого языка, ведь и слов в языках программирования гораздо меньше. Однако с языками программирования нужно быть более аккуратными - компьютер не прощает даже малейших ошибок.</p>
32
<p>Итак, вы написали код и спрашиваете себя: хорош ли он? Как же это понять? Самый первый критерий - код должен правильно решать поставленную задачу. Но, даже если вы правильно решили задачу, а при этом ваш код длинный и беспорядочный, он будет считаться плохим. Другому программисту будет сложно понять, что ваш код делает и действительно ли он правильный. Да и вы сами, когда посмотрите на этот код в следующем году, а то и на следующее утро, возможно, не поймёте, что написали.</p>
32
<p>Итак, вы написали код и спрашиваете себя: хорош ли он? Как же это понять? Самый первый критерий - код должен правильно решать поставленную задачу. Но, даже если вы правильно решили задачу, а при этом ваш код длинный и беспорядочный, он будет считаться плохим. Другому программисту будет сложно понять, что ваш код делает и действительно ли он правильный. Да и вы сами, когда посмотрите на этот код в следующем году, а то и на следующее утро, возможно, не поймёте, что написали.</p>
33
<p>В итоге программисту необходимо сосредоточиться на разработке хорошего кода, на повышении эффективности алгоритмов, на том, чтобы код чистым и даже выглядел красиво. Но это уже вопрос стиля.</p>
33
<p>В итоге программисту необходимо сосредоточиться на разработке хорошего кода, на повышении эффективности алгоритмов, на том, чтобы код чистым и даже выглядел красиво. Но это уже вопрос стиля.</p>
34
<p>Итак, у хорошего кода есть ряд характеристик: корректность, дизайн (архитектура, структура), стиль. А теперь разберём программу на С, которая печатает в терминале hello, world.</p>
34
<p>Итак, у хорошего кода есть ряд характеристик: корректность, дизайн (архитектура, структура), стиль. А теперь разберём программу на С, которая печатает в терминале hello, world.</p>
35
#include <stdio.h> int main(void) { printf("hello, world\n"); }<p>Честно говоря, это довольно жестоко - столько раз нажимать на клавиши, чтобы получить такой незначительный результат. Через несколько лекций, когда мы представим другие, более современные языки, такие как Python, вы сможете преобразовать эту логику буквально в одну строку кода. Но сейчас будет полезно понять, что здесь происходит.</p>
35
#include <stdio.h> int main(void) { printf("hello, world\n"); }<p>Честно говоря, это довольно жестоко - столько раз нажимать на клавиши, чтобы получить такой незначительный результат. Через несколько лекций, когда мы представим другие, более современные языки, такие как Python, вы сможете преобразовать эту логику буквально в одну строку кода. Но сейчас будет полезно понять, что здесь происходит.</p>
36
<p>Итак, как напечатать hello, world на экране? Я мог бы открыть Word, Google Docs или Pages, набрать текст символ за символом, сохранить его - и вот у меня уже есть готовая программа. Но проблема в том, что компьютеры понимают только двоичный код, нули и единицы. Ни один из тех инструментов, которые я перечислил, не подходит для программирования - у них нет возможности преобразовать этот текст в двоичный код.</p>
36
<p>Итак, как напечатать hello, world на экране? Я мог бы открыть Word, Google Docs или Pages, набрать текст символ за символом, сохранить его - и вот у меня уже есть готовая программа. Но проблема в том, что компьютеры понимают только двоичный код, нули и единицы. Ни один из тех инструментов, которые я перечислил, не подходит для программирования - у них нет возможности преобразовать этот текст в двоичный код.</p>
37
<p>Но есть инструменты, которые дают такую возможность. Они называются интегрированными средами разработки, или IDE. Вот, например, как выглядит очень популярная Visual Studio Code (VS Code).</p>
37
<p>Но есть инструменты, которые дают такую возможность. Они называются интегрированными средами разработки, или IDE. Вот, например, как выглядит очень популярная Visual Studio Code (VS Code).</p>
38
Окно VS Code<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>Здесь вверху вы видите, как я создал пустой файл под названием hello.c, где .c указывает, что это файл с кодом на языке программирования C. Цифра 1 слева - это автоматически проставляется нумерация строк. Так удобнее ориентироваться в коде программы.</p>
38
Окно VS Code<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>Здесь вверху вы видите, как я создал пустой файл под названием hello.c, где .c указывает, что это файл с кодом на языке программирования C. Цифра 1 слева - это автоматически проставляется нумерация строк. Так удобнее ориентироваться в коде программы.</p>
39
<p>Теперь я добавлю кое-что под названием stdio.h (подробнее об этом поговорим позже), а затем наберу int main(void) (к этому мы тоже вернёмся далее), затем я введу фигурные скобки и нажму клавишу<strong>Tab</strong>, чтобы сделать отступ на несколько пробелов. В завершение я наберу printf(), "hello, world/n" и поставлю точку с запятой.</p>
39
<p>Теперь я добавлю кое-что под названием stdio.h (подробнее об этом поговорим позже), а затем наберу int main(void) (к этому мы тоже вернёмся далее), затем я введу фигурные скобки и нажму клавишу<strong>Tab</strong>, чтобы сделать отступ на несколько пробелов. В завершение я наберу printf(), "hello, world/n" и поставлю точку с запятой.</p>
40
Дэвид на фоне своих слайдов во время чтения курса<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>Теперь нужно нажать<strong>Ctrl</strong>+<strong>S</strong> - это сохранит файл. И вуаля, я уже программист.</p>
40
Дэвид на фоне своих слайдов во время чтения курса<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>Теперь нужно нажать<strong>Ctrl</strong>+<strong>S</strong> - это сохранит файл. И вуаля, я уже программист.</p>
41
<p>Моя программа находится в файле под названием hello.c. Теперь мне нужно преобразовать исходный код - то есть текст программы на языке программирования, как его принято называть, в нули и единицы, которые мы будем называть машинным кодом. Его как раз и выполняет компьютер.</p>
41
<p>Моя программа находится в файле под названием hello.c. Теперь мне нужно преобразовать исходный код - то есть текст программы на языке программирования, как его принято называть, в нули и единицы, которые мы будем называть машинным кодом. Его как раз и выполняет компьютер.</p>
42
<p>Конечно, я не буду делать это вручную. Есть алгоритм, реализованный специальной программой, которая делает такое преобразование - эта программа называется компилятором. Не все языки его используют, но C - язык, использующий компилятор.</p>
42
<p>Конечно, я не буду делать это вручную. Есть алгоритм, реализованный специальной программой, которая делает такое преобразование - эта программа называется компилятором. Не все языки его используют, но C - язык, использующий компилятор.</p>
43
<p>Итак, в верхней части экрана находится мой текстовый редактор, в котором я могу запросто создавать файлы и писать код. Посмотрите на нижнюю часть экрана - там есть область, которая называется окном терминала. Там я могу вводить и запускать команды, например скомпилировать свой исходный код в машинный код.</p>
43
<p>Итак, в верхней части экрана находится мой текстовый редактор, в котором я могу запросто создавать файлы и писать код. Посмотрите на нижнюю часть экрана - там есть область, которая называется окном терминала. Там я могу вводить и запускать команды, например скомпилировать свой исходный код в машинный код.</p>
44
<p>Итак, как же мне превратить свой файл hello.c в программу? Для этого я ввожу в командной строке терминала команду make hello и нажимаю<strong>Enter</strong>, а затем ввожу ./hello и опять нажимаю<strong>Enter</strong>.</p>
44
<p>Итак, как же мне превратить свой файл hello.c в программу? Для этого я ввожу в командной строке терминала команду make hello и нажимаю<strong>Enter</strong>, а затем ввожу ./hello и опять нажимаю<strong>Enter</strong>.</p>
45
Сборка и выполнение программы на C<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>make hello осуществляет сборку и компиляцию программы, а ./hello означает запуск программы под названием hello в текущей папке.</p>
45
Сборка и выполнение программы на C<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>make hello осуществляет сборку и компиляцию программы, а ./hello означает запуск программы под названием hello в текущей папке.</p>
46
<p>Теперь я открою боковую панель IDE.</p>
46
<p>Теперь я открою боковую панель IDE.</p>
47
"Проводник" в VS Code<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>То, что я открыл, называется Explorer. Здесь можно увидеть все файлы своей учётной записи. Один из них называется hello.c - он выделен, потому что открыт прямо здесь, в нашей IDE. Другой называется hello - это новый файл, созданный при компиляции. Файл hello - исполняемый, то есть его можно запускать.</p>
47
"Проводник" в VS Code<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>То, что я открыл, называется Explorer. Здесь можно увидеть все файлы своей учётной записи. Один из них называется hello.c - он выделен, потому что открыт прямо здесь, в нашей IDE. Другой называется hello - это новый файл, созданный при компиляции. Файл hello - исполняемый, то есть его можно запускать.</p>
48
<p>Теперь, если мы хотим изменить программу, например, чтобы она печатала hello, CS50, нам нужно не только исправить код в файле hello.c, но и скомпилировать его заново, чтобы получить обновленный файл hello. Только тогда результат вывода программы изменится.</p>
48
<p>Теперь, если мы хотим изменить программу, например, чтобы она печатала hello, CS50, нам нужно не только исправить код в файле hello.c, но и скомпилировать его заново, чтобы получить обновленный файл hello. Только тогда результат вывода программы изменится.</p>
49
<p>А сейчас вспомним, что такое функции и аргументы. Функции - это действия, такие как "говорить", "спрашивать" и тому подобное. Аргументы функций в <strong>Scratch</strong>вводились, как правило, в маленьких белых овалах.</p>
49
<p>А сейчас вспомним, что такое функции и аргументы. Функции - это действия, такие как "говорить", "спрашивать" и тому подобное. Аргументы функций в <strong>Scratch</strong>вводились, как правило, в маленьких белых овалах.</p>
50
<p>Давайте рассмотрим нашу программу на <strong>С</strong>в контексте<strong>Scratch</strong>. Для вывода текста на экран здесь используется функция printf. Круглые скобки заменяют белый овал. Ещё есть двойные кавычки, которых не было в <strong>Scratch</strong> - они нужны, если в качестве аргумента функции, то есть данных, которые функция обрабатывает, используется строка. Ещё в коде есть точка с запятой - в программировании на языке<strong>C</strong>она используется, чтобы "закончить свою мысль".</p>
50
<p>Давайте рассмотрим нашу программу на <strong>С</strong>в контексте<strong>Scratch</strong>. Для вывода текста на экран здесь используется функция printf. Круглые скобки заменяют белый овал. Ещё есть двойные кавычки, которых не было в <strong>Scratch</strong> - они нужны, если в качестве аргумента функции, то есть данных, которые функция обрабатывает, используется строка. Ещё в коде есть точка с запятой - в программировании на языке<strong>C</strong>она используется, чтобы "закончить свою мысль".</p>
51
<p>У функций могут быть разные типы выходных данных - то есть результат. Чаще всего это какие-то строки, символы, числа и тому подобное. Но выходными данными может быть и некий "побочный эффект" - обычно это что-то, что вы видите на экране или что можете услышать: изображения, звук, какой-то появляющийся текст.</p>
51
<p>У функций могут быть разные типы выходных данных - то есть результат. Чаще всего это какие-то строки, символы, числа и тому подобное. Но выходными данными может быть и некий "побочный эффект" - обычно это что-то, что вы видите на экране или что можете услышать: изображения, звук, какой-то появляющийся текст.</p>
52
<p>В <strong>Scratch</strong>у нас были функции, которые, помимо побочных эффектов, возвращали какое-то значение. Например, блок Спросить, который сохранял ответ на вопрос "Как вас зовут?" в специальной переменной Ответ. Такой результат вы могли использовать повторно - в отличие от побочного эффекта, который появляется на экране и исчезает.</p>
52
<p>В <strong>Scratch</strong>у нас были функции, которые, помимо побочных эффектов, возвращали какое-то значение. Например, блок Спросить, который сохранял ответ на вопрос "Как вас зовут?" в специальной переменной Ответ. Такой результат вы могли использовать повторно - в отличие от побочного эффекта, который появляется на экране и исчезает.</p>
53
<p>Самое близкое совпадение, которое я могу предложить для блока Спросить - это функция get_string. Она также возвращает полученный результат в виде переменной, и его можно использовать повторно.</p>
53
<p>Самое близкое совпадение, которое я могу предложить для блока Спросить - это функция get_string. Она также возвращает полученный результат в виде переменной, и его можно использовать повторно.</p>
54
Функция для ввода в программу пользовательских данных<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>В отличие от математики, знак = в программировании на C не означает равенство - это оператор присваивания. Переменной answer присваивается результат выполнения функции. А сама функция предлагает пользователю ввести какое-то значение.</p>
54
Функция для ввода в программу пользовательских данных<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>В отличие от математики, знак = в программировании на C не означает равенство - это оператор присваивания. Переменной answer присваивается результат выполнения функции. А сама функция предлагает пользователю ввести какое-то значение.</p>
55
<p>Кроме того, в <strong>C</strong>вы не просто даёте имя переменной, как в<strong>Scratch</strong>. Вам нужно заранее сообщить компьютеру, какой тип данных она будет хранить. Тип<strong>string</strong>используется для строк, а <strong>int</strong> - для целых чисел. Есть и другие типы данных - мы изучим их позже.</p>
55
<p>Кроме того, в <strong>C</strong>вы не просто даёте имя переменной, как в<strong>Scratch</strong>. Вам нужно заранее сообщить компьютеру, какой тип данных она будет хранить. Тип<strong>string</strong>используется для строк, а <strong>int</strong> - для целых чисел. Есть и другие типы данных - мы изучим их позже.</p>
56
<p>Если в программе указано, что переменная имеет тип<strong>string</strong>, то компьютер будет интерпретировать хранящиеся в ней нули и единицы как слова или последовательность букв (даже пустую последовательность букв), а если это<strong>int</strong> - как целое число. Если я попытаюсь поместить строку в число или число в строку, команда make выдаст сообщение об ошибке (но тут важно понимать, что все данные, которые вы вводите сами в терминал, - будь то число или текст, программа будет понимать именно как текст, строку, тип string).</p>
56
<p>Если в программе указано, что переменная имеет тип<strong>string</strong>, то компьютер будет интерпретировать хранящиеся в ней нули и единицы как слова или последовательность букв (даже пустую последовательность букв), а если это<strong>int</strong> - как целое число. Если я попытаюсь поместить строку в число или число в строку, команда make выдаст сообщение об ошибке (но тут важно понимать, что все данные, которые вы вводите сами в терминал, - будь то число или текст, программа будет понимать именно как текст, строку, тип string).</p>
57
<p>Типы данных в C:</p>
57
<p>Типы данных в C:</p>
58
<ul><li><strong>bool</strong> - булевы значения (истина/ложь);</li>
58
<ul><li><strong>bool</strong> - булевы значения (истина/ложь);</li>
59
<li><strong>char</strong> - единичный символ;</li>
59
<li><strong>char</strong> - единичный символ;</li>
60
<li><strong>float</strong> - числа с плавающей точкой/запятой (дробные числа);</li>
60
<li><strong>float</strong> - числа с плавающей точкой/запятой (дробные числа);</li>
61
<li><strong>double</strong> - более длинные числа с плавающей точкой/запятой (дробные числа);</li>
61
<li><strong>double</strong> - более длинные числа с плавающей точкой/запятой (дробные числа);</li>
62
<li><strong>int</strong> - целые числа;</li>
62
<li><strong>int</strong> - целые числа;</li>
63
<li><strong>long</strong> - большие целые числа;</li>
63
<li><strong>long</strong> - большие целые числа;</li>
64
<li><strong>string</strong> - строковые данные.</li>
64
<li><strong>string</strong> - строковые данные.</li>
65
</ul><p>Эти типы помогают "понимать" и обрабатывать последовательности единичек и нулей как осмысленные данные конкретного формата.</p>
65
</ul><p>Эти типы помогают "понимать" и обрабатывать последовательности единичек и нулей как осмысленные данные конкретного формата.</p>
66
<p>Теперь разберёмся с \n. Перейдём к <strong>VS Code</strong>и вернёмся к программе "hello, world". Уберём \n и запустим код на компиляцию и выполнение.</p>
66
<p>Теперь разберёмся с \n. Перейдём к <strong>VS Code</strong>и вернёмся к программе "hello, world". Уберём \n и запустим код на компиляцию и выполнение.</p>
67
Вывод программы без /n<p><em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em></p>
67
Вывод программы без /n<p><em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em></p>
68
<p>Как видим, знак $ остался на той же строке, что и "hello, world". Мы можем сделать вывод, что \n - это обозначение для перемещения курсора на следующую строку. Без него выводимый текст выглядит неаккуратно.</p>
68
<p>Как видим, знак $ остался на той же строке, что и "hello, world". Мы можем сделать вывод, что \n - это обозначение для перемещения курсора на следующую строку. Без него выводимый текст выглядит неаккуратно.</p>
69
<p>А теперь сделаем программу более интерактивной. Пусть она сначала спрашивает: "Как вас зовут?", а потом здоровается с человеком.</p>
69
<p>А теперь сделаем программу более интерактивной. Пусть она сначала спрашивает: "Как вас зовут?", а потом здоровается с человеком.</p>
70
<p>Обновлённая программа на <strong>С</strong>будет выглядеть так:</p>
70
<p>Обновлённая программа на <strong>С</strong>будет выглядеть так:</p>
71
Новая программа и результат её выполнения<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em>#include <cs50.h> #include <stdio.h> int main(void) { string answer = get_string("What's your name? "); printf("hello, %s\n", answer); }<p>Разберёмся в тексте (листинге) этой программы. Я включил сюда ещё одну строку кода, точнее, библиотеку, которая называется cs50.h. Дело в том, что некоторые функции<strong>C</strong>поставляются в комплекте с языком. Но чаще всего, если вы хотите использовать функцию, вы должны загрузить библиотеку, которая её содержит. get_string - это функция, которую некоторое время назад написали для нашего курса CS50. Она позволяет легко получать информацию от пользователя из терминала - если бы не она, нам бы пришлось писать очень мудрёный код. Чтобы использовать эту функцию, нужно сказать программе, чтобы она загрузила и использовала библиотеку cs50.h, в состав которой и входит функция get_string.</p>
71
Новая программа и результат её выполнения<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em>#include <cs50.h> #include <stdio.h> int main(void) { string answer = get_string("What's your name? "); printf("hello, %s\n", answer); }<p>Разберёмся в тексте (листинге) этой программы. Я включил сюда ещё одну строку кода, точнее, библиотеку, которая называется cs50.h. Дело в том, что некоторые функции<strong>C</strong>поставляются в комплекте с языком. Но чаще всего, если вы хотите использовать функцию, вы должны загрузить библиотеку, которая её содержит. get_string - это функция, которую некоторое время назад написали для нашего курса CS50. Она позволяет легко получать информацию от пользователя из терминала - если бы не она, нам бы пришлось писать очень мудрёный код. Чтобы использовать эту функцию, нужно сказать программе, чтобы она загрузила и использовала библиотеку cs50.h, в состав которой и входит функция get_string.</p>
72
<p>Библиотека - это что-то вроде заранее написанных другими программистами полезных кусочков кода, к которым можно обращаться как к функциям с помощью коротких имён - в нашем случае get_string. stdio.h - это так называемая "стандартная библиотека", которая идёт в комплекте с языком программирования. Да, верно - даже за базовыми функциями языка программирования есть чей-то заранее написанный код.</p>
72
<p>Библиотека - это что-то вроде заранее написанных другими программистами полезных кусочков кода, к которым можно обращаться как к функциям с помощью коротких имён - в нашем случае get_string. stdio.h - это так называемая "стандартная библиотека", которая идёт в комплекте с языком программирования. Да, верно - даже за базовыми функциями языка программирования есть чей-то заранее написанный код.</p>
73
<p>Итак, в нашей программе есть две библиотеки:</p>
73
<p>Итак, в нашей программе есть две библиотеки:</p>
74
<ul><li>stdio.h - библиотека, которая даёт вам доступ к printf и другим функциям, связанным с вводом и выводом.</li>
74
<ul><li>stdio.h - библиотека, которая даёт вам доступ к printf и другим функциям, связанным с вводом и выводом.</li>
75
<li>cs50.h - библиотека, предоставляющая доступ к функциям, которых нет в <em>стандартной библиотеке</em>C, и включающая в себя get_string.</li>
75
<li>cs50.h - библиотека, предоставляющая доступ к функциям, которых нет в <em>стандартной библиотеке</em>C, и включающая в себя get_string.</li>
76
</ul><p>Какие функции включены в состав библиотеки CS50:</p>
76
</ul><p>Какие функции включены в состав библиотеки CS50:</p>
77
<ul><li>get_char()</li>
77
<ul><li>get_char()</li>
78
<li>get_double()</li>
78
<li>get_double()</li>
79
<li>get_float()</li>
79
<li>get_float()</li>
80
<li>get_int()</li>
80
<li>get_int()</li>
81
<li>get_long()</li>
81
<li>get_long()</li>
82
<li>get_string()</li>
82
<li>get_string()</li>
83
</ul><p>Эти функции помогают ввести в программу данные того или иного типа из командной строки. Если вам нужна строка, используйте функцию get_string() - она попросит ввести в терминал какой-то текст и присвоит его определённой переменной (в этом случае и число будет считаться текстом, строковым параметром).</p>
83
</ul><p>Эти функции помогают ввести в программу данные того или иного типа из командной строки. Если вам нужна строка, используйте функцию get_string() - она попросит ввести в терминал какой-то текст и присвоит его определённой переменной (в этом случае и число будет считаться текстом, строковым параметром).</p>
84
<p>А что же означает знак %s? В <strong>Scratch</strong>, если нам нужно было объединить две строки, мы просто писали "яблоко" и "банан". В языке С другой синтаксис. Вы помещаете в строке внутри двойных кавычек последовательность символов %s<strong>,</strong>которая говорит компьютеру, что на это место надо поставить переменную, название которой будет указано после кавычек, но внутри круглых скобок. В нашем случае это переменная answer.</p>
84
<p>А что же означает знак %s? В <strong>Scratch</strong>, если нам нужно было объединить две строки, мы просто писали "яблоко" и "банан". В языке С другой синтаксис. Вы помещаете в строке внутри двойных кавычек последовательность символов %s<strong>,</strong>которая говорит компьютеру, что на это место надо поставить переменную, название которой будет указано после кавычек, но внутри круглых скобок. В нашем случае это переменная answer.</p>
85
<p>Кроме %s есть и другие специальные последователи символов:</p>
85
<p>Кроме %s есть и другие специальные последователи символов:</p>
86
<ul><li>%s - string;</li>
86
<ul><li>%s - string;</li>
87
<li>%i - integer;</li>
87
<li>%i - integer;</li>
88
<li>%f - float и double;</li>
88
<li>%f - float и double;</li>
89
<li>%li - long integer;</li>
89
<li>%li - long integer;</li>
90
<li>%c - char.</li>
90
<li>%c - char.</li>
91
</ul><p>Синтаксис вы помните: даём строку в кавычках, внутри неё используем %s, а после строки пишем имя переменной, из которой надо взять значение и подставить вместо %s.</p>
91
</ul><p>Синтаксис вы помните: даём строку в кавычках, внутри неё используем %s, а после строки пишем имя переменной, из которой надо взять значение и подставить вместо %s.</p>
92
<p>Итак, сколько аргументов (то есть входных данных) принимает функция printf? Правильный ответ - два аргумента. Запятая после кавычек отделяет первый аргумент - строку в кавычках от второго - переменной answer. Запятая внутри кавычек является частью аргумента типа<strong>string</strong>, то есть частью строки.</p>
92
<p>Итак, сколько аргументов (то есть входных данных) принимает функция printf? Правильный ответ - два аргумента. Запятая после кавычек отделяет первый аргумент - строку в кавычках от второго - переменной answer. Запятая внутри кавычек является частью аргумента типа<strong>string</strong>, то есть частью строки.</p>
93
<p>Я хочу указать на красивые цвета, которые подсвечивают текст в окне редактирования. Так, например, переменная string_answer здесь выделена чёрным цветом, функция get_string - коричнево-жёлтым, %s - синим. Это редактор VS Code выделяет для вас синтаксис - такая функция называется "подсветка синтаксиса". Благодаря этому программист может различать разные сущности по цветам и более просто ориентироваться в тексте программы. Видите чёрное - ага, это точно переменная. Видите коричнево-жёлтое - это явно функция. Подсветка синтаксиса - это функциональность, которую предоставляют практически все редакторы кода и IDE.</p>
93
<p>Я хочу указать на красивые цвета, которые подсвечивают текст в окне редактирования. Так, например, переменная string_answer здесь выделена чёрным цветом, функция get_string - коричнево-жёлтым, %s - синим. Это редактор VS Code выделяет для вас синтаксис - такая функция называется "подсветка синтаксиса". Благодаря этому программист может различать разные сущности по цветам и более просто ориентироваться в тексте программы. Видите чёрное - ага, это точно переменная. Видите коричнево-жёлтое - это явно функция. Подсветка синтаксиса - это функциональность, которую предоставляют практически все редакторы кода и IDE.</p>
94
<p>Обратите внимание на отступ в строках 6 и 7. Я настроил VS Code на отступ в четыре пробела, появляющиеся каждый раз, когда я нажимаю клавишу<strong>Tab</strong>, - это распространённое соглашение. Отступы помогают подчеркнуть иерархию элементов, их вложенность. Если элементы на одном уровне - они начинаются с одинакового отступа (например, открывающая фигурная скобка и закрывающая фигурная скобка). А если один элемент вложен в другой, он начинается с отступа относительно<em>родительского</em>элемента. Например, объявление переменной string_answer<em>вложено</em>в функцию main.</p>
94
<p>Обратите внимание на отступ в строках 6 и 7. Я настроил VS Code на отступ в четыре пробела, появляющиеся каждый раз, когда я нажимаю клавишу<strong>Tab</strong>, - это распространённое соглашение. Отступы помогают подчеркнуть иерархию элементов, их вложенность. Если элементы на одном уровне - они начинаются с одинакового отступа (например, открывающая фигурная скобка и закрывающая фигурная скобка). А если один элемент вложен в другой, он начинается с отступа относительно<em>родительского</em>элемента. Например, объявление переменной string_answer<em>вложено</em>в функцию main.</p>
95
<p>В языке C существует много операторов для математических вычислений, а сами эти вычисления происходят на каждом шагу. Вот все операторы:</p>
95
<p>В языке C существует много операторов для математических вычислений, а сами эти вычисления происходят на каждом шагу. Вот все операторы:</p>
96
<ul><li>+ - плюс;</li>
96
<ul><li>+ - плюс;</li>
97
<li>- - минус;</li>
97
<li>- - минус;</li>
98
<li>* - умножение;</li>
98
<li>* - умножение;</li>
99
<li>/ - деление;</li>
99
<li>/ - деление;</li>
100
<li>% - даёт остаток от деления одного числа на другое.</li>
100
<li>% - даёт остаток от деления одного числа на другое.</li>
101
</ul><p>Также в C есть переменные. Мы уже видели их. А ещё есть<em>синтаксический сахар</em> - это такие выражения, которые позволяют очень просто выразить сложную мысль в коде.</p>
101
</ul><p>Также в C есть переменные. Мы уже видели их. А ещё есть<em>синтаксический сахар</em> - это такие выражения, которые позволяют очень просто выразить сложную мысль в коде.</p>
102
<p>Когда мы создаём переменные, нам надо их объявить - указать, какого они типа, и в конце поставить точку с запятой. Для примера создадим переменную counter, то есть простой счётчик. Помните, такой счётчик у нас был в Scratch? Только он выглядел гораздо проще.</p>
102
<p>Когда мы создаём переменные, нам надо их объявить - указать, какого они типа, и в конце поставить точку с запятой. Для примера создадим переменную counter, то есть простой счётчик. Помните, такой счётчик у нас был в Scratch? Только он выглядел гораздо проще.</p>
103
int counter = 0;<ul><li>int - указатель типа переменной;</li>
103
int counter = 0;<ul><li>int - указатель типа переменной;</li>
104
<li>counter - имя переменной;</li>
104
<li>counter - имя переменной;</li>
105
<li>= - оператор присваивания какого-либо значения (это не "равно", а именно оператор присваивания, он не просто говорит, что какие-то значения равны, он именно присваивает левой части выражения значение из правой части);</li>
105
<li>= - оператор присваивания какого-либо значения (это не "равно", а именно оператор присваивания, он не просто говорит, что какие-то значения равны, он именно присваивает левой части выражения значение из правой части);</li>
106
<li>0 - значение, которое мы присваиваем переменной;</li>
106
<li>0 - значение, которое мы присваиваем переменной;</li>
107
<li>; - окончание практически для любой смысловой единицы в C.</li>
107
<li>; - окончание практически для любой смысловой единицы в C.</li>
108
</ul><p>В Scratch есть удобный визуальный блок, который позволяет создать счётчик, значение которого бы обновлялось при совершении какого-то действия - увеличивалось на единицу. В C, чтобы увеличить значение счётчика, можно написать следующий код:</p>
108
</ul><p>В Scratch есть удобный визуальный блок, который позволяет создать счётчик, значение которого бы обновлялось при совершении какого-то действия - увеличивалось на единицу. В C, чтобы увеличить значение счётчика, можно написать следующий код:</p>
109
counter = counter + 1$<p>Заметим снова: знак "равно" здесь - не знак "равно", а оператор присваивания. Если бы это был знак "равно", само выражение не имело бы смысла. Вообще, операция увеличения счётчика на один - очень распространённая в программировании (это ещё называется "<em>инкремент"</em>). И сейчас мы покажем, что такое синтаксический сахар в действии. Следите за руками:</p>
109
counter = counter + 1$<p>Заметим снова: знак "равно" здесь - не знак "равно", а оператор присваивания. Если бы это был знак "равно", само выражение не имело бы смысла. Вообще, операция увеличения счётчика на один - очень распространённая в программировании (это ещё называется "<em>инкремент"</em>). И сейчас мы покажем, что такое синтаксический сахар в действии. Следите за руками:</p>
110
counter += 1;<p>Оно означает, что counter равен самому себе плюс единице. А вот ещё один способ сделать это гораздо проще:</p>
110
counter += 1;<p>Оно означает, что counter равен самому себе плюс единице. А вот ещё один способ сделать это гораздо проще:</p>
111
counter++;<p>Те же самые операции можно проводить и с оператором - (такая операция будет называться "декремент").</p>
111
counter++;<p>Те же самые операции можно проводить и с оператором - (такая операция будет называться "декремент").</p>
112
<p>Важное примечание: когда мы меняем значение уже созданной переменной, нам не надо снова указывать её тип, то есть мы не пишем так:</p>
112
<p>Важное примечание: когда мы меняем значение уже созданной переменной, нам не надо снова указывать её тип, то есть мы не пишем так:</p>
113
int counter += 1;<p>Давайте вернёмся к тому, с чего мы начали. Зачем нужна строка int main(void)?</p>
113
int counter += 1;<p>Давайте вернёмся к тому, с чего мы начали. Зачем нужна строка int main(void)?</p>
114
<p>Это стандартное начало программ на С. Строка int main(void) сообщает компилятору, что есть функция с именем main (главная функция), и она возвращает целое число типа<strong>int</strong>. Слово void показывает, что у нашей функции нет аргументов (void переводится как "пустота").</p>
114
<p>Это стандартное начало программ на С. Строка int main(void) сообщает компилятору, что есть функция с именем main (главная функция), и она возвращает целое число типа<strong>int</strong>. Слово void показывает, что у нашей функции нет аргументов (void переводится как "пустота").</p>
115
<p>Фигурные скобки показывают начало { и конец }<em>тела функции</em>. Они используются и в других структурных блоках кода, но обозначают всегда одно - начало и конец какой-то сущности внутри программы.</p>
115
<p>Фигурные скобки показывают начало { и конец }<em>тела функции</em>. Они используются и в других структурных блоках кода, но обозначают всегда одно - начало и конец какой-то сущности внутри программы.</p>
116
<p>Когда будет достигнут конец главной функции (закрывающая фигурная скобка), программа автоматически вернёт значение 0 (именно поэтому тип нашей функции -<strong>int</strong>, то есть целое число). Это важное значение - проанализировав его, операционная система может понять, успешно завершилась наша программа или нет. Возвращаемое значение 0 означает успешный успех.</p>
116
<p>Когда будет достигнут конец главной функции (закрывающая фигурная скобка), программа автоматически вернёт значение 0 (именно поэтому тип нашей функции -<strong>int</strong>, то есть целое число). Это важное значение - проанализировав его, операционная система может понять, успешно завершилась наша программа или нет. Возвращаемое значение 0 означает успешный успех.</p>
117
<p>Нырнём немного глубже и разберёмся, что такое заголовочные файлы. Когда мы изучали Scratch, я их не упоминал: мы просто выставляли зелёный флаг на клик и потом выводили "hello, world" - всё очень просто и наглядно.</p>
117
<p>Нырнём немного глубже и разберёмся, что такое заголовочные файлы. Когда мы изучали Scratch, я их не упоминал: мы просто выставляли зелёный флаг на клик и потом выводили "hello, world" - всё очень просто и наглядно.</p>
118
<p>Однако в языке C вы не можете просто написать функцию main() со вложенной функцией printf(). Вам придётся написать в первой строке программы #include <stdio.h>, чтобы сказать компилятору: "Загрузи библиотеку кода, которую написал кто-то до меня" - только так компилятор узнает, что вообще такое printf().</p>
118
<p>Однако в языке C вы не можете просто написать функцию main() со вложенной функцией printf(). Вам придётся написать в первой строке программы #include <stdio.h>, чтобы сказать компилятору: "Загрузи библиотеку кода, которую написал кто-то до меня" - только так компилятор узнает, что вообще такое printf().</p>
119
<p>Например, вам надо будет загрузить<a>библиотеку CS50</a>, чтобы использовать функции get_string(), get_int() и тому подобные (далее мы поговорим и о них). В общем, без такой строки сам компилятор никогда не узнает, что такое get_string(). А файлы типа stdio.h или cs50.h среди программистов на C и C++ принято называть<em>заголовочными файлами</em>. Чуть позже мы посмотрим, что находится внутри этих файлов, но если кратко, то это как ресторанное меню, где вместо блюд - все доступные функции. И такое "меню" помогает компилятору узнать, как правильно использовать и понимать все эти функции.</p>
119
<p>Например, вам надо будет загрузить<a>библиотеку CS50</a>, чтобы использовать функции get_string(), get_int() и тому подобные (далее мы поговорим и о них). В общем, без такой строки сам компилятор никогда не узнает, что такое get_string(). А файлы типа stdio.h или cs50.h среди программистов на C и C++ принято называть<em>заголовочными файлами</em>. Чуть позже мы посмотрим, что находится внутри этих файлов, но если кратко, то это как ресторанное меню, где вместо блюд - все доступные функции. И такое "меню" помогает компилятору узнать, как правильно использовать и понимать все эти функции.</p>
120
<p>Важное различие: библиотека предоставляет все те функции, о которых мы говорили выше, а заголовочный файл - это лишь специальный механизм, благодаря которому вы можете включить нужные функции в свой код. То есть библиотека будет называться CS50 или Standard I/O, а соответствующие им заголовочные файлы будут называться stdio.h, cs50.h.</p>
120
<p>Важное различие: библиотека предоставляет все те функции, о которых мы говорили выше, а заголовочный файл - это лишь специальный механизм, благодаря которому вы можете включить нужные функции в свой код. То есть библиотека будет называться CS50 или Standard I/O, а соответствующие им заголовочные файлы будут называться stdio.h, cs50.h.</p>
121
<p>Теперь перейдём на вкладку<strong>Explorer</strong>IDE и посмотрим, как устроен наш программный проект. Как видно на скриншоте, там у нас лежат два файла: hello и hello.c.</p>
121
<p>Теперь перейдём на вкладку<strong>Explorer</strong>IDE и посмотрим, как устроен наш программный проект. Как видно на скриншоте, там у нас лежат два файла: hello и hello.c.</p>
122
Командная строка в VS Code<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>А теперь представьте, что нам надо как-то организовать свой код - например, для занятий студентов разных групп или с разными учебными программами на C. В принципе, в графическом интерфейсе мы можем сделать всё, что нам нужно, используя знакомые и привычные иконки macOS, Windows или Linux. С их помощью можно нажать на иконку добавления каталога и назвать новый каталог так, как нам надо.</p>
122
Командная строка в VS Code<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>А теперь представьте, что нам надо как-то организовать свой код - например, для занятий студентов разных групп или с разными учебными программами на C. В принципе, в графическом интерфейсе мы можем сделать всё, что нам нужно, используя знакомые и привычные иконки macOS, Windows или Linux. С их помощью можно нажать на иконку добавления каталога и назвать новый каталог так, как нам надо.</p>
123
<p>Однако то же самое можно сделать с помощью командной строки. Например, введя в командном интерфейсе ls, я могу просмотреть содержимое проекта (названия со слешем / на конце - это как раз папки, а не обычные файлы). С помощью команды mkdir (MaKe DIRectory) можно создать и назвать новую директорию.</p>
123
<p>Однако то же самое можно сделать с помощью командной строки. Например, введя в командном интерфейсе ls, я могу просмотреть содержимое проекта (названия со слешем / на конце - это как раз папки, а не обычные файлы). С помощью команды mkdir (MaKe DIRectory) можно создать и назвать новую директорию.</p>
124
Использование командной строки в VS Code<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>clean в командном режиме позволяет стереть историю - то есть все команды, которые вы набирали в командной строке ранее. На практике это делается редко, и в рамках курса я ввожу clean, чтобы держать в фокусе только свои последние набранные команды.</p>
124
Использование командной строки в VS Code<em>Кадр:</em><a><em>CS50</em></a><em>/ YouTube</em><p>clean в командном режиме позволяет стереть историю - то есть все команды, которые вы набирали в командной строке ранее. На практике это делается редко, и в рамках курса я ввожу clean, чтобы держать в фокусе только свои последние набранные команды.</p>
125
<p>mkdir создаст новую директорию. После этой команды надо написать название новой директории. Например, mkdir pset1 создаст каталог для кода первой недели, а mkdir pset2 - для второй.</p>
125
<p>mkdir создаст новую директорию. После этой команды надо написать название новой директории. Например, mkdir pset1 создаст каталог для кода первой недели, а mkdir pset2 - для второй.</p>
126
<p>Теперь я хочу перейти в одну из вновь созданных директорий. Для этого в командной строке я введу команду cd pset1. cd означает Change Directory. После ввода этой команды я нажимаю клавишу<strong>Enter</strong>и тут же происходят две примечательные вещи: строка приглашения к набору команд меняется на имя той директории, в которую я только что перешёл - всегда напоминая мне, где я в данный момент работаю.</p>
126
<p>Теперь я хочу перейти в одну из вновь созданных директорий. Для этого в командной строке я введу команду cd pset1. cd означает Change Directory. После ввода этой команды я нажимаю клавишу<strong>Enter</strong>и тут же происходят две примечательные вещи: строка приглашения к набору команд меняется на имя той директории, в которую я только что перешёл - всегда напоминая мне, где я в данный момент работаю.</p>
127
<p>После этого я могу просмотреть содержимое каталога с помощью команды ls. Если ввести её в текущем каталоге, она выведет список файлов (в нашем случае ничего - потому что в папке пока пусто).</p>
127
<p>После этого я могу просмотреть содержимое каталога с помощью команды ls. Если ввести её в текущем каталоге, она выведет список файлов (в нашем случае ничего - потому что в папке пока пусто).</p>
128
<p>Теперь попробуем создать в папке новый файл - командой code my_first_program.c. Этот файл тут же появится на новой вкладке вашего редактора. Если же мы хотим перейти на один каталог выше, надо ввести cd .. - эта команда автоматически поднимет вас в родительский каталог. А cd ../.. - переведёт вас на два каталога выше. ./ означает "текущий каталог". В общем, командная строка может делать всё, что умеет GUI, но не наоборот. Напомним, это команды терминала, они не имеют отношения к языку C.</p>
128
<p>Теперь попробуем создать в папке новый файл - командой code my_first_program.c. Этот файл тут же появится на новой вкладке вашего редактора. Если же мы хотим перейти на один каталог выше, надо ввести cd .. - эта команда автоматически поднимет вас в родительский каталог. А cd ../.. - переведёт вас на два каталога выше. ./ означает "текущий каталог". В общем, командная строка может делать всё, что умеет GUI, но не наоборот. Напомним, это команды терминала, они не имеют отношения к языку C.</p>
129
<p>Ну что ж, на сегодня хватит - а в следующем уроке мы ещё сильнее погрузимся в программирование на C, напишем простенькие программки и попрактикуемся. Подведём небольшие итоги:</p>
129
<p>Ну что ж, на сегодня хватит - а в следующем уроке мы ещё сильнее погрузимся в программирование на C, напишем простенькие программки и попрактикуемся. Подведём небольшие итоги:</p>
130
<ul><li>C - это компилируемый язык программирования. Прежде чем программа на C начнёт выполняться, её необходимо полностью перевести в единички и нули, то есть сделать понятной для компьютера.</li>
130
<ul><li>C - это компилируемый язык программирования. Прежде чем программа на C начнёт выполняться, её необходимо полностью перевести в единички и нули, то есть сделать понятной для компьютера.</li>
131
<li>Программировать удобно в средах разработки (IDE) или редакторах для программирования. мы использовали VS Code.</li>
131
<li>Программировать удобно в средах разработки (IDE) или редакторах для программирования. мы использовали VS Code.</li>
132
<li>Вместо того чтобы создавать и просматривать папки обычным способом - с помощью иконок, можно использовать командную строку.</li>
132
<li>Вместо того чтобы создавать и просматривать папки обычным способом - с помощью иконок, можно использовать командную строку.</li>
133
<li>Переменные - это такие области памяти компьютера, в котором хранятся какие-то данные. У этих данных есть тип - строка, число и тому подобные.</li>
133
<li>Переменные - это такие области памяти компьютера, в котором хранятся какие-то данные. У этих данных есть тип - строка, число и тому подобные.</li>
134
<li>В языке C существуют операторы, функции, заголовочные файлы и библиотеки.</li>
134
<li>В языке C существуют операторы, функции, заголовочные файлы и библиотеки.</li>
135
<li>main() - самая главная функция, с которой начинается программа.</li>
135
<li>main() - самая главная функция, с которой начинается программа.</li>
136
</ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
136
</ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>