写一个一元稀疏多项式计算器
时间: 2024-10-10 15:08:33 浏览: 50
要编写一个一元稀疏多项式的计算器,首先我们需要定义一个数据结构来存储稀疏多项式的系数和对应项的索引。由于是稀疏多项式,大部分项可能是0,所以存储时可以只保留非零项。
以下是一个简单的C语言实现,使用`struct`来表示稀疏项:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义稀疏多项式项的数据结构
typedef struct {
int index; // 项的指数
double value; // 项的系数
} SparseTerm;
// 存储稀疏多项式的链表
typedef struct {
SparseTerm* terms;
size_t count;
} SparsePolynomial;
// 初始化一个空的稀疏多项式
SparsePolynomial* sparse_polynomial_init() {
SparsePolynomial* poly = (SparsePolynomial*)malloc(sizeof(SparsePolynomial));
poly->terms = NULL;
poly->count = 0;
return poly;
}
// 添加一个项到多项式
void add_term(SparsePolynomial* poly, int index, double value) {
if (poly->count == 0 || index > poly->terms[poly->count - 1].index) {
// 如果列表为空或新项的指数大于当前最大指数,追加空间
SparseTerm* new_term = (SparseTerm*)realloc(poly->terms, sizeof(SparseTerm) * (poly->count + 1));
if (!new_term) {
printf("Memory allocation failed.\n");
exit(1);
}
poly->terms = new_term;
}
// 将新项添加到链表尾部
poly->terms[poly->count] = (SparseTerm){index, value};
poly->count++;
}
// 计算多项式值
double evaluate(SparsePolynomial* poly, double x) {
double result = 0;
for (size_t i = 0; i < poly->count; i++) {
result += poly->terms[i].value * pow(x, poly->terms[i].index);
}
return result;
}
// 示例用法
int main() {
SparsePolynomial* poly = sparse_polynomial_init();
add_term(poly, 2, 5); // 5x^2
add_term(poly, 0, 1); // 1
add_term(poly, 3, 3); // 3x^3
double x_value = 2.0;
double result = evaluate(poly, x_value);
printf("The value of the polynomial at %lf is %lf.\n", x_value, result);
free(poly->terms);
free(poly);
return 0;
}
```
这个程序创建了一个稀疏多项式链表,支持添加项和计算给定点的值。你可以根据需求扩展这个基础版本,例如添加删除项的功能。
阅读全文