《多项式运算实训报告》由会员分享,可在线阅读,更多相关《多项式运算实训报告(12页珍藏版)》请在金锄头文库上搜索。
1、信 息 工 程 学 院数据结构实训报告题目:多项式基本运算学号:14090323姓名:卫哲君 班级:强化3班目 录一、 目的概述。3二、 实验(设计)仪器设备和材料清单。3三、 项目分析和设计。3四、 项目关键代码。4五、 项目调试和运行。10六、 实训设计的心得体会。12数据结构实训设计报告一、 目的概述 我这次实训的项目主要是多项式基本运算系统,多项式基本运算系统主要实现的是多项式的相加相减相乘和赋值计算。这次实训的项目主要通过C语言来实现程序的运行,主要通过C语言中的函数调用和链表来做程序,还要用到许多小的知识点,例如:用冒泡法实现排序;scanf、printf语句;while()语句实
2、现循环;ifelse语句实现选择等等。二、实验(设计)仪器设备和材料清单1.硬件:PC机2.软件:turboc 2.0,visula c+ 6.0三、项目分析和设计 这个项目的程序可分为几个板块来做,每个板块有每个板块的作用,通过不同程序的不同作用相互调用即可实现整个程序的运行,这个项目程序主要可以分为以下几个板块:1、定义头文件: 运用#include,#include头文件2、定义链表: 运用typedef struct NODE 多项式项数和系数和指数信息变量名表列; 3、对调用函数进行声明: 根据所写程序对有些函数进行声明,例如: int Initpolyn(polynomial *P
3、);在程序中实现的是构造一个多项式链表P。4、主函数: Void main()为主函数,在主函数中通过while语句和 switchcase语句或者printf语句进行选择和函数调用。 Void main() while() switch() 5、菜单函数: 主要用printf语句输出菜单函数,并且还通过主函数调用菜单函数实现对多项式操作的选择。6、输入多项式的信息: 定义函数为int orderinsertpolyn(polynomial *P,Node *e) Node *e为链表指针,在此函数中,通过指针的移动实现多项式信息的输入。7、输出多项式: 定义函数为int outputpoly
4、n(polynomial P) 主要运用printf语句输出多项式的信息,并用while语句输入系数指数信息。9、插入信息并排序: 定义函数为int orderinsertpolyn(polynomial *P,Node *e) 在此函数中,利用指针传递进行输入信息,再调用排序函数指数从小到大排列 再保存链表,最后还要返回一个值到主函数main().10、多项式相加相间减思想:一个多项式存一个链表相加时指数相同的系数相加相减结果存放在第一个链表中,实现相加函数:int addpolyn(polynomial *pa,polynomial *pb)实现相减函数:int subpolyn(poly
5、nomial *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; polyn
6、omial 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; e
7、lse 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 O
8、VERFLOW; (*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
9、,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
10、=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(*p
11、b); 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); q
12、a=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); r