cpp

Николай Прохоренок. Язык C. Самое необходимое

Если вы хотите научиться программировать на языках C или C++, то эта книга для вас. В книге описан базовый синтаксис современного языка C: типы данных, операторы, условия, циклы, работа с числами, строками, массивами и указателями, создание пользовательских функций, модулей, статических и динамических библиотек. Рассмотрены основные функции стандартной библиотеки языка C, а также функции, применяемые только в операционной системе Windows. Для написания, компиляции и запуска программ используется редактор Eclipse, а для создания исполняемого файла — компилятор gcc.exe версии 8.2, входящий в состав популярной библиотеки MinGW-W64.

Книга содержит большое количество практических примеров, помогающих начать программировать на языке C самостоятельно. Весь материал тщательно подобран, хорошо структурирован и компактно изложен, что позволяет использовать книгу как удобный справочник.

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

Требования к читателям: умение пользоваться компьютером. Желательно знание любого другого языка программирования. Если Вы только начинаете, то лучше начните c языка Python или JavaScript. У последнего синтаксис очень похож на синтаксис языка C, но при этом не нужно думать про указатели и утечку памяти.

См. также: Учебник C++ (Qt Creator и MinGW) (PDF)
См. также: "Программирование на C++ в Visual Studio 2010 Express" (PDF)

Оглавление книги Язык C. Самое необходимое

Введение

Глава 1. Установка программ под Windows

1.1. Создание структуры каталогов
1.2. Добавление пути в переменную PATH
1.3. Работа с командной строкой
1.4. Установка MinGW и MSYS
1.5. Установка MinGW-W64
1.6. Установка MSYS2 и MinGW-W64
1.7. Установка и настройка редактора Eclipse
1.8. Создание проектов в редакторе Eclipse

Глава 2. Первые шаги

2.1. Первая программа
2.2. Создание пустого проекта в редакторе Eclipse
2.3. Добавление в проект файла с программой
2.4. Добавление в проект заголовочного файла
2.5. Компиляция и запуск программы в редакторе Eclipse
2.6. Структура программы
2.7. Комментарии в программе
2.8. Вывод данных
2.9. Ввод данных
    2.9.1. Ввод одного символа
    2.9.2. Функция scanf()
    2.9.3. Ввод строки
2.10. Интерактивный ввод символов
2.11. Получение данных из командной строки
2.12. Предотвращение закрытия окна консоли
2.13. Настройка отображения русских букв в консоли
2.14. Преждевременное завершение выполнения программы

Глава 3. Переменные и типы данных

3.1. Объявление переменной
3.2. Именование переменных
3.3. Типы данных
3.4. Целочисленные типы фиксированного размера
3.5. Оператор sizeof
3.6. Инициализация переменных
3.7. Оператор typedef
3.8. Константы
3.9. Спецификаторы хранения
3.10. Области видимости переменных
3.11. Массивы
3.12. Строки
3.13. Указатели
3.14. Динамическое выделение памяти
    3.14.1. Функции malloc() и free()
    3.14.2. Функция calloc()
    3.14.3. Функция realloc()
3.15. Структуры
3.16. Битовые поля
3.17. Объединения
3.18. Перечисления
3.19. Приведение типов

Глава 4. Операторы и циклы

4.1. Математические операторы
4.2. Побитовые операторы
4.3. Операторы присваивания
4.4. Оператор запятая
4.5. Операторы сравнения
4.6. Приоритет выполнения операторов
4.7. Оператор ветвления if
4.8. Оператор ?:
4.9. Оператор выбора switch
4.10. Цикл for
4.11. Цикл while
4.12. Цикл do…while
4.13. Оператор continue: переход на следующую итерацию цикла
4.14. Оператор break: прерывание цикла
4.15. Оператор goto

Глава 5. Числа

5.1. Математические константы
5.2. Основные функции для работы с числами
5.3. Округление чисел
5.4. Тригонометрические функции
5.5. Преобразование строки в число
5.6. Преобразование числа в строку
5.7. Генерация псевдослучайных чисел
5.8. Бесконечность и значение NAN

Глава 6. Массивы

6.1. Объявление и инициализация массива
6.2. Определение количества элементов и размера массива
6.3. Получение и изменение значения элемента массива
6.4. Перебор элементов массива
6.5. Доступ к элементам массива с помощью указателя
6.6. Массивы указателей
6.7. Динамические массивы
6.8. Многомерные массивы
6.9. Поиск минимального и максимального значений
6.10. Сортировка массива
6.11. Проверка наличия значения в массиве
6.12. Копирование элементов из одного массива в другой
6.13. Сравнение массивов
6.14. Переворачивание массива

Глава 7. Символы и C-строки

7.1. Объявление и инициализация отдельного символа
7.2. Настройка локали
7.3. Изменение регистра символов
7.4. Проверка типа содержимого символа
7.5. Объявление и инициализация C-строки
7.6. Доступ к символам внутри C-строки
7.7. Определение длины строки
7.8. Перебор символов C-строки
7.9. Основные функции для работы с C-строками
7.10. Поиск и замена в C-строке
7.11. Сравнение С-строк
7.12. Форматирование С-строк

Глава 8. Широкие символы и L-строки

8.1. Объявление и инициализация широкого символа
8.2. Вывод и ввод широких символов
8.3. Изменение регистра символов
8.4. Проверка типа содержимого широкого символа
8.5. Преобразование широких символов в обычные и наоборот
8.6. Объявление и инициализация L-строки
8.7. Доступ к символам внутри L-строки
8.8. Определение длины L-строки
8.9. Перебор символов L-строки
8.10. Вывод и ввод L-строк
8.11. Преобразование C-строки в L-строку и наоборот
8.12. Преобразование кодировок
8.13. Основные функции для работы с L-строками
8.14. Поиск и замена в L-строке
8.15. Сравнение L-строк
8.16. Преобразование L-строки в число
8.17. Преобразование числа L-строку
8.18. Типы char16_t и char32_t

Глава 9. Работа с датой и временем

9.1. Получение текущей даты и времени
9.2. Форматирование даты и времени
9.3. "Засыпание" программы
9.4. Измерение времени выполнения фрагментов кода

Глава 10. Пользовательские функции

10.1. Создание функции и ее вызов
10.2. Расположение объявлений и определений функций
10.3. Способы передачи параметров в функцию
10.4. Передача массивов и строк в функцию
10.5. Переменное количество параметров
10.6. Константные параметры
10.7. Статические переменные и функции
10.8. Способы возврата значения из функции
10.9. Указатели на функции
10.10. Передача в функцию и возврат данных произвольного типа
10.11. Рекурсия
10.12. Встраиваемые функции

Глава 11. Обработка ошибок

11.1. Типы ошибок
11.2. Предупреждающие сообщения при компиляции
11.3. Переменная errno и вывод сообщения об ошибке
11.4. Способы поиска ошибок в программе
11.5. Отладка программы в редакторе Eclipse

Глава 12. Чтение и запись файлов

12.1. Открытие и закрытие файла
12.2. Указание пути к файлу
12.3. Режимы открытия файла
12.4. Запись в файл
12.5. Чтение из файла
12.6. Чтение и запись двоичных файлов
12.7. Файлы произвольного доступа
12.8. Создание временных файлов
12.9. Перенаправление ввода/вывода
12.10. Работа с буфером ввода и вывода

Глава 13. Низкоуровневые потоки ввода и вывода

13.1. Открытие и закрытие файла
13.2. Чтение из файла и запись в файл
13.3. Файлы произвольного доступа
13.4. Создание временных файлов
13.5. Дескрипторы потоков ввода/вывода
13.6. Преобразование низкоуровневого потока в обычный
13.7. Создание копии потока
13.8. Перенаправление потоков

Глава 14. Работа с файловой системой

14.1. Преобразование пути к файлу или каталогу
14.2. Переименование, перемещение и удаление файла
14.3. Проверка прав доступа к файлу и каталогу
14.4. Изменение прав доступа к файлу
14.5. Делаем файл скрытым
14.6. Получение информации о файле
14.7. Функции для работы с дисками
14.8. Функции для работы с каталогами
14.9. Перебор объектов, расположенных в каталоге

Глава 15. Потоки и процессы

15.1. Потоки в WinAPI
    15.1.1. Создание и завершение потока
    15.1.2. Синхронизация потоков
15.2. Функции для работы с потоками, объявленные в файле process.h
15.3. Потоки POSIX
    15.3.1. Создание и завершение потока
    15.3.2. Синхронизация потоков
15.4. Запуск процессов
15.5. Получение идентификатора процесса

Глава 16. Создание библиотек

16.1. Статические библиотеки
    16.1.1. Создание статической библиотеки из командной строки
    16.1.2. Создание статической библиотеки в редакторе Eclipse
16.2. Динамические библиотеки
    16.2.1. Создание динамической библиотеки из командной строки
    16.2.2. Создание динамической библиотеки в редакторе Eclipse
    16.2.3. Загрузка динамической библиотеки во время выполнения программы
    16.2.4. Экспортируемые и внутренние функции
    16.2.5. Функция DllMain()

Глава 17. Прочее

17.1. Регистрация функции, выполняемой при завершении программы
17.2. Выполнение системных команд
17.3. Получение и изменение значений системных переменных
17.4. Директивы препроцессора
17.5. Создание значка приложения

Заключение