📄 111.cpp
字号:
#include <STDIO.H>
#include <STDLIB.H>
#include <MATH.H>
struct _SExpNode
{
int data1;
int data2;
struct _SExpNode *next;
};
typedef struct _SExpNode SExpNode;
SExpNode* InputExp()
{
SExpNode *p,*q,*pNewNode ;
q=NULL;
p=NULL;
int i;
int iCoefficient;
int iExponential;
printf("请按照次序输入系数和指数:(按指数由高到低输入,系数或指数为0表示输入结束!)\n\n");
for(i=1; ; i++)
{
printf("第%d项系数: ",i);
scanf("%d",&iCoefficient);
if (iCoefficient)
{
printf("第%d项指数: ", i);
scanf("%d",&iExponential);
pNewNode=(SExpNode *)malloc(sizeof(SExpNode));
pNewNode->data1=iCoefficient;
pNewNode->data2=iExponential;
if(i==1) p=pNewNode;
else q->next=pNewNode;
q=pNewNode;
if (iExponential==0) break;
}
else break;
}
printf("\n");
if(q!=NULL) q->next=NULL;
return p;
}
void PrintExp(SExpNode *pExp)
{
SExpNode *pNode;
if (pExp)
{
pNode =pExp->next;
printf("%d",pExp->data1);
if (pExp->data2)
{
printf("x");
if (pExp->data2!= 1) printf("^%d",pExp->data2);
}
while (pNode!= NULL)
{
if (pNode->data1 > 0)printf("+%d",pNode->data1);
else printf("%d",pNode->data1);
if (pNode->data2)
{
printf("x");
if (pNode->data2 != 1) printf("^%d",pNode->data2);
}
pNode=pNode->next;
}
}
else printf("0");
}
SExpNode* ExpAdd(SExpNode *pExp1,SExpNode *pExp2)
{
SExpNode * pExp3,* temp,*s;
temp=NULL;
pExp3=NULL;
while(pExp1 && pExp2)
{
s=(SExpNode *)malloc(sizeof(SExpNode));
if(pExp1->data2 > pExp2->data2)
{
s->data1=pExp1->data1;
s->data2=pExp1->data2;
if (pExp3 == NULL) pExp3=s;
else temp->next=s;
temp=s;
pExp1=pExp1->next;
}
else if(pExp1->data2 < pExp2->data2)
{
s->data1=pExp2->data1;
s->data2=pExp2->data2;
if (pExp3==NULL) pExp3=s;
else temp->next=s;
temp=s;
pExp2=pExp2->next;
}
else
{
s->data1=pExp2-> data1+ pExp1->data1;
s->data2=pExp1->data2;
if (s->data1)
{
if (pExp3==NULL) pExp3=s;
else temp->next=s;
temp=s;
}
pExp1=pExp1->next;
pExp2=pExp2->next;
}
}
if(pExp1) temp->next=pExp1;
if(pExp2) temp->next=pExp2;
return pExp3;
}
SExpNode* InputExpEx(int iIdx)
{
SExpNode* pNode;
printf("*****************************************************\n");
printf("请输入第 %d 个表达式:\n", iIdx);
pNode = InputExp();
printf("第 %d 个表达式为: ", iIdx);
PrintExp(pNode);
printf("\n");
return pNode;
}
void main()
{
SExpNode *pExp1, *pExp2, *pAdd;
int i;
do{
printf("\n 一元多项式相加算法 \n\n");
printf(" 283_金理华\n\n");
pExp1 = InputExpEx(1); // 第一个表达式
pExp2 = InputExpEx(2); // 第二个表达式
getchar();
printf("****************************************************");
printf("\n表达式1为: "); PrintExp(pExp1);
printf("\n表达式2为: "); PrintExp(pExp2);
pAdd= ExpAdd(pExp1, pExp2);
printf("\n\n相加结果为: "); PrintExp(pAdd);
printf("\n\n退出请按0,继续请按1:"); scanf("%d",&i);
}while(i==1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -