Язык Си в примерах/Библиотека complex
Внешний вид
- Компиляция программ
- Простейшая программа «Hello World»
- Учимся складывать
- Максимум
- Таблица умножения
- ASCII-коды символов
- Верхний регистр
- Скобочки
- Факториал
- Степень числа
- Треугольник Паскаля
- Корень уравнения
- Система счисления
- Сортировка
- Библиотека complex
- Сортировка на основе qsort
- RPN-калькулятор
- RPN-калькулятор на Bison
- Простая грамматика
- Задача «Расчёт сопротивления схемы»
- Простая реализация конечного автомата
- Использование аргументов командной строки
- Чтение и печать без использования stdio
- Декодирование звукозаписи в формате ADX
- Другие примеры
- XCC C
Создание библиотек. Библиотека для работы с комплексными числами.
[править]Создание библиотеки
[править]Библиотека у нас будет иметь два исходных файла: complex.h и complex.c
/*
complex.h
*/
typedef struct
{
double a,b;
} complex_t;
complex_t mul(complex_t x, complex_t y);
/*
complex.c
*/
#include "complex.h"
complex_t mul(complex_t x, complex_t y)
{
complex_t t;
t.a = x.a * y.a - x.b * y.b;
t.b = x.a * y.b + x.b * y.a;
return t;
}
Пример использования библиотеки
[править]Теперь несложно использовать эту библиотеку.
Для этого нужно:
- добавить в заголовок c/cpp-файла строчку #include "complex.h" ;
- сделать так, чтобы компилятор находил complex.h ;
- сделать так, чтобы сборщик (linker) находил файл библиотеки complex .
/*
test_complex.c
*/
#include <stdio.h>
#include "complex.h"
int main()
{
complex_t x = {1,2};
complex_t y = {3,4};
complex_t z = mul(x,y);
printf ("z = (%lf, %lf)\n", z.a, z.b );
return 0;
}
Создание и использование библиотек в GNU C
[править]Подключение библиотеки в виде исходников
[править]Есть простой способ подключения библиотеки функций прямо в виде исходников:
$ gcc test_complex.c complex.c -o test_complex
В итоге получается запускаемый файл test_complex.
Подключение библиотеки в виде динамически загружаемой библиотеки
[править]$ gcc -shared complex.c -o libcomplex.so # создание динамически загружаемой библиотеки $ gcc test_complex.c -L. -lcomplex -o test_complex # компиляция тестовой программы $ export LD_LIBRARY_PATH=.; ./test_complex # запуск тестовой программы
- Есть ряд стандартных путей (), где система ищет динамически загружаемые библиотеки. Текущая директория по умолчанию не является таким местом, поэтому мы явно указываем, что библиотеки могут лежать также и в текущей директории.
Переменная LD_LIBRARY_PATH содержит дополнительный список путей (разделённых двоеточием), где система будет искать библиотеки. - Расширение .so соответствует shared objects, то есть библиотека объектов общего доступа.
Подключение библиотеки в виде статически загружаемой библиотеки
[править]Для компилятора Gnu C команды создания статически подключаемой библиотеки и подключения её к проекту выглядят следующим образом
$ gcc -с complex.c -o libcomplex.a # создание статически подключаемой библиотеки $ gcc test_complex.c -L. -lcomplex -o test_complex # компиляция тестовой программы $ ./test_complex # запуск тестовой программы
Задачи
[править]- Напишите расширенную версию библиотеки функций для работы с комплексными числами. Реализуйте операции сложения, вычитания, умножения и деления, а также функции, вычисляющие аргумент и модуль комплексного числа. Реализуйте функции комплексного аргумента sinc, cosc, expc, logc, asinc , acosc. Чему равен арккосинус двух (acosc(2) = ?) ? Напишите программу, тестирующую вашу библиотеку.
- Напишите библиотеку функций по теме "аналитическая геометрия"
- Решать задачи на плоскости
- вычислять расстояние для пар (точка, точка), (точка, прямая)
- находить площадь многоугольника
- проверять, пересекаются ли две прямые и находить точку их пересечения
- проверять, пересекаются ли два отрезка и находить точку их пересечения
- Решать задачи в пространстве
- вычислять расстояние для пар (точка, точка), (точка, прямая), (прямая, прямая), (точка, плоскость)
- находить точку пересечения трёх попарно непараллельных плоскостей
- находить объем тетраэдра
- Решать задачи на плоскости