版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验一:完成多项式的相加运算(验证性、4学时)一、实验目的完成多项式的相加、相乘运算。(1)掌握线性表的插入、删除、查找等基本操作设计与实现(2)学习利用线性表提供的接口去求解实际问题(3)熟悉线性表的的存储方法二、实验内容设计一个一元多项式的简单计算程序,其基本功能有:(1)输入并建立多项式;(2)输出多项式;(3)多项式的相加运算。利用单链表实现。三、算法描述及实验步骤1描述1、创建两个单链表A、B,分别调用CreatePolyn();2、输出多项式,分别调用PrintPolyn();3、多项式相加运算AddPolyn()。2算法流程图546inputA-B546inputA-BinputA-BinputA-Bend3代码(注释)#include<stdio.h>#include<malloc.h>#include<math.h>typedefstructPolynomial{floatcoef;//系数变量intexp;//指数变量structPolynomial*next;//定义next指针}*Polyn,Polynomial;//Polyn为结点指针类型voidInsert(Polynp,Polynh)//插入新的结点p{if(p->coef==0)free(p);//系数为0的话释放结点else{Polynq1,q2;q1=h;q2=h->next;while(q2&&p->exp<q2->exp)//查找插入位置{q1=q2;q2=q2->next;}if(q2&&p->exp==q2->exp)//将指数相同相合并{q2->coef+=p->coef;free(p);if(!q2->coef)//系数为0的话释放结点{q1->next=q2->next;free(q2);}}else//指数为新时将结点插入{p->next=q2;q1->next=p;}}}//Insertintf(floatx)//判断输入是否为整形{floata;a=x-(longint)x;if(a==0&&x==fabs(x))return1;elsereturn0;}PolynCreatePolyn(Polynhead,intm)//建立一个头指针为head、项数为m的一元多项式{inti;Polynp;p=head=(Polyn)malloc(sizeof(structPolynomial));head->next=NULL;for(i=0;i<m;i++){p=(Polyn)malloc(sizeof(structPolynomial));//建立新结点以接收数据printf("pleaseinputNO.%dcoefandexp:",i+1);scanf("%f%d",&p->coef,&p->exp);while(!f(p->coef)&&!f(p->exp)){printf("输入有错,请重新输入:");scanf("%f%d",&p->coef,&p->exp);}Insert(p,head);//调用Insert函数插入结点}returnhead;}//CreatePolynvoidDestroyPolyn(Polynp)//销毁多项式p{Polynq1,q2;q1=p->next;q2=q1->next;while(q1->next){free(q1);q1=q2;//指针后移q2=q2->next;}}voidPrintPolyn(PolynP)//输出多项式{Polynq=P->next;intflag=1;//项数计数器if(!q)//若多项式为空,输出0{putchar('0');printf("\n");return;}while(q){if(q->coef>0&&flag!=1)putchar('+');//系数大于0且不是第一项if(q->coef!=1&&q->coef!=-1)//系数非1或-1的普通情况{printf("%g",q->coef);if(q->exp==1)putchar('X');elseif(q->exp)printf("X^%d",q->exp);}else{if(q->coef==1){if(!q->exp)putchar('1');elseif(q->exp==1)putchar('X');elseprintf("X^%d",q->exp);}if(q->coef==-1){if(!q->exp)printf("-1");elseif(q->exp==1)printf("-X");elseprintf("-X^%d",q->exp);}}q=q->next;flag++;}//whileprintf("\n");}//PrintPolynintcompare(Polyna,Polynb){if(a&&b){if(!b||a->exp>b->exp)return1;elseif(!a||a->exp<b->exp)return-1;elsereturn0;}elseif(!a&&b)return-1;//A多项式已空,但B多项式非空elsereturn1;//B多项式已空,但A多项式非空}//comparePolynAddPolyn(Polynpa,Polynpb)//求解并建立多项式A+B,返回其头指针{Polynqa=pa->next;Polynqb=pb->next;Polynheadc,hc,qc;hc=(Polyn)malloc(sizeof(structPolynomial));//建立头结点hc->next=NULL;headc=hc;while(qa||qb){qc=(Polyn)malloc(sizeof(structPolynomial));switch(compare(qa,qb))//功能选择{case1:{qc->coef=qa->coef;qc->exp=qa->exp;qa=qa->next;break;}case0:{qc->coef=qa->coef+qb->coef;qc->exp=qa->exp;qa=qa->next;qb=qb->next;break;}case-1:{qc->coef=qb->coef;qc->exp=qb->exp;qb=qb->next;break;}}//switchif(qc->coef!=0){qc->next=hc->next;hc->next=qc;hc=qc;}elsefree(qc);//当相加系数为0时,释放该结点}//whilereturnheadc;}//AddPolynPolynSubtractPolyn(Polynpa,Polynpb){//求解并建立多项式A-B,返回其头指针Polynh=pb;Polynp=pb->next;Polynpd;while(p){//将pb的系数取反p->coef*=-1;p=p->next;}pd=AddPolyn(pa,h);for(p=h->next;p;p=p->next)//恢复pb的系数p->coef*=-1;returnpd;}//SubtractPolynPolynMultiplyPolyn(Polynpa,Polynpb){//求解并建立多项式A*B,返回其头指针Polynhf,pf;Polynqa=pa->next;Polynqb=pb->next;hf=(Polyn)malloc(sizeof(structPolynomial));//建立头结点hf->next=NULL;for(;qa;qa=qa->next){for(qb=pb->next;qb;qb=qb->next){pf=(Polyn)malloc(sizeof(structPolynomial));pf->coef=qa->coef*qb->coef;pf->exp=qa->exp+qb->exp;Insert(pf,hf);//调用Insert函数以合并指数相同的项}}returnhf;}//MultiplyPolynvoidDevicePolyn(Polynpa,Polynpb){//求解并建立多项式A/B,返回其头指针Polynhf,pf,af,temp1,temp2,q;Polynqa=pa->next;Polynqb=pb->next;hf=(Polyn)malloc(sizeof(structPolynomial));//建立头结点,存储商hf->next=NULL;pf=(Polyn)malloc(sizeof(structPolynomial));//建立头结点,存储余数pf->next=NULL;temp1=(Polyn)malloc(sizeof(structPolynomial));temp1->next=NULL;temp2=(Polyn)malloc(sizeof(structPolynomial));temp2->next=NULL;temp1=AddPolyn(temp1,pa);while(qa!=NULL&&qa->exp>=qb->exp){temp2->next=(Polyn)malloc(sizeof(structPolynomial));temp2->next->coef=(qa->coef)/(qb->coef);temp2->next->exp=(qa->exp)-(qb->exp);Insert(temp2->next,hf);pa=SubtractPolyn(pa,MultiplyPolyn(pb,temp2));qa=pa->next;temp2->next=NULL;}pf=SubtractPolyn(temp1,MultiplyPolyn(hf,pb));pb=temp1;printf("thequotientis:");PrintPolyn(hf);printf("theremainderis:");PrintPolyn(pf);}//DevicePolynintmain(){intm,n,flag=0;floatx;Polynpa=0,pb=0,pc,pd,pe,pf;//定义各式的头指针,pa与pb在使用前付初值NULLprintf("pleaseinputAnumber:");scanf("%d",&m);pa=CreatePolyn(pa,m);//建立多项式Aprintf("pleaseinputBnumber:");scanf("%d",&n);pb=CreatePolyn(pb,n);//建立多项式B//输出菜单printf("**********************************************\n");printf("choise:\n\t1.OutputAandB\n\t2.CreatePolynA+B\n");printf("\t3.CreatePolynA-B\n\t4.CreatePolynA*B\n");printf("\t5.CreatePolynA/B\n\t6.Return\n**********************************************\n");for(;;flag=0){printf("choise");scanf("%d",&flag);if(flag==1){printf("多项式A:");PrintPolyn(pa);printf("多项式B:");PrintPolyn(pb);continue;}if(flag==2){pc=AddPolyn(pa,pb);printf("多项式A+B:");PrintPolyn(pc);DestroyPolyn(pc);continue;}if(flag==3){pd=SubtractPolyn(pa,pb);printf("多项式A-B:");PrintPolyn(pd);DestroyPolyn(pd);continue;}if(flag==4){pf=MultiplyPolyn(pa,pb);printf("多项式a*b:");PrintPolyn(pf);DestroyPolyn(pf);continue;}if(flag==5){DevicePolyn(pa,pb);continue;}if(flag==6)break;if(flag<1||flag>6)printf("Error!!!\n");continue;}//forDestroyPolyn(pa);DestroyPo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 单位管理制度呈现大合集人员管理十篇
- 2024年城管督查个人总结
- 寒假自习课 25春初中道德与法治八年级下册教学课件 第三单元 第五课 第1课时 根本政治制度
- 建筑工程行业安全管理工作总结
- 2011年高考语文试卷(大纲版全国Ⅱ卷)(空白卷)
- 化妆品行业销售工作总结
- 小学数学教学计划18篇
- 2023年项目部治理人员安全培训考试题含下载答案可打印
- 2023年-2024年项目部安全培训考试题答案往年题考
- 竞业限制协议书三篇
- 防雷和接地监理实施细则-
- 粮食仓储组织架构设计及全套管理规章制度
- 《人员素质测评理论与方法》电子版本
- 61850基础技术介绍0001
- 陶瓷色料的技术PPT课件
- 幼儿园食品安全工作计划四篇
- 课程设计YA32-350型四柱万能液压机液压系统设计
- 体彩排列五历史数据
- 中国工业数据库介绍
- 弱电智能化设计服务建议书(共35页)
- 中国银监会关于规范中长期贷款还款方式的通知
评论
0/150
提交评论