按照升幂排列的一元多项式P n (x)=p 1 x+p 2 x 2 +⋯+p n x n 可以用线性表来表示P=(p 1 ,p 2 ,...,p n ),对于一元多项式各种操作,实际上可以利用线性表来处理。若多项式的非零项指数很高并且非零项很少称之为稀疏多项式,此时使用链式存储结构较为方便。设计一个程序,实现一元稀疏多项式简单计算器。基本要求 稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,p 1 ,e 1 ,p 2 ,e 2 ...,p n ,e n ,其中n是多项式的项数,p i 和e i 分别是第i项的系数和指数,序列按指数升幂排列; (3) 多项式a和b相加,建立多项式a+b; (4) 计算多项式在x处的值。使用C语言
时间: 2024-03-22 09:40:28 浏览: 94
用C语言设计并实现一个一元稀疏多项式的简单计算器
5星 · 资源好评率100%
实现一个一元稀疏多项式简单计算器的程序可以分为以下几个步骤:
1. 定义结构体表示多项式的每一项,并定义链式存储结构。
```
typedef struct PolyNode *PtrToNode;
struct PolyNode {
int coef; // 系数
int expon; // 指数
PtrToNode next; // 指向下一项的指针
};
typedef PtrToNode Polynomial;
```
2. 实现函数输入并建立多项式。可以使用链表的插入操作,按照指数从小到大的顺序插入每一项。
```
Polynomial ReadPoly() {
Polynomial P, rear, t;
int c, e;
P = (Polynomial)malloc(sizeof(struct PolyNode));
P->next = NULL;
rear = P;
scanf("%d", &c);
scanf("%d", &e);
while(e != -1) {
t = (Polynomial)malloc(sizeof(struct PolyNode));
t->coef = c;
t->expon = e;
t->next = NULL;
rear->next = t;
rear = t;
scanf("%d", &c);
scanf("%d", &e);
}
return P;
}
```
3. 实现函数输出多项式,在链表中遍历每一项,按照指数从小到大的顺序输出系数和指数。
```
void PrintPoly(Polynomial P) {
if(!P->next) {
printf("0 0\n");
return;
}
printf("%d ", Length(P));
P = P->next;
while(P) {
printf("%d %d", P->coef, P->expon);
P = P->next;
if(P) printf(" ");
}
printf("\n");
}
```
4. 实现函数多项式相加,可以使用链表的归并操作,按照指数从小到大的顺序合并两个多项式。
```
Polynomial Add(Polynomial P1, Polynomial P2) {
Polynomial front, rear, temp;
int sum;
front = (Polynomial)malloc(sizeof(struct PolyNode));
rear = front;
while(P1 && P2) {
if(P1->expon > P2->expon) {
rear->next = P1;
rear = P1;
P1 = P1->next;
} else if(P1->expon < P2->expon) {
rear->next = P2;
rear = P2;
P2 = P2->next;
} else {
sum = P1->coef + P2->coef;
if(sum) {
temp = (Polynomial)malloc(sizeof(struct PolyNode));
temp->coef = sum;
temp->expon = P1->expon;
rear->next = temp;
rear = temp;
}
P1 = P1->next;
P2 = P2->next;
}
}
for(; P1; P1 = P1->next) {
rear->next = P1;
rear = P1;
}
for(; P2; P2 = P2->next) {
rear->next = P2;
rear = P2;
}
rear->next = NULL;
temp = front;
front = front->next;
free(temp);
return front;
}
```
5. 实现函数计算多项式在x处的值,使用指数与系数的积累加即可。
```
int Calc(Polynomial P, int x) {
int sum = 0;
while(P) {
sum += P->coef * pow(x, P->expon);
P = P->next;
}
return sum;
}
```
完整代码如下:
阅读全文