一元多项式采用带表头结点的单链表存放,用类C语言设计算法求一元多项式的值。
时间: 2023-05-25 19:05:18 浏览: 154
算法思路:
1. 定义结构体表示节点,包含系数和指数;
2. 定义一个表头节点,存储多项式的项数和指向第一个节点的指针;
3. 定义读入多项式的函数,实现多项式的建立;
4. 定义求值函数,输入x值计算多项式的值;
5. 测试程序,调用读入函数和求值函数输出结果。
算法实现:
```
#include <stdio.h>
#include <stdlib.h>
// 定义多项式节点结构体
typedef struct PolyNode {
float coef; // 系数
int expn; // 指数
struct PolyNode *next; // 指向下一个节点的指针
} PolyNode, *Polynomial;
// 定义表头结构体
typedef struct {
int len; // 多项式项数
Polynomial head; // 指向第一个节点的指针
} PolyList;
// 读入多项式
void createPoly(PolyList *P) {
int n;
float c;
int e;
Polynomial p, q;
printf("请输入多项式的项数: ");
scanf("%d", &n);
P->len = n;
P->head = (Polynomial)malloc(sizeof(PolyNode)); // 创建表头节点
P->head->next = NULL;
p = P->head;
// 依次读入每一项
for(int i = 0; i < n; i++) {
printf("请输入第%d项的系数和指数: ", i+1);
scanf("%f%d", &c, &e);
q = (Polynomial)malloc(sizeof(PolyNode)); // 创建新节点
q->coef = c;
q->expn = e;
p->next = q; // 新节点插入到表尾
p = q;
}
p->next = NULL; // 表尾指针置为NULL
}
// 求多项式的值
float evaluatePoly(PolyList *P, float x) {
float result = 0;
Polynomial p = P->head->next;
// 遍历多项式
while(p != NULL) {
result += p->coef * pow(x, p->expn); // 计算每一项的结果并累加
p = p->next;
}
return result;
}
int main() {
PolyList P;
float x, result;
createPoly(&P); // 读入多项式
printf("请输入x值:");
scanf("%f", &x);
result = evaluatePoly(&P, x); // 求多项式的值
printf("多项式的值为:%.2f\n", result);
return 0;
}
```
测试样例:
```
请输入多项式的项数: 3
请输入第1项的系数和指数: 2 2
请输入第2项的系数和指数: 3 1
请输入第3项的系数和指数: 4 0
请输入x值:1
多项式的值为:9.00
```
阅读全文