完整word版一元多项式计算器报告C语言编程.docx

上传人:b****5 文档编号:2781383 上传时间:2022-11-15 格式:DOCX 页数:10 大小:56.24KB
下载 相关 举报
完整word版一元多项式计算器报告C语言编程.docx_第1页
第1页 / 共10页
完整word版一元多项式计算器报告C语言编程.docx_第2页
第2页 / 共10页
完整word版一元多项式计算器报告C语言编程.docx_第3页
第3页 / 共10页
完整word版一元多项式计算器报告C语言编程.docx_第4页
第4页 / 共10页
完整word版一元多项式计算器报告C语言编程.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

完整word版一元多项式计算器报告C语言编程.docx

《完整word版一元多项式计算器报告C语言编程.docx》由会员分享,可在线阅读,更多相关《完整word版一元多项式计算器报告C语言编程.docx(10页珍藏版)》请在冰豆网上搜索。

完整word版一元多项式计算器报告C语言编程.docx

完整word版一元多项式计算器报告C语言编程

实验报告

 

题目:

编制一个一元多项式基本运算的程序

姓名:

学号:

PB110130

一、需求分析

1.在通常的应用中,多项式的次数可能很高且变化很大,使得顺序存储结构的最大长度很难确定。

由稀疏多项式的特点,故采用链式存储结构,可以不会带来浪费存储空间。

2.程序中单链表存储,根据链表的指数域,对链表进行升序排序,可给运算带来方便。

3.程序设计是在VC6.0环境下设计的的。

4.程序执行的命令为(程序主界面):

二、概要设计

抽象数据类型一元多项式的定义如下:

1.LNode*MakeNode(doublecoef,intexp)通过传入指数和系数创建一个节点,返回该节点的地址。

2.voidInitList(LinkList&L)初始化,带头节点

3.voidPrintPolyn(LinkListL)传入链表的指针,打印该链表

4.LinkListCreatPolyn(void)//输入m项的系数和指数,建立表示一元多项式的有序链表L

5.doubleSumPolyn(LinkListL,doublex)传入链表的指针及x值,求多项式的值。

6.voidDestroyPolyn(LinkList&L)销毁多项式,去掉头节点

7.voidClearPolyn(LinkList&L)清空多项式,保留节点

8.voidCopyPolyn(LinkListLa,LinkList&Lb)将La位置的多项式复制到Lb位置

9.voidAddPolyn(LinkListL,LinkListJ,LinkList&K)将a和b多项式相加存到c

10.voidMultiplyPolyn(LinkListL,LinkListJ,LinkList&K)将a和b相减存到c

11.voidMultiplyPolyn(LinkListL,LinkListJ,LinkList&K)将a和b多项式相乘存到c

12。

voidOrderInsert(LinkListL,LNode*r){//根据链表的expn指数域,对链表进行升序插入。

13。

voidDifferentialPolyn(LinkListL,LinkList&L2)对L1求导存到L2

14.voidIntegralPolyn(LinkListL,LinkList&L2)对L1积分存到L2

2。

主程序:

voidmain()

{初始化;

While

(1){

Switch(){

选择命令;

处理命令;

}

}

三、详细设计

1.元素类型、结点类型和指针类型

typedefstructPolyNode{

intexpn;//指数

doublecoef;//系数

structPolyNode*next;

}LNode,*LinkList;

 

2.几个基本操作的函数

1.

LNode*MakeNode(doublecoef,intexpn)//制造节点

{

LNode*p;

p=(LNode*)malloc(sizeof(LNode));

p—〉coef=coef;

p—〉expn=expn;

p->next=NULL;

returnp;

}

2。

voidOrderInsert(LinkListL,LNode*r){//根据链表的expn指数域,对链表进行升序插入

if(!

L)

printf("error”);

LNode*p,*q;

p=L;

while(p—>next&&p->next—>expn〈r—>expn)p=p->next;

if(p—>next&&p-〉next-〉expn==r-〉expn)

p—〉next—>coef+=r—〉coef;

if(p-〉next—>coef==0){

q=p—〉next;

p—>next=q->next;

free(q);

}

free(r);

else{

r—>next=p—〉next;

p—〉next=r;

}

3。

voidAddPolyn(LinkListL,LinkListJ,LinkList&K){//多项式相加

if(!

L||!

J){

printf("error\n”);

return;}

LNode*p,*q,*m;

p=L->next;

q=J-〉next;

InitList(K);

while(p)

m=MakeNode(p—>coef,p-〉expn);

OrderInsert(K,m);

p=p—〉next;

while(q){

m=MakeNode(q->coef,q-〉expn);

OrderInsert(K,m);

q=q—>next;

}

4.

voidMultiplyPolyn(LinkListL,LinkListJ,LinkList&K){//多项式相乘

if(!

L||!

J){

printf(”error");

return;

}

LNode*p,*q,*m;

p=L->next;

InitList(K);

while(p){

q=J—>next;

while(q){

m=MakeNode(p—>coef*q—>coef,p—〉expn+q->expn);

OrderInsert(K,m);

q=q-〉next;

p=p—〉next;

5.

LinkListCreatPolyn(void)//输入m项的系数和指数,建立表示一元多项式的有序链表L

LNode*p;

LinkListhead;

doublec;

inte;

InitList(head);

printf("输入系数、指数,系数为0时结束”);

while

(1){

scanf(”%lf”,&c);

if(c==0)break;

scanf(”%d",&e);

p=MakeNode(c,e);

OrderInsert(head,p);

}

returnhead;

6。

voidDifferentialPolyn(LinkListL,LinkList&L2){//求导

LNode*p,*r;

if(!

L)return;

InitList(L2);

r=L2;

p=L—〉next;

while(p){

if(p—>expn==0)

r—〉next=MakeNode(0,0);

else

r—>next=MakeNode(p—>coef*p-〉expn,p—〉expn-1);

r=r—〉next;

p=p->next;

r->next=NULL;

}

3.主函数

#defineN12

voidmain(){

LinkListP[N]={NULL};

intmenu,i,j,l;

doublek,sum;

while

(1)

printf(”\n”);

printf("多项式计算器\n”);

printf("======================================\n");

printf("新建—-1打印——2复制-—3\n");

printf(”求值-—4相加--5相减——6\n”);

printf(”微分-—7销毁-—8清空——9\n”);

printf(”积分-—10相乘-—11退出-—0\n");

printf(”======================================\n");

printf("请选择:

\n");

scanf(”%d”,&menu);

switch(menu){

case0:

return;

case1:

printf("输入新多项式的下标(0--%d):

”,N-1);

scanf(”%d",&i);

P[i]=CreatPolyn();

break;

case2:

for(i=0;i〈N;i++){

printf(”P[%d]=",i);

printPolyn(P[i]);

break;

case3:

printf("输入被复制的多项式和新多项式的下标(0——%d):

”,N—1);

scanf(”%d%d”,&i,&j);

CopyPolyn(P[i],P[j]);

break;

case4:

printf(”输入要求值多项式的下标(0—-%d)和X值:

",N-1);

scanf("%d%lf",&i,&k);

sum=SumPolyn(P[i],k);

printf(”多项式值为%lf”,sum);

break;

case5:

printf(”输入相加两项的多项式和新多项式的下标(0——%d):

”,N-1);

scanf(”%d%d%d",&i,&j,&l);

AddPolyn(P[i],P[j],P[l]);

break;

case6:

printf(”输入减两项的多项式和新多项式的下标(0--%d):

”,N-1);

scanf("%d%d%d”,&i,&j,&l);

MinusPolyn(P[i],P[j],P[l]);

break;

case7:

printf(”输入求导的多项式的下标(0-—%d)和新多项式的下标(0—-%d):

",N—1,N—1);

scanf("%d%d",&i,&j);

DifferentialPolyn(P[i],P[j]);

break;

case8:

printf(”输入被销毁多项式的下标(0—-%d):

",N—1);

scanf(”%d”,&i);

DestroyPolyn(P[i]);

break;

case9:

printf(”输入被清空多项式的下标(0—-%d):

”,N—1);

scanf("%d”,&i);

ClearPolyn(P[i]);

break;

case10:

printf("输入求积分的多项式的下标(0——%d)和新多项式的下标(0-—%d):

”,N-1,N-1);

scanf("%d%d",&i,&j);

IntegralPolyn(P[i],P[j]);

break;

case11:

printf(”输入相乘两项的多项式和新多项式的下标(0-—%d):

",N—1);

scanf("%d%d%d”,&i,&j,&l);

MultiplyPolyn(P[i],P[j],P[l]);

break;

}

四、调试分析

1.刚开始时,忽略了一些变量参数的标识"&",使调试程序时费了不少功夫。

应注重确定参数的变量

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

当前位置:首页 > 医药卫生 > 预防医学

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

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