当前位置:文档之家› 多项式的加减乘除c++

多项式的加减乘除c++

多项式的加减乘除c++
多项式的加减乘除c++

#include

#include

using namespace std;

//多项式节点的定义

struct Term{

float coef; // 系数

int exp; // 指数

Term * link;

Term(float c,int e,Term *next=NULL)

{

coef=c;

exp=e;

link=next;

}

Term* InsertAfter(float c,int e);

friend ostream& operator<<(ostream&,const Term&);

};

//多项式类的定义

class Polynomial{

public:

Polynomial(); //构造函数

Polynomial(Polynomial& R); //复制构造函数

int maxOrder(); // 计算最大阶数,并返回

Term * getHead() const { return first;} //取得多项式单链表的表头指针private:

Term *first;

friend ostream& operator<<(ostream&,const Polynomial&); //重载运算符<< friend istream& operator>>(istream&,const Polynomial&); //重载运算符>> friend Polynomial operator + (Polynomial&,Polynomial&); //重载运算符+ friend Polynomial operator * (Polynomial&,Polynomial&); //重载运算符* };

//在当前由this指针指示的项后面插入一个新项

Term* Term::InsertAfter(float c,int e)

{

link=new Term(c,e,link); //创建一个新节点,自动链接

return link; // 插入到this后面

}

// Term的友元函数,输出一个节点x的内容到输出流out中

ostream& operator<<(ostream& out,const Term& x)

{

if(x.coef==0) //系数为零,不输出

return out;

out<

switch(x.exp){ //输出指数

case 0: break;

case 1: out<<"X";break;

default:

out<<"X"<

break;

}

return out;

}

//Polynomial类的构造函数,建立一个空链表

Polynomial::Polynomial()

{

first=new Term(0,-1);

}

//复制构造函数,用已有的对象初始化当前对象

Polynomial::Polynomial(Polynomial& R)

{

first=new Term(0,-1);

Term *destptr=first,*srcptr=R.getHead()->link;

while(srcptr!=NULL){

destptr->InsertAfter(srcptr->coef,srcptr->exp);

srcptr=srcptr->link;

destptr=destptr->link;

}

}

//计算最大阶数,当多项式按升序排列时,最后一项是指数最大的

int Polynomial::maxOrder()

{

Term* current=first;

while(current->link!=NULL)

current=current->link;

return current->exp;

}

//Polynomial类的友元函数,从输入流in输入各项,用尾插法建立一个多项式istream& operator>>(istream& in,Polynomial& x)

{

Term* rear=x.getHead(); // rear是尾指针

int c,e;

while(1)

{

cout<<"Input a term(coef,exp):"<

in>>c>>e;

if(e<0) break; //e<0,退出循环,输入结束

rear=rear->InsertAfter(c,e);

}

return in;

}

//Polynomial类的友元函数:输出带附加头结点的多项式链表x

ostream& operator<<(ostream& out,Polynomial& x)

{

Term* current=x.getHead()->link;

cout<<"The polynomal is:"<

bool h=true;

while(current!=NULL)

{

if(h==false&¤t->coef>0)

out<<"+";

h=false;

out<<*current; //调用Term类的重载运算符<<

current=current->link;

}

out<

return out;

}

//Polynomial类的友元函数:两个带附加头结点的按升幂排列的多项式链表的头指针分别是A.first和B.first

//返回的是A+B所得的结果多项式链表

Polynomial operator + (Polynomial &A,Polynomial &B)

{

Term *pa,*pb,*pc,*p;

float temp;

Polynomial C;

pc=C.first;

pa=A.getHead()->link;

pb=B.getHead()->link;

while(pa!=NULL&&pb!=NULL)

{

if( pa->exp == pb->exp ) //对应系数相等,系数相加

{

temp=pa->coef+pb->coef;

if(fabs(temp)>0.001)

pc=pc->InsertAfter(temp,pa->exp); //系数相加后不为零,将结果保存pa=pa->link;

pb=pb->link;

}

else if(pa->expexp)

{

pc=pc->InsertAfter(pa->coef,pa->exp);

pa=pa->link;

}

else

{

pc=pc->InsertAfter(pb->coef,pb->exp);

pb=pb->link;

}

}

if(pa!=NULL)

p=pa;

else

p=pb;

while(p!=NULL) //处理链剩余部分

{

pc=pc->InsertAfter(p->coef,p->exp);

p=p->link;

}

return C;

}

//Polynomial类的友元函数:将一元多项式A和B相乘,乘积用带附加头结点的单链表存储//返回值为指向存储乘积多项式的单链表的头指针

Polynomial operator * (Polynomial &A,Polynomial &B)

{

Term *pa,*pb,*pc;

int AL,BL,i,k,maxExp;

Polynomial C; //结果多项式

pc=C.getHead();

AL=A.maxOrder();

BL=B.maxOrder();

if(AL!=-1||BL!=-1)

{

maxExp=AL+BL;

float *result=new float[maxExp+1];

for(i=0;i<=maxExp;i++)

result[i]=0;

pa=A.getHead()->link;

while(pa!=NULL)

{

pb=B.getHead()->link;

while(pb!=NULL)

{

k=pa->exp+pb->exp;

result[k]=result[k]+pa->coef*pb->coef;

pb=pb->link;

}

pa=pa->link;

}

for(i=0;i<=maxExp;i++)

if(fabs(result[i])>0.001)

pc=pc->InsertAfter(result[i],i);

delete []result;

}

pc->link=NULL;

return C;

}

int main()

{

Polynomial A,B,C;

cout<<"请输入多项式A:(系数幂数(幂数小于0结束))"<

cin>>A;

cout<<"请输入多项式B:(系数幂数(幂数小于0结束))"<

cin>>B;

C=A+B;

cout<<"A+B为:"<

C=A*B;

cout<<"A*B为:"<

system("pause");

return 0;

}

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

一元稀疏多项式计数器预习报告 :刘茂学号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;

实验报告——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; }

(完整版)分数乘除法计算方法汇总

分数乘除法的计算 一、知识梳理 1.意义:一个数乘分数,表示求这个数的几分之几是多少。 2.分数乘分数计算法则:分数乘分数,用分子乘分子,分母乘分母。 3.倒数的意义:乘积是1的两个数互为倒数。 4.分数除法的意义和整数除法的意义相同,都是已知两个因数的积与其中一个因数,求另一个因数的运算。 5.无论是整数除以分数,还是分数除以分数,都可以转化成乘法来计算,也就是说除以一个不等于0的数,等于乘上这个数的倒数。 二、方法归纳 c b a ?=b ac d c b a ?= bd ac ÷b a d c =c d b a ?=bc ad

三、课堂精讲: 【课前复习】 1. 5+5+5=( )×( )=( ),表示: 。 整数乘法的意义:求几个相同加数的和的简便运算. 2.计算:用加法算: 92+92+92=9 222++=96=32 用乘法算:92×( ) 3.整数除法的意义是什么? 4.根据算式32×25=800写出两道除法算式。 5.填空。 (1)30÷5表示把30平均分成( )份,求其中( )份是多少。 (2)求18的 3 1 是多少,可以用算式18×( ),也可以用算式18÷( ),所以18÷3=18×( )。 【新授】 (一).分数乘法的意义及法则: 1、分数乘整数 (1)分数乘整数的意义可以理解为求这个整数的几分之几是多少或几个相同加数的和或 表示一个数的几倍是多少。 (2)分数乘整数的计算法则:分数乘整数,用 作分子,分 母 。分数乘分数,用 作分子, 作分母. 2、分数乘分数 (1)意义:一个数乘分数,表示求这个数的几分之几是多少。 (2)分数乘分数计算法则:分数乘分数,用分子乘分子,分母乘分母。 例1.说出下面各题的意义和得数。 10 1×7 32×4 15×157 6×85

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

数据结构中实现一元多项式简单计算: 设计一个一元多项式简单的计算器。 基本要求: 一元多项式简单计算器的基本功能为: (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

多项式的运算(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) {

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

云南大学软件学院数据结构实验报告 (本实验项目方案受“教育部人才培养模式创新实验区(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);//多项式相减 //多项式求导没有声明和定义函数,而是直接卸载程序里了

分数乘除法计算方法总结

分数乘除法计算方法总结 一、分数乘法: 1.分数乘整数 意义:分数乘整数与整数乘法的意义相同,都是求几个相同加数的和的简便运算。计算方法:分数乘整数,用分数的分子和整数相乘的积作分子,分母不变。2.分数(整数)乘分数,即一个数乘以分数 意义:求一个数的几分之几是多少。 计算方法:分数乘分数,分子相乘的积作新分子,分母相乘的积作新分母。 能约分的要先约分,再计算,结果要试最简分数。约分过程中,一定是分子和分母约分,整数和分母约分。是带分数的要先化成假分数再按照计算方法进行计算。3.乘积相等的几组乘法算式中,一个因数越大,另一个因数就越小 4.倒数:乘积是“1”的两个数互为倒数。“1”的倒数是“1”,“0”没有倒数。5.求一个数的倒数的方法:用“1”除以这个数。 真分数(假分数)的倒数,直接交换分子和分母的位置;求带分数的倒数,要先把带分数化成假分数,再交换分子和分母的位置;求小数的倒数,要先把小数化成分数,再交换分子和分母的位置;求整数的倒数,把整数写作分母,分子为“1”。 二、分数除法 意义1:与整数除法的意义相同,都是已知两个因数的积与其中的一个因数,求另一个因数的运算。 [理解]:把一个数平均分成几份,每份是这个数的几份之一。 求每份数是多少(每份数=一个数÷几份或每份数=一个数×几份之一)。 1、分数除以整数: A,可以用分子除以整数(0除外)的商作分子,分母不变。 B,分数除以整数(0除外),等于分数乘这个整数的倒数。 2、分数(整数)除以分数,即一个数除以分数 A,可以用分子除以分子的商作新分子,分母除以分母的商作新分母。 B,一个数除以分数(0除外),等于这个数乘以分数的倒数。 分数除法的统一计算法则:甲数除以乙数(0除外),等于甲数乘以乙数的倒数。

一元稀疏多项式计算器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

分数乘除法计算方法总结

分数乘除法计算方法总结-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

分数乘除法计算方法总结 一、分数乘法: 1.分数乘整数 意义:分数乘整数与整数乘法的意义相同,都是求几个相同加数的和的简便运算。 计算方法:分数乘整数,用分数的分子和整数相乘的积作分子,分母不变。2.分数(整数)乘分数,即一个数乘以分数 意义:求一个数的几分之几是多少。 计算方法:分数乘分数,分子相乘的积作新分子,分母相乘的积作新分母。 能约分的要先约分,再计算,结果要试最简分数。约分过程中,一定是分子和分母约分,整数和分母约分。是带分数的要先化成假分数再按照计算方法进行计算。 3.乘积相等的几组乘法算式中,一个因数越大,另一个因数就越小 4.倒数:乘积是“1”的两个数互为倒数。“1”的倒数是“1”,“0”没有倒数。 5.求一个数的倒数的方法:用“1”除以这个数。 真分数(假分数)的倒数,直接交换分子和分母的位置;求带分数的倒数,要先把带分数化成假分数,再交换分子和分母的位置;求小数的倒数,要先把小数化成分数,再交换分子和分母的位置;求整数的倒数,把整数写作分母,分子为“1”。 二、分数除法 意义1:与整数除法的意义相同,都是已知两个因数的积与其中的一个因数,求另一个因数的运算。 [理解]:把一个数平均分成几份,每份是这个数的几份之一。 求每份数是多少(每份数=一个数÷几份或每份数=一个数×几份之一)。 1、分数除以整数: A,可以用分子除以整数(0除外)的商作分子,分母不变。 B,分数除以整数(0除外),等于分数乘这个整数的倒数。

2、分数(整数)除以分数,即一个数除以分数 A,可以用分子除以分子的商作新分子,分母除以分母的商作新分母。 B,一个数除以分数(0除外),等于这个数乘以分数的倒数。 分数除法的统一计算法则:甲数除以乙数(0除外),等于甲数乘以乙数的倒数。 三、分数乘、除法混合运算顺序 整数、小数、分数的混合运算顺序都是一样的。 1.只含有同级运算的,按从左往右的顺序依次计算。 2.只含有两级运算的,先算第二级运算(乘除法),再算第一级运算(加减法)。 3.含有括号的,先算小括号里面的,再算中括号里面的,最后算括号外面的。 四、简便计算 整数、小数、分数的简便计算同样可以用如下的运算定律、运算性质 五、解方程 1.利用等式的基本性质解方程 等式的两边同时加上或减去相同的数,等式仍然成立。 等式的两边同时乘以或除以相同的数(0除外),等式仍然成立。 2.利用四则运算各部分的关系解方程 A、加数+加数=和和—加数=另一个加数 B、因数×因数=积积÷因数=另一个因数 C、被减数—减数=差减数=被减数—差被减数=减数+差

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

【问题描述】 设计一个一元稀疏多项式简单计算器 【基本要求】 一元多项式简单计算器的基本功能是: 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; } }

分数乘法计算100题

2017年秋六年级分数计算100题 92×89= 43×74 = 187×149= 2110×57= 3915×25 13 = 4517×3425= 134×1639 = 6463×4236= 5411×4427= 83×3 2= 513×27= 73×21= 65×2518= 149×152= 7255×11 8= 87×3516= 1413×1413= 134×1639= 138×7239= 65×10 3= 83×83= 83+83= 109×32= 207×51= 65×10 9= 6463×278= 5126×3934= 5411×2227= 3920×25 13= 24×365= 152×153= 152+153= 157-154= 4517×34 25 = 187×359= 2513×265= 2524×24= 5411×2227= 813×3972= 3920×25 13= 53+103-207 87-125+65 1-72-75 65+43+3 1 2819-72+141 109+32-51 1615-41-81 95+65-3 2

5 4-( 83-61) 1311-(107-21) 157+125-152 114+95+117+9 1 2513-81-258 98-83-81 113+85+118+81 75+178-75+17 9 83+51+85 43+2815-41-281 75-145+72 1911+187+198-18 1 1513+94+31 43+43×99 516×3×45 9 25×54×45 60×23×97 43×78×1514 20 3 ×5×32 32×59×103 24×87×35 185×12×43 35×149×154 35×72×5 2

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

院系:计算机科学学院 专业:软件工程 年级: 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为指针域,用链表来表示多项式。适用于不定的多项式,特别是对于项数再运算过程中动态增长的多项式,不存在存储溢出的问题。其次,对于某些零系数项,在执行加法运算后不再是零系数项,这就需要在结果多项式中增添新的项;对于某些非零系数项,在执行加法运算后可能是零系数项,这就需要在结果多项式中删去这些项,利用链表操作,可以简单的修改结点的指针以完成这种插入和删除运算(不像在顺序方式中那样,可能移动大量数据项)运行效率高。

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

一元稀疏多项式计数器预习报告 姓名:刘茂学号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

分数加减法计算题

五年级分数计算题练习一 姓名 得分 14 +13 +16 34 -38 -310 13 +12 +3112 223 -115 -215 1-124 -548 147 +314 +421 158 -310 -14 1-12 -13 310 +315 +320 1930 -310 -15 1115 +45 +23 45 -13 -14 724 +38 +23 113 +25 +310 1-56 -112 1314 -27 -12 3512 +13 +216 1-23 +1 6 2-730 -160 123 +212 -56 547 +112 +314 914 -523 -212 1512 -534 -756 1014 -556 -138 958 +112 +234 823 -156 -219 1034 -123 -314 756 -234 -112 258 -138 +134 334 +123 +212 312 +234 -118 213 +319 +516 10920 +514 +212 312 -114 +125 734 -256 -178 623 -(357 +23 ) 13 +(112 -34 ) 914 +(523 -312 ) 15518 -147 -237 418 +125 +978 537 +2718 +21118 734 -235 -325 8713 -412 -2713 1518 -2411 -3711 214 +123 +334 +13 329 +247 +179 +337 1112 +16 +312 34 -16 -512 4.75-718 +1.25-1118 1.25+320 +134 +6.85 7-(13 4 -1.4) 456 +119 +213 134 -(16 +512 ) 1457 -212 -3314 312 +138 +14 14-223 -689 8131 5 -2310 -31 6 4716 -(1.26+716 )-0.74 525 -229 -279 +3.6 34 +215 +212

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

实验题目:多项式运算器 实验内容: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

分数加减乘除运算规则

分数加减乘除运算 1、分数加减法不用管分子。先看分母,分母不同,一定要先通分,使分母相同后再将分子进行加减计算。 (1)12 + 12 = (2) 13 + 23 = (3) 57 + 57 = (4)34 - 14 = (5) 56 -16 = (6) 47 -37 = (7)213 + 623 = (8)978 + 118 = (9)125 +235 = (10)41118 -2718 = (11)357 -237 = (12)934 - 714 = (13)537 -357 = (14)514 - 234 (15)516 -256 = (16)213 +319 = (17)10920 +514 = (18)114 +125 = (19)623 -357 = (20)734 -256 = (21)523 -312 = (22)1-23 +16 = (23)123 +212 -56 = (24)258 -138 +134 = (25)914 -523 -212 = (26)623 -(357 +23 )= (27)214 +123 +334 +13 = 2、分数乘法 分数与分数相乘:不管有几个分数相乘,都是分子与分子相乘,分母与分母相乘。

(1)=4375? (2) =3456? (3)=4 398? (4)117×17 4= (5)5210965??= (6)35246583??= 分数与整数相乘:把整数直接看成是分母为1的假分数,然后按分数的乘法规则进行计算。(整数与分母约分) (1)878?= (2)34×51 7= (3) =2798? (4)210965??= (5)=10 314 75?? (6)542154+?= (7)16 91583?-= (8)613143?+ (9)6 52430?-= 3、分数的除法:分数的除法,相当于用被除数乘以除倒数。 (1) =23109÷ (2)9 763÷= (3) 12÷32= (4)111471685÷÷= (5)11 555382619?÷= (6) 25 35312?÷= (7)58 ÷ 712 ÷ 710 = 4、混合运算 (1)248 765?)+( (2)36×( 79 + 34 - 56 ) (3) 135919138?÷+ (4)71+75÷65+12 5 (5)211523253÷+? (6) 3 83114132+÷+)(

一元稀疏多项式计算器实习报告

实习报告 题目:设计一个一元稀疏多项式计算器 班级: 姓名学号__________完成日期:__ 一、课程题目 一元稀疏多项式计算器 二、需求分析 1、一元稀疏多项式简单计算器的功能是: 1.1 输入并建立多项式; 1.2 输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,………cn,en, 其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列; 1.3 求多项式a、b的导函数; 1.4 计算多项式在x处的值; 1.5多项式a和b相加,建立多项式a+b; 1.6 多项式a和b相减,建立多项式a-b。 2、设计思路: 2.1 定义线性表的动态分配顺序存储结构; 2.2 建立多项式存储结构,定义指针*next 2.3利用链表实现队列的构造。每次输入一项的系数和指数,可以输出构 造的一元多项式 3、测试数据: (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. 三、概要设计 1.有序表的抽象数据类型定义为: ADT List{ 数据对象:D={a i| a i∈R,i=1,2,…,n,n≧0}

用C语言实现多项式简单计算器的设计

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构 题目:用C语言实现多项式简单计算器的设计 系名:信息工程系 专业班级:软件工程1121班 姓名:邓燕蓉 指导教师:王绪梅 2013 年 6月 28日

课程设计任务书 学生姓名:邓燕蓉专业班级:软件工程1121班 指导教师:王绪梅工作单位:华夏学院计算机教研室设计题目:用C语言实现多项式简单计算器的设计 设计目的 1.巩固和加深课堂所学知识、学会分析研究数据对象的特性及数据的组织方法; 2.选择合适的数据的逻辑结构和存储结构以及相应操作,实现简单的多项式计算; 3.提高程序设计能力、加强查阅、运用资料的能力、算法分析与程序设计素质培养; 设计任务(在规定的时间内完成下列任务) 〔问题描述〕输入并建立两个多项式并输出多项式 设计一个程序:对两个多项式进行加、减法及乘法运算,建立一个新多项式并输出. 或设计一个程序对其中一个多项式求导。 〔实现提示〕 选择带头结点的单链表或循环链表存储多项式,头结点中存放多项式的参数及单链表的数据具体要完成的任务是: A.编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B.写出规范的课程设计报告书; 时间安排:6月24日---28日 具体要求 1. 课程设计报告按统一通用格式书写,具体内容如下: ①设计任务与要求 ②总体方案与说明 ③软件主要模块的流程图 ④源程序清单与注释 ⑤问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法 及改进设想); ⑥小结与体会 附录:①源程序(必须有简单注释)②使用说明③参考资料 2.每位学生应独立完成各自的任务且每天至少在设计室工作半天; 指导教师签名:王绪梅2013 年6月22日 教研室主任(或责任教师)签名:2013年6月24日

一元多项式计算器设计与实现

一元稀疏多项式简单计算器 一、设计课题 设计一元稀疏多项式简单计算器。 二、需求分析 2.1 输入的形式和输入值的范围: 输入是从键盘输入的,输入的内容为多项式的系数和指数,数为任意的整数,指数为大于等于0的整数 2.2 输出的形式 从屏幕输出,显示用户输入的多项式,并显示多项式加减以后的多项式的值。 2.3 程序所能达到的功能 a:输入并建立多项式; b:输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei 分别是第i项的系数和指数,序列按指数降序排列; c:多项式a和b相加,建立多项式a+b; d:多项式a和b相减,建立多项式a-b; 2.4 测试数据 (1)(2x+5x^8-3.1x^11)+(7-5x^8+11x^9) = (-3.1x^11+11X^9+2X+7) (2)(X+X^3)+(-X-X^3)=0 (3)(X+X^2+X^3)+0= X+X^2+X^3 三、概要设计 3.1 设计思路 A:数据结构的选用 为了实现任意多项式的加法、减法,因此选择单链表的结构体,它有一个系数,指数,下一个指针3个元属;单链表抽象结构类型定义见附录2。 B:多项式的输入 采用头节点插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;为了判断一个多项式是否输入结束,定义一个结束标志,当输入非00时就继续,当输入00时,就结束一个多项式的输入; C:2个多项式的加法 它从2个多项式的头部开始,2个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为0的话,用头插法建立一个新的节点。p的系数小于q的系数的话,就应该复制q接点到多项式中。p的系数大于q的系数的话,就应该复制p接点到多项式中。当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生。当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生 D:2个多项式的减法 它从2个多项式的头部开始,2个多项式的某一项都不为空时,如果指数相等的话,系数就应该相减;相加的和不为0的话,用头插法建立一个新的节点。 p的系数小于q的系数的话,就应该复制q接点到多项式中。p的系数大于q的系数的话,就应该复制p接点到多项式中,并且建立的接点的系数为原来的相反数;当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生。当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生,并且建立的接点的系数为原来的相反数。

相关主题
文本预览
相关文档 最新文档