问题描述 按照升幂排列的一元多项式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) 多项式a和c相减,建立多项式a-b; (5) 计算多项式在x处的值。使用C语言写
时间: 2024-03-14 07:48:31 浏览: 37
以下是一元稀疏多项式简单计算器的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义多项式项的结构体
typedef struct PolyNode {
int coef; // 系数
int expo; // 指数
struct PolyNode* next; // 指向下一项的指针
} PolyNode, *Polynomial;
// 函数声明
Polynomial createPoly();
void printPoly(Polynomial P);
Polynomial addPoly(Polynomial P1, Polynomial P2);
Polynomial subPoly(Polynomial P1, Polynomial P2);
int calcPoly(Polynomial P, int x);
int main() {
// 输入并建立多项式
printf("请输入第一个多项式(按指数降幂输入,输入-1结束):");
Polynomial P1 = createPoly();
printf("第一个多项式为:");
printPoly(P1);
printf("请输入第二个多项式(按指数降幂输入,输入-1结束):");
Polynomial P2 = createPoly();
printf("第二个多项式为:");
printPoly(P2);
// 多项式相加
Polynomial P_add = addPoly(P1, P2);
printf("两个多项式相加的结果为:");
printPoly(P_add);
// 多项式相减
Polynomial P_sub = subPoly(P1, P2);
printf("第一个多项式减去第二个多项式的结果为:");
printPoly(P_sub);
// 计算多项式在x处的值
int x;
printf("请输入x的值:");
scanf("%d", &x);
int result = calcPoly(P1, x);
printf("第一个多项式在x=%d处的值为:%d\n", x, result);
return 0;
}
// 创建多项式
Polynomial createPoly() {
Polynomial P = (Polynomial)malloc(sizeof(PolyNode)); // 头结点
P->next = NULL;
Polynomial Rear = P;
int c, e;
scanf("%d %d", &c, &e);
while (e != -1) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = c;
newNode->expo = e;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
scanf("%d %d", &c, &e);
}
return P;
}
// 输出多项式
void printPoly(Polynomial P) {
if (P->next == NULL) {
printf("0\n");
return;
}
int flag = 0;
while (P->next != NULL) {
P = P->next;
if (P->coef > 0 && flag != 0) {
printf("+");
}
if (P->coef != 1 && P->coef != -1) {
printf("%d", P->coef);
} else if (P->expo == 0) {
printf("%d", P->coef);
} else if (P->coef == -1) {
printf("-");
}
if (P->expo == 0) {
flag = 1;
continue;
} else if (P->expo == 1) {
printf("x");
} else {
printf("x^%d", P->expo);
}
flag = 1;
}
printf("\n");
}
// 多项式相加
Polynomial addPoly(Polynomial P1, Polynomial P2) {
Polynomial P = (Polynomial)malloc(sizeof(PolyNode)); // 头结点
P->next = NULL;
Polynomial Rear = P;
Polynomial p1 = P1->next;
Polynomial p2 = P2->next;
while (p1 != NULL && p2 != NULL) {
if (p1->expo > p2->expo) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = p1->coef;
newNode->expo = p1->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
p1 = p1->next;
} else if (p1->expo < p2->expo) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = p2->coef;
newNode->expo = p2->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
p2 = p2->next;
} else {
int sum = p1->coef + p2->coef;
if (sum != 0) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = sum;
newNode->expo = p1->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = p1->coef;
newNode->expo = p1->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
p1 = p1->next;
}
while (p2 != NULL) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = p2->coef;
newNode->expo = p2->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
p2 = p2->next;
}
return P;
}
// 多项式相减
Polynomial subPoly(Polynomial P1, Polynomial P2) {
Polynomial P = (Polynomial)malloc(sizeof(PolyNode)); // 头结点
P->next = NULL;
Polynomial Rear = P;
Polynomial p1 = P1->next;
Polynomial p2 = P2->next;
while (p1 != NULL && p2 != NULL) {
if (p1->expo > p2->expo) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = p1->coef;
newNode->expo = p1->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
p1 = p1->next;
} else if (p1->expo < p2->expo) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = -p2->coef;
newNode->expo = p2->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
p2 = p2->next;
} else {
int diff = p1->coef - p2->coef;
if (diff != 0) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = diff;
newNode->expo = p1->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
}
p1 = p1->next;
p2 = p2->next;
}
}
while (p1 != NULL) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = p1->coef;
newNode->expo = p1->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
p1 = p1->next;
}
while (p2 != NULL) {
Polynomial newNode = (Polynomial)malloc(sizeof(PolyNode));
newNode->coef = -p2->coef;
newNode->expo = p2->expo;
newNode->next = NULL;
Rear->next = newNode;
Rear = newNode;
p2 = p2->next;
}
return P;
}
// 计算多项式在x处的值
int calcPoly(Polynomial P, int x) {
int result = 0;
while (P->next != NULL) {
P = P->next;
result += P->coef * pow(x, P->expo);
}
return result;
}
```
代码中使用了链式存储结构来表示多项式,分别实现了创建多项式、输出多项式、多项式相加、多项式相减和计算多项式在x处的值的功能。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)