多项式运算实训报告

上传人:xt****7 文档编号:100906585 上传时间:2022-06-03 格式:DOC 页数:12 大小:459KB
收藏 版权申诉 举报 下载
多项式运算实训报告_第1页
第1页 / 共12页
多项式运算实训报告_第2页
第2页 / 共12页
多项式运算实训报告_第3页
第3页 / 共12页
资源描述:

《多项式运算实训报告》由会员分享,可在线阅读,更多相关《多项式运算实训报告(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

13、;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,po

14、lynomial *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,p

15、b相乘,结果存放在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:实现多项式链表相加

16、-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); outputp

17、olyn(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); pr

18、intf(多项式链表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

19、); while(k);五、项目调试和运行(界面)1、输入1实现多项式的信息输入2、输入2实现多项式的信息输出3、输入3实现根据多项式指数从小到大进行排序4、输出多项式相加的值5、多项式相减结果为6、多项式相乘结果为7、多项式赋值运算六、实训设计的心得体会 在为期将近十天的数据结构实训过程中,我从中学到很多,我受益匪浅,感受很深,让我从中了解到C语言程序编程的奥妙,学会了许多关于编程的代码,我在这次编写程序中,虽然有点累,但是我从中也得到了乐趣,我觉得编写程序越来越有趣。但是在编写程序的过程中并不是一帆风顺、顺顺利利的,一开始编写的时候并不知道该怎么着手去编写,很茫然,但是后来经过老师的提点以

20、及提示,我能够去试着编写一个一个小片段,当我把这些小程序拼到一起变成大程序时,我很高兴,因为我毕竟做出来一些内容了。当我将这些程序利用VC进行编译、链接的时候,程序出现了许多错误,其中程序中的错误有很多种,比如有语法错误,逻辑错误等。语法错误例如:(1)系数和指数之间用空格隔开否则无法正常显示运行的结果; (2)语句写颠倒; (3)函数声明与函数定义不一致,在程序中我声明函数时,将参数顺序不匹配;(4)函数实参与形参的类型不一致,在这次的实训中我知道了要做一个程序,首先要知道程序的算法,在了解算法的基础上要知道怎样运用算法,进一步说是怎样运用算法写程序,不管是大程序还是小程序都要用到算法。这次的编写程序又让我感受到学习编写程序可以锻炼缜密的思维,在平时我们只编写一些小程序,句段比较少,一些错误都很容易被检查出来,但是这次实训项目的程序语段比较多,难以检查,需要很多耐心。 实训不仅是检查一个人知识掌握了多少,其实更重要的实检测你的实践能力,以及看你是否细心、是否有缜密的思维,所以,在这方面我们要加强锻炼,磨练自己,使自己有更高的提参考文献:

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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