📄 计算器.cpp
字号:
#include <iostream.h>
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define LEN sizeof(node)
//用单链表存储多项式的结点结构
typedef struct polynode
{
int coef; //多项式的系数
int exp; //指数
struct polynode *next;
}node;
//指针函数,返回指针类型;用尾插法建立一元多项式的链表的函数
node * create(void)
{
node *h,*r,*s;
int c,e;
//建立多项式的头结点,为头结点分配存储空间
h=(node *)malloc(LEN);
r=h; //r指针始终动态指向链表的当前表尾
cout<<"系数: ";
cin>>c;
cout<<"指数: ";
cin>>e;
//输入系数为0时,表示多项式的输入结束
while(c!=0)
{
s=(node *)malloc(LEN); /*申请新结点*/
s->coef=c; /*申请新结点后赋值*/
s->exp=e; /*申请新结点后赋值*/
r->next=s; /*做尾插,插入新结点*/
r=s; /*r始终指向单链表的表尾*/
cout<<"系数: ";
cin>>c;
cout<<"指数: ";
cin>>e;
}
r->next=NULL;
return(h);
}
//一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式polya中,并将多项式ployb删除
void polyadd(node *polya, node *polyb)
{
node *p,*q,*pre,*temp;
int sum;
p=polya->next;/*令p和q分别指向polya和polyb多项式链表中的第一个结点*/
q=polyb->next;
pre=polya; /*位置指针,指向和多项式polya*/
while(p!=NULL&&q!=NULL) /*当两个多项式均未扫描结束时,执行以下操作*/
{
if(p->exp<q->exp) /*若p指向的多项式指数小于q指的指数*/
{
pre->next=p; /*将p结点加入到和多项式中*/
pre=pre->next;
p=p->next;
}
else if(p->exp==q->exp) /*若指数相等,则相应的系数相加*/
{
sum=p->coef+q->coef;
if(sum!=0)
{
p->coef=sum;
pre->next=p;pre=pre->next;p=p->next;
temp=q;q=q->next;free(temp);
}
else /*如果系数和为零,则删除结点p与q,并将指针指向下一个结点*/
{
temp=p->next;free(p);p=temp;
temp=q->next;free(q);q=temp;
}
}
else /*若p指数大于q指数*/
{
pre->next=q; /*p结点不动,将q结点加入到和多项式中*/
pre=pre->next;
q=q->next;
}
}
if(p!=NULL) /*多项式A中还有剩余,则将剩余的结点加入到和多项式中*/
pre->next=p;
else /*否则将B的结点加入到和多项式中*/
pre->next=q;
}
void print(node * p) /*输出函数,打印出一元多项式*/
{
while(p->next!=NULL)
{
p=p->next;
cout<<p->coef<<"*x^"<<p->exp;
if(p->next != NULL) cout<<"+";
}
}
void main()
{
node * polya,* polyb;
cout<<"输入第一个多项式的系数和指数,以系数为0结束:"<<endl;
polya=create(); /*调用建立链表函数,创建多项式A*/
print(polya);
cout<<endl<<"输入第二个多项式的系数和指数,以系数为0结束:"<<endl;
polyb=create();
print(polyb);
cout<<endl<<"相加的结果是:";
polyadd(polya,polyb); /*调用一元多项式相加函数*/
print(polya); /*调用输出函数,打印结果*/
cout<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -