📄 xxx.cpp
字号:
#include<stdio.h>
#include<stdlib.h>
#define NULL 0
typedef struct node
{
float data1;
int data2;
struct node *next;
}Lnode;//建立struct node节点类型,包含数据域data1,data2以及指针域next.
Lnode *input()
{
Lnode *h,*p;
int i=1,k;
float j=1;
h=(Lnode*)malloc(sizeof(Lnode));//建立头结点h
h->next=NULL;
printf("请输入第%d个数据的系数___指数___ 并以0结束输入\n",i++);
scanf("%f%d",&j,&k);//输入系数及指数,分别用j、k来存储.
p=(Lnode*)malloc(sizeof(Lnode));//建立p结点.
while(j!=0)
{
p->data1=j;
p->data2=k;
p->next=h->next;
h->next=p; //用链表存储
printf("请输入第%d个数据的系数___指数___ 并以0结束输入\n",i++);
scanf("%f%d",&j,&k);//输入系数及指数,分别用j、k来存储.
p=(Lnode*)malloc(sizeof(Lnode));//建立p结点.
}
return(h);
}
Lnode *order(Lnode *h)//对链表排序的子函数
{ Lnode *k,*s;
int t;
float x;
k=h->next;
s=k->next;//s指向k之后的结点,在循环跳出后指向最后一个结点
while(s!=NULL)
{
if(s->data2>k->data2)
{
x=k->data1;
k->data1=s->data1;
s->data1=x;//对系数进行排序
t=k->data2;
k->data2=s->data2;
s->data2=t;//对指数进行排序
}
k=k->next;
s=s->next;//s指向最后一个结点
};
return(h);
}
void add()//负责完成两个多项式合并的子函数
{ Lnode *pa,*pb,*p,*q,*pc,*k,*r;
pa=input();
pa=order(pa);
pb=input();
pb=order(pb);
p=pa->next;
q=pb->next;
/*while(p!=NULL)
{
printf("%f %d\n",p->data1,p->data2);
p=p->next;
}
while(q!=NULL)
{
printf("%f %d\n",q->data1,q->data2);
q=q->next;
} */ //两个while语句用来测试输入的正确性
pc=(Lnode*)malloc(sizeof(Lnode));
k=pc; //k指向pc头节点
while(p!=NULL&&q!=NULL)
{
r=(Lnode*)malloc(sizeof(Lnode));
r->next=NULL;
if(p->data2<q->data2)
{r->data1=q->data1;
r->data2=q->data2;
q=q->next;
}
else
if(p->data2==q->data2)
{r->data1=p->data1+q->data1;
r->data2=p->data2;
p=p->next;
q=q->next;
}
else
if(p->data2>q->data2)
{r->data1=p->data1;
r->data2=p->data2;
p=p->next;
}
k->next=r;
k=r;
}
while(p!=NULL)
{r=(Lnode*)malloc(sizeof(Lnode));
r->next=NULL;
r->data1=p->data1;
r->data2=p->data2;
p=p->next;
k->next=r;
k=r;
}
while(q!=NULL)
{r=(Lnode*)malloc(sizeof(Lnode));
r->next=NULL;
r->data1=q->data1;
r->data2=q->data2;
q=q->next;
k->next=r;
k=r;
}
k->next=NULL;
k=pc->next;
if(k!=NULL)
{ printf("Answer=");
printf("%.1fx^%d",k->data1,k->data2);
k=k->next;
}
else printf("0");
while(k!=NULL)
{
if(k->data1>0)//如果系数为正,则前面带“+”号
printf("+%.1fx^%d",k->data1,k->data2);
else
printf("%.1fx^%d",k->data1,k->data2);
k=k->next;
}
printf("\n");
/*while(p!=NULL)
{printf("%d %d\n",p->data1,p->data2);
p=p->next;
}
printf("Answer=");
if()
printf("%d x^%d",p->data1,p->next->data2);
p=p->next;
while(p->next!=NULL)
{ if(p->next->data1>0)
printf("+%d x^%d",p->next->data1,p->next->data2);
else
printf("%d x^%d",p->next->data1,p->next->data2);
//通过循环输出结果
p=p->next;
}*/
}
void minus()//负责完成两个多项式合并的子函数
{ Lnode *pa,*pb,*p,*q,*pc,*k,*r;
pa=input();
pa=order(pa);
pb=input();
pb=order(pb);
p=pa->next;
q=pb->next;
/*while(p!=NULL)
{
printf("%f %d\n",p->data1,p->data2);
p=p->next;
}
while(q!=NULL)
{
printf("%f %d\n",q->data1,q->data2);
q=q->next;
} */ //两个while语句用来测试输入的正确性
pc=(Lnode*)malloc(sizeof(Lnode));
k=pc; //k指向pc头节点
while(p!=NULL&&q!=NULL)
{
r=(Lnode*)malloc(sizeof(Lnode));
r->next=NULL;
if(p->data2<q->data2)
{r->data1=q->data1;
r->data2=q->data2;
q=q->next;
}
else
if(p->data2==q->data2)
{r->data1=p->data1-q->data1;
r->data2=p->data2;
p=p->next;
q=q->next;
}
else
if(p->data2>q->data2)
{r->data1=p->data1;
r->data2=p->data2;
p=p->next;
}
k->next=r;
k=r;
}
while(p!=NULL)
{r=(Lnode*)malloc(sizeof(Lnode));
r->next=NULL;
r->data1=p->data1;
r->data2=p->data2;
p=p->next;
k->next=r;
k=r;
}
while(q!=NULL)
{r=(Lnode*)malloc(sizeof(Lnode));
r->next=NULL;
r->data1=q->data1;
r->data2=q->data2;
q=q->next;
k->next=r;
k=r;
}
k->next=NULL;
k=pc->next;
if(k!=NULL)
{ printf("Answer=");
printf("%.1fx^%d",k->data1,k->data2);
k=k->next;
}
else printf("0");
while(k!=NULL)
{
if(k->data1>0)//如果系数为正,则前面带“+”号
printf("+%.1fx^%d",k->data1,k->data2);
else
printf("%.1fx^%d",k->data1,k->data2);
k=k->next;
}
printf("\n");
/*while(p!=NULL)
{printf("%d %d\n",p->data1,p->data2);
p=p->next;
}
printf("Answer=");
if()
printf("%d x^%d",p->data1,p->next->data2);
p=p->next;
while(p->next!=NULL)
{ if(p->next->data1>0)
printf("+%d x^%d",p->next->data1,p->next->data2);
else
printf("%d x^%d",p->next->data1,p->next->data2);
//通过循环输出结果
p=p->next;
}*/
}
void exit()
{
printf("byebye\n");
}
void main()//主函数
{ Lnode *i;
Lnode *p2;
int flag1,flag2;
do{
printf("请选择您要进行的操作\n");
printf("1:输入并排序输出一个多项式 2:输入两个多项式相加 3:两个多项式相减 4:退出系统\n");
scanf("%d",&flag1);
if(flag1==1)
{
p2=input();//调用输入部分的子函数
i=p2->next;
p2=order(p2);//调用排序部分的子函数,并传值
printf("Answer=");
printf("%.2f x^%d",i->data1,i->data2);
i=i->next;
while(i!=NULL)
{ if(i->data1>0)
printf("+%.2f x^%d",i->data1,i->data2);
else
printf("%.2f x^%d",i->data1,i->data2);
//通过循环输出结果
i=i->next;
}
printf("\n");//以上功能完成输入并对一个多项式排序
printf("重新选择请按0\n");
scanf("%d",&flag2);
}
else
if(flag1==2)
{
add();
printf("重新选择请按0\n");
scanf("%d",&flag2);
}
else
if(flag1==3)
{
minus();
printf("重新选择请按0\n");
scanf("%d",&flag2);
}
if(flag1==4)
{
exit();
break;
}
}while(flag2==0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -