- •Антонюк в.А., Задорожный с.С.
- •Первая программа на с. История языка программирования с.
- •Среда программирования «Microsoft Visual Studio.Net».
- •Структура программы.
- •Пример простейшей программы:
- •Представление данных.
- •Операции.
- •Ввод и вывод алфавитно-цифровой информации.
- •Математические функции.
- •Практическое задание №1.
- •Условия в вычислениях. Ветвящиеся и итерационные алгоритмы Условная операция присваивания. Операторы if ... Else и switch.
- •Ветвящиеся алгоритмы.
- •Циклические и рекурсивные алгоритмы. Операторы циклов for, do, while.
- •Практическое задание №2.
- •Функции.
- •Определение функции.
- •Прототипы функций.
- •Вызов по значению и вызов по ссылке.
- •Вычисление функций путем разложения в ряд.
- •Поиск корней функции методом деления отрезка пополам.
- •Поиск корней функции методом касательных.
- •Практическое задание №3.
- •Массивы и указатели. Работа с файлами. Объявления массивов и указателей.
- •Доступ к элементам массива.
- •Передача массивов функциям.
- •Указатели.
- •Динамическое выделение и освобождение памяти.
- •Практическое задание.
- •Потоковые функции.
- •Низкоуровневый ввод и вывод.
- •Ввод и вывод символов, строк, слов.
- •Форматированный ввод и вывод.
- •Потоки cin, cout, cerr.
- •Практическое задание №4.
- •Структуры и объединения. Синтаксис структур.
- •Доступ к элементам структуры.
- •Передача структур в функции.
- •Структуры и битовые поля.
- •Объединения.
- •Дополнительные средства (typedef и enum).
- •Введение в объектно-ориентированное программирование. Принципы объектно-ориентированного программирования.
- •Терминология объектно-ориентированного программирования.
- •Структура как простейший класс.
- •Inline методы.
- •Указатель this.
- •Конструкторы и деструкторы.
- •Перегрузка методов класса.
- •Перегрузка операций.
- •Практическое задание.
- •Производные классы. Полиморфизм
- •Виртуальные функции
- •Использование дружественных функций.
- •Практическое задание.
- •Работа в объектно-ориентированной среде.
- •Объектно-ориентированные стековые операции.
- •Объектно-ориентированные связанные списки.
- •Практическое задание.
- •Классы iostream.
- •Потоковый ввод-вывод.
- •Буферизованные потоки.
- •Строковые потоки.
- •Двоичные файлы.
- •Вычисления в интерактивном режиме.
- •Графика в системе matlab.
- •3. Программирование m-функций.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •4. Создание законченных приложений на основе графического интерфейса пользователя.
- •Глава 7. Дополнительные возможности системы matlab Объекты и классы. Переопределение операций.
- •Написание расширений matlab на языке c
- •Программные интерфейсы
- •Настройка среды для сборки проекта
- •Пример программы
- •Вызов команд среды matlab из mex-файла
-
Функции.
Функции являются основными компонентами при построении программ на языке С. Благодаря тому, что каждая функция представляет собой отдельный модуль, программа выглядит как модульная структура. Правильное проектирование функций в значительной степени определяет эффективность, читаемость и переносимость программного кода.
Определение функции.
В общем случае функция имеет следующий формат:
<возвращаемый тип> ИмяФункции ( параметры) {
//Здесь следует тело функции,
//состоящее из операторов }
Тип возвращаемого значения может быть одним из рассмотренных нами типов. Тип void означает, что функция не возвращает никакого значения. Кроме того, функция может возвращать и другие типы, например определенные пользователем. Если тип возвращаемого значения не указан, то по умолчанию он предполагается целочисленным (int).
В списке параметров указываются имя и тип для каждой переменной, элементы списка разделяются запятыми. Для функций, которые не используют параметров, может быть вставлено ключевое слово void на месте списка параметров.
Обратите внимание, что знак «точка с запятой» не ставится после списка параметров.
Прототипы функций.
Прежде, чем какая-либо функция будет использоваться в программе, она должна быть описана или определена. Описание (прототип функции) информирует компилятор о существовании функции, о типе параметров и типе возвращаемого значения. Оно имеет вид:
<возвращаемый тип> ИмяФункции ( параметры);
В конце списка параметров стоит знак «точка с запятой», это и указывает на то, что мы имеем дело не с описанием функции, а с ее прототипом.
Функции, которые не используют параметров, обычно описываются прототипом с ключевым словом void на месте списка параметров.
Вызов по значению и вызов по ссылке.
При вызове функции фактические имена параметров заменяют формальные имена, которые использовались при описании функции. Следовательно, совсем не обязательно использовать одинаковые имена при вызове и при описании.
Аргументы в функцию обычно передаются по значению, т.е. в функцию передается только копия текущего значения. Сама переменная в этом случае внутри функции не может быть изменена. Главным ограничением вызова по значению является то, что функция может возвращать только одно значение.
При вызове по ссылке в функцию передается адрес аргумента. В этом случае копирование аргумента не выполняется, что позволяет экономить память и время выполнения. Переменная, переданная по ссылке, может быть изменена внутри функции. Это позволяет создавать функции, которые возвращают более одного параметра. Для указания того, что передача параметра выполняется по ссылке, используется знак &, который ставится перед именем параметра. Если в функции не предполагается изменение этого параметра, то целесообразно перед типом параметра поставить ключевое слово const:
int add(const int &x, const int &y)
{
int z;
z=x+y;
return z;
}
Вычисление функций путем разложения в ряд.
В составе библиотеки С имеется большое число функций. Их прототипы записаны в соответствующие заголовочные файлы. Рассмотрим, как можно самостоятельно написать подобные функции на примере функции y=ex. Математические функции такого типа вычисляются путем разложения в степенной ряд , Для функции y=ex, . Вычисление очередного члена ряда обычно удобно выполнять рекуррентным способом: , . Вычисление прекращается по достижению требуемой точности. В результате получим следующую функцию:
double exp(double x)
{
double s,ak;
long k;
const double eps=1e-8;
ak=1.;
s=ak;
while(ak>eps)
{
ak=ak*x/k;
s=s+ak;
}
return s;
}