数据结构课程设计报告一元多项式计算_第1页
数据结构课程设计报告一元多项式计算_第2页
数据结构课程设计报告一元多项式计算_第3页
数据结构课程设计报告一元多项式计算_第4页
数据结构课程设计报告一元多项式计算_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

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

文档简介

1、数据结构课程设计报告题目:一元多项式计算班 级: 计算机092 姓 名: 余海刚 指导教师:董跃华 ,井福荣 成 绩:_ 2011年 6月 22日摘要(题目)::文件是程序设计中的一个重要概念。所谓“文件”一般是指存储在外部介质上数据的集合。一批数据时以文件的形式存放在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件(以文件名标识),才能向它输出数据。题目要求能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输入;

2、单链表是用一组地址任意的存储单元存放线性表中的数据元素。 以元素(数据元素的映象) + 指针(指示后继元素存储位置) = 结点 (表示数据元素 或 数据元素的映象) 以“结点的序列”表示线性表。 关键字:单链表,数据结构,流程图,整理表达式,if语句。目录:1.引言 .22.需求分析.33.概要设计.34.详细设计.65.测试结果.116.调试分析.147.设计体会.148.结束语.14参考文献14附录151.引言单链表:用一组地址任意的存储单元存放线性表中的数据元素。 以元素(数据元素的映象) + 指针(指示后继元素存储位置) = 结点 (表示数据元素 或 数据元素的映象)。 单链表是一种顺

3、序存取的结构,为找第 i 个数据元素,必须先找到第 i-1 个数据元素。 因此,查找第 i 个数据元素的基本操作为:移动指针,比较 j 和 i 。文件是程序设计中的一个重要概念。所谓“文件”一般是指存储在外部介质上数据的集合。一批数据时以文件的形式存放在外部介质(如磁盘)上的。操作系统是以文件为单位对数据进行管理的,也就是说,如果想找存在外部介质上的数据,必须先按文件名找到所指定的文件,然后从该文件中读取数据。要向外部介质上存储数据也必须先建立一个文件(以文件名标识),才能向它输出数据。本报告中所设计的整理表达式,实现了以线性表结构的单向表表示商场所需求的功能,将文件形式保存的数据恢复成线性表

4、结构的单向表的流程中所需的功能。2.需求分析要求只输入数字,输入零代表输入结束。要求能够按照指数降序排列建立并输出多项式;能够完成两个多项式的相加、相减,并将结果输入;3.概要设计、. 为包含的库函数 除此之外还有结构体和宏定义的应用系统流程图: 图3.1调用函数图;主函数main()主界面menu()函数kuanjia1()函数delayMS函数Zlbds函数gotoTextPos函数polycha函数polyadd 图3.24、详细设计4.1引用库函数及变量的定义 #include /*标准输入/输出头文件*/#include /*包含绘制图形函数等头文件*/#include /*包含字符

5、串处理函数头文件*/#include /*包含动态存储与释放函数头文件*/#include #include #define Max 100 /*宏观定义栈的最大容量*/typedef struct polynodeint coef; /多项式的系数int exp; /指数struct polynode *next;node; 4.2 输入算法的实现void kuanjia1() /大框架 system(cls); printf(); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); pri

6、ntf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf(); gotoTextPos(4,1); printf( 一元多项式计算);void menu() /主界面 kuanjia1(); gotoTextPos(16,8); printf(1.Start); gotoTextPos(16,10); printf(2.Exit); gotoTextPos(2,14); printf(Please input your choice: ); int n; scanf(%

7、d,&n); switch(n) case 1:zlbds();break; case 2:return ; default:gotoTextPos(28,14);printf(Error!); gotoTextPos(2,16);printf( Press any key to try again!); getch(); menu(); 4.3输出算法的实现void zlbds() kuanjia1();node *ha,*hb,*hc,*hd;gotoTextPos(5,2);printf(请输入多项式ha的系数与指数:n);ha=create();gotoTextPos(2,9);pri

8、nt(ha);gotoTextPos(2,10);printf(n);gotoTextPos(2,10);printf(请输入多项式hb的系数与指数:n);hb=create();gotoTextPos(2,17);print(hb);gotoTextPos(2,18);printf(n);gotoTextPos(2,18);printf(多项式的和是:n);polyadd(ha,hb);gotoTextPos(2,19);print(ha);gotoTextPos(2,19);printf(n);gotoTextPos(2,20);printf(请输入多项式hc的系数与指数:n);hc=cr

9、eate();gotoTextPos(2,27);print(hc);gotoTextPos(2,27);printf(n);gotoTextPos(2,28);printf(请输入多项式hd的系数与指数:n);hd=create();gotoTextPos(2,35);print(hd);gotoTextPos(2,35);printf(n);gotoTextPos(2,36);printf(多项式的差是:n);polycha(hc,hd);gotoTextPos(2,37);print(hc);gotoTextPos(2,38);printf(n);getch(); menu();4.4

10、算法void polyadd(node *ha, node *hb)/一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式ha中,并将多项式hb删除node *p,*q,*pre,*temp;int sum;p=ha-next;q=hb-next;pre=ha;while(p!=NULL&q!=NULL)if(p-expexp)pre-next=p;pre=pre-next;p=p-next;else if(p-exp=q-exp)sum=p-coef+q-coef;if(sum!=0)p-coef=sum;pre-next=p;pre=pre-next;p=p-next;te

11、mp=q;q=q-next;free(temp);else /如果系数和为零,则删除结点p与q,并将指针指向下一个结点temp=p-next;free(p);p=temp;temp=q-next;free(q);q=temp;elsepre-next=q;pre=pre-next;q=q-next;if(p!=NULL) /将多项式A中剩余的结点加入到和多项式中pre-next=p;elsepre-next=q;4.5主函数int main() system(mode con:cols=40 lines=41); setConsoleTitle(一元多项式计算 by余海刚); system(c

12、olor 0A); menu(); kuanjia1(); gotoTextPos(10,7); printf(拜); delayMS(600); gotoTextPos(19,7); printf(拜); delayMS(600); gotoTextPos(20,9); printf(b); delayMS(600); gotoTextPos(21,9); printf(y); delayMS(600); gotoTextPos(24,9); printf(余); delayMS(600); gotoTextPos(26,9); printf(海); delayMS(600); gotoTe

13、xtPos(28,9); printf(刚); delayMS(600);return 0;5、 测试结果 5.1输入界面图 图5.1 5.2.1输出界面图 输入选择1的运行界面。见1.10 图 5.2.1 5.2.2输入选择2的运行界面。见 图5.2.2 5.2.3输入其它选择的运行界面。见 图5.2.3 6、 调试分析编译时,发现有的括号可删可不删时,会自动删除,这样导致程序不够紧密。刚刚接到这个题目的时候,本人发现用单链表做会更加的减少时间复杂度和空间复杂度,从而更好的方便使用,于是本人的一切出发点都是围绕方便使用者进行。程序的开始我使用的是宏定义,使程序更加的简洁明了。登陆界面其实是利

14、用判断语句做的,后面的输入输出没有什么特别的,是按照一般线性表的输入输出做的,。除此之外,本人还花了一部分时间到美化界面上,现在的界面是在本人的能力范围之内最好的。7、 设计体会通过这个星期的课程设计,本人的收获还是不少的。刚开始看到这个课程设计题目的时候,本人觉得很有信心,因为本人认为本人的数据结构和C语言中本人最喜欢也是学的最好的地方就是线性,但是随着对这个题目的细细探索,本人发现这题目还是有一定的难度的,越看本人觉得越急躁,但是这样反而更加的阻碍我的思路,直到本人碰到一个在C语言方面颇有心得的同学,他帮我解决了很多问题,更主要的是他让本人明白了耐性在一个程序中的重要作用,现在,借着这里本

15、人想真诚的对他说一声“谢谢!”本人一定会更加的努力培养本人的耐性,让本人的人生更加的美好而成功!数据结构的很多算法没能熟练的掌握,以致在调试的时候花了很长时间,而且程序不够工程化,功能不够完善。8、 结束语该系统本人主要做了三个功能选项,,一个主界面。解决了一元多项式计算问题,当然此系统也可应用到其它表达式系统。它是利用了C语言实现的。此系统的作界面,操作员可以对某个指定的库存文件进行选择,文件名自定。非常感谢老师对本人的教导。参考文献1 严蔚敏 吴伟名 编著,数据结构, 清华大学出版社, 2001年1月2 谭浩强 编著, C程序设计(第三版) ,新世纪计算机基础教育丛书 清华大学出版社 ,2

16、005年7月第三版3 张颖江,胡燕。c语言程序设计M。北京:科学出版社。1985年。4 裔红艳 数据结构课程设计报告 , 计算机师范5 李春葆 编著,数据结构习题与解析(第三版),清华大学出版社,2006年10月20附录:#include#include#include#include#include#include strong.cpp#define Max 100void menu();typedef struct polynodeint coef; /多项式的系数int exp; /指数struct polynode *next;node;void kuanjia1() /大框架 sys

17、tem(cls); printf(); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf( ); printf(); gotoTextPos(4,1); printf( 一元多项式计算);node *create() /用尾插法建立一元多项式的链表node *h

18、,*r,*s;int c,e;h=(node*)malloc(sizeof(node);r=h;printf(coef:);scanf(%d,&c);printf(exp: );scanf(%d,&e);while(c!=0) /输入系数为0时,多项式的输入结束s=(node*)malloc(sizeof(node);s-coef=c;s-exp=e;r-next=s;r=s;printf(coef:);scanf(%d,&c);printf(exp: );scanf(%d,&e);r-next=NULL;return(h);void print(node *p) /输出函数,打印出一元多项式

19、while(p-next!=NULL)p=p-next;printf( %d*x%d,p-coef,p-exp);void polyadd(node *ha, node *hb)/一元多项式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式ha中,并将多项式hb删除node *p,*q,*pre,*temp;int sum;p=ha-next;q=hb-next;pre=ha;while(p!=NULL&q!=NULL)if(p-expexp)pre-next=p;pre=pre-next;p=p-next;else if(p-exp=q-exp)sum=p-coef+q-coef;i

20、f(sum!=0)p-coef=sum;pre-next=p;pre=pre-next;p=p-next;temp=q;q=q-next;free(temp);else /如果系数和为零,则删除结点p与q,并将指针指向下一个结点temp=p-next;free(p);p=temp;temp=q-next;free(q);q=temp;elsepre-next=q;pre=pre-next;q=q-next;if(p!=NULL) /将多项式A中剩余的结点加入到和多项式中pre-next=p;elsepre-next=q;void polycha(node *hc, node *hd)/一元多项

21、式相加函数,用于将两个多项式相加,然后将和多项式存放在多项式ha中,并将多项式hb删除node *p,*q,*pre,*temp;int cha;p=hc-next;q=hd-next;pre=hc;while(p!=NULL&q!=NULL)if(p-expexp)pre-next=p;pre=pre-next;p=p-next;else if(p-exp=q-exp)cha=p-coef-q-coef;if(cha!=0)p-coef=cha;pre-next=p;pre=pre-next;p=p-next;temp=q;q=q-next;free(temp);else /如果系数和为零,

22、则删除结点p与q,并将指针指向下一个结点temp=p-next;free(p);p=temp;temp=q-next;free(q);q=temp;elsepre-next=q;pre=pre-next;q=q-next;if(p!=NULL) /将多项式A中剩余的结点加入到和多项式中pre-next=p;elsepre-next=q;void zlbds() kuanjia1();node *ha,*hb,*hc,*hd;gotoTextPos(5,2);printf(请输入多项式ha的系数与指数:n);ha=create();gotoTextPos(2,9);print(ha);gotoT

23、extPos(2,10);printf(n);gotoTextPos(2,10);printf(请输入多项式hb的系数与指数:n);hb=create();gotoTextPos(2,17);print(hb);gotoTextPos(2,18);printf(n);gotoTextPos(2,18);printf(多项式的和是:n);polyadd(ha,hb);gotoTextPos(2,19);print(ha);gotoTextPos(2,19);printf(n);gotoTextPos(2,20);printf(请输入多项式hc的系数与指数:n);hc=create();gotoT

24、extPos(2,27);print(hc);gotoTextPos(2,27);printf(n);gotoTextPos(2,28);printf(请输入多项式hd的系数与指数:n);hd=create();gotoTextPos(2,35);print(hd);gotoTextPos(2,35);printf(n);gotoTextPos(2,36);printf(多项式的差是:n);polycha(hc,hd);gotoTextPos(2,37);print(hc);gotoTextPos(2,38);printf(n);getch(); menu();void menu() /主界面

25、 kuanjia1(); gotoTextPos(16,8); printf(1.Start); gotoTextPos(16,10); printf(2.Exit); gotoTextPos(2,14); printf(Please input your choice: ); int n; scanf(%d,&n); switch(n) case 1:zlbds();break; case 2:return ; default:gotoTextPos(28,14);printf(Error!); gotoTextPos(2,16);printf( Press any key to try a

26、gain!); getch(); menu(); int main() system(mode con:cols=40 lines=41); setConsoleTitle(一元多项式计算 by余海刚); system(color 0A); menu(); kuanjia1(); gotoTextPos(10,7); printf(拜); delayMS(600); gotoTextPos(19,7); printf(拜); delayMS(600); gotoTextPos(20,9); printf(b); delayMS(600); gotoTextPos(21,9); printf(y

27、); delayMS(600); gotoTextPos(24,9); printf(余); delayMS(600); gotoTextPos(26,9); printf(海); delayMS(600); gotoTextPos(28,9); printf(刚); delayMS(600); return 0; #include pcc32.hvoid delayMS(uint32 d)Sleep(d);return ;void clearText(void)system(cls);return ;int setTextColor(uint8 fColor)HANDLE hd = GetS

28、tdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAttribute(hd, fColor | (csbInfo.wAttributes&0x0F);PCCOLOR getTextColor(void)CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csb

29、Info);return (PCCOLOR)(csbInfo.wAttributes&0x0F);int setBackColor(uint8 bColor)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAttribute(hd, (bColor 4);int setColors(uint8 fColor, uint8 bColor)HANDLE hd = Ge

30、tStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);return SetConsoleTextAttribute(hd, fColor | (bColor 4) | (csbInfo.wAttributes&0xFF);int setSwapColors(bool b)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetCon

31、soleScreenBufferInfo(hd, &csbInfo);if (!b)return SetConsoleTextAttribute(hd, csbInfo.wAttributes | 0x4000);elsereturn SetConsoleTextAttribute(hd, csbInfo.wAttributes & 0x4000);int setUnderLine(bool b)HANDLE hd = GetStdHandle(STD_OUTPUT_HANDLE);CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleScreenBufferInfo(hd, &csbInfo);if (!b)return SetConsoleTextAttribute(hd, csbInfo.wAttributes | 0x8000);elsereturn SetConsoleTextAttribute(hd, csbInfo.wAttributes & 0x8000);uint8 getLineWidth(void)CONSOLE_SCREEN_BUFFER_INFO csbInfo;GetConsoleS

温馨提示

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

评论

0/150

提交评论