题目:
请问是哪有问题 救命 我真的好菜
#include<stdio.h>
#define MaxSize 100
typedef struct data {
int coe;//系数
int exp;//指数
}DATA;
typedef struct poly {
DATA d[MaxSize];
int length;
}POLY;
//初始化一元多项式(空表)
void InitPoly(POLY* p)
{
p = (POLY*)malloc(sizeof(POLY));
p->length = 0;
}
//销毁一元多项式
void DesPoly(POLY* p)
{
free(p);
}
//输入一元多项式以输入0 0结束
void InputPoly(POLY* p) {
int i = 0;
printf("请输入一元多项式,以0 0结束:\n");
//InitPoly(p); //申请线性表空间
scanf("%s", &p);
if ((p->d[i - 1].exp != 0) || (p->d[i - 1].coe != 0))
{
p->d[i].exp;
p->d[i].coe;
i++;
} //注意:这里需要用或,而不是与,只要系数和指数有一个不等于0,就要循环
else
p->length = i - 1; //注意:这里长度需要减1,因为最后输入的0 0不是一元多项式的项
}
//打印输出一元多项式
void DisplayPoly(POLY* p)
{
for (int i = 0; i < p->length; i++)
{
printf("%s", p->d[i].exp);
printf("\t");
printf("%s", p->d[i].coe);
printf("\t\t\n");
}
}
//加法一,结果存在e中
void Add1(POLY* p, POLY* q, POLY* e)
{
int i = 0, j = 0, k = 0;
//InitPoly(e); //首先要申请空间,以存储相加后的结果
while (i < p->length && j < q->length) {
if (p->d[i].exp == q->d[j].exp)
{ //如果指数相等,系数相加
e->d[k].coe = p->d[i].coe + q->d[j].coe;
e->d[k].exp = p->d[i].exp;
if (e->d[k].coe != 0) //如果系数不等于0,此项才保留
k++;
i++;
j++;
}
else if (p->d[i].exp < q->d[j].exp) { //如果p表当前指数小,则将该项存入结果e中,i和k向前移动
e->d[k].coe = p->d[i].coe;
e->d[k].exp = p->d[i].exp;
i++;
k++;
}
else { //如果q表当前指数小,则将该项存入结果e中,j和k向前移动
e->d[k].coe = q->d[j].coe;
e->d[k].exp = q->d[j].exp;
j++;
k++;
}
}
while (i < p->length) { //如果p表还没有结束,则将余下的项依次存入结果e中
e->d[k].coe = p->d[i].coe;
e->d[k].exp = p->d[i].exp;
i++;
k++;
}
while (j < q->length) { //如果p表还没有结束,则将余下的项依次存入结果e中
e->d[k].coe = q->d[j].coe;
e->d[k].exp = q->d[j].exp;
j++;
k++;
}
e->length = k;
}
//加法二,结果使用被加数q存储,相当于q=p+q
void Add2(POLY* p, POLY* q)
{
int i = 0, j = 0, k = 0;
while (i < p->length && j < q->length)
{
if (p->d[i].exp == q->d[j].exp) //指数相等,系数相加,若想加后系数为0,在q中删除该项,p表前移一项
{
q->d[j].coe += p->d[i].coe;
i++;
if (q->d[j].coe == 0)
{
for (k = j; k < q->length - 1; k++) //依次前移,去除掉q的当前项
{
q->d[k].coe = q->d[k + 1].coe;
q->d[k].exp = q->d[k + 1].exp;
}
q->length--;
}
else j++;
}
else if (p->d[i].exp < q->d[j].exp) //p的指数小于q的指数,将p的当前项插入到q中,p、q表都前移一项
{
for (k = q->length - 1; k >= j; k--)
{
q->d[k + 1].coe = q->d[k].coe;
q->d[k + 1].exp = q->d[k].exp;
}
q->d[j].coe = p->d[i].coe;
q->d[j].exp = p->d[i].exp;
i++; j++;
q->length++;
}
else j++; //q的指数大于p的指数,q表前移一项
}
while (i < p->length)
{
q->d[j].coe = p->d[i].coe;
q->d[j++].exp = p->d[i++].exp;
q->length++;
}
}
//相乘
void MultiPoly(POLY* a, POLY* b, POLY* c)
{
int i, j, k;
POLY* d; //临时存储中间结果
InitPoly(d);
for (i = 0; i < a->length; i++)
{
for (j = 0; j < b->length; j++)
{
d->d[j].exp = a->d[i].exp + b->d[j].exp;
d->d[j].coe = a->d[i].coe * b->d[j].coe;
}
d->length = j;
Add2(d, c);
}
DesPoly(d);
}
//测试主程序:
int main() {
POLY* a = NULL, * b = NULL, * add_res = NULL, * mul_res = NULL;
InitPoly(a);
InitPoly(b);
InitPoly(add_res);
InitPoly(mul_res);
InputPoly(a);
InputPoly(b);
printf("a+b=");
Add1(a, b, add_res);
DisplayPoly(add_res);
printf("a*b=");
MultiPoly(a, b, mul_res);
DisplayPoly(mul_res);
DesPoly(a);
DesPoly(b);
DesPoly(add_res);
DesPoly(mul_res);
}
调试结果