一元多项式计算数据结构课程设计

一元多项式计算数据结构课程设计
一元多项式计算数据结构课程设计

池州学院

CHIZHOU COLLEGE

《数据结构》

课程设计报告

学号:57 54 39 37 20 25 27

姓名:周田张永鹏武警温凯侨李坤

米昌华阮健健

班级:10计算机科学与技术(2)班

指导教师:

成绩:

数学与计算机科学系

一、课程设计基本情况

1、设计名称

一元多项式计算

2、主要功能

能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出;

3、设计平台

电脑、Visual c++ 6.0

二、系统设计

1、算法思想

根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应指数相加(减),若其和(差)不为零,则构成“和(差)多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别写到“和(差)多项式”中去。

因为多项式指数最高项以及项数是不确定的,因此采用线性链表的存储结构便于实现一元多项式的运算。为了节省空间,我采用两个链表分别存放多项式a 和多项式b,对于最后计算所得的多项式则利用多项式a进行存储。主要用到了单链表的插入和删除操作。

(1)一元多项式加法运算

它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为零的话,用头插法建立一个新的节点。P的指数小于q的指数的话就应该复制q的节点到多项式中。P的指数大于q的指数的话,就应该复制p节点到多项式中。当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生。

(2)一元多项式的减法运算

它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就相减;相加的和不为零的话,用头插法建立一个新的节点。p的指数小于q的指数的话,就应该复制q的节点到多项式中。P的指数大于q的指数的话就应该复制p的节点到多项式中,并且建立的节点的系数为原来的相反数;当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。

2、概要设计

(1)主函数流程图:

(注:a代表第一个一元二次方程,b代表第二个一元二次方程)

(2)一元多项式计算算法用类C语言表示:

Typedef struct00{ //项的表示,多项式的项作为LinkList的数据元素

Float coef;//细数

Int expn;//指数

}term,ElemType;//两个类型名:term用于本ADT,ElemType为LinkList的数据对象名

Typedef LinkList polynomial://用带表头的节点的有序链表表示多项式

//基本操作的函数原型说明

V oid CreatePolyn(polynomail&P);

//输入n的系数和指数,建立表示一元多项式的有序链表P 销毁一元多项式P V oid DestroyPolyn(polynomailP);

销毁一元多项式P

voidPrintPoly(polynomail P);

//打印输入一元多项式P

IntPolynLength(polynnomail P);

//返回一元多项式P中的项数

void CreatPolyn(polynomail&Pa.polunomail&Pb);

//完成多项式相加运算,即:Pa=Pa+Pb,并贤惠一元多项式Pb voidSubtractPolyn(polunomail&Papolunomail&Pb);

//完成多项式相减运算,即:Pa=Pa-Pb,并销毁一元多项式Pb

//基本操作的算法描述

Int cmp(tem a,temp b);

//依a的指数值<(或=)(或>b的住数值,分别返回-1、0和+1

V oid CreatePolyn(polynomail&P,int m){

//输入m项的系数和指数,建立表示一元多项式的有序链表P

InitList(P);h=GetHead(P);

E.coef=0.0; e.expn=-1; SerCurElem(h,e);//设置头结点的数据元素

For (i=1;i<=m;++i){ //依次输入m个非零项

Scanf(e.coef,e.epn);

If(!LocateElem(P,e,q,(*cmp)())){//当前链表中不存在该指数项

If(MakeNode(s,e))InsFirst(q,s);//生成节点并插入链表

}

}

}//CreatPolun

三、详细设计

1、算法实现

(1)输入一元多项式函数:

void shuchu(pnode *head)

{

pnode *p;

int one_time=1;

p=head;

while(p!=NULL) /*如果不为空*/

{

if(one_time==1)

{

if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/

printf("%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/

else if(p->xishu==1||p->xishu==-1)

printf("X^%d",p->zhishu); /*如果系数是1的话就直接输出+x*/

/*如果系数是-1的话就直接输出-x号*/

else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);

else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/ printf("%5.2fX^%d",p->xishu,p->zhishu);

one_time=0;

}

else{

if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/

{

if(p->xishu>0)

printf("+%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/

}

else if(p->xishu==1) /*如果系数是1的话就直接输出+x号*/

printf("+X^%d",p->zhishu);

else if(p->xishu==-1) /*如果系数是-1的话就直接输出-x号*/

printf("X^%d",p->zhishu);

else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/ printf("+%5.2fX^%d",p->xishu,p->zhishu);

else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/

printf("%5.2fX^%d",p->xishu,p->zhishu);

}

p=p->next; /*指向下一个指针*/

}

printf("\n");

}

(2)加法函数

/*两个多项式的加法运算*/

pnode * add(pnode *heada,pnode *headb)

{

pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/

float x; /*x为系数的求和*/

p=heada; /*指向第一个多项式的头*/

q=headb; /*指向第二个多项式的头*/

headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/

r=headc;

while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/

{

if(p->zhishu==q->zhishu) /*指数相等的话*/

{

x=p->xishu+q->xishu; /*系数就应该相加*/

if(x!=0) /*相加的和不为0的话*/

{

s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/

s->xishu=x;

s->zhishu=p->zhishu;

r->next=s;

r=s;

}

q=q->next;p=p->next; /*2个多项式都向右移*/

}

else if(p->zhishuzhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=q->xishu;

s->zhishu=q->zhishu;

r=s;

q=q->next; /*q向右移动*/

}

else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=p->xishu;

s->zhishu=p->zhishu;

r->next=s;

r=s;

p=p->next; /*p向右移动*/

}

}

/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL)

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=p->xishu;

s->zhishu=p->zhishu;

r->next=s;

r=s;

p=p->next;

}

/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL)

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=q->xishu;

s->zhishu=q->zhishu;

r->next=s;

r=s;

q=q->next;

}

r->next=NULL; /*最后指向空*/

headc=headc->next; /*第一个头没有用到*/

return headc; /*返回头接点*/

}

/*两个多项式的加法运算*/

pnode * add(pnode *heada,pnode *headb)

{

pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/

float x; /*x为系数的求和*/

p=heada; /*指向第一个多项式的头*/

q=headb; /*指向第二个多项式的头*/

headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/

r=headc;

while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/

{

if(p->zhishu==q->zhishu) /*指数相等的话*/

{

x=p->xishu+q->xishu; /*系数就应该相加*/

if(x!=0) /*相加的和不为0的话*/

{

s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/

s->xishu=x;

s->zhishu=p->zhishu;

r->next=s;

r=s;

}

q=q->next;p=p->next; /*2个多项式都向右移*/

}

else if(p->zhishuzhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=q->xishu;

s->zhishu=q->zhishu;

r->next=s;

r=s;

q=q->next; /*q向右移动*/

}

else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=p->xishu;

s->zhishu=p->zhishu;

r->next=s;

r=s;

p=p->next; /*p向右移动*/

}

}

/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL)

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=p->xishu;

s->zhishu=p->zhishu;

r->next=s;

r=s;

p=p->next;

}

/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL)

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=q->xishu;

s->zhishu=q->zhishu;

r->next=s;

r=s;

q=q->next;

}

r->next=NULL; /*最后指向空*/

headc=headc->next; /*第一个头没有用到*/

return headc; /*返回头接点*/

}

2、程序代码

/*一元多项式计算*/

/*程序功能:能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输出;*/

/*提示:输入完一元多项式之后,输入“0 0”结束本一元多项式的输入*/

/*注意:系数只精确到百分位,最大系数只能为999.99,指数为整数.如果需要输入更大的系数,可以对程序中5.2%f进行相应的修改*/

#include

#include

#include

#include

/*建立结构体*/

typedef struct pnode

{

float xishu; /*系数*/

int zhishu; /*指数*/

struct pnode *next; /*下一个指针*/

}pnode;

/*用头插法生成一个多项式,系数和指数输入0时退出输入*/

pnode * creat()

{

int m;

float n;

pnode *head,*rear,*s; /*head为头指针,rear和s为临时指针*/

head=(pnode *)malloc(sizeof(pnode));

rear=head; /*指向头*/

scanf("%f",&n); /*系数*/

scanf("%d",&m); /*输入指数*/

while(n!=0) /*输入0退出*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=n;

s->zhishu=m;

s->next=NULL;

rear->next=s; /*头插法*/

rear=s;

scanf("%f",&n); /*输入系数*/

scanf("%d",&m); /*输入指数*/

}

head=head->next; /*第一个头没有用到*/

return head;

}

/*调整多项式*/

void tiaozhen(pnode *head)

{

pnode *p,*q,*t;

float temp;

p=head;

while(p!=NULL)

{

q=p;

t=q->next;

while(t!=NULL)

{

if(t->zhishu>q->zhishu)

q=t;

t=t->next;

}

temp=p->xishu;p->xishu=q->xishu;q->xishu=temp;

temp=p->zhishu;p->zhishu=q->zhishu;q->zhishu=temp;

p=p->next;

}

}

/*显示一个多项式*/

void shuchu(pnode *head)

{

pnode *p;

int one_time=1;

p=head;

while(p!=NULL) /*如果不为空*/

{

if(one_time==1)

{

if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/

printf("%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/ else if(p->xishu==1||p->xishu==-1)

printf("X^%d",p->zhishu); /*如果系数是1的话就直接输出+x*/ /*如果系数是-1的话就直接输出-x号*/

else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/

printf("%5.2fX^%d",p->xishu,p->zhishu);

else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/

printf("%5.2fX^%d",p->xishu,p->zhishu);

one_time=0;

}

else{

if(p->zhishu==0) /*如果指数为0的话,直接输出系数*/

{

if(p->xishu>0)

printf("+%5.2f",p->xishu); /*如果系数是正的话前面就要加+号*/

}

else if(p->xishu==1) /*如果系数是1的话就直接输出+x号*/

printf("+X^%d",p->zhishu);

else if(p->xishu==-1) /*如果系数是-1的话就直接输出-x号*/

printf("X^%d",p->zhishu);

else if(p->xishu>0) /*如果系数是大于0的话就输出+系数x^指数的形式*/

printf("+%5.2fX^%d",p->xishu,p->zhishu);

else if(p->xishu<0) /*如果系数是小于0的话就输出系数x^指数的形式*/

printf("%5.2fX^%d",p->xishu,p->zhishu);

}

p=p->next; /*指向下一个指针*/

}

printf("\n");

}

/*两个多项式的加法运算*/

pnode * add(pnode *heada,pnode *headb)

{

pnode *headc,*p,*q,*s,*r; /*headc为头指针,r,s为临时指针,p指向第1个多项式并向右移动,q指向第2个多项式并向右移动*/

float x; /*x为系数的求和*/

p=heada; /*指向第一个多项式的头*/

q=headb; /*指向第二个多项式的头*/

headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/

r=headc;

while(p!=NULL&&q!=NULL) /*2个多项式的某一项都不为空时*/

{

if(p->zhishu==q->zhishu) /*指数相等的话*/

{

x=p->xishu+q->xishu; /*系数就应该相加*/

if(x!=0) /*相加的和不为0的话*/

{

s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/

s->xishu=x;

s->zhishu=p->zhishu;

r->next=s;

r=s;

}

q=q->next;p=p->next; /*2个多项式都向右移*/

}

else if(p->zhishuzhishu) /*p的系数小于q的系数的话,就应该复制q节点到多项式中*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=q->xishu;

s->zhishu=q->zhishu;

r->next=s;

r=s;

q=q->next; /*q向右移动*/

}

else/*p的系数大于q的系数的话,就应该复制p节点到多项式中*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=p->xishu;

s->zhishu=p->zhishu;

r->next=s;

r=s;

p=p->next; /*p向右移动*/

}

}

/*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/ while(p!=NULL)

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=p->xishu;

s->zhishu=p->zhishu;

r->next=s;

r=s;

p=p->next;

}

/*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/ while(q!=NULL)

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=q->xishu;

s->zhishu=q->zhishu;

r->next=s;

r=s;

q=q->next;

}

r->next=NULL; /*最后指向空*/

headc=headc->next; /*第一个头没有用到*/

return headc; /*返回头接点*/

}

/*两个多项式的减法运算*/

pnode * sub(pnode *heada,pnode *headb)

{

pnode *headc,*p,*q,*s,*r;

float x; /*x为系数相减*/

p=heada; /*指向第一个多项式的头*/

q=headb; /*指向第二个多项式的头*/

headc=(pnode *)malloc(sizeof(pnode)); /*开辟空间*/

r=headc;

while(p!=NULL&&q!=NULL) /*两个多项式的某一项都不为空时*/ {

if(p->zhishu==q->zhishu) /*指数相等的话*/

{

x=p->xishu-q->xishu; /*系数相减*/

if(x!=0) /*相减的差不为0的话*/

{

s=(pnode *)malloc(sizeof(pnode)); /*用头插法建立一个新的节点*/ s->xishu=x;

s->zhishu=p->zhishu;

r->next=s;

r=s;

}

q=q->next;p=p->next; /*2个多项式都向右移*/

}

else if(p->zhishuzhishu) /*p的系数小于q的系数的话*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=-q->xishu; /*建立的节点的系数为原来的相反数*/

s->zhishu=q->zhishu;

r->next=s;

r=s;

q=q->next;

}

else

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=p->xishu;

s->zhishu=p->zhishu;

r->next=s;

r=s;

p=p->next; /*p向右移动*/

}

}

while(p!=NULL) /*当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=p->xishu;

s->zhishu=p->zhishu;

r->next=s;

r=s;

p=p->next;

}

while(q!=NULL) /*当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生*/

{

s=(pnode *)malloc(sizeof(pnode));

s->xishu=-q->xishu; /*建立的节点的系数为原来的相反数*/

s->zhishu=q->zhishu;

r->next=s;

r=s;

q=q->next;

}

r->next=NULL; /*最后指向空*/

headc=headc->next; /*第一个头没有用到*/

return headc; /*返回头接点*/

}

void add_main()

{

pnode * a,*b,*c;

printf("\n输入第一个一元多项式:\n系数指数\n");

a=creat();

tiaozhen(a);

printf("\n输入第二个一元多项式:\n系数指数\n");

b=creat();

tiaozhen(b);

c=add(a,b);

printf("第一个一元多项式如下:");shuchu(a);

printf("第二个一元多项式如下:");shuchu(b);

printf("两式相加如下:");shuchu(c);

}

void sub_main()

{

pnode * a,*b,*c;

printf("\n输入第一个一元多项式:\n系数指数\n");

a=creat();

tiaozhen(a);

printf("\n输入第二个一元多项式:\n系数指数\n");

b=creat();

tiaozhen(b);

c=sub(a,b);

printf("第一个一元多项式如下:");shuchu(a);

printf("第二个一元多项式如下:");shuchu(b);

printf("两式相减如下:");shuchu(c);

}

void open()

{

printf("\n

****************************************************\n");

printf(" 功能项: * 1 两个一元多项式相加;2 两个一元多项式相减;0 退出*\n");

printf("

****************************************************\n\n请选择操作: "); }

void main()

{

int choose;

open();

while(choose!=0)

{

scanf("%d",&choose);

getchar();

switch(choose)

{

case 0:return;

case 1:

printf("\n 两个一元多项式相加\n"); add_main();choose=-1;open();break;

case 2:

printf("\n 两个一元多项式相减\n"); sub_main();choose=-1;open();break;

default:

printf("没有该选项!请重新选择操作!\n\n"); open();

}

}

}

四、测试方案及结果

1、测试方案

在Visual C++ 6.0环境中调试运行。

2、结果及分析

程序运行截图如下:

五、结论及体会

经过一周的努力,最终我们的课程设计出来了,主程序完全符合本课程设计的要求。

本次课程设计对于我们来说难度是很大的。因为对于数据结构课程设计,需要有扎实的C语言编程能力,而我们这组人C编程都一般。因此我们花了大半个星期的时间才把主程序写出来。写的过程中有不少的挫折。我们刚开始是先写出一个能键盘输入两个一元二次方程并先对每一个方程按指数降序排序。但过了很长时间都没法实现两函数的相加减。后来花了很大力气,查阅了两本资料书才实现了对两函数的相加(减),其实主要还是对链表的插入和删除操作。

总的来说本次课程设计学到了很多知识,让我们对C语言的知识有了更多的了解,也更加深了对C语言和数据结构的认识。对有些不懂的知识点现在也掌握了,学会了链表的建立,受益匪浅。

六、任务分配

周田、张永鹏:编写修改主函数,并对设计报告进行修改。

武警:给出程序设计方案,并画出程序流程图。

李坤:编写C语言伪代码。

温凯侨:编写算法思想。

阮健健、米昌华:资料收集及对课程设计总结。

七、评级

周田、张永鹏:A

武警、温凯侨、李坤:B

阮健健、米昌华:C

MATLAB数据分析与多项式计算(M)

第7章 MATLAB数据分析与多项式计算 6.1 数据统计处理 6.2 数据插值 6.3 曲线拟合 6.4 离散傅立叶变换 6.5 多项式计算 6.1 数据统计处理 6.1.1 最大值和最小值 MATLAB提供的求数据序列的最大值和最小值的函数分别为max 和min,两个函数的调用格式和操作过程类似。 1.求向量的最大值和最小值 求一个向量X的最大值的函数有两种调用格式,分别是: (1) y=max(X):返回向量X的最大值存入y,如果X中包含复数元素,则按模取最大值。 (2) [y,I]=max(X):返回向量X的最大值存入y,最大值的序号存入I,如果X中包含复数元素,则按模取最大值。 求向量X的最小值的函数是min(X),用法和max(X)完全相同。 例6-1 求向量x的最大值。 命令如下: x=[-43,72,9,16,23,47]; y=max(x) %求向量x中的最大值 [y,l]=max(x) %求向量x中的最大值及其该元素的位置 2.求矩阵的最大值和最小值 求矩阵A的最大值的函数有3种调用格式,分别是: (1) max(A):返回一个行向量,向量的第i个元素是矩阵A的第i 列上的最大值。 (2) [Y,U]=max(A):返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值的行号。 (3) max(A,[],dim):dim取1或2。dim取1时,该函数和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。 求最小值的函数是min,其用法和max完全相同。

例6-2 分别求3×4矩阵x中各列和各行元素中的最大值,并求整个矩阵的最大值和最小值。 3.两个向量或矩阵对应元素的比较 函数max和min还能对两个同型的向量或矩阵进行比较,调用格式为: (1) U=max(A,B):A,B是两个同型的向量或矩阵,结果U是与A,B 同型的向量或矩阵,U的每个元素等于A,B对应元素的较大者。 (2) U=max(A,n):n是一个标量,结果U是与A同型的向量或矩阵,U的每个元素等于A对应元素和n中的较大者。 min函数的用法和max完全相同。 例6-3 求两个2×3矩阵x, y所有同一位置上的较大元素构成的新矩阵p。 6.1.2 求和与求积 数据序列求和与求积的函数是sum和prod,其使用方法类似。设X是一个向量,A是一个矩阵,函数的调用格式为: sum(X):返回向量X各元素的和。 prod(X):返回向量X各元素的乘积。 sum(A):返回一个行向量,其第i个元素是A的第i列的元素和。 prod(A):返回一个行向量,其第i个元素是A的第i列的元素乘积。 sum(A,dim):当dim为1时,该函数等同于sum(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素之和。 prod(A,dim):当dim为1时,该函数等同于prod(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素乘积。 例6-4 求矩阵A的每行元素的乘积和全部元素的乘积。 6.1.3 平均值和中值 求数据序列平均值的函数是mean,求数据序列中值的函数是median。两个函数的调用格式为: mean(X):返回向量X的算术平均值。 median(X):返回向量X的中值。

顺序链式一元多项式加法、减法、乘法运算的实现

1.1设计内容及要求 1)设计内容 (1)使用顺序存储结构实现多项式加、减、乘运算。 例如: 10321058)(2456+-+-+=x x x x x x f ,x x x x x x g +--+=23451020107)( 求和结果:102220128)()(2356++-+=+x x x x x g x f (2)使用链式存储结构实现多项式加、减、乘运算, 10305100)(1050100+-+=x x x x f ,x x x x x x g 320405150)(10205090+++-= 求和结果:1031040150100)()(102090100++-++=+x x x x x x g x f 2)设计要求 (1)用C 语言编程实现上述实验内容中的结构定义和算法。 (2)要有main()函数,并且在main()函数中使用检测数据调用上述算法。 (3)用switch 语句设计如下选择式菜单。 ***************数据结构综合性实验**************** *******一、多项式的加法、减法、乘法运算********** ******* 1.多项式创建 ********** ******* 2.多项式相加 ********** ******* 3.多项式相减 ********** ******* 4.多项式相乘 ********** ******* 5.清空多项式 ********** ******* 0.退出系统 ********** ******* 请选择(0—5) ********** ************************************************* *请选择(0-5): 1.2数据结构设计 根据下面给出的存储结构定义: #define MAXSIZE 20 //定义线性表最大容量

一元稀疏多项式计算器实验(报告+程序)

一元稀疏多项式计数器预习报告 :刘茂学号0062 一、实验要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b。 (5)多项式求值; (6)多项式求导; (7)求多项式的乘积。 二、测试数据: 1、(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7); 2、(6x^-3-x+4.4x^2-1.2x^9+1.2x^9)-(-6x^-3+5.4x^2-x^2+7.8x^15 )=(-7.8x^15-1.2x^9+12x^-3-x); 3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5); 4、(x+x^3)+(-x-x^3)=0; 5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200); 6、(x+x^2+x^3)+0=x+x^2+x^3. 7、互换上述测试数据中的前后两个多项式。

三、思路分析 用带表头结点的单链表存储多项式。 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。 采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。 为实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q 结点的指数项。 ①若p->expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 ②若p->expn=q->expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 ③若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。 四、实验程序 //头文件 #include #include #include //定义多项式的项 typedef struct Polynomial{ float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial;

第6章matlab数据分析与多项式计算_习题答案

第6章 MATLAB数据分析与多项式计算 习题6 一、选择题 1.设A=[1,2,3,4,5;3,4,5,6,7],则min(max(A))的值是()。B A.1 B.3 C.5 D.7 2.已知a为3×3矩阵,则运行mean(a)命令是()。B A.计算a每行的平均值 B.计算a每列的平均值 C.a增加一行平均值 D.a增加一列平均值 3.在MATLAB命令行窗口输入下列命令: >> x=[1,2,3,4]; >> y=polyval(x,1); 则y的值为()。 D A.5 B.8 C.24 D.10 4.设P是多项式系数向量,A为方阵,则函数polyval(P,A)与函数polyvalm(P,A)的值()。D A.一个是标量,一个是方阵 B.都是标量 C.值相等 D.值不相等 5.在MATLAB命令行窗口输入下列命令: >> A=[1,0,-2]; >> x=roots(A); 则x(1)的值为()。 C A.1 B.-2 C. D. 6.关于数据插值与曲线拟合,下列说法不正确的是()。A A.3次样条方法的插值结果肯定比线性插值方法精度高。 B.插值函数是必须满足原始数据点坐标,而拟合函数则是整体最接近原始数据点,而不一定要必须经过原始数据点。 C.曲线拟合常常采用最小二乘原理,即要求拟合函数与原始数据的均方误差达到极小。 D.插值和拟合都是通过已知数据集来求取未知点的函数值。 二、填空题 1.设A=[1,2,3;10 20 30;4 5 6],则sum(A)= ,median(A)= 。 [15 27 39],[4 5 6[ 2.向量[2,0,-1]所代表的多项式是。2x2-1 3.为了求ax2+bx+c=0的根,相应的命令是(假定a、b、c已经赋值)。为了

一元多项式加减乘除运算

中国计量学院实验报告 实验课程:算法与数据结构实验名称:一元二项式班级:学号: 姓名:实验日期: 2013-5-7 一.实验题目: ①创建2个一元多项式 ②实现2个多项式相加 ③实现2个多项式相减 ④实现2个多项式相乘 ⑤实现2个多项式相除 ⑥销毁一元多项式 实验成绩:指导教师:

二.算法说明 ①存储结构:一元多项式的表示在计算机内可以用链表来表示,为了节省存储 空间,只存储多项式中系数非零的项。链表中的每一个结点存放多项式的一个系数非零项,它包含三个域,分别存放该项的系数、指数以及指向下一个多项式项结点的指针。创建一元多项式链表,对一元多项式的运算中会出现的各种可能情况进行分析,实现一元多项式的相加、相减操作。 ②加法算法

三.测试结果 四.分析与探讨 实验数据正确,部分代码过于赘余,可以精简。 五.附录:源代码#include<> #include<> #include<> typedef struct Polynomial { float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial; 出多项式a和b\n\t2.多项式相加a+b\n\t3.多项式相减a-b\n"); printf("\t4.多项式相除a*b\n\t5.多项式相除a/b\n\t6.销毁多项式\n"); printf("\t7.退出

\n*********************************** ***********\n"); printf("执行:"); scanf("%d",&flag); switch(flag) { case(1): printf("多项式a:");PrintPolyn(pa); printf("多项式b:");PrintPolyn(pb);break; case(2): pc=AddPolyn(pa,pb); printf("多项式a+b:");PrintPolyn(pc); DestroyPolyn(pc);break; case(3): pd=SubtractPolyn(pa,pb); printf("多项式a-b:");PrintPolyn(pd); DestroyPolyn(pd);break; case(4): pf=MultiplyPolyn(pa,pb); printf("多项式a*b:");PrintPolyn(pf); DestroyPolyn(pf);break; case(5): DevicePolyn(pa,pb); break; case(6): DestroyPolyn(pa); DestroyPolyn(pb); printf("成功销毁2个一元二项式\n"); printf("\n接下来要执行的操作:\n1 重新创建2个一元二项式 \n2 退出程序\n"); printf("执行:"); scanf("%d",&i); if(i==1) { // Polyn pa=0,pb=0,pc,pd,pf;//定义各式的头指针,pa与pb在使用前付初值NULL printf("请输入a的项数:"); scanf("%d",&m); pa=CreatePolyn(pa,m);// 建立多项式a printf("请输入b的项

实验报告——2 一元稀疏多项式计算器

华北水利水电学院一元稀疏多项式计算器实验报告 2010~2011学年第一学期 09 级计算机科学与技术专业班级: 2009119 学号: 200911902 姓名:万婷婷 一、实验目的 设计一个医院稀疏多项式简单计算器 熟练掌握线性表的基本操作在两种存储结构上的实现,其中以各种链表的操作和应用 二、实验要求 a)输入并建立多项式 b)输出多项式,输出形式为整数序列:n,c 1,e 1 ,c 2 ,e 2 ……c n ,e n ,其中n是多 项式的项数,c i ,e i 分别为第i项的系数和指数。序列按指数降序排列。 c)多项式a和b相加,建立多项式a+b,输出相加的多项式。 d)多项式a和b相减,建立多项式a-b,输出相减的多项式。 用带表头结点的单链表存储多项式。 测试数据: (1) (2x+5x8-3.1x11)+(7-5x8+11x9) (2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15) (3)(1+x+x2 +x3 +x4 +x5)+( -x3- x4) (4)(x+x2+x3)+0 (5)(x+x3)-(-x-x-3) (6) (x+x2 +x3 )+0 三、实验内容 主要算法设计 typedef struct Node { float coef; int index; struct Node *next; }LinkList; 本程序涉及到多项式的建立、多项式的输出、两个多项式的相加减。用带头结点的单链表存储多项式; 程序中共定义了5个函数:

void Insert(LinkList *p,LinkList *h)//把节点p插入到链表h中LinkList *Creat_L(LinkList *head,int m)//创建一个链表,项数为m void Printf(LinkList *L) LinkList *ADDlist(LinkList *head,LinkList *pb) LinkList *MinusList(LinkList *head,LinkList *pb) 四、程序源代码 #include #include #include #include typedef struct Node { float coef; int index; struct Node *next; }LinkList; void Insert(LinkList *p,LinkList *h)//把节点p插入到链表h中 { LinkList *q1,*q2; int flag=0; q1=h; if(p->coef==0) free(p); else { if(q1->next==NULL) { q1->next=p; }

多项式的运算(c语言实现)

#include"stdio.h" #include"stdlib.h" #include"conio.h" typedef struct Item{ double coef;//系数 int expn;//指数 struct Item *next; }Item,*Polyn; #define CreateItem(p) p=(Item *)malloc(sizeof(Item)); #define DeleteItem(p) free((void *)p); /************************************************************/ /* 判断选择函数 */ /************************************************************/ int Select(char *str) { char ch; printf("%s\n",str); printf("Input Y or N:"); do{ ch=getch(); }while(ch!='Y'&&ch!='y'&&ch!='N'&&ch!='n'); printf("\n"); if(ch=='Y'||ch=='y') return(1); else return(0); } /************************************************************/ /* 插入位置定位函数 */ /**************************************************************/ int InsertLocate(Polyn h,int expn,Item **p) { Item *pre,*q; pre=h; q=h->next; while(q&&q->expnnext; } if(!q) { *p=pre; return(1); } else if(q->expn==expn) { *p=q; return(0); } else { *p=pre; return(-1); } } /************************************************************/ /* 插入结点函数 */ /************************************************************/ void insert(Item *pre,Item *p) {

数据结构中实现一元多项式简单计算

数据结构中实现一元多项式简单计算: 设计一个一元多项式简单的计算器。 基本要求: 一元多项式简单计算器的基本功能为: (1)输入并建立多项式; (2)输出多项式; (3)两个多项式相加,建立并输出和多项式; (4)两个多项式相减,建立并输出差多项式; #include #include #define MAX 20 //多项式最多项数 typedef struct//定义存放多项式的数组类型 { float coef; //系数 int exp; //指数 } PolyArray[MAX]; typedef struct pnode//定义单链表结点类型 { float coef; //系数 int exp; //指数 struct pnode *next; } PolyNode; void DispPoly(PolyNode *L) //输出多项式 { PolyNode *p=L->next; while (p!=NULL) { printf("%gX^%d ",p->coef,p->exp); p=p->next; } printf("\n"); } void CreateListR(PolyNode *&L,PolyArray a,int n) //尾插法建表 { PolyNode *s,*r;int i; L=(PolyNode *)malloc(sizeof(PolyNode)); //创建头结点 L->next=NULL; r=L; //r始终指向终端结点,开始时指向头结点for (i=0;i

(整理)一元稀疏多项式计算器

云南大学软件学院数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)实验难度: A □ B □ C □ 学期:2012秋季学期 任课教师: 实验题目: 一元稀疏多项式计算器 小组长: 联系电话: 电子邮件: 完成提交时间:2012 年 11 月 10 日 云南大学软件学院2012学年秋季学期

《数据结构实验》成绩考核表 学号: 20111120 姓名:本人承担角色:算法设计整体流程控制 综合得分:(满分100分) 指导教师: 年月日

云南大学软件学院2010学年秋季学期 《数据结构实验》成绩考核表 学号: 20111120 姓名:本人承担角色:函数实现整体流程控制 综合得分:(满分100分) 指导教师: 年月日

(下面的内容由学生填写,格式统一为,字体: 楷体, 行距: 固定行距18,字号: 小四,个人报告按下面每一项的百分比打分。难度A满分70分,难度B满分90分)一、【实验构思(Conceive)】(10%) 多项式计算器的呈现方式是用控制台程序呈现,;多项式的加减乘以及求导的函数中利用链表保存头结点以及循环结构保存和输出数据;还有利用一个简单的降序排列的函数,在输出时更加明了。 二、【实验设计(Design)】(20%) 在头文件中申明变量,源文件中创建指数和系数的指针的头结点,并为此申请空间。首先考虑指数为0,1和系数为0,1时的特殊情况的表示;然后利用SORT函数对输出时进行降序排列;其次就是加减乘以及求导函数的实现;最后是一个输出界面的设计。 三、【实现描述(Implement)】(30%) //--------函数原型说明-------- typedef struct Node { double xishu; int zhishu;//数据域 //int data; struct Node* pnext;//指针域 }Node,*pNode; pNode phead=(pNode)malloc(sizeof(Node));//创建头节点 pNode creat_list(void);创建链表 void traverse_list(pNode phead);//遍历链表 pNode sort(pNode phead);//对链表进行降序排列 pNode add(pNode phead1,pNode phead2);//两个多项式相加 pNode hebing(pNode phead)//合并同类项 pNode multi(pNode phead1,pNode phead2);//多项式相乘 pNode sub(pNode phead1,pNode phead2);//多项式相减 //多项式求导没有声明和定义函数,而是直接卸载程序里了

数据结构一元多项式的计算

课程设计成果 学院: 计算机工程学院班级: 13计科一班 学生姓名: 学号: 设计地点(单位): 设计题目:一元多项式的计算 完成日期:年月日 成绩(五级记分制): _________________ 教师签名:_________________________ 目录 1 需求分析 ......................................................................... 错误!未定义书签。 2 概要设计 ......................................................................... 错误!未定义书签。 2.1一元多项式的建立 ............................................................... 错误!未定义书签。 2.2显示一元多项式 ................................................................... 错误!未定义书签。 2.3一元多项式减法运算 ........................................................... 错误!未定义书签。 2.4一元多项式加法运算 ........................................................... 错误!未定义书签。 2.5 设计优缺点.......................................................................... 错误!未定义书签。3详细设计 .......................................................................... 错误!未定义书签。 3.1一元多项式的输入输出流程图........................................... 错误!未定义书签。 3.2一元多项式的加法流程图................................................... 错误!未定义书签。 3.3一元多项式的减法流程图.................................................. 错误!未定义书签。 3.4用户操作函数....................................................................... 错误!未定义书签。4编码 .................................................................................. 错误!未定义书签。5调试分析 .......................................................................... 错误!未定义书签。4测试结果及运行效果...................................................... 错误!未定义书签。5系统开发所用到的技术.................................................. 错误!未定义书签。参考文献 ............................................................................. 错误!未定义书签。附录全部代码................................................................... 错误!未定义书签。

一元稀疏多项式计算器C语言课程设计

2014-2015学年第二学期学号1308210115 《软件工程》 课程设计报告 题目:一元稀疏多项式计算器 专业:计算机科学与技术 班级:计算机科学与技术(2)班 姓名: 指导教师: 成绩:

一、问题描述 (3) 二、需求分析 (3) 三、概要设计 (4) 四、详细设计 (5) 五、源代码 (6) 六、程序测试 (18) 七、使用说明 (24) 八、课设总结 (25)

一、问题描述 1.1基本要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1, c2,e2,,,,,,, cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值。 (6)计算器的仿真界面。 1.2设计目的 数据结构是实践性很强的课程。课程设计是加强学生实践能力的一个强有力手段。课程设计要求学生在完成程序设计的同时能够写出比较规范的设计报告。严格实施课程设计这一环节,对于学生基本程序设计素养的培养和软件工作者工作作风的训练,将起到显著的促进作用 二、需求分析 2.1 设计开发环境: 软件方面:系统windows 7 编程软件:VC++ 6.0 2.2思路分析: ①一般情况下的一元n次多项式可写成 pn(x)=p1xe1+p2xe2+……+pmxem 其中,p1是指数为ei的项的非零系数,且满足0≦e1

一元稀疏多项式计算器(数据结构)

【问题描述】 设计一个一元稀疏多项式简单计算器 【基本要求】 一元多项式简单计算器的基本功能是: 1,输入并建立多项式; 2,输出多项式,输出形式为整数序列:n,c1,e1,c2,c2,...,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 3,多项式a和b相加,建立多项式a+b; 4,多项式a和b相减,建立多项式a-b. 【测试数据】 1,(2x+5x^8-3.1x^11)+(7-5x^8+11x^9)=(-3.1x^11+11x^9+2x+7) 【实现提示】 用带表头结点的单链表存储多项式。 #include #include typedef struct node { float coef; int expn; struct node *next; }Lnode, *polynmial; void create(polynmial &L); //输入并建立多项式L void display(polynmial L); //显示,输出多项式L void sort(polynmial &L); //多项式L按指数排序 void reverse(polynmial &L); //逆置 void select(); //用户选择加减操作 void add(polynmial La, polynmial Lb, polynmial &Lc); //多项式La,Lb相加void subtract(polynmial La, polynmial Lb, polynmial &Ld); //多项式La减去Lb,结果给Ld void create(polynmial &L) //输入并建立多项式L { int i, n; static struct node *p; scanf("%d", &n); L = (struct node *)malloc (sizeof(struct node)); L->next = NULL; for(i = 0; i < n; i++) { p = (struct node *)malloc(sizeof(struct node)); scanf("%f %d", &p->coef, &p->expn); p->next = L->next; L->next = p; } }

一元多项式计算问题课程设计

长沙学院课程设计说明书 题目一元多项式计算问题系(部) 计算机系 专业(班级) 10级软件D班 姓名向栋良 学号2010022D08 指导教师邓旭东 起止日期2011.9.4-2011.9.8

课程设计任务书 课程名称:数据结构与算法 设计题目:一元多项式计算问题 已知技术参数和设计要求: 问题描述: 设计一个稀疏多项式简单计算器 基本要求: (1)输入并分别建立多项式A和B (2)输入输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……,其中n是多项式的项数,ci和ei是第i项的系数和指数,序列按指数降序排列 (3)完成两个多项式的相加、相减,并将结果输出; 测试数据: (1) A+B A= 3x14-8x8+6x2+2 B=2x10+4x8+-6x2 (2) A-B A=11x14+3x10+2x8+10x6+5 B=2x14+3x8+5x6+7 (3) A+B A=x3+x1B=-x3-x1 (4) A+B A=0 B=x7+x5+x3+x1 (5) A-B A=100x100+50x50+20x20+x B=10x100+10x50+10x20+x 选作内容: (1).多项式在x=1时的运算结果 (2)求多项式A和B的乘积 设计工作量: 40课时 日期节次地点设计方式9月4日(周日)1-4 科1408 讲授内容 9月4日(周日)5-8 科1608 答疑 9月5日(周一)1-4科1408上机调试 9月5日(周一)5-8 科1608 答疑 9月6日(周二)1-4科1408上机调试 9月6日(周二)5-8 科1608 答疑 9月7日(周三)1-4科1408上机调试 9月7日(周三)5-8 科1608 答疑 9月8日(周四)1-4科1608答疑 9月8日(周四)5-8 科1408 答辩

一元稀疏多项式计算器实验

一元稀疏多项式计数器预习报告 姓名:刘茂学号2220 一、实验要求 (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……cn,en,其中n是多项式的项数,ci,ei分别为第i项的系数和指数。序列按指数降序排列; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b。 (5)多项式求值; (6)多项式求导; (7)求多项式的乘积。 二、测试数据: 1、(2x+5x^^11)+(7-5x^8+11x^9)=^11+11x^9+2x+7); 2、(6x^-3-x+^^9+^9)-(-6x^-3+^2-x^2+^15 )=^^9+12x^-3-x); 3、(1+x+x^2+x^3+x^4+x^5)+(-x^3-x^4)=(1+x+x^2+x^5); 4、(x+x^3)+(-x-x^3)=0; 5、(x+x^100)+(x^100+x^200)=(x+2x^100+x^200); 6、(x+x^2+x^3)+0=x+x^2+x^3. 7、互换上述测试数据中的前后两个多项式。 三、思路分析 用带表头结点的单链表存储多项式。 本程序要求输入并建立多项式,能够降幂显示出多项式,实现多项式相加相减的计算问题,输出结果。

采用链表的方式存储链表,定义结点结构体。运用尾差法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b。 为实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q 结点的指数项。 ① 若p->expnexpn,则结点p所指的结点应是“和多项式”中的一项,令指针p后移。 ② 若p->expn=q->expn,则将两个结点中的系数相加,当和不为0时修改结点p的系数。 ③ 若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。 四、实验程序 //头文件 #include<> #include<> #include<> //定义多项式的项 typedef struct Polynomial{ float coef; int expn; struct Polynomial *next; }*Polyn,Polynomial; void Insert(Polyn p,Polyn h){ if(p->coef==0) free(p);//系数为0的话释放结点 else

一元稀疏多项式计算器(数据结构)

院系:计算机科学学院 专业:软件工程 年级: 2013级 课程名称:数据结构 姓名:韦宜(201321092034)指导教师:宋中山 2015年 12 月 15日

题目:设计一个一元稀疏多项式简单计算器 班级:软件工程1301 姓名:韦宜学号:201321092034 完成日期:12月15日 一、需求分析 问题描述:设计一个一元多项式加法器 基本要求: 输入并建立多项式; (2)两个多项式相加; (3)输出多项式:n, c1, e1, c2, e2, …cn , en, 其中,n是多项式项数,ci和ei分别是第i 项的系数和指数,序列按指数降序排列。 (4)计算多项式在x处的值; (5)求多项式的导函数。 软件环境:Windows,UNIX,Linux等不同平台下的Visual C++ 6.0 硬件环境: 512MB内存,80Gb硬盘,Pentium4 CPU,CRT显示器。

二、概要分析 本程序有五个函数: PolyNode *Input()(输入函数); PolyNode *Deri(PolyNode *head)(求导函数); PolyNode * Plus(PolyNode *A,PolyNode *B)(求和函数); void Output(PolyNode*head)(输出函数); int main()(主函数) 本程序可使用带有附加头结点的单链表来实现多项式的链表表示,每个链表结点表示多项式的一项,命名为node,它包括两个数据成员:系数coef和指数exp,他们都是公共数据成员,*next为指针域,用链表来表示多项式。适用于不定的多项式,特别是对于项数再运算过程中动态增长的多项式,不存在存储溢出的问题。其次,对于某些零系数项,在执行加法运算后不再是零系数项,这就需要在结果多项式中增添新的项;对于某些非零系数项,在执行加法运算后可能是零系数项,这就需要在结果多项式中删去这些项,利用链表操作,可以简单的修改结点的指针以完成这种插入和删除运算(不像在顺序方式中那样,可能移动大量数据项)运行效率高。

最新第6章 MATLAB数据分析与多项式计算_习题答案

精品好文档,推荐学习交流 第6章 MATLAB数据分析与多项式计算 习题6 一、选择题 1.设A=[1,2,3,4,5;3,4,5,6,7],则min(max(A))的值是()。B A.1 B.3 C.5 D.7 2.已知a为3×3矩阵,则运行mean(a)命令是()。B A.计算a每行的平均值B.计算a每列的平均值 C.a增加一行平均值D.a增加一列平均值 3.在MA TLAB命令行窗口输入下列命令: >> x=[1,2,3,4]; >> y=polyval(x,1); 则y的值为()。D A.5 B.8 C.24 D.10 4.设P是多项式系数向量,A为方阵,则函数polyval(P,A)与函数polyvalm(P,A)的值()。D A.一个是标量,一个是方阵B.都是标量 C.值相等D.值不相等 5.在MA TLAB命令行窗口输入下列命令: >> A=[1,0,-2]; >> x=roots(A); 则x(1)的值为()。C A.1 B.-2 C.1.4142 D.-1.4142 6.关于数据插值与曲线拟合,下列说法不正确的是()。A A.3次样条方法的插值结果肯定比线性插值方法精度高。 B.插值函数是必须满足原始数据点坐标,而拟合函数则是整体最接近原始数据点,而不一定要必须经过原始数据点。 C.曲线拟合常常采用最小二乘原理,即要求拟合函数与原始数据的均方误差达到极小。 D.插值和拟合都是通过已知数据集来求取未知点的函数值。 二、填空题 1.设A=[1,2,3;10 20 30;4 5 6],则sum(A)= ,median(A)= 。 [15 27 39],[4 5 6[ 2.向量[2,0,-1]所代表的多项式是。2x2-1 仅供学习与交流,如有侵权请联系网站删除谢谢1

一元多项式计算(数据结构课程设计)

一元多项式计算(数据结构课程设计)

一、系统设计 1、算法思想 根据一元多项式相加的运算规则:对于两个一元多项式中所有指数相同的项,对应指数相加(减),若其和(差)不为零,则构成“和(差)多项式”中的一项;对于两个一元多项式中所有指数不相同的项,则分别写到“和(差)多项式”中去。 因为多项式指数最高项以及项数是不确定的,因此采用线性链表的存储结构便于实现一元多项式的运算。为了节省空间,我采用两个链表分别存放多项式a 和多项式b,对于最后计算所得的多项式则利用多项式a进行存储。主要用到了单链表的插入和删除操作。

(1)一元多项式加法运算 它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为零的话,用头插法建立一个新的节点。P 的指数小于q的指数的话就应该复制q的节点到多项式中。P的指数大于q的指数的话,就应该复制p节点到多项式中。当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生。 (2)一元多项式的减法运算 它从两个多项式的头部开始,两个多项式的某一项都不为空时,如果指数相等的话,系数就相减;相加的和不为零的话,用头插法建立一个新的节点。p的指数小于q的指数的话,就应该复制q的节点到多项式中。P的指数大于q的指数的话就应该复制p的节点到多项式中,并且建立的节点的系数为原来的相反数;当第二个多项式空,第一个多项式不为空时,将第一个多项式用新节点产生。当第一个多项式空,第二个多项式不为空时,将第二个多项式用新节点产生,并且建立的节点的系数为原来的相反数。 2、概要设计 (1)主函数流程图: (注:a代表第一个一元二次方程,b代表第二个一元二次方程)

数据结构实验,多项式计算器

实验题目:多项式运算器 实验内容:1、熟悉编程环境 2、用链式存储结构实现稀疏一元多项式运算器 实验目的和要求: 1、通过本实验,掌握VC++6.0的基本使用,包括源程序的输入,编译运行及调 试。调试的目的是找程序的运行错误,通过DEBUG菜单设置断点实现。 2、用链式存储结构实现一元多项式的运算。 熟练掌握指针和链表的基本操作,利用菜单进行功能选择。 功能基本要求:创建、显示、求和、求差、求值、销毁、清空、修改 实验算法: 1、数据结构描述: 输入的稀疏每一个多项式用一个链表存储,链表的每一个节点存储多项式的一个非零项。定义为LNode型结构体,其中保存该项的系数和指数。主 函数中用一个数组存储每一个多项式的第一项的头指针以调用多项式。 2、函数和算法描述: 主函数main定义LNode*数组a[]存储每一个多项式头节点的地址,并构建菜单以选择调用函数进行多项式的操作,对多项式进行操作的函数返回新 改动的多项式头结点地址。 Createpolyn函数用以创建一个多项式,在用户输入结束指令之前,不断的申请空间,构建LNode型结点并加至构建的链表的表尾,输入结束指令之 后,表尾设NULL并返回表头指针。 Printpolyn函数用以在屏幕上打印多项式,接收需要打印的多项式链表的头结点,构造循环体在表尾之前,不断以mx^n格式打印对应结点中的数 据。 Copypolyn函数用以复制多项式,接收需要复制的多项式a和复制位置b 的指针,构造循环体,在a到表尾之前循环,在b对应的链表中构建新的结 点,结点上的数据赋值为a中对应的值,返回b的头结点地址。 Addpolyn函数用以求两个已知多项式a、b的和存入c,先构建循环体,在a、b链表都未进行到表尾时,比较两个结点中的次数值,如果相同,将 系数相加赋于c的当前结点,如果不同,将次数较小多项式y(a或b)的结 点赋值给c当前结点,在将y链表向后推。 Subtract函数用以求两多项式的差,类似求和算法。 Value函数用以求一个多项式的值,接收x的值,构建循环体,在表尾之前循环以遍历多项式链表。内置循环体,以次数n为限循环,求出x^n的 值,乘以系数并将每一项的值叠加得值。 Destroypolyn函数用以销毁已有的多项式,将此多项式链表的空间FREE 掉,返回空指针。 Clearpolyn函数用以清空多项式,构建循环体,将多项式的各项的系数、指数置零。 3、时空分析: L= sizeof(struct LNode) 一个含有N项的多项式占用的储存空间为NL+1

相关文档
最新文档