下面这个多项式相加相乘的程序有关问题出在哪里了

下面这个多项式相加相乘的程序问题出在哪里了?
// 使用数组存储多项式的系数,进行多项式的加减乘运算
// 针对的是非负数次幂的多项式

#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次方考虑的。