📄 一元多项式的建立输出和相加的函数建立.c
字号:
typedef struct LNode
{ /*多项式的存储结构定义*/
int coef;
int expn;
struct LNode *next;
}LNode,*linklist;
linklist creat()
{ /*一元多项式以链表存储形式的建立*/
linklist head,s,p,pre;
int coef;
int expn;
head=(linklist)malloc(sizeof(LNode));
head->next=NULL;
printf("put in coef and expn:");
scanf("%d %d",&coef,&expn);
while (coef!=0)
{
s=(linklist)malloc(sizeof(LNode));
s->coef=coef;
s->expn=expn;
s->next=NULL;
pre=head;
p=head->next;
while (p&&p->expn>s->expn)
{
pre=p;
p=p->next;
}
s->next=p;
pre->next=s;
printf("put in coef and expn:");
scanf("%d %d",&coef,&expn);
printf("\n");
}
return head;
}
void print(linklist head)
{ /*将建立好的一元多项式输出的函数建立*/
linklist p;
p=head->next;
while (p)
{ if(p->next==NULL)
printf("%dX^%d",p->coef,p->expn);
else
printf("%dX^%d+",p->coef,p->expn);
p=p->next;
}
}
linklist add(linklist La,linklist Lb)
{ /*两个一元多项式的加法运算*/
linklist Lc,pa,pb,pt,pc;
int temp;
Lc=(linklist)malloc(sizeof(LNode));
Lc->next=NULL;
pa=La->next;
pb=Lb->next;
pc=Lc;
while (pa&&pb)
{
if (pa->expn==pb->expn)
{
pt=(linklist)malloc(sizeof(LNode));
pt->expn=pa->expn;
pt->coef=pa->coef+pb->coef;
pt->next=NULL;
pa=pa->next;
pb=pb->next;
}
else if (pa->expn>pb->expn)
{
pt=(linklist)malloc(sizeof(LNode));
pt->expn=pa->expn;
pt->coef=pa->coef;
pt->next=NULL;
pa=pa->next;
}
else
{
pt=(linklist)malloc(sizeof(LNode));
pt->expn=pb->expn;
pt->coef=pb->coef;
pt->next=NULL;
pb=pb->next;
}
pc->next=pt;
pc=pt;
}
if (pa)
pc->next=pa;
else
pc->next=pb;
return Lc;
}
linklist mul(linklist La,linklist Lb)
{ /*两一元多项式的乘法运算*/
linklist Lc,pa,pb,Temp,pt,pl;
Lc=(linklist)malloc(sizeof(LNode));
Lc->next=NULL;
pa=La->next;
while (pa)
{
pb=Lb->next;
Temp=(linklist)malloc(sizeof(LNode));
Temp->next=NULL;
pl=Temp;
while (pb)
{
pt=(linklist)malloc(sizeof(LNode));
pt->coef=pa->coef*pb->coef;
pt->expn=pa->expn+pb->expn;
pt->next=NULL;
pl->next=pt;
pl=pt;
pb=pb->next;
}
Lc=add(Lc,Temp);
pa=pa->next;
}
return Lc;
}
int Window()
{ /*算法运行窗口的建立*/
int i;
textmode(C40);
textbackground(BLUE);
textcolor(YELLOW);
clrscr();
gotoxy(16,4);
printf("M E N U");
gotoxy(5,5);
printf("* * * * * * * * * * * * * * * *");
for (i=0; i<15; i++)
{
gotoxy(5,i+5);
putchar('*');
gotoxy(35,i+5);
putchar('*');
}
gotoxy(5,20);
printf("* * * * * * * * * * * * * * * *");
gotoxy(7,8);
printf("0. Break");
gotoxy(7,12);
printf("1. AVL Tree");
gotoxy(7,16);
printf("2. Unitary Multionmial");
gotoxy(5,22);
printf("Please input your choose:");
scanf("%d",&i);
return i;
}
main()
{
int x,i,n,a[MAX];
char c;
BSTree T;
linklist p, q, r;
x=Window();
while(x>=0)
{
if(x==0)
break;
else if(x==1)
{
clrscr(); /*平衡二叉排序树的建立,增加和删除算法*/
T=NULL;
printf("Input the Number of Node:\n");
scanf("%d",&n);
printf("Input the BSTree Data:\n");
for (i=0; i < n; i++)
{
scanf("%d",&a[i]);
}
for (i=0; i < n; i++)
{
T=InsertAVL (T,a[i]);
}
midorder(T);
printf("\n");
printf("Input the num to insert, input \"0\" to finish!\n");
scanf("%d",&n);
while (n!=0)
{
T=InsertAVL (T, n);
scanf("%d",&n);
}
printf("\n");
midorder(T);
printf("\n");
printf("Input the num to delete, input \"0\" to finish!\n");
scanf("%d",&n);
while (n != 0)
{
T=DeleteAVL (T, n);
scanf("%d",&n);
}
midorder(T);;
scanf("%c",&c);
c=getch();
if(c=='#')
{
x=0;
break;
}
else
x=Window();
}
if(x==2)
{ /*一元多项式建立.相加和相乘并对其结果输出的算法*/
clrscr();
p=creat();
q=creat();
print(p);
printf("\n");
print(q);
r=add(p,q);
printf("\n");
print(r);
r=mul(p,q);
printf("\n");
print(r);
scanf("%c",&c);
c=getch();
if(c=='#')
{
x=0;
break;
}
else
x=Window();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -