一元稀疏多项式计算器C语言学习知识课程教学设计.doc

收藏

编号:2570683    类型:共享资源    大小:171.44KB    格式:DOC    上传时间:2020-04-20
8
金币
关 键 词:
一元 稀疏 多项式 计算器 语言 学习 知识 课程 教学 设计
资源描述:
!- 学号 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 #include #include typedef struct Polynomial{ int coe; //系数 int exp;//指数 struct Polynomial *next; }*Polyn,Polynomial; Polyn ma,mb; void Insert(Polyn p,Polyn h) { if(p->coe==0) delete p; else{ Polyn q1,q2; q1=h;q2=h->next; while(q2&&p->expexp) { q1=q2; q2=q2->next; } if(q2&&p->exp==q2->exp) { q2->coe+=p->coe; delete p; if(!q2->coe) { q1->next=q2->next; delete q2;} } else { p->next=q2; q1->next=p; } } } Polyn CreatePolyn(Polyn head,int m) { int i; Polyn p; p=head=new Polynomial; head->next=NULL; for(i=0;i>p->coe; cout<<" 指数:"; cin>>p->exp; Insert(p,head); } return head; } void DestroyPolyn(Polyn p) { Polyn t; while(p!=NULL) { t=p; p=p->next; delete t; } } void PrintPolyn(Polyn Pm) { Polyn qa=Pm->next; int flag=1; if(!qa) { cout<<"0"; cout<coe>0&&flag!=1) cout<<"+"; if(qa->coe!=1&&qa->coe!=-1) { cout<coe; if(qa->exp==1) cout<<"X"; else if(qa->exp) cout<<"X^"<exp; } else { if(qa->coe==1) { if(!qa->exp) cout<<"1"; else if(qa->exp==1) cout<<"X"; else cout<<"X^"<exp; } if(qa->coe==-1) { if(!qa->exp) cout<<"-1"; else if(qa->exp==1) cout<<"-X"; else cout<<"-X^"<exp; } } qa=qa->next; flag++; } cout<exp>b->exp) return 1; else if(!a||a->expexp) return -1; else return 0; } else if(!a&&b) return -1; else return 1; } Polyn AddPolyn(Polyn pa,Polyn pb) { Polyn qa=pa->next; Polyn qb=pb->next; Polyn headc,hc,qc; hc=new Polynomial; hc->next=NULL; headc=hc; while(qa||qb) { qc=new Polynomial; switch(compare(qa,qb)) { case 1: { qc->coe=qa->coe; qc->exp=qa->exp; qa=qa->next; break; } case 0: { qc->coe=qa->coe+qb->coe; qc->exp=qa->exp; qa=qa->next; qb=qb->next; break; } case -1: { qc->coe=qb->coe; qc->exp=qb->exp; qb=qb->next; break; } } if(qc->coe!=0) { qc->next=hc->next; hc->next=qc; hc=qc; } else delete qc; } return headc; } Polyn SubtractPolyn(Polyn pa,Polyn pb) { Polyn h=pb; Polyn p=pb->next; Polyn pd; while(p) { p->coe*=-1; p=p->next; } pd=AddPolyn(pa,h); for(p=h->next;p;p=p->next) p->coe*=-1; return pd; } Polyn MultiplyPolyn(Polyn pa,Polyn pb) { Polyn hf,pf;// Polyn qa=pa->next; //新建一个结点作为pa的后继结点 Polyn qb=pb->next; //新建一个结点作为pb的后继结点 hf=new Polynomial; hf->next=NULL; while(qa)//使用while循环,使得多项式的每项得以运算 { qb=pb->next; while(qb) { pf=new Polynomial; pf->coe=qa->coe*qb->coe; pf->exp=qa->exp+qb->exp; Insert(pf,hf);//调用插入函数,将新的结点插入到新建链表中,并合并同类项 qb=qb->next; } qa=qa->next; } return hf;//返回所得链表的头指针 } void DevicePolyn(Polyn pa,Polyn pb) { Polyn quotient,remainder,temp1,temp2; Polyn qa=pa->next; Polyn qb=pb->next; quotient=new Polynomial; //建立头结点,存储商 quotient->next=NULL; remainder=new Polynomial; //建立头结点,存储余数 remainder->next=NULL; temp1=new Polynomial; temp1->next=NULL; temp2=new Polynomial; temp2->next=NULL; temp1=AddPolyn(temp1,pa); while(qa!=NULL&&qa->exp>=qb->exp) { temp2->next=new Polynomial; temp2->next->coe=(qa->coe)/(qb->coe); temp2->next->exp=(qa->exp)-(qb->exp); Insert(temp2->next,quotient); pa=SubtractPolyn(pa,MultiplyPolyn(pb,temp2)); qa=pa->next; temp2->next=NULL; } remainder=SubtractPolyn(temp1,MultiplyPolyn(quotient,pb)); pb=temp1; cout<next; float result=0; while(p!=NULL) { result+=(p->coe)*(float)pow(x,p->exp); p=p->next; } return result; } void desktop() { system("cls"); cout<>m; ma=CreatePolyn(ma,m); cout<>n; mb=CreatePolyn(mb,n);} void main() { //int m,n; float x,result; char key; //Polyn pa,pb; cout<>key; switch (key) { case1:input(); cout<<"多项式a:"; PrintPolyn(ma); cout<<"多项式b:"; PrintPolyn(mb); break; case2:input(); //pc=AddPolyn(pa,pb); cout<<"多项式a:"; PrintPolyn(ma); cout<<"多项式b:"; PrintPolyn(mb); cout<<"多项式a+b:"; PrintPolyn(AddPolyn(ma,mb)); //DestroyPolyn(pc); break; case3:input(); //pd=SubtractPolyn(pa,pb); cout<<"多项式a:"; PrintPolyn(ma); cout<<"多项式b:"; PrintPolyn(mb); cout<<"多项式a-b:"; PrintPolyn(SubtractPolyn(ma,mb)); //DestroyPolyn(pd); break; case4:input(); //pd=SubtractPolyn(pa,pb); cout<<"多项式a:"; PrintPolyn(ma); cout<<"多项式b:"; PrintPolyn(mb); cout<<"多项式a*b:"; PrintPolyn(MultiplyPolyn(ma,mb)); //DestroyPolyn(pd); break; case5:input(); //pd=SubtractPolyn(pa,pb); cout<<"多项式a:"; PrintPolyn(ma); cout<<"多项式b:"; PrintPolyn(mb); cout<<"多项式a/b:"; DevicePolyn(ma,mb); //DestroyPolyn(pd); break; case6:input(); cout<<"多项式a:"; PrintPolyn(ma); cout<<"输入x的值:x="; cin>>x; result=ValuePolyn(ma,x); cout<<"多项式a的值:"<
展开阅读全文
提示  淘文阁 - 分享文档赚钱的网站所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:一元稀疏多项式计算器C语言学习知识课程教学设计.doc
链接地址:https://www.taowenge.com/p-2570683.html
关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

收起
展开