- •Министерство образования Республики Беларусь
- •1. Что такое программа на языке программирования
- •2. Общее знакомство с языком с
- •3. Структура простой программы на языке с
- •4. Что такое программа на языке с
- •5. Представление информации и типы данных в языке с
- •6. Константы
- •7. Переменные
- •8. Элементарный вВод и вывод информации
- •9. Выражения и операции
- •9.1. Арифметические операции
- •9.2. Операция изменения знака
- •9.3. Операции инкремента и декремента
- •9.4. Операция присваивания
- •9.6. Поразрядные логические операции
- •9.8. Логические операции и операции отношения
- •9.9. Условная операция «? :»
- •9.10. Операция последовательного вычисления
- •9.11. Операция определения требуемой памяти в байтах sizeof
- •9.12. Операция приведения типа (type)
- •10. Операторы управления вычислительным процессом
- •10.1. Операторы ветвления if и else
- •10.2. Оператор switch
- •10.3. Оператор цикла while
- •10.4. Оператор цикла do…while
- •10.5. Оператор цикла for
- •10.6. Бесконечные циклы
- •10.7. Другие управляющие средства языка с
- •10.8. Стандартные математические функции
- •11. Вычисление выражений и побочные эффекты
- •11.1. Преобразования типов при вычислении выражений
- •11.2. Побочные эффекты при вычислении выражений
- •12. Массивы
- •12.1. Описание массива
- •12.2. Инициализация массива
- •12.3. Ввод-вывод массива
- •12.4. Двумерные массивы (массивы массивов)
- •13. Указатели
- •14. Адресная арифметика
- •15. Массивы и указатели
- •15.1. Указатели и одномерные массивы
- •15.2. Указатели и двумерные массивы
- •16. Строки
- •17. Массивы строк
- •18. Функции
- •18.1. Определение функции в языке с
- •18.2. Возвращение значений из функции
- •18.3. Формальные и фактические параметры функции
- •18.4. Вызов функции
- •18.5. Объявление и определение функции: прототип функции
- •19. Передача параметров в функции
- •19.1. Способы передачи параметров в функции
- •19.2. Передача параметров в функции в языке с
- •19.3. Передача указателей в функции
- •20. Классы хранения и видимость переменных
- •20.1. Общие положения
- •20.2. Спецификаторы класса памяти
- •20.3. Область видимости функций
- •20.4. Глобальные переменные
- •20.5. Глобальные статические переменные
- •20.6. Локальные переменные
- •20.7. Статические локальные переменные
- •20.8. Регистровые переменные
- •20.9. Выводы
- •21. Организация памяти программы
- •22. Многофайловая компиляция (проекты)
- •23. Передача в функции массивОв
- •23.1. Передача одномерных массивов в функции
- •23.2. Передача двумерных массивов в функции
- •23.3. Передача в функции символьных строк
- •23.4. Возвращение указателей из функций
- •24. Функции с переменным количеством аргументов
- •24.1. Соглашения о вызовах: модификаторы функций
- •24.2. Объявление списка параметров переменной длины
- •25. Передача параметров в функцию main()
- •26. Указатели на функцию
- •27. Стандартные функцИи языка с
- •27.1. Функции для работы со строками
- •27.2. Функции для проверки символов и преобразования данных
- •27.3. Функция быстрой сортировки – gsort()
- •27.4. Функция двоичного поиска – bsearch()
- •28. Работа с файлами
- •28.1. Основные понятия
- •28.2. Основные функции для работы с файлами
- •28.3. Открытие и закрытие файлов
- •28.4. Ввод/вывод символов
- •28.5. Ввод/вывод строк
- •28.6. Форматированный ввод/вывод
- •28.7. Ввод/вывод блоков данных
- •28.8. Другие средства для работы с файлами
- •28.9. Ввод/вывод низкого уровня (префиксный доступ к файлам)
- •29. Типы, определяемые пользователем: Перечисления, структуры и объединения
- •29.1. Переименование типов – оператор typedef
- •29.2. Перечисления (enum)
- •29.3. Основные сведения о структурах
- •29.4. Структурные переменные в памяти компьютера
- •29.5. Доступ к полям структуры
- •29.6. Массивы структур
- •29.7. Структуры и функции
- •29.8. Объединения (union)
- •30. Динамическая память
- •30.1. Понятие динамического объекта
- •30.2 Создание и уничтожение динамических объектов
- •30.3 Динамическое размещение одномерных массивов и строк
- •30.4 Динамическое размещение двумерных массивов
- •30.5. Функции для работы с блоками памяти
- •31. Динамические структуры данных
- •31.1. Понятие структуры данных
- •31.2. Структуры, ссылающиеся на себя
- •31.3. Связанные списки
- •31.5. Очереди
- •Ниже приводятся примеры функций для очереди (структура элемента очереди совпадает со структурой элемента стека в примере выше):
- •32. Препроцессор языка с
- •32.1 Директива включения файлов
- •32.2. Директива определения макрокоманд (макросов)
- •32.3 Директива условной компиляции
- •32.4 Дополнительные директивы препроцессора
4. Что такое программа на языке с
Программы на языке С составляются их исходных файлов (с расширением .c или .cpp) и заголовочных файлов (с расширением .h или .hpp).
Файл с исходным текстом программы на языке С: task.cpp (или task.c). Заголовочные файлы подключаются к файлам с программами с помощью #include.
Для того чтобы выполнить программу, необходимо ее перевести на язык, понятный процессору – в машинные коды. Этот процесс состоит из нескольких этапов.
1. Сначала программа передается препроцессору, который выполняет директивы препроцессора, содержащиеся в ее тексте (например, #include – включение файла в текст программы).
2. Получившийся текст передается на вход компилятора. Заголовочные файлы не компилируются отдельно, исходные файлы включают их в себя. В результате компиляции программы создается объектный файл: task.obj.
3. Затем выполняется редактирование связей, чтобы из объектных модулей, библиотек и исполнительной библиотеки собрать конечную программу (исполняемый файл task.exe, загрузочный файл). Эту работу выполняет компоновщик (линковщик, редактор связей). Компоновщик физически связывает файлы (например, несколько obj-файлов), в один исполняемый файл и разрешает внешние ссылки. Внешняя ссылка создается каждый раз, когда программа из одного файла ссылается на код из другого файла (например, это происходит при вызове системных функций).
Если программа состоит из нескольких исходных файлов, они компилируются по отдельности и объединяются на этапе компоновки. Исполняемый модуль имеет расширение .exe и запускается на выполнение обычным путем.
Начальный код связан с процедурами инициализации, которые исполняются перед тем, как управление будет передано функции main(), и запуском функции main() на выполнение.
Исполнительная библиотека содержит ряд функций, которые вы можете вызывать из своей программы для выполнения стандартных действий (стандартные функции преобразования данных из одного формата в другой, обработки строк, математические, управления файлами и каталогами и другие).
Про тесты и bat-файлы:
Для каждой программы необходимо подготовить:
полное множество тестов, размещая каждый тест в отдельном файле в том же каталоге, где находится исходный файл (создание файлов Shift+F4, F4 – редактор, файлы должны быть в DOS-кодировке, что важно для русских букв);
один командный файл (.bat) вида: task <test1.in task <test2.in ... task <testN.in где task – имя загрузочного модуля задачи, testI.in (I=1..N) – файлы с тестами в DOS-кодировке.
Работа в bc аналогична работе в bp:
Ctrl-F9 – запустить программу на выполнение
Alt-F9 – выполнить компиляцию модуля (.cpp → .obj)
F9 – создать для программы exe-файл
F8 – выполнить строку программы (если есть вызов функции, то вход в нее не выполняется)
F7 – выполнить строку программы (если есть вызов функции, то выполняется вход в нее)
F4 – выполнить программу да заданной строки и остановиться
Ctrl-F8 – установить/снять контрольную точка (после запуска программа останавливается в этой точке)
Ctrl-F2 – завершить выполнение программы
Alt-F5 – посмотреть результат работы программы (не надо для этого запускать программу заново!!!)
Окно watch (Ctrl-F7) – просмотр значений переменных
Alt-0 – список окон (удобно переходить между окнами + показывает последние закрытые окна)
Alt-N – переход к окну с номером N
Если при компиляции программы будет обнаружена ошибка, она появится в окне сообщений (Message window). Наличие ошибок (errors) не позволяет выполнить программу. Необходимо исправить найденные ошибки и снова скомпилировать программу. Однако даже если в программе нет синтаксических ошибок, некоторые ситуации могут вызвать подозрение у компилятора. Когда компилятор встречается с одной из таких ситуаций, то печатается предупреждение (warning). Чаще всего предупреждение указывает на реальную ошибку в программе. Программист должен проанализировать указанную ситуацию и принять соответствующее решение. В ваших программах предупреждений быть не должно.
Какие могут быть стандартные проблемы:
bc не запускается – скорее всего запустили bc из каталога, к которому нет доступа по записи (не из своего каталога) или нет свободного места в вашем каталоге;
выдало сообщение «Linker Error: Unable to open file ‘C0x(L).obj’» – надо подключить библиотеки (Options → Directories → везде должет быть диск C:);
выдало сообщение «Error: Unable to open include file <stdio.h>» – надо подключить библиотеки (Options → Directories → везде должен быть диск C:) или неверно написано название h-файла;
выдало сообщение «Error: Function ‘clrscr’ should have a prototype» – надо написать #include для заголовочного файла, в котором определен прототип этой функции (стать курсором на функцию, нажать Ctrl-F1 и справа посмотреть название файла, который надо подключить).