用c语言写一元多项式的运算的算法
时间: 2023-05-24 13:06:51 浏览: 151
#include <stdio.h>
#include <stdlib.h>
// 定义多项式结构体
typedef struct {
float coef; // 系数
int exp; // 指数
} POLYNOMIAL;
// 定义链表结构体
typedef struct NODE {
POLYNOMIAL data; // 数据
struct NODE *next; // 下一结点指针
} NODE, *LIST;
// 初始化多项式
LIST initPoly() {
LIST head = (LIST)malloc(sizeof(NODE)); // 创建头结点
head->next = NULL;
return head;
}
// 插入多项式
void insertPoly(LIST list, float coef, int exp) {
LIST node = (LIST)malloc(sizeof(NODE));
node->data.coef = coef;
node->data.exp = exp;
LIST p = list;
while (p->next && p->next->data.exp >= exp) {
p = p->next;
}
node->next = p->next;
p->next = node;
}
// 初始化多项式
LIST initPoly() {
LIST head = (LIST)malloc(sizeof(NODE)); // 创建头结点
head->next = NULL; // 头结点的指针域为空指针
// 输入多项式
int term; // 项数
printf("请输入多项式的项数:");
scanf("%d", &term);
for (int i = 0; i < term; i++) {
float coef; // 系数
int exp; // 指数
printf("请输入第 %d 项的系数和指数:", i+1);
scanf("%f%d", &coef, &exp);
insertPoly(head, coef, exp); // 插入多项式
}
return head;
}
// 显示多项式
void displayPoly(LIST list) {
LIST p = list->next; // 头结点的下一结点是第一项
while (p) {
printf("%.1fx^%d + ", p->data.coef, p->data.exp); // 输出一项
p = p->next; // 指向下一项
}
printf("0\n"); // 输出最后的常数项
}
// 相加多项式
LIST addPoly(LIST poly1, LIST poly2) {
LIST result = initPoly(); // 创建结果多项式
LIST p1 = poly1->next; // 第一个多项式从第一项开始
LIST p2 = poly2->next; // 第二个多项式从第一项开始
while (p1 && p2) { // 如果两个多项式都有项
if (p1->data.exp == p2->data.exp) { // 如果两个多项式指数相同
insertPoly(result, p1->data.coef + p2->data.coef, p1->data.exp); // 插入结果多项式
p1 = p1->next;
p2 = p2->next;
} else if (p1->data.exp > p2->data.exp) { // 如果第一个多项式指数较大
insertPoly(result, p1->data.coef, p1->data.exp); // 插入结果多项式
p1 = p1->next;
} else { // 如果第二个多项式指数较大
insertPoly(result, p2->data.coef, p2->data.exp); // 插入结果多项式
p2 = p2->next;
}
}
// 把剩余项插入结果多项式中
while (p1) {
insertPoly(result, p1->data.coef, p1->data.exp);
p1 = p1->next;
}
while (p2) {
insertPoly(result, p2->data.coef, p2->data.exp);
p2 = p2->next;
}
return result;
}
int main() {
printf("多项式加法运算\n");
printf("请输入第一个多项式:\n");
LIST poly1 = initPoly(); // 初始化第一个多项式
displayPoly(poly1); // 显示第一个多项式
printf("请输入第二个多项式:\n");
LIST poly2 = initPoly(); // 初始化第二个多项式
displayPoly(poly2); // 显示第二个多项式
printf("两个多项式相加的结果为:\n");
LIST result = addPoly(poly1, poly2); // 相加两个多项式
displayPoly(result); // 显示结果多项式
return 0;
}
阅读全文