Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Цифровая грамотность. В 2 частях. Ч.2. Разработка консольных приложений на языке программирования C. Учебное пособие.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆

Контрольные вопросы

1. Может ли функция не иметь параметров или аргументов при опи-
сании заголовка функции?
2. В теле функции описываются и используются глобальные или ло-
кальные параметры?
3. В каком случае текст пользовательской функции можно описать
после основной программы main()?
4. Что понимается под фактическими параметрами?
5. Каким образом можно вызвать функцию в программе?
ТЕМА 2.2. МОДУЛЬНОЕ ПРОГРАММИРОВАНИЕ
С ИСПОЛЬЗОВАНИЕМ ФУНКЦИЙ В ЯЗЫКЕ C
Модульное программирование объединяет связанные наборы функ-
ций в модуль.
Модульное программирование – это организация программы как
совокупности небольших независимых блоков, называемых модулями.
Модуль – это функционально законченный фрагмент программы,
оформленный в виде отдельного файла с исходным кодом.
Модули проектируются таким образом, чтобы предоставлять про­граммистам удобную для многократного использования функциональ­ность (интерфейс) в виде набора функций, классов, констант. Модули мо­гут объединяться в пакеты и, далее, в библиотеки.
Удобство использования модульной архитектуры – возможность обновления (замены) модуля без необходимости изменения остальной системы.
Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Модульность часто яв­ляется средством упрощения задачи проектирования программы и распре­деления процесса разработки между группами разработчиков. При разби-
81
ении программы на модули для каждого модуля указывается реализуемая им функциональность, а также связи с другими модулями.
Как организуется модуль на языке программирования С?
Программирование модулей с использованием языка C означает раз-
деление каждого исходного кода на заголовочный файл module1.h, кото­рый определяет, как этот модуль взаимодействует с клиентами, и соответ­ствующий исходный файл реализации, module1.c, где весь код и детали скрыты. Заголовок содержит только объявления констант, типов, глобаль­ных переменных и прототипов функций, которые клиентским программам разрешено видеть и использовать. Любой другой закрытый элемент внут­ри модуля должен оставаться внутри файла кода. Опишем подробно об­щую структуру интерфейса и файлов реализации.
В языке программирования C модуль логически состоит из двух
файлов:
– файла с исходным кодом (source file), – заголовочного файла (header file).
Файл с исходным кодом (module.c) включает в себя определения функций, а также определения глобальных переменных и констант (если они есть). В первой строке обычно подключается заголовочный файл того же модуля:
#include "module.h“
Заголовочный файл (module.h) включает в себя прототипы функ­ций, определения констант, объявления глобальных переменных – но только для тех элементов модуля, о которых должны знать другие модули.
Модуль состоит из интерфейса (заголовочого файла .h) и реализации (файла .c). Код, подключающий модуль, на этапе компиляции нуждается только в интерфейсе модуля, поэтому на этапе препроцессинга заголовоч­ный файл копируется в код директивой. Например:
Реализация модуля должна полностью реализовывать указанный ин­терфейс, поэтому она также включает свой заголовочный файл.
82
– Если какой-либо модуль использует данный, необходимо подклю-
чить его заголовочный файл (в двойных кавычках – это указывает на то, что заголовочный файл не системный, а собственный):
– Главный модуль программы обычно содержит только функцию main() и не имеет заголовочного файла (т. к. функция main() не может быть использована в других модулях).
– Некоторые модули включают только заголовочный файл – напри-
мер, содержащий определения глобальных констант.
Рассмотрим пример создания и использования модуля для вывода приветствия на дисплей.
Основная программа:
Заголовочный файл:
Ресурсный файл:

Контрольные вопросы

1. Что понимается под технологией модульного программирования?
2. Что такое модуль?
3. Как организуется модуль на языке программирования С?
4. Что содержит заголовочный файл?
5. Что содержит ресурсный файл?
83
Лабораторная работа № 9
ОСНОВЫ РАБОТЫ С МОДУЛЯМИ НА ЯЗЫКЕ
ПРОГРАММИРОВАНИЯ С
Задание 1.
Выполните пример 21. Создайте модуль, содержащий функцию вычис-
ления суммы двух чисел. В главной программе осуществляется вычисление суммы двух введенных чисел с клавиатуры с помощью этой функции.
Ход выполнения:
1. Для решения поставленной задачи воспользуемся, например, сре-
дой программирования . Создайте в этой среде проект типа консольное приложение (см. рис. 1). В главной программе main.c запи­шите следующий программный код.
Программный код:
2. Создайте заголовочный файл add.h, используя команду File → New → Source File. Введите нижеследующий программный код и сохраните File → Save. В диалоговом окне Save As выберите расширение (рис. 29)
и сохраните.
84
Программный код:
Рис. 29. Сохранение заголовочного файла add.c
3. Создайте ресурсный файл add.c, используя команду File → New →
Source File. Введите нижеследующий программный код и сохраните File
→ Save. В диалоговом окне Save As выберите расширение (рис. 30) и сохраните.
Программный код:
Рис. 30. Сохранение ресурсного файла add.c
85
В конечном итоге в структуре проекта консольного приложения
должны быть файлы add.c и add.h (рис. 31).
Рис. 31. Структура файлов проекта
Самостоятельно. Добавьте в модуль функцию поиска максимального
числа из двух введенных чисел.
Задание 2.
Реализуйте технологию модульного программирования, разместив в модуле созданные пользовательские функции для вычисления выраже­ния в соответствии с индивидуальным вариантом (тема 2.1, лабораторная работа № 8, табл. 20).

Контрольные вопросы

1. Как создать модуль на примере среды IDE Dev-C++?
2. Как создать заголовочный файл на примере среды IDE Dev-C++?
3. Как создать ресурсный файл на примере среды IDE Dev-C++?
4. Каким образом подключить модуль в основной программе? Как со-
здать заголовочный файл на примере среды IDE Dev-C++?
5. Верно ли утверждение, что модуль содержит только одну функцию?
86

ТЕМА 2.3. ФАЙЛОВЫЙ ВВОД/ВЫВОД

Открывает файл в режиме записи. Если файл существует, он откроет тот же
Открывает текстовый файл для чтения и записи. Сначала он усекает файл Открывает существующий файл в режиме чтения. Если файл не существу­ет, он возвращает нулевой указатель
r+
Открывает текстовый файл для чтения и записи
Открывает существующий файл в режиме записи для добавления новых записей. Если файл не существует, он создаст и откроет новый файл
Открывает текстовый файл для чтения и записи. Он создает файл, если он
бавлена
Файл – это набор записей, будь то текстовые данные или двоичные. Рассмотрим стандартные действия с файлами в языке программиро-
вания C.
1. Открыть файл.
Файл можно создать или открыть с помощью функции fopen().
Параметры имя файла и режим работы (табл. 21) с файлом должны быть переданы через функцию fopen().
File fopen(“filename”,”mode”);
Таблица 21
Режимы работы
Режим Описание
w
w+
r
a
a+
файл, и существующие данные будут потеряны. Если файл не существует, он создаст и откроет новый файл
до нулевой длины, если он существует, иначе создает файл, если он не су­ществует
не существует. Чтение начнется с начала, но запись может быть только до-
2. Записать данные в файл.
Используются такие функции, как fputc(), fprintf() или fputs(), для за-
писи данных в файл:
– fputc() используется для записи символа в файл и возвращает символ,
записанный в случае успеха, или конец файла (EOF) в случае неудачи.
fputc(переменная, ФАЙЛ);
87
– fprintf() и fputs() используются для записи строки в файл. Они воз- вращают неотрицательное значение в случае успеха или EOF в случае не­удачи.
fprintf(ФАЙЛ,строка);
fputs(строка,ФАЙЛ);
3. Чтение данных из файла.
Используются такие функции, как fgetc(), fscanf() или fgets(), для чте­ния данных из файла при программировании на C:
– fgetc() используется для чтения символа из указанного файла. Он возвращает символ в случае успеха или EOF в случае неудачи.
fgetc(FILE)
– fscanf() используется для чтения строки. Он останавливается, когда встречается пробел.
fscanf(FILE, "%s", variable);
– fgets() используется для совместного чтения группы строк. Он оста­навливается, когда встречает новую строку или EOF.
fgets(variable, int size , FILE);
4. Закрыть файл.
Вы можете использовать функцию fclose(), чтобы закрыть файл:
fclose(FILE);
Двоичный ввод/вывод
Вы можете использовать функции fread() и fwrite() для записи и чте­ния данных в двоичном формате. Данные, хранящиеся в двоичном форма­те, не могут быть прочитаны человеком, поскольку они хранятся в зашиф­рованном виде. Двоичный файл требует меньше места в памяти по срав­нению с текстовым файлом. В конце текстового файла сохраняется сим­вол EOF, чтобы отметить конец файла, и его значение ascii будет равно 26, в то время как такой символ не добавляется для обозначения конца в дво­ичном файле.
88
Синтаксис: fread(variable, size, count, FILE); fwrite(variable, size, count, FILE);

Контрольные вопросы

1. Что такое файл?
2. Перечислите и охарактеризуйте режимы работы с файлами.
3. Как описывается файловый поток в программе на языке програм-
мирования C?
4. Каким образом программно открыть файловый поток?
5. Каким образом программно закрывается файловый поток?
Лабораторная работа № 10
РАБОТА С ФАЙЛАМИ НА ЯЗЫКЕ ПРОГРАММИРОВАНИЯ С
Задание 1.
1.1. Выполните пример 22. Введите число и сохраните его в файле
s1.txt. Считайте число из файла s1.txt, увеличьте его на 3 и сохраните в файле s2.txt.
Программный код:
89
1.2. Выполните пример 23. Считайте посимвольно содержимое тек-
стового файла F1.dat и выведите на экран.
Примечание. Предварительно необходимо создать файл F1.dat в тек­стовом редакторе «Блокнот» и ввести элементы двумерного массива А че­рез пробел.
Программный код:
Задание 2.
Индивидуальные задания
Выполните индивидуальное задание, считывая исходные данные из одного файла A и записывая полученные результаты в другой текстовый файл B, которые следует вывести на экран (табл. 22).
Примечание. Файл A с исходными данными необходимо заполнить предварительно, элементы ввести через пробел.
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]