关于2个多项式相加的问题
程序代码:#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<conio.h>
#define POLYLENTH sizeof(poly)
typedef struct poly
{
int coeff; //多项式因子的系数
int power; //多项式因子的幂
poly *next;
}poly;
poly *creatpoly() //创建多项式
{
poly *p=NULL,*pre=NULL,*head=NULL;
int i_coeff=0,i_power=0;
char c_case='t';
pre=(poly *)malloc(POLYLENTH); //创建链头
if(!pre)
{
printf("cannot creat the poly");
getch();
exit(1);
}
head=pre;
while(c_case!='q') //输入多项式因子的内容
{
printf("请输入多项式因子的系数:\n");
scanf("%d\n",&i_coeff);
printf("请输入多项式因子的幂:\n");
scanf("%d\n",&i_power);
p=(poly *)malloc(POLYLENTH);
if(!p)
{
printf("cannot creat the poly");
getch();
exit(1);
}
p->coeff=i_coeff;
p->power=i_power;
pre->next=p;
pre=p;
printf("是否要继续输入该多项式:否按q,是按其他任意键。");
scanf("%c\n",&c_case);
}
p->next=NULL;
return head;
}
poly *del_poly(poly *p_a,poly *p_b,poly *factor_a,poly *pre_a)
{
if(p_a==factor_a)
{
factor_a=p_a->next;
}
else
{
pre_a->next=p_a->next;
}
return factor_a;
}
void trail_insert(poly *p_a,poly *p_b)
{
p_b=p_a->next;
p_a->next=p_b;
}
void head_insert(poly *pre_a,poly *p_a,poly *p_b)
{
p_b->next=p_a;
pre_a->next=p_b;
}
poly *poly_add(poly *factor_a,poly *factor_b) //两个多项式相加//
{
poly *p=NULL;
poly *p_a=factor_a;
poly *p_b=factor_b;
poly *pre_a=NULL; //用来存储当前操作点的前驱
poly *t_b=NULL; //用来在进行尾插法是暂时放下一个p_b的中间变量
while(p_a) //第一个多项式的各个因子没处理完时//
{
if(p_a->power==p_b->power)
{
if(p_a->coeff=-p_b->coeff)
{
factor_a=del_poly(p_a,p_b,factor_a,pre_a);
p_a=factor_a;
}
else
{
p_a->coeff+=p_b->coeff;
p_a=p_a->next;
if(p_a!=factor_a)
{
pre_a=p_a;
}
}
p_b=p_b->next;
}
else if(p_a->power<p_b->power)
{
t_b=p_b->next;
trail_insert(p_a,p_b); //尾插法
p_b=t_b;
if(p_a!=factor_a)
{
pre_a=p_a;
}
p_a=p_b->next;
}
else
{
t_b=p_b->next;
if(p_a!=factor_a)
{
pre_a=p_a;
}
head_insert(pre_a,p_a,p_b); //头插法
p_b=t_b;
if(p_a!=factor_a)
{
pre_a=p_a;
}
p_a=p_a->next;
}
}
if(p_b) //第一个多项式各个因子处理结束时且第二个多项式的各个因子没处理完时//
{
p_a->next=p_b;
}
return factor_a;
}
void output_poly(poly *p)
{
printf("得到的多项式:\n");
while(p)
{
printf("%dX^%d+",p->coeff,p->power);
p=p->next;
}
}
int main()
{
poly *factor_a=NULL,*factor_b=NULL; //定义两个多项式因子
factor_a=creatpoly(); //创建第一个多项式
factor_b=creatpoly(); //创建第二个多项式
factor_a=poly_add(factor_a,factor_b); //两个多项式进行相加
output_poly(factor_a); //输出结果
return 0;
}运行是只能输入多项式第一个因子之后没等我输入他就直接要判断时候继续了 是怎么回事?
[ 本帖最后由 清风拂晓 于 2010-11-23 23:23 编辑 ]









谢啦 太大意了
