下面这个多项式相加相乘的程序有关问题出在哪里了
下面这个多项式相加相乘的程序问题出在哪里了?
最后程序的运行结果成了这个样子了:

------解决思路----------------------
第46行 scanf("%d", &high_power);
改成 : scanf("%d", &pol->HighPower);
理由。。一眼就能看出来了吧==
还有你没考虑常数项是X的0次方。直接从X的1次方考虑的。
// 使用数组存储多项式的系数,进行多项式的加减乘运算
// 针对的是非负数次幂的多项式
#include<stdio.h>
#include<stdlib.h>
// 多项式的结构类型
#define MaxDegree 20 // 可能的多项式最高次数
typedef struct Pol_Node
{
int CoeffArray[MaxDegree + 1]; // 多项式的系数数组
int HighPower; // 实际的多项式的最高次数
} Pol_Node, *Polynomial;
// 多项式的置空操作(为后续操作埋下伏笔)
void Empty_Poly(Polynomial pol)
{
int i;
// 首先将多项式的系数数组全部清零(方便后面的两个多项式的相加)
for (i = 0; i < MaxDegree; ++i)
pol->CoeffArray[i] = 0;
// 将最高次数清零
pol->HighPower = 0;
}
// 多项式的初始化
void Init_Polynomial(Polynomial pol)
{
printf("由低次幂到高次幂依次输入多项式的系数:\n");
int coe, i; // 定义存放多项式系数的变量 coe 和累加变量 i
i = 0;
while(scanf("%d", &coe)) { // 依次输入系数直到全部的系数都已输入或者系数数组已满
pol->CoeffArray[i] = coe;
if (i == MaxDegree) {
printf("数组已满!\n");
break; // 输出提示信息并且跳出循环
}
else
++i;
}
getchar(); // 屏蔽换行符
// 接着输入多项式的最高次数
printf("这个多项式的最高次数为:\n");
int high_power;
scanf("%d", &high_power);
}
// 比较两个多项式的最高次数并返回较大的那个
int Max_Power(Polynomial pol1, Polynomial pol2)
{
if (pol1->HighPower > pol2->HighPower)
return pol1->HighPower;
else
return pol2->HighPower;
}
// 两个多项式相加
Polynomial Sum_Poly(Polynomial pol1, Polynomial pol2)
{
// 定义一个多项式来存放两个多项式相加后的和
Polynomial sum_poly;
sum_poly = (Polynomial)malloc(sizeof(Pol_Node));
Empty_Poly(sum_poly); // 将 sum_poly 置空
// 两个多项式相加的具体过程
int max, i;
max = Max_Power(pol1, pol2); // 存放两个多项式次数的最大值
for (i = 0; i < max; ++i)
sum_poly->CoeffArray[i] = pol1->CoeffArray[i] + pol2->CoeffArray[i]; // 合并同类项的过程
sum_poly->HighPower = max; // 将两个多项式次数的最大值赋给和的多项式
return sum_poly; // 返回和的多项式
}
// 打印多项式
void Print_Poly(Polynomial pol)
{
int i;
for (i = 0; i < pol->HighPower; ++i) // 由低次到高次依次打印这个多项式的次数
printf("%d ", pol->CoeffArray[i]);
printf("\n");
printf("%d\n", pol->HighPower); // 打印多项式的最高次数
}
// 两个多项式相乘
Polynomial Mul_Poly(Polynomial pol1, Polynomial pol2)
{
// 首先检测系数数组能否容纳相乘后得到的多项式
if (pol1->HighPower + pol2->HighPower > MaxDegree) {
printf("超出系数数组承受范围,相乘操作无法运行!\n");
exit(1);
}
// 定义一个多项式结构来存放相乘后得到的多项式
Polynomial mul_poly;
mul_poly = (Polynomial)malloc(sizeof(Pol_Node));
Empty_Poly(mul_poly); // 将这个多项式结构置空
// 相乘的具体操作
int i, j;
for (i = 0; i < pol1->HighPower; ++i) // 系数相乘,次数相加,同时合并了同类项
for (j = 0; j < pol2->HighPower; ++j)
mul_poly->CoeffArray[i + j] += pol1->CoeffArray[i] * pol2->CoeffArray[j];
mul_poly->HighPower = pol1->HighPower + pol2->HighPower; // 两多项式的最高次数相加得到乘积的最高次数
return mul_poly;
}
int main()
{
Polynomial pol1, pol2; // 声明两个多项式
// 分别为两个多项式分配存储空间
pol1 = (Polynomial)malloc(sizeof(Pol_Node));
pol2 = (Polynomial)malloc(sizeof(Pol_Node));
// 分别将这两个多项式置空
Empty_Poly(pol1);
Empty_Poly(pol2);
// 对这两个多项式进行初始化
Init_Polynomial(pol1);
Init_Polynomial(pol2);
// 对这两个多项式相加的结果进行输出
printf("和多项式的系数序列和最高次数分别为:\n");
Print_Poly(Sum_Poly(pol1, pol2));
// 对这两个多项式相乘的结果进行输出
printf("积多项式的系数序列和最高次数为:\n");
Print_Poly(Mul_Poly(pol1, pol2));
return 0;
}
最后程序的运行结果成了这个样子了:
------解决思路----------------------
第46行 scanf("%d", &high_power);
改成 : scanf("%d", &pol->HighPower);
理由。。一眼就能看出来了吧==
还有你没考虑常数项是X的0次方。直接从X的1次方考虑的。