一元多项式简单的计算器

来自:    更新日期:早些时候
如何用C语言实现一元多项式简单计算器的设计~

一元多项式简单的计算器的功能:1)输入并建立多项式;2)输出多项式;3)两个多项式相加,输出和多项式;4)两个多项式相减,输出差多项式。
例程
#include /*DOS接口函数*/#include /*数学函数的定义*/#include /*屏幕操作函数*/#include /*I/O函数*/#include /*库函数*/#include /*变量长度参数表*/#include /*图形函数*/#include /*字符串函数*/#include /*字符操作函数*/#define UP 0x48 /*光标上移键*/#define DOWN 0x50 /*光标下移键*/#define LEFT 0x4b /*光标左移键*/#define RIGHT 0x4d /*光标右移键*/#define ENTER 0x0d /*回车键*/void *rar; /*全局变量,保存光标图象*/struct palettetype palette; /*使用调色板信息*/int GraphDriver; /* 图形设备驱动*/int GraphMode; /* 图形模式值*/int ErrorCode; /* 错误代码*/int MaxColors; /* 可用颜色的最大数值*/int MaxX, MaxY; /* 屏幕的最大分辨率*/double AspectRatio; /* 屏幕的像素比*/void drawboder(void); /*画边框函数*/void initialize(void); /*初始化函数*/void computer(void); /*计算器计算函数*/void changetextstyle(int font, int direction, int charsize); /*改变文本样式函数*/void mwindow(char *header); /*窗口函数*/int specialkey(void) ; /*获取特殊键函数*/int arrow(); /*设置箭头光标函数*//*主函数*/int main(){initialize();/* 设置系统进入图形模式 */computer(); /*运行计算器 */closegraph();/*系统关闭图形模式返回文本模式*/return(0); /*结束程序*/}/* 设置系统进入图形模式 */void initialize(void){int xasp, yasp; /* 用于读x和y方向纵横比*/GraphDriver = DETECT; /* 自动检测显示器*/initgraph( &GraphDriver, &GraphMode, "" );/*初始化图形系统*/ErrorCode = graphresult(); /*读初始化结果*/if( ErrorCode != grOk ) /*如果初始化时出现错误*/{printf("Graphics System Error: %s
",grapherrormsg( ErrorCode ) ); /*显示错误代码*/exit( 1 ); /*退出*/}getpalette( &palette ); /* 读面板信息*/MaxColors = getmaxcolor() + 1; /* 读取颜色的最大值*/MaxX = getmaxx(); /* 读屏幕尺寸 */MaxY = getmaxy(); /* 读屏幕尺寸 */getaspectratio( &xasp, &yasp ); /* 拷贝纵横比到变量中*/AspectRatio = (double)xasp/(double)yasp;/* 计算纵横比值*/}/*计算器函数*/void computer(void){struct viewporttype vp; /*定义视口类型变量*/int color, height, width;int x, y,x0,y0, i, j,v,m,n,act,flag=1;float num1=0,num2=0,result; /*操作数和计算结果变量*/char cnum[5],str2[20]={""},c,temp[20]={""};char str1[]="1230.456+-789*/Qc=^%";/* 定义字符串在按钮图形上显示的符号 */mwindow( "Calculator" ); /* 显示主窗口 */color = 7; /*设置灰颜色值*/getviewsettings( &vp ); /* 读取当前窗口的大小*/width=(vp.right+1)/10; /* 设置按钮宽度 */height=(vp.bottom-10)/10 ; /*设置按钮高度 */x = width /2; /*设置x的坐标值*/y = height/2; /*设置y的坐标值*/setfillstyle(SOLID_FILL, color+3);bar( x+width*2, y, x+7*width, y+height );/*画一个二维矩形条显示运算数和结果*/setcolor( color+3 ); /*设置淡绿颜色边框线*/rectangle( x+width*2, y, x+7*width, y+height );/*画一个矩形边框线*/setcolor(RED); /*设置颜色为红色*/outtextxy(x+3*width,y+height/2,"0."); /*输出字符串"0."*/x =2*width-width/2; /*设置x的坐标值*/y =2*height+height/2; /*设置y的坐标值*/for( j=0 ; j=x0+6*width)/*如果右移,移到尾,则移动到最左边字符位置*/{x=x0;m=0;}else{x=x+width+width/2;m++;} /*否则,右移到下一个字符位置*/if(v==LEFT) /*左移箭头时新位置计算*/if(x=7*height){y=y0;n=0;} /*如果移到尾,再下移,则移动到最上边字符位置*/else{y=y+height+height/2;n++;} /*否则,移到下边一个字符位置*/putimage(x,y,rar,XOR_PUT); /*在新的位置显示光标箭头*/}c=str1[n*5+m]; /*将字符保存到变量c中*/if(isdigit(c)||c=='.') /*判断是否是数字或小数点*/{if(flag==-1) /*如果标志为-1,表明为负数*/{strcpy(str2,"-"); /*将负号连接到字符串中*/flag=1;} /*将标志值恢复为1*/sprintf(temp,"%c",c); /*将字符保存到字符串变量temp中*/strcat(str2,temp); /*将temp中的字符串连接到str2中*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,str2); /*显示字符串*/}if(c=='+'){num1=atof(str2); /*将第一个操作数转换为浮点数*/strcpy(str2,""); /*将str2清空*/act=1; /*做计算加法标志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0."); /*显示字符串*/}if(c=='-'){if(strcmp(str2,"")==0) /*如果str2为空,说明是负号,而不是减号*/flag=-1; /*设置负数标志*/else{num1=atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,""); /*将str2清空*/act=2; /*做计算减法标志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/outtextxy(5*width,height,"0."); /*显示字符串*/}}if(c=='*'){num1=atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,""); /*将str2清空*/act=3; /*做计算乘法标志值*/setfillstyle(SOLID_FILL,color+3); bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0."); /*显示字符串*/}if(c=='/'){num1=atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,""); /*将str2清空*/act=4; /*做计算除法标志值*/setfillstyle(SOLID_FILL,color+3);bar(2*width+width/2,height/2,15*width/2,3*height/2);outtextxy(5*width,height,"0."); /*显示字符串*/}if(c=='^'){num1=atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,""); /*将str2清空*/act=5; /*做计算乘方标志值*/setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/outtextxy(5*width,height,"0."); /*显示字符串*/}if(c=='%'){num1=atof(str2); /*将第二个操作数转换为浮点数*/strcpy(str2,""); /*将str2清空*/act=6; /*做计算模运算乘方标志值*/setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2); /*画矩形*/outtextxy(5*width,height,"0."); /*显示字符串*/}if(c=='='){num2=atof(str2); /*将第二个操作数转换为浮点数*/switch(act) /*根据运算符号计算*/{case 1:result=num1+num2;break; /*做加法*/case 2:result=num1-num2;break; /*做减法*/case 3:result=num1*num2;break; /*做乘法*/case 4:result=num1/num2;break; /*做除法*/case 5:result=pow(num1,num2);break; /*做x的y次方*/case 6:result=fmod(num1,num2);break; /*做模运算*/}setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆盖结果区*/sprintf(temp,"%f",result); /*将结果保存到temp中*/outtextxy(5*width,height,temp); /*显示结果*/}if(c=='c'){num1=0; /*将两个操作数复位0,符号标志为1*/num2=0;flag=1;strcpy(str2,""); /*将str2清空*/setfillstyle(SOLID_FILL,color+3); /*设置用淡绿色实体填充*/bar(2*width+width/2,height/2,15*width/2,3*height/2); /*覆盖结果区*/outtextxy(5*width,height,"0."); /*显示字符串*/}if(c=='Q')exit(0); /*如果选择了q回车,结束计算程序*/}putimage(x,y,rar,XOR_PUT); /*在退出之前消去光标箭头*/return; /*返回*/}/*窗口函数*/void mwindow( char *header ){int height;cleardevice(); /* 清除图形屏幕 */setcolor( MaxColors - 1 ); /* 设置当前颜色为白色*/setviewport( 20, 20, MaxX/2, MaxY/2, 1 ); /* 设置视口大小 */height = textheight( "H" ); /* 读取基本文本大小 */settextstyle( DEFAULT_FONT, HORIZ_DIR, 1 );/*设置文本样式*/settextjustify( CENTER_TEXT, TOP_TEXT );/*设置字符排列方式*/outtextxy( MaxX/4, 2, header ); /*输出标题*/setviewport( 20,20+height+4, MaxX/2+4, MaxY/2+20, 1 ); /*设置视口大小*/drawboder(); /*画边框*/}void drawboder(void) /*画边框*/{struct viewporttype vp; /*定义视口类型变量*/setcolor( MaxColors - 1 ); /*设置当前颜色为白色 */setlinestyle( SOLID_LINE, 0, NORM_WIDTH );/*设置画线方式*/getviewsettings( &vp );/*将当前视口信息装入vp所指的结构中*/rectangle( 0, 0, vp.right-vp.left, vp.bottom-vp.top ); /*画矩形边框*/}/*设计鼠标图形函数*/int arrow(){int size;int raw[]={4,4,4,8,6,8,14,16,16,16,8,6,8,4,4,4}; /*定义多边形坐标*/setfillstyle(SOLID_FILL,2); /*设置填充模式*/fillpoly(8,raw); /*画出一光标箭头*/size=imagesize(4,4,16,16); /*测试图象大小*/rar=malloc(size); /*分配内存区域*/getimage(4,4,16,16,rar); /*存放光标箭头图象*/putimage(4,4,rar,XOR_PUT); /*消去光标箭头图象*/return 0;}/*按键函数*/int specialkey(void){int key;while(bioskey(1)==0); /*等待键盘输入*/key=bioskey(0); /*键盘输入*/key=key&0xff? key&0xff:key>>8; /*只取特殊键的扫描值,其余为0*/return(key); /*返回键值*/}

这是我以前做的数据结构课程设计,加减乘除、求值、求导等功能。
希望可以帮上你的忙。

#include
#include
typedef struct Polynomial{
float coef;
int expn;
struct Polynomial *next;
}*Polyn,Polynomial; //Polyn为结点指针类型
void Insert(Polyn p,Polyn h){
if(p->coef==0) free(p); //系数为0的话释放结点
else{
Polyn q1,q2;
q1=h;q2=h->next;
while(q2&&p->expnexpn){ //查找插入位置
q1=q2;
q2=q2->next;
}
if(q2&&p->expn==q2->expn){ //将指数相同相合并
q2->coef+=p->coef;
free(p);
if(!q2->coef){ //系数为0的话释放结点
q1->next=q2->next;
free(q2);
}
}
else{ //指数为新时将结点插入
p->next=q2;
q1->next=p;
}
}
}//Insert
Polyn CreatePolyn(Polyn head,int m){//建立一个头指针为head、项数为m的一元多项式
int i;
Polyn p;
p=head=(Polyn)malloc(sizeof(struct Polynomial));
head->next=NULL;
for(i=0;i<m;i++){
p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据
printf("请输入第%d项的系数与指数:",i+1);
scanf("%f %d",&p->coef,&p->expn);
Insert(p,head); //调用Insert函数插入结点
}
return head;
}//CreatePolyn
void DestroyPolyn(Polyn p){//销毁多项式p
Polyn q1,q2;
q1=p->next;
q2=q1->next;
while(q1->next){
free(q1);
q1=q2;//指针后移
q2=q2->next;
}
}
void PrintPolyn(Polyn P){
Polyn q=P->next;
int flag=1;//项数计数器
if(!q) { //若多项式为空,输出0
putchar('0');
printf("
");
return;
}
while (q){
if(q->coef>0&&flag!=1) putchar('+'); //系数大于0且不是第一项
if(q->coef!=1&&q->coef!=-1){//系数非1或-1的普通情况
printf("%g",q->coef);
if(q->expn==1) putchar('X');
else if(q->expn) printf("X^%d",q->expn);
}
else{
if(q->coef==1){
if(!q->expn) putchar('1');
else if(q->expn==1) putchar('X');
else printf("X^%d",q->expn);
}
if(q->coef==-1){
if(!q->expn) printf("-1");
else if(q->expn==1) printf("-X");
else printf("-X^%d",q->expn);
}
}
q=q->next;
flag++;
}//while
printf("
");
}//PrintPolyn
int compare(Polyn a,Polyn b){
if(a&&b){
if(!b||a->expn>b->expn) return 1;
else if(!a||a->expnexpn) return -1;
else return 0;
}
else if(!a&&b) return -1;//a多项式已空,但b多项式非空
else return 1;//b多项式已空,但a多项式非空
}//compare
Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针
Polyn qa=pa->next;
Polyn qb=pb->next;
Polyn headc,hc,qc;
hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hc->next=NULL;
headc=hc;
while(qa||qb){
qc=(Polyn)malloc(sizeof(struct Polynomial));
switch(compare(qa,qb)){
case 1:
{
qc->coef=qa->coef;
qc->expn=qa->expn;
qa=qa->next;
break;
}
case 0:
{
qc->coef=qa->coef+qb->coef;
qc->expn=qa->expn;
qa=qa->next;
qb=qb->next;
break;
}
case -1:
{
qc->coef=qb->coef;
qc->expn=qb->expn;
qb=qb->next;
break;
}
}//switch
if(qc->coef!=0){
qc->next=hc->next;
hc->next=qc;
hc=qc;
}
else free(qc);//当相加系数为0时,释放该结点
}//while
return headc;
}//AddPolyn
Polyn SubtractPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针
Polyn h=pb;
Polyn p=pb->next;
Polyn pd;
while(p){ //将pb的系数取反
p->coef*=-1;
p=p->next;
}
pd=AddPolyn(pa,h);
for(p=h->next;p;p=p->next) //恢复pb的系数
p->coef*=-1;
return pd;
}//SubtractPolyn
float ValuePolyn(Polyn head,float x){//输入x值,计算并返回多项式的值
Polyn p;
int i;
float sum=0,t;
for(p=head->next;p;p=p->next){
t=1;
for(i=p->expn;i!=0;){
if(i<0){t/=x;i++;}//指数小于0,进行除法
else{t*=x;i--;}//指数大于0,进行乘法
}
sum+=p->coef*t;
}
return sum;
}//ValuePolyn
Polyn Derivative(Polyn head){//求解并建立a的导函数多项式,并返回其头指针
Polyn q=head->next,p1,p2,hd;
hd=p1=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hd->next=NULL;
while(q){
if(q->expn!=0){ //该项不是常数项时
p2=(Polyn)malloc(sizeof(struct Polynomial));
p2->coef=q->coef*q->expn;
p2->expn=q->expn-1;
p2->next=p1->next;//连接结点
p1->next=p2;
p1=p2;
}
q=q->next;
}
return hd;
}//Dervative
Polyn MultiplyPolyn(Polyn pa,Polyn pb){//求解并建立多项式a*b,返回其头指针
Polyn hf,pf;
Polyn qa=pa->next;
Polyn qb=pb->next;
hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hf->next=NULL;
for(;qa;qa=qa->next){
for(qb=pb->next;qb;qb=qb->next){
pf=(Polyn)malloc(sizeof(struct Polynomial));
pf->coef=qa->coef*qb->coef;
pf->expn=qa->expn+qb->expn;
Insert(pf,hf);//调用Insert函数以合并指数相同的项
}
}
return hf;
}//MultiplyPolyn
void DevicePolyn(Polyn pa,Polyn pb){//求解并建立多项式a*b,返回其头指针
Polyn hf,pf,af,temp1,temp2,q;
Polyn qa=pa->next;
Polyn qb=pb->next;
hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点,存储商
hf->next=NULL;
pf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点,存储余数
pf->next=NULL;
temp1=(Polyn)malloc(sizeof(struct Polynomial));
temp1->next=NULL;
temp2=(Polyn)malloc(sizeof(struct Polynomial));
temp2->next=NULL;
temp1=AddPolyn(temp1,pa);
while(qa!=NULL&&qa->expn>=qb->expn){
temp2->next=(Polyn)malloc(sizeof(struct Polynomial));
temp2->next->coef=(qa->coef)/(qb->coef);
temp2->next->expn=(qa->expn)-(qb->expn);
Insert(temp2->next,hf);
pa=SubtractPolyn(pa,MultiplyPolyn(pb,temp2));
qa=pa->next;
temp2->next=NULL;
}
pf=SubtractPolyn(temp1,MultiplyPolyn(hf,pb));
pb=temp1;
printf("商是:");
PrintPolyn(hf);
printf("余数是:");
PrintPolyn(pf);
}//DevicePolyn

int main(){
int m,n,flag=0;
float x;
Polyn pa=0,pb=0,pc,pd,pe,pf;//定义各式的头指针,pa与pb在使用前付初值NULL
printf("请输入a的项数:");
scanf("%d",&m);
pa=CreatePolyn(pa,m);//建立多项式a
printf("请输入b的项数:");
scanf("%d",&n);
pb=CreatePolyn(pb,n);//建立多项式a
//输出菜单
printf("**********************************************
");
printf("操作提示:
1.输出多项式a和b
2.建立多项式a+b
3.建立多项式a-b
");
printf("4.计算多项式a在x处的值
5.求多项式a的导函数
6.建立多项式a*b
");
printf("7.建立多项式a/b
8.退出
**********************************************
");
for(;;flag=0){
printf("执行操作");
scanf("%d",&flag);
if(flag==1){
printf("多项式a:");PrintPolyn(pa);
printf("多项式b:");PrintPolyn(pb);continue;
}
if(flag==2){
pc=AddPolyn(pa,pb);
printf("多项式a+b:");PrintPolyn(pc);
DestroyPolyn(pc);continue;
}
if(flag==3){
pd=SubtractPolyn(pa,pb);
printf("多项式a-b:");PrintPolyn(pd);
DestroyPolyn(pd);continue;
}
if(flag==4){
printf("输入x的值:x=");
scanf("%f",&x);
printf("多项式a的值%g
",ValuePolyn(pa,x));continue;
}
if(flag==5){
pe=Derivative(pa);
printf("多项式a的导函数:");PrintPolyn(pe);
DestroyPolyn(pe);continue;
}
if(flag==6){
pf=MultiplyPolyn(pa,pb);
printf("多项式a*b:");PrintPolyn(pf);
DestroyPolyn(pf);continue;
}
if(flag==7){
DevicePolyn(pa,pb);
continue;
}
if(flag==8) break;
if(flag8) printf("Error!!!
");continue;
}//for
DestroyPolyn(pa);
DestroyPolyn(pb);
return 0;
}

//一元稀疏多项式计算器
#include <stdio.h>
#include <stdlib.h>

#define OK 1;
#define READ(I) while (((I)=getchar())=='\n'); //读入合法字符
typedef int status;
typedef struct PolyNode
{
float coef;
int expn;
struct PolyNode *next;
}Poly,*P_Poly;

status CreatPoly(P_Poly*,int); //创建多项式链表
void OutP_Poly(P_Poly); //输出多项式
void AddPoly(P_Poly*,P_Poly,P_Poly); //求和
void DecPoly(P_Poly*,P_Poly,P_Poly); //求差
void DelPoly(P_Poly*); //删除并释放多项式

status main()
{
P_Poly PolyHead[26]={0};
char menu,name;
for (;;)
{

printf ("1.建立多项式\n");
printf ("2.输出多项式\n");
printf ("3.求两个多项式之和(必须先创建),建立和式并输出\n");
printf ("4.求两个多项式之差(必须先创建),建立差式并输出\n");
printf ("5.删除多项式\n");
printf ("6.退出\n");
printf ("请选择指令:");
READ(menu)
switch (menu)
{
case '1':
{
int n;
printf ("请输入要创建的多项式的名称(单个小写字母表示):");
READ(name)
if (NULL!=PolyHead[name-'a'])
{
printf ("此多项式已经存在!\n");
break;
}
printf ("请输入项数:");
scanf ("%d",&n);
if(CreatPoly(&PolyHead[name-'a'],n)) printf ("多项式%c创建完毕!\n",name);
break;
}
case '2':
printf ("请输入要输出的多项式的名称:");
READ(name)
if (NULL==PolyHead[name-'a'])
{
printf ("此多项式不存在!\n");
break;
}
OutP_Poly(PolyHead[name-'a']);
break;
case '3':
{
char name1,name2;
printf ("请输入加式一的名称:");
READ(name1)
if (NULL==PolyHead[name1-'a'])
{
printf ("此多项式不存在!请先创建\n");
break;
}
printf ("请输入加式二的名称:");
READ(name2)
if (NULL==PolyHead[name2-'a'])
{
printf ("此多项式不存在!请先创建\n");
break;
}
printf ("请输入要创建的和式的名称:");
READ(name)
if (NULL!=PolyHead[name-'a'])
{
printf ("此多项式已经存在!\n");
break;
}
AddPoly(&PolyHead[name-'a'],PolyHead[name1-'a'],PolyHead[name2-'a']);
OutP_Poly(PolyHead[name-'a']);
break;
}
case '4':
{
char name1,name2;
printf ("请输入被减式的名称:");
READ(name1)
if (NULL==PolyHead[name1-'a'])
{
printf ("此多项式不存在!请先创建\n");
break;
}
printf ("请输入减式的名称:");
READ(name2)
if (NULL==PolyHead[name2-'a'])
{
printf ("此多项式不存在!请先创建\n");
break;
}
printf ("请输入要创建的差式的名称:");
READ(name)
if (NULL!=PolyHead[name-'a'])
{
printf ("此多项式已经存在!\n");
break;
}
DecPoly(&PolyHead[name-'a'],PolyHead[name1-'a'],PolyHead[name2-'a']);
OutP_Poly(PolyHead[name-'a']);
break;
}
case '5':
printf ("请输入要删除的多项式名称:");
READ(name)
if (NULL==PolyHead[name-'a'])
{
printf ("此多项式不存在!\n");
break;
}
DelPoly(&PolyHead[name-'a']);
printf ("多项式%c已删除!\n",name);
break;
case '6':
return OK;
}
}
}

status CreatPoly(P_Poly* P_PolyHead,int n)
{ //为确保其他子函数正常运行,入口参数要求不含同类项、指数递减
int i=0;
P_Poly p,tail;
*P_PolyHead=(Poly*)malloc(sizeof(Poly));
(*P_PolyHead)->expn=n;
tail=*P_PolyHead;
printf ("请按照指数递减序输入最简形式的多项式\n");
for (;i<n;i++)
{
p=(Poly*)malloc(sizeof(Poly));
printf ("请输入第%d项的系数和指数(系数,指数):",i+1);
scanf ("%f,%d",&(p->coef),&(p->expn));
tail->next=p;
tail=p;
}
tail->next=NULL;
return OK;
}

void OutP_Poly(P_Poly PolyHead)
{
int i=0;
P_Poly p;
printf ("%d ",PolyHead->expn);
p=PolyHead->next;
for (;i<PolyHead->expn;i++)
{
printf ("%f,%d ",p->coef,p->expn);
p=p->next;
}
printf ("\n");
}

void AddPoly(P_Poly* P_PolyHead,P_Poly PolyHead1,P_Poly PolyHead2)
{
int i=0;
P_Poly p1,p2,p,tail;
p1=PolyHead1->next;
p2=PolyHead2->next;
*P_PolyHead=(P_Poly)malloc(sizeof(Poly));
p=tail=*P_PolyHead;
while(p1&&p2)
{
int e1,e2;
e1=p1->expn;
e2=p2->expn;
if (e1>e2)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
*p=*p1;
p1=p1->next;
i++;
}
else if(e1==e2)
{
float sum_c=p1->coef+p2->coef;
if (sum_c!=0.0)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
p->coef=sum_c;
p->expn=e1;
i++;
}
p1=p1->next;
p2=p2->next;
}
else if (e1<e2)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
*p=*p2;
p2=p2->next;
i++;
}
}
while (p1)
{
p=(Poly*)malloc(sizeof(Poly));
*p=*p1;
tail->next=p;
tail=p;
p1=p1->next;
i++;
}
while (p2)
{
p=(Poly*)malloc(sizeof(Poly));
*p=*p2;
tail->next=p;
tail=p;
p2=p2->next;
i++;
}
(*P_PolyHead)->expn=i;
tail->next=NULL;
}

void DecPoly(P_Poly* P_PolyHead,P_Poly PolyHead1,P_Poly PolyHead2)
{
int i=0;
P_Poly p1,p2,p,tail;
p1=PolyHead1->next;
p2=PolyHead2->next;
*P_PolyHead=(P_Poly)malloc(sizeof(Poly));
p=tail=*P_PolyHead;
while(p1&&p2)
{
int e1,e2;
e1=p1->expn;
e2=p2->expn;
if (e1>e2)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
*p=*p1;
p1=p1->next;
i++;
}
else if(e1==e2)
{
float dif_c=p1->coef-p2->coef;
if (dif_c!=0.0)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
p->coef=dif_c;
p->expn=e1;
i++;
}
p1=p1->next;
p2=p2->next;
}
else if (e1<e2)
{
p=(P_Poly)malloc(sizeof(Poly));
tail->next=p;
tail=p;
p->coef=-p2->coef;
p->expn=p2->expn;
p2=p2->next;
i++;
}
}
while (p1)
{
p=(Poly*)malloc(sizeof(Poly));
*p=*p1;
tail->next=p;
tail=p;
p1=p1->next;
i++;
}
while (p2)
{
p=(Poly*)malloc(sizeof(Poly));
*p=*p2;
tail->next=p;
tail=p;
p2=p2->next;
i++;
}
(*P_PolyHead)->expn=i;
tail->next=NULL;
}

void DelPoly(P_Poly* P_PolyHead)
{
P_Poly p,prior;
p=prior=*P_PolyHead;
while (p->next)
{
p=p->next;
free(prior);
prior=p;
}
*P_PolyHead=NULL;
}
自己修改修改风格就可以用了

我靠,如楼上说的。。真懒。。第一道多项式的数据结构那本书上都有详细的解说了。。实现一下就可以了。。第二道是有点复杂

工作量比较大。
百度的分没用,还不如何丹的论坛的金币,至少可以换QB
如果100何丹论坛的金币,我今天晚上就答。

这样吧,如果你的问题明天还没人答,我就帮你答吧

有偿服务。绝对满足所有要求,良好的代码风格,明了的代码注释。

Q Q 703252627

这个是有点难。。。


一元多项式简单的计算器视频

相关评论:
  • 15317508721如何用C语言实现一元多项式简单计算器的设计
    丁林胃if(v==UP) \/*上移箭头时新位置计算*\/if(y<=y0){y=y0+4*height+height\/2;n=3;} \/*如果移到头,再上移,则移动到最下边字符位置*\/else{y=y-height-height\/2;n--;} \/*否则,移到上边一个字符位置*\/if(v==DOWN) \/*下移箭头时新位置计算*\/if(y>=7*height){y=y0;n=0;} \/*如果移到尾,...

  • 15317508721如何设计“一个一元稀疏多项式简单计算器”?
    丁林胃\\x0d\\x0apnode create_duo(char *c,int m)\\x0d\\x0a{\\x0d\\x0a if(c[m]=='\\0') return NULL;\\x0d\\x0a int i,j;\\x0d\\x0a pnode p,q;\\x0d\\x0a i=m;\\x0d\\x0a if(c[i]=='+'||c[i]=='-')i++;\\x0d\\x0a j=i;\\x0d\\x0a while(c[j]!='\\0'&&c[j]!=...

  • 15317508721一元多项式简单的计算器 用C实现 不要C++
    丁林胃(2)输出多项式;(3)两个多项式相加,建立并输出和多项式;(4)两个多项式相减,建立并输出差多项式。(5)算法的时间复杂度、另外可以提出算法的改进方法 实现提示:可选择带头结点的单向循环链表或单链表存储多项式,头结点可存放多项式的参数,如项数等。2.要求:一元多项式简单计算器的基本功能 参考资料:...

  • 15317508721设计一个一元多项式简单的计算器(C语言)
    丁林胃printf("the first duoxiangshi is:\\n");L1.PrintMform();\/\/输出第一个多项式 printf("the second duoxiangshi is:\\n");L2.PrintMform();\/\/输出第二个多项式 Node *p = L1.head->next;\/\/\/从这里开始 Node *q = L2.head->next;\/\/是计算多项式L1-L2,结果存入L1 while(p!=NULL){...

  • 15317508721如何用C语言实现一元多项式简单计算器的设计
    丁林胃\/*:---一元稀疏多项式计算(部分)--- 基本功能:(1)输入并建立多项式;(2)多项式输出,以 c1,e1,c2,e2,...输出 其中ci为系数,ei为指数;(3)多项式相加,c=a+b。说明: (1)多项式一指数升序排序,但输入时不检查;(2)以带头指针的单链表存储。---*\/ define OK 1 define FAILE 0 defin...

  • 15317508721一元稀疏多项式计算器
    丁林胃设计一个一元稀疏多项式简单计算器。设计要求:一元稀疏多项式简单计算器的基本功能是:(1)输入并建立多项式——creatpolyn();(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数升序排列 ——printpolyn();(3)多项式a和b相加,建立...

  • 15317508721设计一个一元稀疏多项式简单计算器。
    丁林胃设计一个一元稀疏多项式简单计算器。 一元稀疏多项式简单计算器的基本功能是:(1)输入并建立多项式;(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,,,cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和... 一元稀疏多项式简单计算器的基本功能是:(1) 输入并建立多项式;(2) 输出多项式,输出形式为整数...

  • 15317508721一元多项式简单计算器
    丁林胃<< "欢迎使用计算器"<<endl <<"请输入表达式进行计算或者输入空白行退出"<<endl;for(;;){ cin.getline(buffer,sizeof buffer);eatspaces(buffer);if(!buffer[0])return 0;cout<<"\\t="<<expr(buffer)<<endl<<endl;} } void eatspaces(char* str){ int i = 0;int j = 0;while((*...

  • 15317508721一元多项式简单的计算器(程序设计题)
    丁林胃typedef struct PNode { int coef;int expn;struct PNode *next;}*POLY; \/\/POLY为一元多项式的类型 void CreatPoly(POLY &H,int n) \/\/一元多项式的创建操作,其中n为一元多项式的项数 { int i,coef,expn;POLY p,s;H=(POLY)malloc(sizeof(struct PNode));H->next=NULL;p=H;for(i...

  • 15317508721一元多项式简单的计算器
    丁林胃\/\/一元稀疏多项式计算器 include <stdio.h> include <stdlib.h> define OK 1;define READ(I) while (((I)=getchar())=='\\n'); \/\/读入合法字符 typedef int status;typedef struct PolyNode { float coef;int expn;struct PolyNode *next;}Poly,*P_Poly;status CreatPoly(P_Poly*,int);...

  • 相关主题精彩

    版权声明:本网站为非赢利性站点,内容来自于网络投稿和网络,若有相关事宜,请联系管理员

    Copyright © 喜物网