luo18770918893 2015-01-07 10:37 采纳率: 0%
浏览 1667

我刚刚入门,写一个一元多项式的简单计算,求帮忙解决这个加减问题,代码如下,帮忙找出错误,急急急

#include
#include
typedef struct node
{
float c;
int e;
struct node * next;
}lnode,*plnode;
void insert_menu();
void insert_pol(plnode &l);
void output_pol(plnode &l);
void add_pol(plnode list1, plnode list2);
void sub_pol(plnode list1, plnode list2);
void main()
{
plnode A,B,l;
int n;
A=(plnode)malloc(sizeof(lnode));
B=(plnode)malloc(sizeof(lnode));
l=(plnode)malloc(sizeof(lnode));
while(1)
{
insert_menu();
printf("输入你要选择的操作:");
do
{
scanf("%d",&n);
getchar();
if(n7)
printf("不存在该操作\n请重新输入你要选择的操作:");
}while(n7);
switch(n)
{
case 1:insert_pol(A);break;
case 2:insert_pol(B);break;
case 3:output_pol(A);break;
case 4:output_pol(B);break;
case 5:add_pol(A,B);break;
case 6:sub_pol(A,B);break;
case 7:exit(0);
}
}
}
void insert_menu()
{
printf("**********************主菜单*********************\n");
printf(" 1、输入并建立多项式 A\n");
printf(" 2、输入并建立多项式 B\n");
printf(" 3、输出多项式 A\n");
printf(" 4、输出多项式 B\n");
printf(" 5、两个多项式相加,输出结果多项式\n");
printf(" 6、两个多项式相减,输出结果多项式\n");
printf(" 7、退出程序\n");
printf("*************************************************\n");
}
void insert_pol(plnode &l)
{
plnode s,p;
int i,n;
l=(plnode)malloc(sizeof(lnode));
l->next=NULL;
p=l;
printf("请输入多项式项数:");
scanf("%d",&n);
system("cls");
for(i=0;i {
s=(plnode)malloc(sizeof(lnode));
printf("请依次输入多项式第%d项的系数和指数:\n",i+1);
scanf("%f %d",&s->c,&s->e);
s->next = NULL;

p->next = s;

p = s;

}
system("cls");
}
void output_pol(plnode &l)
{

plnode p,s1,s2,b;
b=(plnode)malloc(sizeof(lnode));
p = l->next;
s1=p;
s2=p->next;
if (p==NULL)
{
printf("P(x,n)=0");
}
printf("P(x,n)=");
for(s1=p;s1!=NULL;s1=s1->next)
{
for(s2=s1->next;s2!=NULL;s2=s2->next)
{
if(s1->e > s2->e)
{
b->e=s1->e;
s1->e=s2->e;
s2->e=b->e;
b->c=s1->c;
s1->c=s2->c;
s2->c=b->c;
}
}
}
while (p)

{

printf("%f*X^%d",p->c,p->e);
p = p->next;

if(p != NULL)
printf("+");
}
printf("\n");
}
void add_pol(plnode list1, plnode list2)
{
plnode p,a,b;
p=(plnode)malloc(sizeof(lnode));
for(a=list1->next;a!=NULL;a=a->next)
for(b=list2;b->next!=NULL;b=b->next)
{
if(a->e == b->next->e)
{
a->c=a->c+b->next->c;
p=b->next;
b->next=p->next;
free(p);
}
}
while(1)
{
if(a->next==NULL)
{
a->next=b->next;break;
}
a=a->next;
}
output_pol(a);
}
void sub_pol(plnode list1, plnode list2)
{
plnode p,a,b,q;
p=(plnode)malloc(sizeof(lnode));
for(a=list1;a->next!=NULL;a=a->next)
for(b=list2;b->next!=NULL;b=b->next)
{
if(a->next->e == b->next->e)
{
a->next->c=a->next->c-b->next->c;
if(a->next->c==0)
{
q=a->next;
a->next=q->next;
free(q);
}
p=b->next;
b->next=p->next;
free(p);
}
}
while(1)
{
if(a->next==NULL)
{
a->next=b->next;break;
}
a=a->next;
}
while(b->next)
{
b->next->c=-b->next->c;
b=b->next;
}
output_pol(a);
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2015-01-07 11:20
    关注
     for(a=list1->next;a!=NULL;a=a->next)
    for(b=list2;b->next!=NULL;b=b->next)
    这里循环不能这么写,得写成
    for (a = list1->next, b = list2; a != NULL && b->next != NULL; a = a->next, b = b->next)
    
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?