E2 Программирование на языке C
Хотя OSOC (сокращение от «One Student One Chip») ставит целью научить вас проектировать процессорный чип, вам всё равно придётся часто иметь дело с программным обеспечением, поскольку процессорные чипы отличаются от прочих типов чипов. Поэтому, чтобы понять, как сделать так, чтобы программы работали лучше, вам сначала нужно понять, как они выполняются на процессоре.
Язык C — лучший выбор, чтобы помочь вам разобраться в этом вопросе, а поскольку многие студенты, участвующие в проекте «One Student One Chip», не имеют образования в области информатики, C относительно легко изучить. Вы должны быть знакомы со следующим: рекурсия, указатели, связные списки — и уметь самостоятельно написать корректную программу, а не полагаться на примеры кода, найденные в Google.
Изучите язык C с помощью онлайн-ресурсов
Вы наверняка уже использовали онлайн-сайт Compiler Explorer для запуска программ на C. Теперь вы систематически изучите программирование на языке C и выполните ряд заданий по программированию с помощью этого онлайн-сайта.
Вы можете самостоятельно выбрать учебные материалы, которые хотите изучать, но обязательно убедитесь, что понимаете следующее:
- Базовые понятия о программах
- Программы и языки программирования
- Естественные и формальные языки
- Отладка программ
- Компиляторы
- Константы, переменные и выражения
- Константы
- Переменные
- Присваивание
- Выражения
- Символьные типы и кодировки символов
- Простые функции
- Математические функции
- Пользовательские функции
- Формальные и фактические параметры
- Глобальные переменные, локальные переменные и область видимости
- Операторы ветвления
- Оператор
if - Оператор
if/else - Булева алгебра
- Оператор
switch
- Оператор
- Углублённое изучение функций
- Оператор
return - Инкрементальная разработка
- Рекурсия
- Оператор
- Операторы цикла
- Оператор
while - Оператор
do/while - Оператор
for - Операторы
breakиcontinue - Вложенные циклы
- Оператор
gotoи метки
- Оператор
- Структуры
- Составные типы и структуры
- Абстракция данных
- Теги типов
- Вложенные структуры
- Массивы
- Базовые понятия о массивах
- Строки
- Многомерные массивы
- Стиль кодирования
- Отступы и пробельные символы
- Комментарии
- Именование идентификаторов
- Функции
- Инструмент
indent
- Сортировка и поиск
- Понятие алгоритма
- Сортировка вставками
- Анализ временной сложности алгоритмов
- Сортировка слиянием
- Линейный поиск
- Двоичный поиск
- Стеки и очереди
- Понятие структуры данных
- Стек
- Поиск в глубину
- Очереди и поиск в ширину
- Кольцевые очереди
- Представление чисел в компьютере
- Почему компьютеры используют двоичную систему счисления
- Перевод между системами счисления
- Сложение и вычитание целых чисел
- Прямой код
- Обратный код
- Дополнительный код
- Знаковые и беззнаковые числа
- Числа с плавающей точкой
- Типы данных подробно
- Целочисленные типы
- Типы с плавающей точкой
- Преобразования типов
- Целочисленное повышение
- Обычные арифметические преобразования
- Преобразования типов при присваивании
- Явные преобразования типов
- Как компилятор обрабатывает преобразования типов
- Операции подробно
- Побитовые операции
- Побитовые операции AND, OR, XOR и NOT
- Операции сдвига
- Маски
- Некоторые свойства операции XOR
- Прочие операции
- Составные операции присваивания
- Условная операция
- Операция «запятая»
- Операция
sizeofи объявления типовtypedef
- Побочные эффекты и точки следования
- Побитовые операции
- Препроцессорная обработка
- Этапы препроцессорной обработки
- Определение макросов
- Макросы, подобные функциям
- Встраиваемые функции
- Операции
#и##и переменное число аргументов - Этапы раскрытия макросов
- Условные директивы препроцессора
- Другие возможности препроцессора
- Указатели
- Базовые понятия об указателях
- Параметры и возвращаемые значения указательного типа
- Указатели и массивы
- Указатели и квалификатор
const - Указатели и структуры
- Указатели на указатели и массивы указателей
- Указатели на массивы и многомерные массивы
- Типы функций и типы указателей на функции
- Неполные типы и сложные объявления
- Интерфейсы функций
- Что нужно знать перед этой главой
strcpyиstrncpymallocиfree
- Входные и выходные параметры
- Параметры типа «указатель на указатель»
- Случаи, когда возвращаемое значение — указатель
- Функции обратного вызова
- Переменное число аргументов
- Что нужно знать перед этой главой
- Функции работы со строками
- Инициализация строк
- Получение длины строки
- Копирование строк
- Конкатенация строк
- Сравнение строк
- Поиск в строках
- Разбиение строк
- Функции стандартной библиотеки ввода-вывода
- Базовые понятия о файлах
fopen/fclosestdin/stdout/stderrerrnoи функцияperror- Байт-ориентированные функции ввода-вывода
- Функции управления позицией чтения/записи
- Строково-ориентированные функции ввода-вывода
- Функции ввода-вывода, ориентированные на записи
- Функции форматированного ввода-вывода
- Буферы ввода-вывода в стандартной библиотеке C
- Связные списки
- Односвязные списки
- Двусвязные списки
- Статические связные списки
Если вы не против воспользоваться инструментом перевода, вы можете изучить One-stop Learning for Linux C Programming, главы 1–9, главы 11–16, главу 21, главы 23–25 и главу 26, раздел 1 (то есть «Связные списки»). Вам нужно выполнить все упражнения и проверить свои программы в Compiler Explorer, чтобы убедиться в их корректности. Это полностью покрывает все требования данной части.
Кроме того, после того как программа успешно запустится, вам нужно сохранить соответствующий код программы локально. С одной стороны, вы можете хранить эти программы как свои задания. С другой стороны, после установки Linux мы попросим вас снова запустить часть этого кода.
Если вы уверены в своих навыках владения языком C и можете самостоятельно написать программу со связным списком и корректно её отладить, не обращаясь к чужому коду, вы можете пропустить эту часть курса. Если вы не изучили программирование на C полностью или забыли большую часть материала, мы настоятельно советуем не пропускать эту часть курса.
Дополнительные рекомендуемые материалы для изучения C
- The C programming language (2nd Edition): настоящий создатель языка C — Деннис М. Ритчи, автор этой книги, а не Тань Хаоцян.
- C Coding Standard
- SEI CERT C Coding Standard
- Learn C the hard way in Chinese
- Learn C the hard way slides in English
