| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 944 人关注过本帖
标题:改下程序再实现这个功能
只看楼主 加入收藏
DKCN
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-28
收藏
 问题点数:0 回复次数:1 
改下程序再实现这个功能

一元多项式简单的计算器
此计算器主要完成多项式的加法,减法,乘法等运算

实现功能:(!)输入并建立多项式
(2)输出多项式
(3)作两个多项式相乘的运算,建立并输出积多项式
(4)作两个多项式相除的运算,建立并输出商多项式

#include<stdio.h>
#include<stdlib.h>

typedef
struct term
{
short expn; /*幂次*/
double coef; /*系数*/
struct term* next;
}
Term;

/*为了说明问题以下仅演示两个固定多项式
f(x)=3x^3-2x^2+x-1.5
g(x)=4x^4-3x^3+x+0.5
的加法与减法
*/
int main()
{
Term* create(int,double[]);
Term* chains(Term*,Term*,char);
void output(Term*);
void Free(Term*);
double fx[]={ 3,-2,1,-1.5};
double gx[]={4,-3,0,1, 0.5};
Term *hf,*hg,*hsum,*hdif;

/*首先为f(x),g(x)建立链表*/
hf=create(3,fx);
hg=create(4,gx);

/*调用多项式"加法"*/
hsum=chains(hf,hg,'+');
/*遍历hsum输出"和式"*/
output(hsum);
free(hsum);

/*调用多项式"减法"*/
hdif=chains(hf,hg,'-');
/*遍历hdif输出"差式"*/
output(hdif);
free(hdif);

return 0;
}

Term *create(int expmax,double f[])
{
int i;
Term *p,*q,*head=NULL;
for(i=0;i<=expmax;i++)
if(f[i]!=0.0)
{ p=(Term*)malloc(sizeof(Term));
p->coef=f[i];
p->expn=expmax-i;
if(head==NULL)head=p;
else q->next=p;
q=p;
}
q->next=NULL;
return head;
}

/*两链表pb,pg合并。合并原则:运算符op*/
Term *chains(Term*pb,Term*pg,char op)
{
Term *head=NULL,*p;
int i,expmax=0;
if(pb==NULL && pg==NULL)
return head;
if(pb!=NULL)expmax=pb->expn;
if(pg!=NULL&&expmax<pg->expn)expmax=pg->expn;
p=head=(Term*)malloc((expmax+1)*sizeof(Term));
/*构造总表(置空)*/
for(i=0;i<expmax;i++,p++)
{
p->expn=expmax-i;
p->coef=0.0;
p->next=p+1;
}
p->expn=0;
p->coef=0.0;
p->next=NULL;

/*将pb填入总表*/
p=head;
while(pb!=NULL)
{
while(p->expn>pb->expn)p=p->next;
p->coef=pb->coef;
pb=pb->next;
}

/*从总表加上或减去pg*/
p=head;
while(pg!=NULL)
{
while(p->expn>pg->expn)p=p->next;
if(op=='+')
p->coef+=pg->coef;
else if(op=='-')
p->coef-=pg->coef;
if(p->coef==0.0)
{ if(p==head)head=p->next;
else(p-1)->next=p->next;
/*free(p);删零系数结点*/
}
pg=pg->next;
}
return head;
}

void output(Term* head)
{ Term *p =head;
while(p!=NULL)
{
if(p->coef==+1 && p->expn)printf("+");
else if(p->coef==-1 && p->expn)printf("-");
else if(p==head)printf( "%.2lf",p->coef);
else printf("%+.2lf",p->coef);
if(p->expn==1)printf("x");
if(p->expn>=2)printf("x^%d",p->expn);
p=p->next;
}
printf("\n");
}

搜索更多相关主题的帖子: 计算器 include double 多项式 
2006-07-08 16:54
DKCN
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-28
收藏
得分:0 
帮忙下嘛
2006-07-08 16:54
快速回复:改下程序再实现这个功能
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052017 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved