CS50: S2 | Урок


Пересмотр

На прошлой неделе мы прошли первую неделю знаменитого курса Гарвардского университета CS50, где нас познакомили с фундаментальными строительными блоками языков программирования.

  • Типы данных
  • Инструкции

В разделе «Типы данных» мы рассмотрели, как важно определить для программы, с каким типом данных мы будем работать, будет ли это целое число (int), действительное число (float), если наши данные являются булевыми (bool), и другие типы данных. В рамках типов данных нам также рассказали о переменных и о том, как мы используем их для хранения данных (информации).

Также мы увидели, что программы — это последовательности инструкций, в которых мы можем работать повторно и использовать выражения для управления ходом операции.

Чтобы напомнить вам о некоторых вещах, вот пост, который я сделал о первой неделе, где я подробно остановился на некоторых вопросах по первому уроку.

Введение

Пока что мы используем облачную вселенную, которую курс подготовил для студентов, чтобы все использовали одинаковые условия для разработки своих программ. И с этим, как вы понимаете, а также в специальной библиотеке cs50, которую мы используем, у нас есть доступ к командам, которых нет в других средах разработки, например, в той, которую мы используем для компиляции нашей программы, разработанной на C.

Компиляция программ

Итак, для запуска всех программ, которые мы разработали до сих пор, нам необходимо:

1) Откройте терминал в облаке cs50.
2) Напишите: make program.c.
3) Запись: ./program
4) Вот как будет работать наша программа

Оказывается, что этот make nameProgram.c не является родным для среды программирования C.

Таким образом, мы знакомимся с командой clang для работы в качестве компилятора языка вручную.

Отладка

Профессор Дэвид Дж. Малан вводит понятие debugging — это когда в нашем коде есть ошибка/ошибка/проблема, и мы используем какой-либо инструмент для поиска ошибок.
Эти инструменты могут быть различными: от использования printf для отображения на экране процесса выполнения команд до использования инструмента debug50, разработанного CS50, для использования в среде программирования nuvel курса.

Где преподаватель учит вас интерпретировать, знать и использовать инструмент для отладки вашего кода.

Память

Важной частью занятия является то, что профессор Дэвид Дж. Малан наглядно показывает, каким будет это пространство в памяти каждый раз, когда нам нужно использовать или хранить тип данных. Он показывает пример использования сетки для представления памяти в том виде, в котором мы ее знаем.

И используя примеры в классе переменных, которые он использует в данный момент, как, в теории, они будут храниться.

Эти изображения были взяты с собственной страницы cs50

Массивы

Здесь представлены массивы. Другой тип данных, который работает как список и может хранить несколько значений одного типа.
Таким образом, массив чисел — это список, состоящий из определенного количества элементов, где эти элементы — числа.

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    int scores[3];

    for (int i = 0; i < 3; i++)
    {
      scores[i] = get_int("Score: ");
    }

    printf("Average: %fn", (scores[0] + scores[1] + scores[2]) / 3.0);
}


Войдите в полноэкранный режим Выход из полноэкранного режима

Где int scores[3] определяется, что это будет список с типом данных int.
Поэтому в цикле int scores[i] не нужно задавать как int scores[i], так как уже сказано, что это будет список элементов int.

Символы и строки

Знания накапливаются!

После той части занятия, где рассматривается концепция и практика работы с массивами, мы переходим к обсуждению других типов данных, таких как char и strings. И здесь все сходится.

Профессор Дэвид Дж. Малан представляет два способа, которые дают одинаковый результат, для печати сообщения на экране: Hi!.

#include <stdio.h>

int main(void)
{
    char c1 = 'H';
    char c2 = 'I';
    char c3 = '!';

    printf("%c%c%cn", c1, c2, c3);
}
Войдите в полноэкранный режим Выход из полноэкранного режима
#include <cs50.h>
#include <stdio.h>

int main(void)
{
    string s = "HI!";
    printf("%sn", s);
}
Войдите в полноэкранный режим Выход из полноэкранного режима

В обоих случаях на экране появится одно и то же сообщение,

  • В первом случае мы видим, что каждый символ хранится в переменных char.
  • Во втором, с включением заголовка cs50.h, мы видим использование строковой переменной.

Заметили ли вы сходство между string и array, например, список символов? Интересно, нет?

Таким образом, мы можем получить доступ к элементам списка s (строка), используя пометки в скобках, как мы видим в примере, приведенном в классе ниже.

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    string s = "HI!";
    printf("%i %i %in", s[0], s[1], s[2]);
}

Войдите в полноэкранный режим Выход из полноэкранного режима

Интерфейс командной строки (CLI)

На первой неделе я сказал, что в этот первый момент нам не нужно будет беспокоиться о int main(void). Потому что до этого момента наша главная функция при вызове не получала никаких аргументов. В этой части урока она представлена,

#include <stdio.h>

int main(int argc, string argv[]) {
  //todo
}
Войдите в полноэкранный режим Выход из полноэкранного режима

Таким образом, теперь мы можем создавать программы, принимающие аргументы, как, например, в приведенной ниже функции,

#include <cs50.h>
#include <stdio.h>

int main(int argc, string argv[])
{
    printf("hello, %sn", argv[1]);
}
Войдите в полноэкранный режим Выход из полноэкранного режима
./hello leitor
$ hello, leitor
Войдите в полноэкранный режим Выход из полноэкранного режима

Здесь очень важно помнить, что этот аргумент должен быть char или строкой. Поскольку argv соответствует символьному списку, указывающему на все аргументы.

Заключение

Этот пост не заменяет занятия (не в последнюю очередь потому, что я не говорю абсолютно обо всем, что дается на занятиях), и мы настоятельно рекомендуем вам посмотреть этот урок. Класс очень полный и очень хорошо объясняет все его концепции и применение.

На этом уроке мы говорили о том, как мы можем исправить наш код (и что наличие ошибки — это нормально, не мучайтесь!). И углубился в воспоминания о том, как типы данных занимают эти пространства, и как мы, разработчики, должны знать, что под крышкой что-то происходит.

Закончив просмотр этого урока, я оставил ниже несколько вопросов, на которые вы сможете ответить!

В течение этой недели я буду публиковать наборы задач, относящиеся ко второй неделе.

Спасибо, что дочитали до конца, до скорой встречи!

Проверка знаний

  • Как компьютеры понимают код, который мы пишем?
  • Как мы можем компилировать наши программы на C вручную?
  • Что означает препроцессор C?
  • На каком этапе код преобразуется в ассемблер?
  • После преобразования кода в ассемблер, как он преобразуется в двоичный код? (И почему преобразование кода в двоичный код вообще важно?)
  • Отладка — это инструмент для чего? И почему это важно?
  • Как называются эти []? И для чего они нужны?
  • Когда у нас есть значения char и мы печатаем с помощью %i, что мы увидим на экране?
  • Что такое кастинг типов?
  • Какова функция NUL в строке?
  • Где можно найти информацию о заголовке string.h?
  • Принимает ли функция strlen() какую-либо роль внутри цикла? Если да, то что это будет?
  • Можно ли установить отношения между символами в строке с помощью ASCII?
  • Если вместо слова поставить число, то в функции main будет использоваться (int argc, string argv[]). Как это число будет обрабатываться в C?
  • Что мы можем сделать с помощью CLI?
  • Что означает возврат 0 в конце функции?

Оцените статью
Procodings.ru
Добавить комментарий