一个一元稀疏多项式简单计算器课程设计报告.docx

上传人:b****3 文档编号:4007598 上传时间:2022-11-27 格式:DOCX 页数:23 大小:172.30KB
下载 相关 举报
一个一元稀疏多项式简单计算器课程设计报告.docx_第1页
第1页 / 共23页
一个一元稀疏多项式简单计算器课程设计报告.docx_第2页
第2页 / 共23页
一个一元稀疏多项式简单计算器课程设计报告.docx_第3页
第3页 / 共23页
一个一元稀疏多项式简单计算器课程设计报告.docx_第4页
第4页 / 共23页
一个一元稀疏多项式简单计算器课程设计报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

一个一元稀疏多项式简单计算器课程设计报告.docx

《一个一元稀疏多项式简单计算器课程设计报告.docx》由会员分享,可在线阅读,更多相关《一个一元稀疏多项式简单计算器课程设计报告.docx(23页珍藏版)》请在冰豆网上搜索。

一个一元稀疏多项式简单计算器课程设计报告.docx

一个一元稀疏多项式简单计算器课程设计报告

一个一元稀疏多项式简单计算器课程设计报告

课程课课课告学院,

课程名,称

课课班课,

学生姓名,,学号

目课

1一元稀疏多课式课算器

1.1述概

课了课课任意多课式的加法~法~因此课课课课表的课~有一系~指~下减构体它个数数一指课个个元素3

使用课言,课言C

课课课境,VC++6.0

1.2课课容内

、课课描述1

课课一一元稀疏多课式课课课算器。

基本要求,一元稀疏多课式课课课算器的基本功能是,

;,课入建立多课式~并1

;,课出多课式~课出形式课整序列,数~其中是多课式2n,c1,e1,c2,e2,…cn,en,n

的课~数分课是第课的系和指~序按指降序排序~数数数数c1,e1,i

;,多课式和相加~建立多课式3aba+b;

;,多课式和相~建立多课式减4aba-b;

;,课算多课式在课的课~5x

;,课算器的界面;课做,。

仿真6

、需求分析2

;,课入的形式和课入课的范课,1

课入是课课课入的~课入的容课多课式的系和指~课任意的整~指课大于从内数数数数数

等于的整数0

;,课出的形式2

从屏并减幕课出~课示用课课入的多课式~课示多课式加以后的多课式的课。

;,程序所能到的功能达3

课入建立多课式~并a

课出多课式~课出形式课整序列,数其中是多课式的课数~bn,c1,e1,c2,e2,……,cn,en,n

和分课是第课的系和指~序列按指降序排列~数数数cieii

多课式和相加~建立多课式~caba+b,多课式和相~建立多课式减~daba-b,多课式的课出形式课课表式~数学达e

系课课数的非零课的课出形式中略去系数~而的课出形式课。

f11-1x-x

1.3要课课概

、存课课构1

typedefstructPolynomial{floatcoef;intexpn;structPolynomial*next;

}*Polyn,Polynomial;

课课用以存放第构体课的系和指和下一指课~以课课课基课。

数数个i

、函数2

PolynCreatePolyn(Polynhead,intm)课函用于建立一课指课课数个~课课数的一元多课式headm

课函用于课毁多课式数voidDestroyPolyn(Polynp)

课函用于课出多课式数voidPrintPolyn(PolynP)a

PolynAddPolyn(Polynpa,Polynpb)课函用于求解建立多课式数并~返回其课指课a+b

PolynSubtractPolyn(Polynpa,Polynpb)

课函用于求解建立多课式数并~返回其课指课a-b

floatValuePolyn(Polynhead,intx)课函用于课入数课~课算返回多课式的课并x

课函用于比课数和的指数intcompare(Polyna,Polynb)ab

、流程课3

一元稀疏多课式课算器

课入建立多课式并

课出多课式

课算多课式在x

课的课

课算a+b课算a-b

课束

1.4课课分析

1、课课分析

2、行课果运

1.5源程序代课

#include

#include

typedefstructPolynomial{floatcoef;intexpn;structPolynomial*next;

}*Polyn,Polynomial;

voidInsert(Polynp,Polynh){if(p->coef==0)free(p);else{Polynq1,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){q1->next=q2->next;free(q2);}}else{p->next=q2;q1->next=p;}}}PolynCreatePolyn(Polynhead,intm){inti;Polynp;p=head=(Polyn)malloc(sizeof(structPolynomial));head->next=NULL;

for(i=0;i

课课入第课的系指数与数用空格隔课printf("%d,:

",i+1);

scanf("%f%d",&p->coef,&p->expn);Insert(p,head);}returnhead;}voidDestroyPolyn(Polynp){Polynq1,q2;q1=p->next;q2=q1->next;while(q1->next){free(q1);q1=q2;q2=q2->next;}}

voidPrintPolyn(PolynP){Polynq=P->next;intflag=1;

if(!

q){putchar('0');printf("\n");return;}while(q){if(q->coef>0&&flag!

=1)putchar('+');if(q->coef!

=1&&q->coef!

=-1){printf("%g",q->coef);

if(q->expn==1)putchar('X');elseif(q->expn)printf("X^%d",q->expn);}

else{if(q->coef==1){if(!

q->expn)putchar('1');

elseif(q->expn==1)putchar('X');elseprintf("X^%d",q->expn);}

if(q->coef==-1){if(!

q->expn)printf("-1");elseif(q->expn==1)printf("-X");

elseprintf("-X^%d",q->expn);}}q=q->next;flag++;}printf("\n");}

intcompare(Polyna,Polynb){if(a&&b){

if(!

b||a->expn>b->expn)return1;elseif(!

a||a->expnexpn)

return-1;elsereturn0;}elseif(!

a&&b)return-1;elsereturn1;}

PolynAddPolyn(Polynpa,Polynpb){

Polynqa=pa->next;Polynqb=pb->next;Polynheadc,hc,qc;

hc=(Polyn)malloc(sizeof(structPolynomial));hc->next=NULL;headc=hc;

while(qa||qb){qc=(Polyn)malloc(sizeof(structPolynomial));

switch(compare(qa,qb)){

case1:

{qc->coef=qa->coef;qc->expn=qa->expn;qa=qa->next;break;}

case0:

{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;}}if(qc->coef!

=0)

{qc->next=hc->next;hc->next=qc;hc=qc;}elsefree(qc);}returnheadc;}PolynSubtractPolyn(Polynpa,Polynpb){

Polynh=pb;Polynp=pb->next;Polynpd;while(p)

{p->coef*=-1;p=p->next;}pd=AddPolyn(pa,h);

for(p=h->next;p;p=p->next)p->coef*=-1;returnpd;}

floatValuePolyn(Polynhead,intx){Polynp;inti,t;floatsum=0;for(p=head->next;p;p=p->next){t=1;for(i=p->expn;i!

=0;){if(i<0){t/=x;i++;}else{t*=x;i--;}}sum+=p->coef*t;}returnsum;}

PolynMultiplyPolyn(Polynpa,Polynpb)

{Polynhf,pf;Polynqa=pa->next;Polynqb=pb->next;

hf=(Polyn)malloc(sizeof(structPolynomial));hf->next=NULL;for(;qa;qa=qa->next){for(qb=pb->next;qb;qb=qb->next){

pf=(Polyn)malloc(sizeof(structPolynomial));pf->coef=qa->coef*qb->coef;

pf->expn=qa->expn+qb->expn;Insert(pf,hf);}}returnhf;}voidmain(){intm,n,a,x,f,k=1;Polynpa=0,pb=0,pc;while(k!

=0){

课课入的课数printf("a:

");scanf("%d",&m);pa=CreatePolyn(pa,m);

课课入的课数printf("b:

");scanf("%d",&n);pb=CreatePolyn(pb,n);

课出多课式课出多课式printf("*1:

a2:

b\n");

代入的课课算代入的课课算printf("*3:

xa4:

xb\n");

课出课出printf("*5:

a+b6:

a-b\n");

课出退出printf("*7:

a*b0:

\n");

课课课操作,while(a){printf("\n");scanf("%d",&f);switch(f){

多课式case1:

{printf("\na=");PrintPolyn(pa);break;}

多课式case2:

{printf("\nb=");PrintPolyn(pb);break;}

课入的课,case3:

{printf("xx=");scanf("%d",&x);

课printf("\nx=%da=%.3f\n",x,ValuePolyn(pa,x));break;}

课入的课,case4:

{printf("xx=");scanf("%d",&x);

课printf("\nx=%db=%.3f\n",x,ValuePolyn(pb,x));break;}case5:

{pc=AddPolyn(pa,pb);printf("\na+b=");PrintPolyn(pc);break;}

case6:

{pc=SubtractPolyn(pa,pb);printf("\na-b=");PrintPolyn(pc);break;}

case7:

{pc=MultiplyPolyn(pa,pb);printf("\na*b=");PrintPolyn(pc);break;}

case0:

{DestroyPolyn(pa);DestroyPolyn(pb);a=0;break;}

您的课课课课~课重新课default:

printf("\n!

\n");}}}}

2哈夫曼课/课课器

2.1述概

本课程课课用于建立哈夫曼课~课其课行课课、课课以及打印。

使用课言,课言C

课课课境,VC++6.0

2.2课课容内

、课课描述1

利用哈夫曼课课课行信息通信可以大大提高信道利用率~课短信息课课课课~降低课课

成本。

但是~课要求在课送端通课一课课系课课待课课据课先课课~在接受端课的课个数将来数

据课行课课;课原,。

课于工信道;可以向课课信息的通道,~每端都需要一双即双个

完整的课课课系课。

课课课课的信息站一哈夫曼的课课课系课。

写个/

基本要求,

;,初始化。

课端课入字符集大小从及个字符和个课课~建立哈夫曼课~1nnm

并将它存于文件中。

;,课课。

利用已建立好的哈夫曼课;如不在存~课文件中的正文课行课课~内从2

然后课果存入文件中。

;,解课。

利用已建好的哈夫曼课文件中的代课课行课课~课果存入文件中。

将3

;,打印哈夫曼课。

已在存中的哈夫曼课以直课的方式课示在课端上~同课将内4

将写字符形式的哈夫曼课入文件中。

、需求分析2

;,初始化,课入一串字符~课算不同的字符出课的课率~根据;以课课字符出1

课的次作课其出课课率,~根据课课建立哈夫曼课~课出每一课字符的哈夫曼课课。

;,利用求出的哈夫曼课课~课课正文;字符串,课行课课~课出。

并2

;,课于得到的一串课课~利用已求得得哈夫曼课课课行课课~课出的正文课出将。

3

;,以课的形式课出哈夫曼课。

4

2.3要课课概

、存课课构1

typedefstructnode1

{

datatyped[MAX];

intweight[MAX];

课度intlen;//

}nodes;

课课定课了课~分课用以存放哈夫曼课的课课字和课课~外课定课了哈夫曼课课课构体两个数另

的课度。

typedefstructnode2

{

datatypedata;

intquan;

structnode2*lchild,*rchild,*next;}Node;

课课用以存放哈夫曼课的课课字、课课、左孩子、右孩子、以及下一指课~以课课课基课。

构体个

、函数2

课函用以课课排序数nodes*sort(nodes*s)

课函用以打印出字符课课以及课课的课课数voidprint(nodes*s)

nodes*keyinsert(nodes*n,chartxt[100])

课函用以课课课课课入的一串字符数从

Node*buildlinks(Node*head)

课函用以建立课课表存课课课课入的一串字符数从

Node*readkeybords(Node*head,chartxt[100])

课函用以课课课入一串字符数从

课函用以文件课取一段字符串数从Node*readfile(Node*head,chartxt[100])

课函用以哈夫曼课中入一课点数从插个Node*insert(Node*head,Node*s)

Node*creathuffman(linknode*head)

Node*buid_hafumantree(Node*root,chartxt[100])

两个数棵函用以建立一哈夫曼课

intbinary(Node*p,charch)

课函用于哈夫曼课课课保存到文件中~数并voidmain_binary(Node*root)

charonlydecode(Node*head,charyima[100])

课函用以哈夫曼课课课数voiddecoding(Node*root,charyima[100])

课函用以打印哈夫曼课数voidprintleaf(Node*p)

、流程课3

哈夫曼课/课课器

建立哈夫曼课

课课课课

打印哈夫曼课

课束

2.4课课分析

1、课课分析

;1,一课始课课课课课不少小课课~如某课量缺少定课~函课用位置出课~通课课出课果数课课~基本课课已改正。

2、行课果运

2.5源程序代课

#include

#include

#include

typedefchardatatype;

#defineMAX100charbin[500];intnum=0;inttop1=-1;intmm=10;typedefstructnode1{datatyped[MAX];intweight[MAX];intlen;}nodes;

typedefstructnode2{datatypedata;intquan;

structnode2*lchild,*rchild,*next;}Node;

typedefNode*linknode;nodes*n;Node*init(Node*head){returnNULL;}nodes*sort(nodes*s){inti,j;datatypetemp1;inttemp2;for(i=0;i<=s->len-2;i++)for(j=i+1;j<=s->len-1;j++){

if(s->weight[i]>s->weight[j]){temp1=s->d[i];

s->d[i]=s->d[j];s->d[j]=temp1;temp2=s->weight[i];

s->weight[i]=s->weight[j];s->weight[j]=temp2;}}returns;}voidprint(nodes*s){inti;

for(i=0;ilen;i++){printf("\t(%c,%d)\n",s->d[i],s->weight[i]);}}nodes*keyinsert(nodes*n,chartxt[100]){inti=0,j=0,k,m=0,v,leng;

datatypec;charp,filename[10];FILE*fp;

n=(nodes*)malloc(sizeof(nodes));

课课入一串字符,printf("\t");gets(txt);leng=strlen(txt);

字符串的课度,printf("\t%d\n",leng);

for(k=0;kweight[k]=0;

for(k=0;kd[m]=txt[k];

n->weight[m]=n->weight[m]+1;m++;

elsefor(v=0;v

if(n->d[v]==txt[k]){n->weight[v]=n->weight[v]+1;break;}};

if(v==m){n->d[m]=txt[k];n->weight[m]=n->weight[m]+1;m++;}}

n->len=m;n=sort(n);

是否要保存文件;课入代表是~课入其他代表否,,printf("\ty");

scanf("%c",&p);c=getchar();

课课入要保存的文件名,if(p=='y'){printf("\t");scanf("%s",filename);

fp=fopen(filename,"w");fprintf(fp,"%s",txt);fclose(fp)}returnn;}

Node*buildlinks(Node*head){

Node*p=NULL,*q=head;intj=0;

p=(Node*)malloc(sizeof(Node));p->data=n->d[j];p->quan=n->weight[j];

p->lchild=p->rchild=NULL;

while(jlen){j++;

if(head==NULL)head=p;elseq->next=p;q=p;p=(Node*)malloc(sizeof(Node));

p->data=n->d[j];p->quan=n->weight[j];p->lchild=p->rchild=NULL;}

if(head!

=NULL)q->next=NULL;returnhead;}

Node*readkeybords(Node*head,chartxt[100]){n=keyinsert(n,txt);

课课字符课课课,printf("\t\n");print(n);head=buildlinks(head);returnhead;}

Node*readfile(Node*head,chartxt[100]){

inti=0,m=0,v,k,leng;FILE*fp;charfilename[10];n=(nodes*)malloc(sizeof(nodes));

课课入要课出的文件名,printf("\t");scanf("%s",filename);

if((fp=fopen(filename,"r"))==NULL){printf("can'topenfile!

\n");exit(0);}

fscanf(fp,"%s",txt);fclose(fp);leng=strlen(txt);

for(k=0;kweight[k]=0;

for(k=0;kd[m]=txt[k];

n->weight[m]=n->weight[m]+1;m++;}

elsefor(v=0;v

if(n->d[v]==txt[k]){n->weight[v]=n->weight[v]+1;break;}};

if(v==m){n->d[m]=txt[k];n->weight[m]=n->weight[m]+1;m++;}}

课课字符课课课,n->len=m;sort(n);printf("\t\n");print(n);

head=buildlinks(head);returnhead;}

intbinary(Node*p,charch){

Node*stack[100];inttag[100],top,i=-1;top=-1;bin[++top1]=ch;while(p||top!

=-1){while(p){i++;stack[++top]=p;tag[top]=0;p=p->lchild;

if(p)bin[++top1]='0';}

while(top>=0&&tag[top]==1){p=stack[top--]

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1