C++实验:一元多项式的加法、减法、乘法_第1页
C++实验:一元多项式的加法、减法、乘法_第2页
C++实验:一元多项式的加法、减法、乘法_第3页
C++实验:一元多项式的加法、减法、乘法_第4页
C++实验:一元多项式的加法、减法、乘法_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告实验目的数据结构与算法课程主要是研究非数值计算的程序设计问题中所出现的计算机操作对象以及它们之间的关系和操作的学科。数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。学习数据结构与算法是为了将实际问题中涉及的对象在计算机中表示出来并对它们进行处理。通过课程设计可以提高学生的思维能力,促进学生的综合应用能力和专业素质的提高。通过此次课程设计主要达到以下目的:了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。2、实验内容.一元多项式的代数运算(参考课本P39-P43)。设计要求:计算任意两个一元多项式的加法、减法以及乘法。3、实验数据结构及函数数据结构:构造抽象数据类型Polynomialnomial:typedefstructPolynomialnomial{intcoef,ex;//系数、指数Polynomialnomial*next;}Polynomial;函数://创建多项式Polynomial*create_Polynomial(void);//多项式加法Polynomial*addition_of_Polynomialnomial(Polynomial*,Polynomial*);//多项式乘法Polynomial*Polynomialnomial_Multiplication(Polynomial*,Polynomial*);//输入多项式voidprint_Polynomial(Polynomial*);//多项式系数取反Polynomial*negate_Polynomial(Polynomial*head);//主函数intmain(void){输入多项式A,B的系数、指数(指数以降幂排列)输出创建的多项式A、B选择要进行的运算:包括A+B、A-B、B-A、A*B输出结果继续选择要进行的运算:Y-继续、N-选择是否继续创建多项式继续创建多项式:Y-重复2、N-退出}源代码:#include"stdafx.h"#include<malloc.h>#include<iostream.h>typedefstructPolynomialnomial{intcoef,ex;Polynomialnomial*next;}Polynomial;//创ä¡ä建¡§多¨¤项?式º?Polynomial*create_Polynomial(void);//多¨¤项?式º?加¨®法¤¡§Polynomial*addition_of_Polynomialnomial(Polynomial*,Polynomial*);//多¨¤项?式º?乘?法¤¡§Polynomial*Polynomialnomial_Multiplication(Polynomial*,Polynomial*);//输º?入¨?多¨¤项?式º?voidprint_Polynomial(Polynomial*);//多¨¤项?式º?系¦Ì数ºy取¨?反¤¡äPolynomial*negate_Polynomial(Polynomial*head);intmain(void){staticPolynomial*heada2,*headb2,*heada=NULL,*headb=NULL,*headsum=NULL,*headmul=NULL;Polynomial*headsubduction=NULL,*headsubduction2=NULL;intchoose;intflag=1;do{cout<<"+++++++++++++++++++++++++"<<endl;cout<<"+欢?迎®-使º1用®?!ê?+"<<endl;cout<<"+请?创ä¡ä建¡§多¨¤项?式º?+"<<endl;cout<<"+++++++++++++++++++++++++"<<endl;cout<<"创ä¡ä建¡§多¨¤项?式º?A:\n";heada=create_Polynomial();cout<<"\n创ä¡ä建¡§多¨¤项?式º?B:\n";headb=create_Polynomial();cout<<"\n多¨¤项?式º?A:\t";print_Polynomial(heada);cout<<"多¨¤项?式º?B:\t";print_Polynomial(headb);intt=1;do{cout<<"\n请?选?择?你?要°a进?行D的Ì?操¨´作Á¡Â:êo"<<endl;cout<<"1.A+B2.A-B\n3.B-A4.A*B"<<endl;cout<<"选?择?:";cin>>choose;switch(choose){case1:cout<<"A+B:"<<endl;headsum=addition_of_Polynomialnomial(heada,headb);cout<<"两¢?个?多¨¤项?式º?的Ì?和¨ª:\t";print_Polynomial(headsum);break;case2:cout<<"A-B:\n";cout<<"第̨²一°?个?多¨¤项?式º?减?去¨£¤第̨²二t个?多¨¤项?式º?:\t";headb2=negate_Polynomial(headb);headsubduction=addition_of_Polynomialnomial(heada,headb2);print_Polynomial(headsubduction);negate_Polynomial(headb);break;case3:cout<<"B-A:"<<endl;cout<<"第̨²二t个?多¨¤项?式º?";cout<<"减?去¨£¤第̨²一°?个?多¨¤项?式º?:\t";heada2=negate_Polynomial(heada);headsubduction2=addition_of_Polynomialnomial(headb,heada2);print_Polynomial(headsubduction2);negate_Polynomial(heada);break;case4:headmul=Polynomialnomial_Multiplication(heada,headb);cout<<"两¢?个?多¨¤项?式º?的Ì?积y:\t";print_Polynomial(headmul);break;}//switchcout<<"\n继¨¬续?操¨´作Á¡Â?ê?\n";cout<<"1.是º?的Ì?0.不?是º?\n";cout<<"选?择?:";cin>>t;}while(t==1);cout<<"+++++++++++++++++++++++++"<<endl;cout<<"+继¨¬续?创ä¡ä建¡§多¨¤项?式º??ê?+\n";cout<<"+1.是º?的Ì?0.不?是º?+\n";cout<<"+++++++++++++++++++++++++"<<endl;cout<<"选?择?:";cin>>flag;cout<<endl;}while(flag==1);cout<<"+++++++++++++++++++++++++"<<endl;cout<<"+您¨²已°?经-退ª?出?!+"<<endl;cout<<"+++++++++++++++++++++++++"<<endl;return0;}//创ä¡ä建¡§Polynomial*create_Polynomial(){intcoefficient=0,exponent=0;Polynomial*head=NULL,*temp=NULL,*rear=NULL;head=(Polynomial*)malloc(sizeof(Polynomial));rear=head;cout<<"请?输º?入¨?系¦Ì数ºy指?数ºy(ꡧ指?数ºy降¦Ì序¨°排?列¢D,ê?以°?00结¨¢束º?)ê?:\n";cin>>coefficient>>exponent;while(coefficient!=0){temp=(Polynomial*)malloc(sizeof(Polynomial));temp->coef=coefficient;temp->ex=exponent;rear->next=temp;rear=temp;cin>>coefficient>>exponent;}rear->next=NULL;returnhead;}//输º?出?voidprint_Polynomial(Polynomial*head){Polynomial*p=NULL;p=head->next;if(p==NULL){cout<<"0\n";return;}else{do{if(p->coef>=0&&p->ex!=0)//系¦Ì数ºy>=0;ê?指?数ºy不?为a0;ê?cout<<"+"<<p->coef<<"x^"<<p->ex;if(p->coef>=0&&p->ex==0)//系¦Ì数ºy>=0;ê?指?数ºy=0;ê?cout<<"+"<<p->coef;if(p->coef<0&&p->ex!=0)//系¦Ì数ºy<0;ê?指?数ºy不?为a0;ê?cout<<p->coef<<"x^"<<p->ex;if(p->coef<0&&p->ex==0)//系¦Ì数ºy<0;指?数ºy=0;ê?cout<<p->coef;p=p->next;}while(p!=NULL);cout<<endl;}}Polynomial*addition_of_Polynomialnomial(Polynomial*p1,Polynomial*p2)//多¨¤项?式º?相¨¤加¨®{Polynomial*head,*tail,*temp;intvalue;p1=p1->next;p2=p2->next;head=tail=(Polynomial*)malloc(sizeof(Polynomial));head->next=NULL;while(p1&&p2){if((p1->ex)==(p2->ex)){value=(p1->coef)+(p2->coef);if(value!=0){temp=(Polynomial*)malloc(sizeof(Polynomial));temp->coef=value;temp->ex=p1->ex;temp->next=NULL;}if(value==0&&!p1->next&&!p2->next){p1=p1->next;p2=p2->next;break;}if(value==0&&p1->next&&p2->next){p1=p1->next;p2=p2->next;continue;}p1=p1->next;p2=p2->next;}elseif((p1->ex)>(p2->ex)){temp=(Polynomial*)malloc(sizeof(Polynomial));temp->coef=p1->coef;temp->ex=p1->ex;temp->next=NULL;p1=p1->next;}else{temp=(Polynomial*)malloc(sizeof(Polynomial));temp->coef=p2->coef;temp->ex=p2->ex;temp->next=NULL;p2=p2->next;}if(head->next==NULL){head->next=temp;tail=temp;}else{tail->next=temp;tail=temp;}}tail->next=p1?p1:p2;//有®D剩º¡ê余®¨¤项?的Ì?接¨®在¨²后¨®面?。¡êreturnhead;}//相¨¤乘?Polynomial*Polynomialnomial_Multiplication(Polynomial*p1,Polynomial*p2){Polynomial*head;Polynomial*t,*q,*s,*r;head=(Polynomial*)malloc(sizeof(Polynomial));head->next=NULL;r=(Polynomial*)malloc(sizeof(Polynomial));r->next=NULL;for(t=p1->next;t;t=t->next){for(q=p2->next;q;q=q->next){s=(Polynomial*)malloc(sizeof(Polynomial));r->next=s;s->coef=q->coef*t->coef;s->ex=q->ex+t->ex;s->next=NULL;head=addition_of_Polynomialnomial(r,head);//调Ì¡Â用®?加¨®法¤¡§函¡¥数ºy}}returnhead;}//多¨¤项?式º?的Ì?取¨?反¤¡äPolynomial*negate_Polynomial(Polynomial*head){Polynomial*p=NULL;p=head->next;if(p==NULL){cout<<"这a个?多¨¤项?式º?是º?空?的Ì?.\n";returnNULL;}else{while(p){p->coef=0-(p->coef);p=p->next;}}returnhead;}4、总结:我的理解及收获:对于本次试验,在数学上可以这么理解:一个一元多项式:Pn(x)=p0+p1x+p2x^2+…+pnx^n它可以用一个线性表P表示:同样可以用线性表Q来表示:为了便于运用,防止次数可能很高而且变化很大,使得存储结构的的最大长度很难确定,所以运用一元多项式的形式为:Pn(2-7)Pi是系数;ei是指数且ei满足:所以定义的数据结构为:一个长度为m且每个元素有两个数据项的线性表:(2-8)因此,我运用了线性链表,这一存储方式。线性表的链式存储特点是用一组任意的存储单元存储数据元素,所以我需要一个定义域和一个指针域,指针则为数据之间的逻辑关系映像,数据域包含:系数,指数。如此可以创建一个多项式。多项式相加:我将它理解为:相同指数的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论