ПРОГРАММИРОВАНИЕ НА С
Аннотация
Язык программирования C — широко используемый язык программирования общего назначения, который и сегодня остается одним из самых популярных языков программирования, особенно для системного программирования и разработки встроенных систем. Он использует простой синтаксис с минималистичным набором ключевых слов, что делает его относительно простым в изучении и чтении.
Программы на языке C состоят из функций, содержащих операторы, а операторы состоят из выражений. Программы на языке C обычно имеют функцию main(), которая служит точкой входа в программу.
Язык C поставляется со стандартной библиотекой, известной как Стандартная библиотека C, которая предоставляет набор функций для общих операций, таких как ввод/вывод, манипуляции со строками, математические вычисления, распределение памяти и многое другое.
Если вы собираетесь изучать программирование микроконтроллеров, то вам надо сначала изучить язык С, так как программирование микроконтроллеров построено на использовании этого языка.
Оглавление
ВВЕДЕНИЕ _ 5
ГЛАВА 1. ПЕРВАЯ ПРОГРАММА НА ЯЗЫКЕ С _ 7
1.1. Установка Code::Blocks на компьютер _ 7
1.2. Создание программы _ 13
1.3. Построчный анализ программы _ 16
Упражнения для самостоятельной работы _ 20
ГЛАВА 2. ПЕРЕМЕННЫЕ И КОНСТАНТЫ _ 22
2.1. Переменные _ 22
2.1.1. Объявление переменных _ 22
2.1.2. Типы переменных _ 22
2.2. Константы _ 23
2.2.1. Целочисленные константы _ 23
2.2.2. Литералы _ 24
2.2.3. Именованные константы _ 25
2.3. Ввод/вывод данных _ 27
2.3.1. Ввод/вывод символов, функции getchar(), putchar() _ 27
2.3.2. Функция вывода printf() _ 32
2.3.3. Функция ввода scanf() _ 40
Упражнения для самостоятельной работы _ 42
ГЛАВА 3. ОПЕРАТОРЫ И ОПЕРАНДЫ _ 45
3.1. Арифметические операторы _ 45
3.2. Операторы сравнения и логические операторы _ 48
3.3. Операторы присваивания _ 49
3.4. Побитовые операторы _ 50
3.5. Преобразования типов _ 51
Упражнения для самостоятельной работы _ 52
ГЛАВА 4. ФУНКЦИИ _ 54
4.1. Математические функции _ 54
4.2. Пользовательские функции _ 55
Упражнения для самостоятельной работы _ 60
ГЛАВА 5. УСЛОВНЫЕ ОПЕРАТОРЫ И ЦИКЛЫ _ 65
5.1. Условные операторы _ 65
5.2. Операторы цикла _ 67
5.2.1. Цикл for _ 67
5.2.2. Цикл while _ 69
5.3. Оператор switch _ 71
5.4. Отладка программ _ 75
Упражнения для самостоятельной работы _ 82
ГЛАВА 6. МАССИВЫ _ 86
6.1. Объявление массивов. Одномерные массивы _ 86
6.2. Многомерные массивы _ 89
6.3. Массивы и функции _ 92
6.4. Символьные массивы (строки) _ 94
6.4.1. Объявление строки _ 94
6.4.2. Ввод строки _ 95
6.4.3. Вывод строки _ 97
6.4.4. Библиотека строк _ 100
6.4.5. Преобразование строки в число _ 106
Упражнения для самостоятельной работы _ 107
ГЛАВА 7. УКАЗАТЕЛИ _ 109
7.1. Объявление указателей _ 109
7.2. Операции с указателями _ 112
7.3. Указатели и функции _ 115
Упражнения для самостоятельной работы_ 118
ГЛАВА 8. СТРУКТУРЫ _ 119
8.1. Объявление структуры _ 119
8.2. Работа со структурами _ 121
8.3. Массив структур _ 124
Упражнения для самостоятельной работы _ 126
ГЛАВА 9. РАБОТА С ФАЙЛАМИ _ 128
9.1. Открытие и закрытие файла _ 128
9.2. Запись (вывод) в файл _ 129
9.3. Чтение (ввод) из файла _ 131
Упражнения для самостоятельной работы _ 135
ГЛАВА 10. ПРИКЛАДНЫЕ ВОПРОСЫ _ 138
10.1. Совместное использование С и Excel для построения графиков _ 138
10.1.1. Комбинированный метод “C&Excel” построения графиков _ 138
10.1.2. Расчёт и построение графика колебаний пружинного
маятника с демпфированием _ 142
10.2. Пример программирования микроконтроллера на С _ 145
Упражнения для самостоятельной работы _ 146
11. РЕШЕНИЯ И ОТВЕТЫ _ 150
11.1. Решения к главе 2 _ 150
11.2. Решения к главе 3 _ 157
11.3. Решения к главе 4 _ 162
11.4. Решения к главе 5 _ 170
11.5. Решения к главе 6 _ 180
11.6. Решения к главе 7 _ 188
11.7. Решения к главе 8_ 192
11.8. Решения к главе 9_ 196
11.9. Решения к главе 10 _ 203
ЛИТЕРАТУРА _ 210
Введение
В учебном пособии “Программирование на C” изложены базовые основы языка C, которые позволят быстро стартовать в программировании. Язык C (Си)– это классический язык программирования общего назначения. Он используется при разработке операционных систем, прикладных программ, приложений для встраиваемых систем, таких как холодильники, микроволновые печи, стиральные машины, системы кондиционирования и др. Ещё одна важная область применения языка С – это использование для программирования микроконтроллеров. Если вы планируете заниматься программированием микроконтроллеров, то вам необходимо изучать язык С. По мнению некоторых экспертов язык C вообще должен быть первым языком при изучении программирования. Язык был создан в 1972 году, но до сих пор остаётся весьма популярным и входит в пятёрку самых востребованных языков.
Приведу ещё один довод в пользу языка С. При изучении языка C мы “убиваем двух зайцев”, так как фактически попутно изучаем и язык С++. Если ввести в поисковой строке Яндекса фразу “чем отличается язык C от C++”, то получим ответ: “на 99% — ничем… У этих языков одинаковый на 99% синтаксис и команды, но C – это больше про структурное и процедурное программирование, а C++ – это про объектно-ориентированное”. По поводу 99% можно сказать, что это явный перебор, но то, что C и C++ во многом схожи – это совершенно справедливо. И даже можно иногда видеть, как пишут не программирование на C, а программирование на C/C++. Главным отличием языка C от C++ является то, что язык программирования C является процедурным, а С++ является объектно-ориентированным. Если не привлекать парадигму объектно-ориентированного программирования, то программы на C и C++ будут во-многом идентичны.
Для программирования на C в учебном пособии будет использоваться бесплатная интегрированная среда программирования (IDE) Code::Blocks. Мой опыт программирования на С на Code::Blocks и Visual Studio показал, что использование Code::Blocks является предпочтительным.
Большое внимание в учебном пособии уделяется приобретению пользователем практических навыков программирования. Уже с самого начала изучения учебного материала пользователь имеет возможность повторять программный код многочисленных примеров, приведенных в пособии. Кроме того, в конце каждой главы имеются упражнения для самостоятельной работы. Все упражнения снабжены решениями, которые приведены в конце учебного пособия. Это облегчает использование учебного пособия в качестве самоучителя. Некоторые упражнения для языка C повторяют упражнения для языка Python. Это сделано сознательно, чтобы можно было сравнить листинги программ между собой.
В учебном пособии предложена эффективная комбинированная методика построения графиков и диаграмм с использованием С и Excel, что делает удобным применение языка С (и языка С++ тоже) для графической обработки больших объемов данных, полученных в результате вычислений. Все графики в учебном пособии “Программирование на С” построены с помощью этой методики.
Учебное пособие предназначено для широкого круга читателей и может быть использовано как при самостоятельном изучении языка, так и при преподавании языка С в учебных заведениях различного уровня.
Глава 1. Первая программа на языке С
1.1. Установка Code::Blocks на компьютер
Опишем процесс скачивания и установки Code::Blocks для 64-битной ОС Windows. Переходим на сайт https://www.codeblocks.org/downloads/ Выбираем раздел “Загрузите двоичную версию”. На следующей странице выбираем Windows XP / Vista / 7 / 8.x / 10. На новой странице выбираем верхнюю строку: codeblocks-20.03-setup.exe скачать с FossHub. Появляется следующая страница, на которой для скачивания выбираем Code Blocks Windows 64 bit (включая компилятор). Скачиваем установочный файл codeblocks-20.03mingw-setup.exe объёмом около 145 MB. Запускаем этот файл на установку. В появляющихся окнах последовательно щёлкаем Next, I Agree, Next, оставляем по умолчанию папку для установки C:\Program Files\CodeBlocks, щёлкаем Install. В конце установки появляется сообщение об успешной установке, как показано на рис. 1.1. Щёлкаем Finish.
Вот и всё, такая простая установка. На рабочем столе появляется иконка для запуска программы. Щелкаем по ней и запускаем Code::Blocks.
Появляется окно, показанное на рис. 1.2.
Создаем новый проект.
Для этого либо щелкаем в окне рис. 1.2 по строке Create a new project, либо выбираем в меню опции File –> New –> Project… Появится окно, показанное на рис. 1.3.
В окне (рис. 1.3) щелкаем по иконке Console application. Появляется окно, показанное на рис. 1.4.
В окне (рис. 1.4) выбираем язык C и щелкаем Next. Появляется окно, показанное на рис. 1.5.
В этом окне в поле Project title задаем название проекта, например, Project_1. Это имя автоматически присваивается вновь создаваемому файлу в поле Project filename. Нажимаем Next.
Появляется окно, показанное на рис. 1.6.
В этом окне (рис. 1.6) в поле Compiler оставляем появившуюся по умолчанию опцию GNU GCC Compiler. Ставим галочку около опции Create “Debug” configuration, что позволит в дальнейшем проводить отладку создаваемых программ, щелкаем Finish. Появляется интерфейсное окно программы Code::Blocks, показанное на рис. 1.7. В левой части этого окна будут располагаться названия создаваемых проектов, и в частности, появится название первого созданного проекта Project_1. Щелкнем по файлу main.c внутри этого проекта и справа в области редактирования откроется код программы: Hello world! (рис. 1.7). (Либо вы сами можете набрать код этой короткой программы).
Запустим программу на исполнение. Для этого надо щелкнуть по кнопке Build and run справа от зеленого треугольника на панели инструментов, либо выбрать опции меню Build –> Build and run, либо нажать клавишу F9. На рис 1.8 представлен результат выполнения программы:
Закрываем программу Code::Blocks. Появляется предупреждение: The perspective ‘ Code::Blocks default’ has changed. Do you want to save it? Ставим галочку в квадратике Don’t annoy me again! и щелкаем Yes.
Примечание. Если при запуске программы выдается ошибка: Can’t find compiler executable in your configured search path’s for GNU GCC Compiler (Не удается найти исполняемый файл компилятора в вашем настроенном пути поиска для компилятора GNU GCC), то
надо сделать:
- Выберите опции меню: Setting –> Compiler. Откроется окно Global Compiler Settings (рис. 1.9).
- Выберите в этом окне вкладку Toolchain executables (отмечена овалом).
- Справа от поля Compiler installation directory щелкните по кнопке Auto-Detect и в поле автоматически появится директория, куда по умолчанию установился компилятор. Щелкните OK.
Теперь можно создавать программы на С, чем мы и займёмся в следующих подразделах.
1.2. Создание программы
Давайте создадим листинг программы, которая выводит на экран 50 случайных чисел, и на её примере определим требования, которым должна соответствовать программа на языке C. Запускаем Code::Blocks и открываем созданный ранее проект Project_1: File –> Open –> Project_1.cbp. Появляется интерфейсное окно. В области редактора этого окна удалим программу “Hello world!” и наберем новую программу, которую назовём “50 случайных чисел”. Программа имеет вид, показанный на рис. 1.10 (щелкнуть левой кнопкой мыши по рисунку для увеличения).
Пример 1.2. Программа “50 случайных чисел”:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, “Russian”);
int r, a, b;
puts(“50 случайных чисел”);
for (a = 0; a < 10; a++)
{
for (b = 0; b < 5; b++)
{
r = rand();
printf(“% d\t”, r);
}
putchar(‘\n’);
}
return 0;
}
Чтобы увеличить шрифт в окне редактора на рис. 1.10, выбираем в меню опции: Settings –> Editor… Появится окно, показанное на рис. 1.11.
В этом окне справа от поля Font щелкаем по кнопке Choose (выделена овалом) и выбираем размер шрифта 12, как показано на рис. 1.12. Щелкаем ОК, и ещё раз ОК.
Или можно менять размер шрифта комбинацией клавиш (Ctrl +), (Ctrl –), где знаки (+) и (–) выбираются на клавиатуре в цифровом блоке справа.
Запустим программу на исполнение: Build – Build and run (или с помощью клавиши F9). Получим 50 случайных чисел, расположенных в пять столбцов (рис. 1.13):
1.3. Построчный анализ программы
Проведём построчный анализ программы (рис. 1.10) и на основе этого анализа определим состав типовой программы на языке С и правила ее написания.
Операторы #include (1…3 строки) называются директивами препроцессора. Они позволяют программисту использовать сторонние файлы, которые принадлежат, например, стандартным библиотекам. Стандартные библиотеки входят в состав языка С (такой подход используется и в других языках). Использование их в программе существенно облегчает программирование. Имя файла стандартной библиотеки отображается в угловых скобках (< >). Если заимствованный файл не принадлежит к стандартной библиотеке, а создан, например, другими программистами или самим пользователем, то он отображается в прямых кавычках.
Первая строка программы (первая директива) – это подключение файлов библиотеки ввода/вывода (<stdio.h>). Вторая строка – подключение библиотеки функций общего назначения (<stdlib.h>), предназначенных для преобразования чисел, запроса памяти и других задач. В третьей строке подключается библиотека, которая работает на распознавание русского текста <locale.h>. Количество подключаемых библиотек может варьироваться и зависит от содержания программы.
Функция main и выполнение программы (4 строка). Все программы, написанные на языке C, содержат основную функцию, которая должна иметь имя main. Функция main является начальной точкой для выполнения программы. Она обычно управляет выполнением программы и может вызывать другие функции. Функция main состоит из заголовка – int main() (4 строка), и тела функции (5…19 строки). Тело функции должно быть заключено в фигурные скобки. Оператор return 0 завершает функцию main. В данном примере вместе с завершением функции main происходит завершение всей программы и возврат в операционную систему.
Рассмотрим операторы, расположенные внутри тела функции. Оператор в шестой строке работает на распознавание русского текста в программе. Если удалить этот оператор, то на монитор вместо русского текста будут выведены произвольные нечитаемые символы (“кракозябры”).
Все операторы языка C, за небольшим исключением, должны заканчиваться точкой с запятой. К исключениям относятся директивы препроцессора в начале программы, заголовки функций, заголовки условных операторов, операторов цикла и некоторые другие. Эти исключения просто надо знать и помнить.
В седьмой строке объявляются переменные r, a, b целого типа int (сокр. от integer – целый). Переменные должны быть объявлены до того, как они начнут использоваться в программе.
В восьмой строке функция puts () выводит на монитор фразу “50 случайных чисел”.
В девятой строке записан заголовок внешнего цикла for. Правила записи заголовков цикла мы рассмотрим позже, а сейчас обратите внимание, после заголовка цикла точка с запятой не ставится. В 10…17 строчках идёт тело цикла, ограниченное фигурными скобками. Для удобства чтения программы фигурная скобка, как правило, ставится одна на всю строку, но это не обязательно. Попутно отметим, что если тело цикла состоит только из одной строки, то ограничивать тело цикла фигурными скобками не обязательно.
В одиннадцатой строке записан заголовок внутреннего цикла for. Операторы, относящиеся к этому циклу, располагаются на строчках 12…15 и также ограничены фигурными скобками.
На тринадцатой строке переменной (r) присваивается случайное значение, вызываемое функцией rand().
На четырнадцатой строке записан оператор вывода printf(). О параметрах внутри круглых скобок этого оператора будем подробно говорить позже, а сейчас отметим, что в данной записи оператор выводит в строчку пять целых чисел.
На шестнадцатой строке функция putchar(‘\n’) задаёт переход на следующую строку. Признаком перехода на следующую строку является символ (\n).
Функция main (а вместе с ней и программа) заканчивается оператором return 0 на восемнадцатой строке.
Подведём краткие итоги.
- Программа на С должна начинаться с подключения стандартных библиотек с помощью директив #include. Количество и тип стандартных библиотек зависит от содержания программы.
- Программа должна содержать обязательную основную функцию main, которая состоит из заголовка и тела функции. После заголовка точка с запятой не ставится. Тело функции заключается в фигурные скобки. Функция int main () заканчивается оператором return 0.
- Все переменные, которые используются в программе, должны быть обязательно объявлены до начала их использования.
- Запись операторов, используемых в программе, должна заканчиваться точкой с запятой.
- Если в программе используется оператор цикла (или условный оператор), то по аналогии с функцией main точка с запятой после заголовка не ставится, тело оператора цикла (или условного оператора) заключается в фигурные скобки. Если тело цикла состоит всего из одной строки, то фигурные скобки можно не ставить.
Подпишись на телеграм-канал: https://t.me/algorithms_and_life и скачай учебное пособие “Программирование на C” – БЕСПЛАТНО