
- •Отображает данные, вводимые в ручную, во время обработки с устройств любого типа (клавиатура, переключатели, кнопки, световое перо, полоски со штрих кодом и т.д.).
- •Символ отображает хранимые данные в виде, пригодном для обработки. Носитель данных не определен. В схемах алгоритмов он предназначен для обозначения ввода-вывода данных в случае использования запоминающего устройства, управляемого процесса.
- •Тема 1. Основные этапы решения задач на ЭВМ
- •Постановка задачи разработки программного обеспечения
- •Анализ формальной постановки задачи
- •Выбор или разработка математической модели и метода решения
- •Разработка алгоритма
- •Базовые структуры алгоритма
- •Тема 2. Жизненный цикл программы. Критерии качества программы.
- •Техническое задание и спецификация программы
- •Разработка проекта программной системы
- •Программирование (кодирование) или программная реализация алгоритмов
- •Тестирование и отладка
- •Эксплуатация и сопровождение
- •Критерии качества программного обеспечения
- •Тема 3. Схемы алгоритмов, данных, программ
- •Символы данных
- •Символы процесса
- •Символы линий
- •Специальные символы
- •Правила применения символов в схемах
- •Правила выполнения соединений
- •Специальные условные обозначения
- •Тема 4. Язык программирования высокого уровня Си
- •Общие сведения о языке Си
- •Алфавит языка Си
- •Грамматика для описания языка, синтаксические диаграммы
- •Структура программы на языке Си
- •Имена объектов в программе
- •Выражения, операции и приоритеты
- •Тема 5. Стандартные типы данных
- •Тема 6. Составные типы данных
- •Данные регулярного типа (массивы)
- •Строки
- •Данные комбинированного типа (структуры)
- •Перечисления
- •Объединения
- •Указатели
- •Тема 7. Представление основных управляющих структур программирования
- •Оператор присваивания
- •Составной оператор
- •Оператор перехода Goto
- •Условный оператор If
- •Оператор выбора switch
- •Операторы цикла while, do – while, for
- •Операторы прерывания циклов
- •Форматированный ввод данных
- •Форматированный вывод данных
- •Преобразование типов
- •Инициализация данных
- •Тема 8. Функции
- •Определение функций в языке Си
- •Вызов функций в языке Си
- •Рекурсивные функции
- •Тема 9. Файлы
- •Тема 10. Приемы программирования. Примеры алгоритмов
- •Алгоритмы сортировки
- •Алгоритмы поиска
- •Динамические структуры данных
- •Линейные списки
- •Стек, очередь, дек
- •Деревья
- •Приложение 1. Стандартные библиотеки языка Си
- •Приложение 2. Примеры реализации алгоритмов
- •Не рекурсивный алгоритм решения задачи Ханойская башня.
- •Рекурсивный алгоритм решения задачи Ханойская башня.
- •Приложение 3. Лабораторные работы
- •Лабораторная работа №1
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Лабораторная работа №9
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Лабораторная работа №12
- •Список литературы
Структура программы на языке Си
Вязыке Си исходные файлы бывают двух типов:
∙заголовочные, или h-файлы;
∙файлы реализации, или Cи-файлы.
Имена заголовочных файлов имеют расширение ".h". Имена файлов реализации имеют расширения ".c" для языка Си и ".cpp", ".cxx" или ".cc" для языка C++.
Заголовочные файлы содержат только описания. Прежде всего, это прототипы функций. Прототип функции описывает имя функции, тип возвращаемого значения, число и типы ее аргументов. Сам текст функции в h- файле не содержится. Также в h-файлах описываются имена и типы внешних переменных, константы, новые типы, структуры и т.п. В общем, h-файлы содержат лишь интерфейсы, т.е. информацию, необходимую для использования программ, уже написанных другими программистами (или тем же программистом раньше). Заголовочные файлы лишь сообщают информацию о других программах. При трансляции заголовочных файлов, как правило, никакие объекты не создаются.
Файлы реализации, или Cи-файлы, содержат тексты функций и определения глобальных переменных. Говоря упрощенно, Си-файлы содержат сами программы, а h-файлы - лишь информацию о программах.
Представление исходных текстов в виде заголовочных файлов и файлов реализации необходимо для создания больших проектов, имеющих модульную структуру. Заголовочные файлы служат для передачи информации между модулями. Файлы реализации - это отдельные модули, которые разрабатываются и транслируются независимо друг от друга и объединяются при создании выполняемой программы.
В общем случае программа на языке Си имеет следующую структуру:
∙раздел описания подключаемых библиотек;
∙функция main;
∙раздел описания процедур и функций.
56
Обязательным являются все разделы.
В разделе описания подключаемых библиотек после ключевого слова #include указывается имя подключаемого к программе библиотечного модуля. Имя модуля заключается в треугольные кавычки − <имя модуля>. В этих модулях содержатся необходимые программе стандартные и пользовательские процедуры и функции, например, «#include<stdio.h>». В этом примере приведен важнейший модуль, в котором находятся основные стандартные процедуры и функции ввода/вывода. В дальнейших примерах программ будем применять эту конструкцию.
Любая программа, каков бы ни был ее размер, состоит из одной или более "функций", указывающих фактические операции компьютера, которые должны быть выполнены. В языке Си − это функция main. Обычно функциям можно давать любые имена, но main − это особое имя; выполнение программы начинается сначала с функции main. Это означает, что каждая программа должна в каком-то месте содержать функцию с именем main. Для выполнения определенных действий функция main обычно обращается к другим функциям, часть из которых находится в той же самой программе, а часть − в библиотеках, содержащих ранее написанные функции.
В разделе описания процедур и функций описываются нестандартные (пользовательские) процедуры и функции. Процедура или функция – это подпрограмма, т.е. специальным образом оформленная часть программы, которая выполняет необходимое в программе действие. Подробнее о процедурах и функциях рассказывается в разделе 8.
Обобщая все вышесказанное, структура программы на языке Си в упрощенном виде выглядит следующим образом:
#include <модуль 1> |
|
#include <модуль 2> |
|
. . . |
//список подключаемых модулей |
#include <модуль n> |
|
void main() |
//функция MAIN |
{ |
//выполняемые операторы |
<операторы> |
|
} |
|
57
int <имя процедуры/функции> // раздел описания процедур и функций
{
} <основная часть процедуры/функции >;
Как видно из приведенного примера, текст программы на языке Си состоит из строк. Символы в строке записываются на одном уровне без надстрочных и подстрочных индексов. Для разделения некоторых конструкций языка используются пробелы. Пробелы формируются с помощью клавиш «пробел» и «Tab» на клавиатуре компьютера. Пробелы нельзя использовать внутри имён, чисел, специальных символов и служебных слов. По крайней мере 1 пробел должен быть между двумя последовательными именами, числами и служебными словами. Во всех других случаях наличие или отсутствие пробела не влияет на смысл программы. В том месте, где можно использовать 1 пробел, можно использовать любое количество пробелов. Конец строки считается пробелом, поэтому текст программы можно прерывать и переносить на другую строку в любом месте, где можно использовать пробел. Пробелы позволяют выделять структурные блоки программы и делают ее более наглядной, программа без такого структурирования плохо читаема и не понятна. Поэтому существует правило табулирования текста программы – выделения с помощью пробелов, символов табуляции и переводов строк вложенных блоков, циклов, условий.
Операторы разделяются между собой символом точка с запятой («;»). Пустым оператором считается оператор, который не выполняет никаких действий. На языке Си это может быть пробел с последующей точкой запятой.
Для пояснения текста программы используется комментарии. Комментарии имеют вид (//текст) или (/*текст*/). Комментарий может
охватывать несколько строк (используется форма «/*текст*/»), либо помещаться в одной строке (точнее, до конца строки), тогда используется форма: «// комментарий до конца строки».
Внутри комментария можно располагать любые символы, в том числе символы, не входящие в алфавит языка. Комментарии можно использовать везде, где применяется пробел. Наличие или отсутствие комментария не влияет
58

на работу программы. Комментарии к программе делают ее более наглядной и понятной, поэтому рекомендуется использовать комментарии как можно чаще. Существует негласное правило хорошего тона программирования: как минимум одна строка комментария на три строки кода программы.
Имена объектов в программе
Имена (идентификаторы) – условные обозначения для используемых в программе констант, типов, переменных, процедур и функций. Имя начинается с буквы и состоит из букв и цифр, т.е. в виде грамматики:
<имя> =:: <буква>{<буква> | <цифра>}, или в виде синтаксической диаграммы (рис.25):
Имя
буква
буква
цифра
Рис. 24. Синтаксическая диаграмма имени (идентификатора)
Примечание:
1.Во многих реализациях языка количество символов в имени ограничено.
2.В качестве имен нельзя использовать служебные слова языка Си.
3.К буквам относится также символ «_» (подчёркивание).
4.В языке определены стандартные имена, которые можно использовать только в строго определенном смысле. Эти имена используются для обозначения стандартных констант, типов, файлов, процедур и функций.
Приведем перечень некоторых стандартных имён: abs – абсолютное значение целого;
acos – арккосинус; asctime – дать время; atan, atan2 – арктангенс;
atof, atoi, atol – преобразовать в плавающее; close – закрыть файл;
59
creat – создать файл;
difftime – определить отрезок времени; div – делить;
ecvt – преобразовать число в строку;
exit, _exit – завершить выполнение программы; exp – экспонента;
fclose – закрыть файл;
fcvt – преобразовать double в строку с фиксированной точкой; feof – проверка признака конца файла;
fgetc – взять байт из файла; fgets – взять строку из файла; filesize – дать размер файла;
findfirst, findnext – поиск файлов по шаблону; floor – целая часть;
fmod – остаток от деления двух чисел; fopen – открыть файл;
fprintf – форматный вывод в файл; fputc – запись байта в файл;
fputs – запись строки в файл; fread – читать из файла;
free – освободить память; freopen – открыть файл повторно;
frexp – экспоненциальное представление; fscanf – форматный ввод из файла;
fseek – позиционировать файл;
60
ftell – дать позицию в файле; fwrite – писать в файл;
getc, getchar, getche, getch – взять байт из файла; getcwd – дать текущий каталог;
gets – ввод строки;
index – найти литеру в строке; inp, inpw – ввод из порта;
itoa – представление целого;
kbhit – проверка ввода с клавиатуры; labs – абсолютное значение длинного; ldexp – экспонента;
ldiv – деление чисел типа long; localtime – дать местное время; log, log10 – логарифм;
lseek – изменить позицию в файле; mkdir – создать каталог;
mktime – преобразовать время; modf – дробная и целая часть числа; open – открыть файл;
outp, outpw – вывод в порт; pow – степень;
printf, fprintf, sprintf – форматный вывод; puts – вывод строки в файл;
rand – случайная величина; read – читать блок из файла;
61