多项式运算实训报告.doc_第1页
多项式运算实训报告.doc_第2页
多项式运算实训报告.doc_第3页
多项式运算实训报告.doc_第4页
多项式运算实训报告.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

信 息 工 程 学 院数据结构实训报告题目:多项式基本运算学号:14090323姓名:卫哲君 班级:强化3班目 录一、 目的概述。3二、 实验(设计)仪器设备和材料清单。3三、 项目分析和设计。3四、 项目关键代码。4五、 项目调试和运行。10六、 实训设计的心得体会。12数据结构实训设计报告一、 目的概述 我这次实训的项目主要是多项式基本运算系统,多项式基本运算系统主要实现的是多项式的相加相减相乘和赋值计算。这次实训的项目主要通过C语言来实现程序的运行,主要通过C语言中的函数调用和链表来做程序,还要用到许多小的知识点,例如:用冒泡法实现排序;scanf、printf语句;while()语句实现循环;ifelse语句实现选择等等。二、实验(设计)仪器设备和材料清单1.硬件:PC机2.软件:turboc 2.0,visula c+ 6.0三、项目分析和设计 这个项目的程序可分为几个板块来做,每个板块有每个板块的作用,通过不同程序的不同作用相互调用即可实现整个程序的运行,这个项目程序主要可以分为以下几个板块:1、定义头文件: 运用#include,#include头文件2、定义链表: 运用typedef struct NODE 多项式项数和系数和指数信息变量名表列; 3、对调用函数进行声明: 根据所写程序对有些函数进行声明,例如: int Initpolyn(polynomial *P);在程序中实现的是构造一个多项式链表P。4、主函数: Void main()为主函数,在主函数中通过while语句和 switchcase语句或者printf语句进行选择和函数调用。 Void main() while() switch() 5、菜单函数: 主要用printf语句输出菜单函数,并且还通过主函数调用菜单函数实现对多项式操作的选择。6、输入多项式的信息: 定义函数为int orderinsertpolyn(polynomial *P,Node *e) Node *e为链表指针,在此函数中,通过指针的移动实现多项式信息的输入。7、输出多项式: 定义函数为int outputpolyn(polynomial P) 主要运用printf语句输出多项式的信息,并用while语句输入系数指数信息。9、插入信息并排序: 定义函数为int orderinsertpolyn(polynomial *P,Node *e) 在此函数中,利用指针传递进行输入信息,再调用排序函数指数从小到大排列 再保存链表,最后还要返回一个值到主函数main().10、多项式相加相间减思想:一个多项式存一个链表相加时指数相同的系数相加相减结果存放在第一个链表中,实现相加函数:int addpolyn(polynomial *pa,polynomial *pb)实现相减函数:int subpolyn(polynomial *pa,polynomial *pb)10、多项式相乘思想:采用两个循环使每个项都两两相乘 函数:int multipolyn(polynomial pa,polynomial pb,polynomial *pc)这个程序大体的设计便是如此,它包含了我们学过的许多知识,运用了许多重要的内容,总体分析即是如此。四、项目关键代码#include#include#define OVERFLOW -1#define ok 1typedef struct Node float coef; int exp; struct Node *next; Node,*polynomial; polynomial P,pa,pb,pc;Node *p,*q,*e,*s;int Initpolyn(polynomial *P) (*P) =(Node*)malloc(sizeof(Node); if(!(*P) return OVERFLOW; (*P)-next=NULL; return ok;/构造一个多项式链表Pint orderinsertpolyn(polynomial *P,Node *e) float sum; if(!(*P) return OVERFLOW; p=(*P); q=(*P)-next; while(q) if(q-expexp) p=q; q=q-next; else if(q-exp=e-exp) sum=q-coef+e-coef; if(sum=0) p-next=q-next; free(q); q=p-next; else q-coef=sum; break; else p-next=e; e-next=q; break; if(q=NULL) p-next=e; e-next=NULL; return ok;/在多项式链表P中顺序插入结点e,插入后结点按指数从小到大排列int createpolyn(polynomial *P,int m) int i,b; float a; Initpolyn(P); if(!(*P) return OVERFLOW; (*P)-coef=0.0; (*P)-exp=-1; printf(请输入插入结点e的系数和指数:); for(i=1;icoef=a; s-exp=b; orderinsertpolyn(P,s); return ok;/建立一个m项的有序多项式链表Pint outputpolyn(polynomial P) if(!P) return OVERFLOW; if(!P-next) printf(多项式链表P为空n); return 0; q=P-next; printf(多项式链表P=); while(q-next!=NULL) printf(%f,%d)+,q-coef,q-exp); q=q-next; printf(%f,%d)n,q-coef,q-exp); return ok;/输出一个多项式链表Pint addpolyn(polynomial *pa,polynomial *pb) float sum; Node *qa,*qb,*ra; if(!pa|!pb) return OVERFLOW; qa=(*pa)-next; qb=(*pb)-next; ra=(*pa); while(qa&qb) if(qa-exp=qb-exp) sum=qa-coef+qb-coef; if(!sum) ra-next=qa-next; (*pb)-next=qb-next; free(qa); free(qb); qa=ra-next;qb=(*pb)-next; else qa-coef=sum; ra=qa; qa=ra-next; (*pb)-next=qb-next; free(qb); qb=(*pb)-next; else if(qa-expexp) ra=qa; qa=qa-next; else (*pb)-next=qb-next; qb-next=qa; ra-next=qb; ra=qb; qb=(*pb)-next; while(qa) break; while(qb) ra-next=qb; break; free(*pb); return ok;/实现多项式链表pa,pb相加,结果存放在pa中int subpolyn(polynomial *pa,polynomial *pb) float sub; Node *qa,*qb,*ra; if(!pa|!pb) return OVERFLOW; qa=(*pa)-next; qb=(*pb)-next; ra=(*pa); while(qa&qb) if(qa-exp=qb-exp) sub=qa-coef-qb-coef; if(sub=0) ra-next=qa-next; (*pb)-next=qb-next; free(qa); free(qb); qa=ra-next;qb=(*pb)-next; else qa-coef=sub; ra=qa; qa=ra-next; (*pb)-next=qb-next; free(qb); qb=(*pb)-next; else if(qa-expexp) ra=qa; qa=qa-next; else (*pb)-next=qb-next; qb-next=qa; ra-next=qb; ra=qb; qa=ra-next; qb-coef=-qb-coef; qb=(*pb)-next; while(qa) break; while(qb) ra-next=qb;qb-coef=-qb-coef;qb=qb-next; free(*pb); return ok;/实现多项式链表pa减去pb,结果存放在pa中float qiuzhipolyn(polynomial P,float x) int i; float t,sum=0.; if(!P) return OVERFLOW; q=P-next; while(q) t=1.0; for(i=0;iexp;i+) t=t*x;sum=sum+(q-coef)*t; q=q-next; return sum;/实现求多项式链表P的函数值,结果放在P中int multipolyn(polynomial pa,polynomial pb,polynomial *pc) Node *qa,*qb; Initpolyn(pc); if(!pa|!pb) return OVERFLOW; if(!(*pc) return OVERFLOW; qa=pa-next; qb=pb-next; while(qa) while(qb) s=(Node*)malloc(sizeof(Node); s-exp=qa-exp+qb-exp; s-coef=qa-coef*qb-coef; orderinsertpolyn(pc,s); qb=qb-next; qa=qa-next; qb=pb-next; return ok;/实现多项式链表pa,pb相乘,结果存放在pc中void main() int k,m,n; float x,y; printf(*n); printf(-程序设置说明-n); printf(-1:实现多项式链表相加-n); printf(-2:实现多项式链表相减-n); printf(-3:实现求多项式链表的函数值-n); printf(-4:实现多项式链表相乘-n); printf(*n); printf(n); do printf(n); printf(请输入你所选择的操作:); scanf(%d,&k); switch(k) case 0: break; case 1: printf(-1:实现多项式链表相加-n); printf(请输入插入结点个数:); scanf(%d,&m); createpolyn(&pa,m); outputpolyn(pa); printf(请输入插入结点个数:); scanf(%d,&n); createpolyn(&pb,n); outputpolyn(pb); printf(相加后结果为:); addpolyn(&pa,&pb); outputpolyn(pa); break; case 2: printf(-2:实现多项式链表相减-n); printf(请输入插入结点个数:); scanf(%d,&m); createpolyn(&pa,m); outputpolyn(pa); printf(请输入插入结点个数:); scanf(%d,&n); createpolyn(&pb,n); outputpolyn(pb); printf(相减后结果为:); subpolyn(&pa,&pb); outputpolyn(pa); break; case 3: printf(-3:实现求多项式链表的函数值-n); printf(请输入插入结点个数:); scanf(%d,&m); createpolyn(&P,m); outputpolyn(P); printf(请输入变量x的值:); scanf(%f,&x); y=qiuzhipolyn(P,x); printf(多项式链表P的值为:y=%fn,y); break; case 4: printf(-4:实现多项式链表相乘-n); printf(请输入插入结点个数:); scanf(%d,&m); createpolyn(&pa,m); outputpolyn(pa); printf(请输入插入结点个数:); scanf(%d,&n); createpolyn(&pb,n); outputpolyn(pb); printf(相乘后结果为:); multipolyn(pa,pb,&pc);outputpolyn(pc); break; default: printf(-没有你所需要进行的操作!-n); while(k);五、项目调试和运行(界面)1、输入1实现多项式的信息输入2、输入2实现多项式的信息输出3、输入3实现根据多项式指数从小到大进行排序4、输出多项式相加的值5、多项式相减结果为6、多项式相乘结果为7、多项式赋值运算六、实训设计的心得体会 在为期将近十天的数据结构实训过程中,我从中学到很多,我受益匪浅,感受很深,让我从中了解到C语言程

温馨提示

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

评论

0/150

提交评论