- •Основы алгоритмизации и программирования, язык Си
- •Введение
- •Блок-схема алгоритма Общие требования к блок-схеме алгоритма
- •Линейные и разветвляющиеся процессы
- •Циклические процессы
- •Итерационные процессы
- •Комментарии
- •Типы данных
- •Данные целого типа
- •Данные вещественного типа
- •Модификатор const
- •Переменные перечисляемого типа
- •Константы
- •Операции и выражения
- •Операция присваивания
- •Арифметические операции
- •Операции поразрядной арифметики
- •Логические операции
- •Операции отношения
- •Инкрементные и декрементные операции
- •Операция sizeof
- •Порядок выполнения операций
- •Приоритет операций
- •Преобразование типов
- •Операция приведения
- •Операция запятая
- •Ввод и вывод информации
- •Директивы препроцессора Директива #include
- •Директива #define
- •Понятие пустого и составного операторов
- •Условные операторы
- •Операторы организации цикла
- •Оператор цикла for
- •Оператор цикла while
- •Оператор цикла do … while
- •Вложенные циклы
- •Операторы перехода (break, continue, return, goto)
- •Примеры программ
- •Массивы Одномерные массивы
- •Примеры программ
- •Многомерные массивы (матрицы)
- •Примеры программ
- •Указатели Понятие указателя
- •Описание указателей
- •Операции с указателями
- •Связь между указателями и массивами
- •Массивы указателей
- •Многоуровневые указатели
- •Примеры программ
- •Символьные строки
- •Ввод/вывод строк.
- •Функции работы со строками.
- •Примеры программ
- •Функции
- •Прототип функции.
- •Определение функции.
- •Параметры функции
- •Параметры по умолчанию
- •Передача массива в функцию
- •Inline функции
- •Класс памяти
- •Автоматические переменные
- •Статические переменные
- •Регистровые переменные
- •Блочная структура
- •Примеры программ
- •Указатели на функции
- •Примеры программ
- •Рекурсия
- •Примеры программ
- •Аргументы в командной строке
- •Функции с переменным числом параметров
- •Примеры программ
- •Сортировка
- •Пузырьковая сортировка.
- •Шейкер сортировка
- •Сортировка вставкой
- •Сортировка выбором
- •Метод Шелла
- •Метод Хора
- •Структуры
- •Доступ к элементам структуры
- •Инициализация структур
- •Указатели на структуры.
- •Структуры и функции
- •Примеры программ
- •Поля бит
- •Объединения
- •Переменные с изменяемой структурой
- •Примеры программ
- •Организация списков и их обработка
- •Операции со списками при связном хранении
- •Построение обратной польской записи
- •Односвязный линейный список, очередь
- •Двусвязный линейный список
- •Циклический список, кольцо
- •Двусвязный циклический список
- •Примеры программ
- •Деревья
- •Потоки и файлы
- •Файлы Основные сведения о файловой системе
- •Организация посимвольного ввода и вывода
- •Определение конца файла feof()
- •Организация ввода и вывода строк
- •Удаление файлов
- •Дозапись потока
- •Позиционирование в файле
- •Текстовые и двоичные файлы
- •Функции fread() и fwrite()
- •Примеры программ
- •Хеширование
- •Схемы хеширования
- •Метод открытой адресации с линейным опробыванием
- •Метод цепочек
- •Машинное представление графов
- •Примеры программ
- •Литература
Итерационные процессы
Итерационным процессом называется циклический процесс, который продолжается до тех пор, пока разность между соседними, уточняемыми на каждом шаге цикла (итерации) значениями, не окажется меньше или равной некоторой заданной величине. В виде итерационных вычислительных процессов реализуется большинство численных методов высшей математики: нахождение корней уравнения, вычисление значений интеграла, поиск экстремума некоторой целевой функции и др.
Пример . Разработать блок-схему нахождения квадратного корня числа n. Значение ищется на интервале [a,b] с точностью e. Значение аргументов а, b, e ввести с клавиатуры.
Рис 7. Блок-схема итерационного процесса.
Характерной особенностью итерационного процесса является то, что в нем количество повторений вычислений (итераций, циклов) заранее неизвестно и становится определенным (известным) только после завершения вычислений. Решение об окончании вычислений принимается в том случае, когда результаты счета (значение функции, искомые величины) на очередной итерации отличаются от предыдущих или эталонных не более чем на некоторую, наперед заданную, величину, т.е. найдены с заданной точностью.
Второй особенностью итерационного процесса является то, что результаты вычислений очередного выполнения цикла используются как исходные данные при следующем выполнении цикла, т.е. решение находится последовательными приближениями, путем уточнения на каждом шаге цикла.
При решении задач вычислительный процесс, реализующий алгоритм, обычно является комбинированным, т.е. он содержит разветвления, является и циклическим и итерационным. Поэтому рекомендуется разделять весь процесс вычислений на отдельные участки, соответствующие типам рассмотренных процессов.
Основные понятия языка С(С++)
Программа на языке С(С++) состоит из последовательности инструкций (операторов), описывающих действия, выполняемые программой. Операторы используют ключевые слова, значение которых зафиксировано и не может использоваться для других целей (например, в качестве имени переменных). В С(С++) все операторы (за исключением команд препроцессора и описаний функций, расположенных в начале программной единицы) оканчиваются точкой с запятой ’;’. Фигурные скобки {} в С(С++) применяются для обрамления начала и конца функции и некоторых других целей.
Алфавит языка (набор символов и цифр), используемый при составлении инструкций (операторов), включает латинские прописные и строчные буквы, цифры и специальные символы (. , ’ : и др.).
Идентификатор – это имя, которым обозначается некоторый объект (данное) в программе. Данные в оперативной памяти размещаются по некоторым адресам, которые программисту заранее неизвестны. Для того чтобы в программе иметь возможность обращаться к этим данным и обрабатывать их, программист этим данным даёт условные имена, которые компилятор в программе заменит адресами данных в оперативной памяти.
Идентификатор должен удовлетворять следующим требованиям:
- начинаться с латинской буквы или символа _ (подчеркивание);
- содержать только символы латинского алфавита, цифры и символ подчеркивания. Использование других символов запрещено.
Нет ограничения на количество символов в идентификаторе, однако воспринимаются и анализируются только первые 32.
Примеры записи идентификаторов:
sum, result, n, m, c10, Beta, beta, _function, letter, array и т.д.
Ошибочные идентификаторы: a+b, -omega, 9c, if, int, long, &b, %f.
Так как строчные и прописные буквы различаются, то идентификаторы BETA, beta, Beta (main, Main, MAIN) будут различными. При выборе идентификатора необходимо учитывать следующее:
идентификатор не должен совпадать с ключевыми словами языка и именами функций из библиотеки языка С(С++) (С++);
не рекомендуется начинать идентификатор со знака подчеркивания, т.к. этот символ используется в именах некоторых библиотечных функций и при совпадении имен эти функции будут недоступны программе. Кроме того, к именам транслируемых функций, составляющих программу, компилятор автоматически добавляет первым символом знак подчеркивания.
Ключевые слова – это зарезервированные имена, используемые в языке С(С++) с некоторым заранее определённым смыслом. Все зарезервированные слова пишутся строчными буквами иначе эти имена будут восприняты как имена переменных. Эти слова нельзя использовать в качестве идентификаторов объектов (данных) пользователя. Ключевые слова сообщают компилятору о типе данных, способе их организации, о последовательности выполнения оперторов. Ниже приведены некоторые ключевые слова:
auto break case char const continue default do double
else enum extern float for if int long register
return short signed sizeof struct switch typedef union unsigned
void volatile while.
Ключевые слова near, far, huge определяют тип (размер) указателя на данные, а слова _asm, cdecl, fortran, pascal используются для организации связи с функциями, написанными на других языках программирования.
Переменные. Программы в процессе своего функционирования оперируют различными данными. Некоторые данные в процессе выполнения программы не могут изменять своего значения - константы, значение других может быть модифицировано - переменные.
Все переменные, массивы и т.д., которые используются в программа, необходимо декларировать. Возможны две формы декларации: описание (объявление), не приводящее к выделению памяти, и определение, при использовании которого в зависимости от типа данного будет выделен определенный, в соответствии с типом, объем оперативной памяти. Выделенному участку памяти присваивается имя, которое в дальнейшем используется в программе.
Описание переменных имеет следующий формат:
[спецификатор класса памяти][модификатор]типидентификатор_1
[=начальное значение][,идентификатор_n]=начальное значение]];
В описании идентификатор может содержать квадратные или круглые скобки, а также перед ним может быть один или несколько знаков *(звёздочка). Эти случаи объявления будут рассмотрены далее.
Спецификатор типа - одно или несколько ключевых слов, определяющих тип переменной. Язык Cu определяет стандартный набор основных типов данных(int, char, double), используя которые пользователь может объявлять свои производные (структурированные) типы (массив, структура, объединение и др.). При определении переменных им можно присвоить начальное значение.
Четыре ключевых слова: auto, extern, registеr и static определяют класс памяти, или каким образом для объявляемой переменной распределяется память и в каких фрагментах программы можно использовать её значение. Если ключевое слово, определяющее класс памяти, опущено, то класс памяти определяется по контексту.
Определения и описания переменных рекомендуется размещать в начале программного модуля.