一个一元稀疏多项式简单计算器课程设计报告Word格式文档下载.docx
《一个一元稀疏多项式简单计算器课程设计报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《一个一元稀疏多项式简单计算器课程设计报告Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
一元稀疏多课式课算器
课入建立多课式并
课出多课式
课算多课式在x
课的课
课算a+b课算a-b
课束
1.4课课分析
1、课课分析
2、行课果运
1.5源程序代课
#include<
stdio.h>
stdlib.h>
voidInsert(Polynp,Polynh){if(p->
coef==0)free(p);
else{Polynq1,q2;
q1=h;
q2=h->
next;
while(q2&
&
p->
expn<
q2->
expn){q1=q2;
q2=q2->
}
if(q2&
expn==q2->
expn){q2->
coef+=p->
coef;
free(p);
if(!
coef){q1->
next=q2->
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<
m;
i++){p=(Polyn)malloc(sizeof(structPolynomial));
课课入第课的系指数与数用空格隔课printf("
%d,:
"
i+1);
scanf("
%f%d"
&
coef,&
expn);
Insert(p,head);
}returnhead;
}voidDestroyPolyn(Polynp){Polynq1,q2;
q1=p->
q2=q1->
while(q1->
next){free(q1);
q1=q2;
}}
voidPrintPolyn(PolynP){Polynq=P->
intflag=1;
q){putchar('
0'
);
printf("
\n"
return;
}while(q){if(q->
coef>
0&
flag!
=1)putchar('
+'
if(q->
coef!
=1&
q->
=-1){printf("
%g"
q->
coef);
if(q->
expn==1)putchar('
X'
elseif(q->
expn)printf("
X^%d"
else{if(q->
coef==1){if(!
expn)putchar('
1'
elseif(q->
elseprintf("
coef==-1){if(!
-1"
expn==1)printf("
-X"
elseprintf("
-X^%d"
}}q=q->
flag++;
}printf("
}
intcompare(Polyna,Polynb){if(a&
b){
b||a->
expn>
b->
expn)return1;
elseif(!
a||a->
expn)
return-1;
elsereturn0;
}elseif(!
a&
b)return-1;
elsereturn1;
PolynAddPolyn(Polynpa,Polynpb){
Polynqa=pa->
Polynqb=pb->
Polynheadc,hc,qc;
hc=(Polyn)malloc(sizeof(structPolynomial));
hc->
headc=hc;
while(qa||qb){qc=(Polyn)malloc(sizeof(structPolynomial));
switch(compare(qa,qb)){
case1:
{qc->
coef=qa->
qc->
expn=qa->
expn;
qa=qa->
break;
case0:
coef+qb->
qa=qa->
qb=qb->
case-1:
{qc->
coef=qb->
qc->
expn=qb->
qb=qb->
break;
}}if(qc->
=0)
{qc->
next=hc->
next=qc;
hc=qc;
}elsefree(qc);
}returnheadc;
}PolynSubtractPolyn(Polynpa,Polynpb){
Polynh=pb;
Polynp=pb->
Polynpd;
while(p)
{p->
coef*=-1;
p=p->
}pd=AddPolyn(pa,h);
for(p=h->
p;
p=p->
next)p->
returnpd;
}
floatValuePolyn(Polynhead,intx){Polynp;
inti,t;
floatsum=0;
for(p=head->
next){t=1;
for(i=p->
i!
=0;
){if(i<
0){t/=x;
i++;
}else{t*=x;
i--;
}}sum+=p->
coef*t;
}returnsum;
PolynMultiplyPolyn(Polynpa,Polynpb)
{Polynhf,pf;
Polynqa=pa->
hf=(Polyn)malloc(sizeof(structPolynomial));
hf->
for(;
qa;
next){for(qb=pb->
qb;
next){
pf=(Polyn)malloc(sizeof(structPolynomial));
pf->
coef*qb->
pf->
expn+qb->
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);
b:
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:
课课课操作,while(a){printf("
\n"
%d"
f);
switch(f){
多课式case1:
{printf("
\na="
PrintPolyn(pa);
多课式case2:
\nb="
PrintPolyn(pb);
课入的课,case3:
xx="
x);
课printf("
\nx=%da=%.3f\n"
x,ValuePolyn(pa,x));
}
课入的课,case4:
{printf("
\nx=%db=%.3f\n"
x,ValuePolyn(pb,x));
}case5:
{pc=AddPolyn(pa,pb);
\na+b="
PrintPolyn(pc);
case6:
{pc=SubtractPolyn(pa,pb);
printf("
\na-b="
case7:
{pc=MultiplyPolyn(pa,pb);
\na*b="
PrintPolyn(pc);
{DestroyPolyn(pa);
DestroyPolyn(pb);
a=0;
您的课课课课~课重新课default:
\n!
}}}}
2哈夫曼课/课课器
2.1述概
本课程课课用于建立哈夫曼课~课其课行课课、课课以及打印。
2.2课课容内
利用哈夫曼课课课行信息通信可以大大提高信道利用率~课短信息课课课课~降低课课
成本。
但是~课要求在课送端通课一课课系课课待课课据课先课课~在接受端课的课个数将来数
据课行课课;
课原,。
课于工信道;
可以向课课信息的通道,~每端都需要一双即双个
完整的课课课系课。
课课课课的信息站一哈夫曼的课课课系课。
写个/
基本要求,
初始化。
课端课入字符集大小从及个字符和个课课~建立哈夫曼课~1nnm
并将它存于文件中。
课课。
利用已建立好的哈夫曼课;
如不在存~课文件中的正文课行课课~内从2
然后课果存入文件中。
将
解课。
利用已建好的哈夫曼课文件中的代课课行课课~课果存入文件中。
将3
打印哈夫曼课。
已在存中的哈夫曼课以直课的方式课示在课端上~同课将内4
将写字符形式的哈夫曼课入文件中。
初始化,课入一串字符~课算不同的字符出课的课率~根据;
以课课字符出1
课的次作课其出课课率,~根据课课建立哈夫曼课~课出每一课字符的哈夫曼课课。
数
利用求出的哈夫曼课课~课课正文;
字符串,课行课课~课出。
并2
课于得到的一串课课~利用已求得得哈夫曼课课课行课课~课出的正文课出将。
3
以课的形式课出哈夫曼课。
4
2.3要课课概
typedefstructnode1
{
datatyped[MAX];
intweight[MAX];
课度intlen;
//
}nodes;
课课定课了课~分课用以存放哈夫曼课的课课字和课课~外课定课了哈夫曼课课课构体两个数另
的课度。
typedefstructnode2
{
datatypedata;
intquan;
structnode2*lchild,*rchild,*next;
}Node;
课课用以存放哈夫曼课的课课字、课课、左孩子、右孩子、以及下一指课~以课课课基课。
构体个
课函用以课课排序数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)
哈夫曼课/课课器
建立哈夫曼课
课课课课
打印哈夫曼课
2.4课课分析
1,一课始课课课课课不少小课课~如某课量缺少定课~函课用位置出课~通课课出课果数课课~基本课课已改正。
2.5源程序代课
string.h>
typedefchardatatype;
#defineMAX100charbin[500];
intnum=0;
inttop1=-1;
intmm=10;
typedefstructnode1{datatyped[MAX];
intweight[MAX];
intlen;
}nodes;
typedefstructnode2{datatypedata;
intquan;
}Node;
typedefNode*linknode;
nodes*n;
Node*init(Node*head){returnNULL;
}nodes*sort(nodes*s){inti,j;
datatypetemp1;
inttemp2;
=s->
len-2;
i++)for(j=i+1;
j<
len-1;
j++){
if(s->
weight[i]>
s->
weight[j]){temp1=s->
d[i];
d[i]=s->
d[j];
s->
d[j]=temp1;
temp2=s->
weight[i];
weight[i]=s->
weight[j];
weight[j]=temp2;
}}returns;
}voidprint(nodes*s){inti;
len;
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;
k<
leng;
k++)n->
weight[k]=0;
k++){if(m==0){n->
d[m]=txt[k];
n->
weight[m]=n->
weight[m]+1;
m++;
elsefor(v=0;
v<
v++){
if(n->
d[v]==txt[k]){n->
weight[v]=n->
weight[v]+1;
}};
if(v==m){n->
n->
len=m;
n=sort(n);
是否要保存文件;
课入代表是~课入其他代表否,,printf("
\ty"
%c"
p);
c=getchar();
课课入要保存的文件名,if(p=='
y'
){printf("
%s"
filename);
fp=fopen(filename,"
w"
fprintf(fp,"
txt);
fclose(fp)}returnn;
Node*buildlinks(Node*head){
Node*p=NULL,*q=head;
intj=0;
p=(Node*)malloc(sizeof(Node));
p->
data=n->
quan=n->
lchild=p->
rchild=NULL;
while(j<
len){j++;
if(head==NULL)head=p;
elseq->
q=p;
p=(Node*)malloc(sizeof(Node));
if(head!
=NULL)q->
returnhead;
Node*readkeybords(Node*head,chartxt[100]){n=keyinsert(n,txt);
课课字符课课课,printf("
\t\n"
print(n);
head=buildlinks(head);
Node*readfile(Node*head,chartxt[100]){
inti=0,m=0,v,k,leng;
charfilename[10];
n=(nodes*)malloc(sizeof(nodes));
课课入要课出的文件名,printf("
if((fp=fopen(filename,"
r"
))==NULL){printf("
can'
topenfile!
exit(0);
fscanf(fp,"
fclose(fp);
k++){if(m==0){n->
v++){
d[v]==txt[k]){n->
}};
if(v==m){n->
m++;
}}
课课字符课课课,n->
sort(n);
\t\n"
head=buildlinks(head);
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;
lchild;
if(p)bin[++top1]='
while(top>
=0&
tag[top]==1){p=stack[top--]