C语言数据结构一元多项式计算器
时间: 2023-07-07 07:29:02 浏览: 212
3,c语言简单图形源码,c语言项目
好的,下面是一个用 C 语言实现的一元多项式计算器的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
// 定义多项式结构体
typedef struct poly_t {
int degree;
int *coeffs;
} poly;
// 创建多项式
poly *create_poly(int degree) {
poly *p = (poly*) malloc(sizeof(poly));
p->degree = degree;
p->coeffs = (int*) calloc(degree+1, sizeof(int));
return p;
}
// 读取多项式
poly *read_poly() {
char buf[1024];
printf("请输入多项式的最高次数:");
fgets(buf, 1024, stdin);
int degree = atoi(buf);
poly *p = create_poly(degree);
printf("请输入多项式的系数(从高到低):");
fgets(buf, 1024, stdin);
char *token = strtok(buf, " ");
for (int i = degree; i >= 0 && token != NULL; i--, token = strtok(NULL, " ")) {
p->coeffs[i] = atoi(token);
}
return p;
}
// 打印多项式
void print_poly(poly *p) {
bool first = true;
for (int i = p->degree; i >= 0; i--) {
if (p->coeffs[i] != 0) {
if (!first) {
printf("%c ", p->coeffs[i] > 0 ? '+' : '-');
}
if (abs(p->coeffs[i]) != 1 || i == 0) {
printf("%d", abs(p->coeffs[i]));
}
if (i > 0) {
printf("x");
}
if (i > 1) {
printf("^%d", i);
}
first = false;
}
}
if (first) {
printf("0");
}
printf("\n");
}
// 多项式相加
poly *add_poly(poly *p1, poly *p2) {
int degree = p1->degree > p2->degree ? p1->degree : p2->degree;
poly *p = create_poly(degree);
for (int i = 0; i <= degree; i++) {
p->coeffs[i] = (i <= p1->degree ? p1->coeffs[i] : 0) + (i <= p2->degree ? p2->coeffs[i] : 0);
}
return p;
}
// 多项式相减
poly *sub_poly(poly *p1, poly *p2) {
int degree = p1->degree > p2->degree ? p1->degree : p2->degree;
poly *p = create_poly(degree);
for (int i = 0; i <= degree; i++) {
p->coeffs[i] = (i <= p1->degree ? p1->coeffs[i] : 0) - (i <= p2->degree ? p2->coeffs[i] : 0);
}
return p;
}
// 多项式相乘
poly *mul_poly(poly *p1, poly *p2) {
int degree = p1->degree + p2->degree;
poly *p = create_poly(degree);
for (int i = 0; i <= p1->degree; i++) {
for (int j = 0; j <= p2->degree; j++) {
p->coeffs[i+j] += p1->coeffs[i] * p2->coeffs[j];
}
}
return p;
}
// 多项式求导
poly *derivative_poly(poly *p) {
if (p->degree == 0) {
return create_poly(0);
}
poly *q = create_poly(p->degree-1);
for (int i = 1; i <= p->degree; i++) {
q->coeffs[i-1] = i * p->coeffs[i];
}
return q;
}
// 多项式积分
poly *integral_poly(poly *p, int constant) {
poly *q = create_poly(p->degree+1);
q->coeffs[0] = constant;
for (int i = 0; i <= p->degree; i++) {
q->coeffs[i+1] = p->coeffs[i] / (i+1);
}
return q;
}
// 释放多项式内存
void free_poly(poly *p) {
free(p->coeffs);
free(p);
}
int main() {
printf("欢迎使用一元多项式计算器!\n");
printf("请输入第一个多项式:\n");
poly *p1 = read_poly();
printf("第一个多项式为:");
print_poly(p1);
printf("请输入第二个多项式:\n");
poly *p2 = read_poly();
printf("第二个多项式为:");
print_poly(p2);
printf("两个多项式的和为:");
print_poly(add_poly(p1, p2));
printf("两个多项式的差为:");
print_poly(sub_poly(p1, p2));
printf("两个多项式的积为:");
print_poly(mul_poly(p1, p2));
printf("第一个多项式的导数为:");
print_poly(derivative_poly(p1));
printf("第二个多项式的积分为:");
print_poly(integral_poly(p2, 0));
free_poly(p1);
free_poly(p2);
return 0;
}
```
这个代码实现了多项式的基本运算,并提供了读取、打印多项式的函数,以及释放多项式内存的函数。你可以通过在 `main()` 函数中调用这些函数来创建多项式对象,然后对它们进行加、减、乘、求导和积分等操作。例如:
```
欢迎使用一元多项式计算器!
请输入第一个多项式:
请输入多项式的最高次数:3
请输入多项式的系数(从高到低):2 3 -4 5
第一个多项式为:2x^3 + 3x^2 - 4x + 5
请输入第二个多项式:
请输入多项式的最高次数:2
请输入多项式的系数(从高到低):1 4 -1
第二个多项式为:x^2 + 4x - 1
两个多项式的和为:2x^3 + 4x^2 + 1x + 4
两个多项式的差为:2x^3 + 2x^2 - 8x + 6
两个多项式的积为:2x^5 + 11x^4 - 9x^3 - 7x^2 + 17x - 5
第一个多项式的导数为:6x^2 + 6x - 4
第二个多项式的积分为:0x^3 + 1x^2 + 4x^1 - 1x^0
```
希望这个示例代码能够帮助你实现一个 C 语言的一元多项式计算器。
阅读全文