用C语言实现多项式简单计算器的设计概要Word格式.docx

上传人:b****5 文档编号:21779640 上传时间:2023-02-01 格式:DOCX 页数:21 大小:239.93KB
下载 相关 举报
用C语言实现多项式简单计算器的设计概要Word格式.docx_第1页
第1页 / 共21页
用C语言实现多项式简单计算器的设计概要Word格式.docx_第2页
第2页 / 共21页
用C语言实现多项式简单计算器的设计概要Word格式.docx_第3页
第3页 / 共21页
用C语言实现多项式简单计算器的设计概要Word格式.docx_第4页
第4页 / 共21页
用C语言实现多项式简单计算器的设计概要Word格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

用C语言实现多项式简单计算器的设计概要Word格式.docx

《用C语言实现多项式简单计算器的设计概要Word格式.docx》由会员分享,可在线阅读,更多相关《用C语言实现多项式简单计算器的设计概要Word格式.docx(21页珍藏版)》请在冰豆网上搜索。

用C语言实现多项式简单计算器的设计概要Word格式.docx

程序验收、答辩;

撰写设计报告。

具体要求

1.课程设计报告按统一通用格式书写,具体内容如下:

①设计任务与要求

②总体方案与说明

③软件主要模块的流程图

④源程序清单与注释

⑤问题分析与解决方案(包括调式记录、调式报告,即在调式过程中遇到的主要问题、解决方法及改进设想);

⑥小结与体会

附录:

①源程序(必须有简单注释)②使用说明③参考资料

2.每位学生应独立完成各自的任务且每天至少在设计室工作半天;

指导教师签名:

王绪梅2013年6月22日

教研室主任(或责任教师)签名:

2013年6月24日

目录

1.设计题目1

2.需求分析1

2.1一元多项式的简单计算器的基本功能1

2.2设计思路1

3.系统过程2

3.1概要设计2

3.2详细设计3

4.调用关系图3

4.1总流程图4

4.2加法流程图5

4.3减法流程图6

5.测试7

5.1测试数据7

5.2打开程序时的主界面7

5.3输入并建立多项式8

5.4选择执行的操作及执行的结果9

6.心得体会及总结10

7.参考文献10

附录11

数据结构课程设计报告书

1设计题目

用C语言实现多项式简单计算器的设计

2需求分析

2.1一元多项式的简单计算器的基本功能

(1)输入并建立多项式;

(2)输出多项式;

(3)多项式a和b相加,建立多项式a+b;

(4)多项式a和b相减,建立多项式a-b;

(5)多项式a和b相乘,建立多项式a*b。

2.2设计思路

(1)定义线性表的动态分配顺序存储结构;

(2)建立多项式存储结构,定义指针*next;

(3)利用链表实现队列的构造,每次输入一项的系数和指数,可以构造一元多项式;

(4)演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;

最后根据相应的数据进行输入建立多项式以及多项式相加,减,乘的运行结果在屏幕上显示。

设计思路分析:

要解决多项式相加,相减,相乘,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为:

系数coef

指数expn

指针域next

运用尾插法建立两个单链表,以单链表Polynp和Polynh分别表示一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将Polynp中的结点插入到单链表Polynh中),因此“和多项式”的结点无须另生成。

为了实现处理,设p、q2分别指向单链表polya和polyb的当前项,比较p、q2结点的指数

由此得到下列运算规则:

①若p->

expn<

q2->

expn,则结点q2所指的结点应是“和多项式”中的一项,令指针q2后移。

②若p->

expn=q2->

expn,则将两个结点中的系数相加,当和不为0时修改结点q2的系数。

③若p->

expn>

expn,则结点p所指的结点应是“和多项式”中的一项,将结点p插入在结点q2之前,且令指针p在原来的链表上后移。

3系统设计

3.1概要设计

系统的主功能模块结构如图3—1所示。

3.2详细设计

1、元素类型、结点类型和指针类型:

typedefstructPolynomial

{

floatcoef;

//系数

intexpn;

//指数

structPolynomial*next;

}*Polyn,Polynomial;

2、建立一个头指针为head、项数为m的一元多项式,建立新结点以接收数据,调用Insert函数插入结点:

PolynCreatePolyn(Polynhead,intm){

inti;

Polynp;

p=head=(Polyn)malloc(sizeof(structPolynomial));

head->

next=NULL;

for(i=0;

i<

m;

i++)

{

p=(Polyn)malloc(sizeof(structPolynomial));

printf("

请输入第%d项的系数与指数:

"

i+1);

scanf("

%f%d"

&

p->

coef,&

expn);

Insert(p,head);

//调用Insert函数插入结点

}

returnhead;

}

3、主函数和其他函数:

intmain()

intm,n,flag=0;

floatx;

Polynpa=0,pb=0,pc,pd,pe,pf;

voidPrintPolyn(PolynP)//输出多项式a和b

PolynAddPolyn(Polynpa,Polynpb)//求解并建立多项式a+b,返回其头指针

PolynSubtractPolyn(Polynpa,Polynpb)//求解并建立多项式a-b,返回其头指针

PolynMultiplyPolyn(Polynpa,Polynpb)//求解并建立多项式a*b,返回其头指针

4调用关系图

4.1总流程图

总流程图如图4—1所示。

4.2执行加法流程图

执行加法流程图如图4—2所示。

4.3执行减法流程图

执行减法流程图如图4—3所示。

5测试

5.1测试数据

1、(-3x11+5x8+4x)+(11x9-5x8+7)=(-3x11+11x9+4x+7);

2、(7x-3+4.4x2-1.2x9-x)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9+13x-3-x);

3、(9x8+4x6-5x4+8x)*(x14+2x4)=(9x22+4x20-5x18+8x15+18x12+8x10-10x8+16x5);

4、(x+x3)+(-x-x3)=0;

5、(1-x+x2+x3-x4)*(-x3-x4)=(x8-2x6-x3)。

5.2.打开程序时的主界面

打开程序时的主界面如图5—1所示。

图5—1打开程序时的主界面

5.3.输入并建立多项式

输入并建立多项式如图5—2所示。

图5—2输入并建立多项式

5.4选择执行的操作及执行操作的结果

选择执行的操作及执行操作的结果如图5—3、5—4、5—5所示。

图5—3选择执行的操作及执行操作的结果

图5—4选择执行的操作及执行操作的结果

图5—5选择执行的操作及执行操作的结果

6心得体会及总结

通过这次课程设计,我感觉到要自己动手真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到问题,问老师,问同学,想尽办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容.编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查.直到最终搞清为止。

对于数据结构有了更深层次的理解,数据结构体现的是解决问题的一种思想,怎样把这种思想体现出来,需要我们对每个方面的系统了解。

并发现了许多自己的不足,平时没掌握的的知识在实践中暴露,经过不断的思考,查阅书籍和上网查资料及上机运行,解决了大部分的问题,还有一些小问题。

但是,我相信在今后的学习中,一定能把它解决好。

当今计算机应用在生活中可以说是无处不在。

因此作为二十一世纪的大学生来说掌握程序开发技术是十分重要的,而C语言又是最常见,功能最强大的一种高级语言,因此做好c语言版数据结构课程设计是十分必要的。

我不仅巩固了数据结构程序设计的内容,掌握设计的基本方法,强化了上机动手能力,还进一步掌握了以下知识:

数据类型,分支控制,循环控制,结构体及数组,指针,文件操作,编译预处理等;

通过课程设计,掌握了程序的局部测试,调试方法,建立程序系统调试,测试的基本概念和思想,学会较大程序的系统测试和调试方法。

当我选择通讯录管理系统时,首先系统分析主要思路和框架哦,与同学讨论,联系所学的知识。

我知道书上和老师讲的有限,所以上网搜也是一种利用资源的表现。

在编程中,特别是结构体,指针的部分,几乎是一片空白。

不过经过几天的努力,大体把课本上的知识点看了一遍,知识点也基本上掌握了,所以下一步就是开始正式的编程序了。

当读懂了C语言编程的基本过程和方法,经过一波三折,终于开始正式编程。

通过这次的课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的知识与实际结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力。

在课程设计过程中,收获知识,提高能力的同时,我也学到了很多的人生哲理,懂得了怎么去制定计划,怎么去实现这个计划,并掌握了在执行的过程中怎样去克服心理上的不良情绪。

因此在以后的生活和学习的过程中,我一定把课程设计的精神带到生活中,使生活变得更好。

7参考文献

[1]唐国民,王国均.数据结构(C语言版)·

北京:

清华大学出版社.

[2]严蔚敏,吴伟民.数据结构(C语言版).北京:

清华大学出版社,1997.

[3]詹春华,杨沙.《C语言程序设计教程》科学出版社,2011.8

[4]董志民,崔建平,肖利娜.《C语言程序设计》教学改革探索与实践[J].福建电脑.

[5]王路明•C语言程序设计教程•北京:

北京邮电大学出版社,2005年5月

[6]谭浩强·

C++程序设计·

清华大学出版社·

2004  

[7]范策.算法与数据结构(C语言版).北京:

机械工业出版社,2004.

附录

#include<

stdio.h>

malloc.h>

typedefstructPolynomial

{floatcoef;

intexpn;

structPolynomial*next;

}*Polyn,Polynomial;

//Polyn为结点指针类型

voidInsert(Polynp,Polynh)

{if(p->

coef==0)free(p);

//系数为0的话释放结点

else

{Polynq1,q2;

q1=h;

q2=h->

next;

while(q2&

&

expn)//查找插入位置

{q1=q2;

q2=q2->

if(q2&

expn==q2->

expn)//将指数相同相合并

{q2->

coef+=p->

coef;

free(p);

if(!

coef)//系数为0的话释放结点

{q1->

next=q2->

free(q2);

else//指数为新时将结点插入

{p->

next=q2;

q1->

next=p;

}//Insert

PolynCreatePolyn(Polynhead,intm)//建立一个头指针为head、项数为m的一元多项式

{inti;

{p=(Polyn)malloc(sizeof(structPolynomial));

//建立新结点以接收数据

printf("

scanf("

Insert(p,head);

//调用Insert函数插入结点

}//CreatePolyn

voidDestroyPolyn(Polynp)//销毁多项式p

q1=p->

q2=q1->

while(q1->

next)

{free(q1);

q1=q2;

//指针后移

voidPrintPolyn(PolynP)

{Polynq=P->

intflag=1;

//项数计数器

q)//若多项式为空,输出0

{putchar('

0'

);

\n"

return;

}

while(q)

{if(q->

coef>

0&

flag!

=1)putchar('

+'

//系数大于0且不是第一项

if(q->

coef!

=1&

q->

=-1)//系数非1或-1的普通情况

{printf("

%g"

q->

coef);

expn==1)putchar('

X'

elseif(q->

expn)printf("

X^%d"

coef==1){

expn)putchar('

1'

elseprintf("

coef==-1)

{if(!

-1"

expn==1)printf("

-X"

-X^%d"

q=q->

flag++;

}//while

}//PrintPolyn

intcompare(Polyna,Polynb)

{if(a&

b)

b||a->

b->

expn)return1;

elseif(!

a||a->

expn)return-1;

elsereturn0;

a&

b)return-1;

//a多项式已空,但b多项式非空

elsereturn1;

//b多项式已空,但a多项式非空

}//compare

PolynAddPolyn(Polynpa,Polynpb)//求解并建立多项式a+b,返回其头指针

{Polynqa=pa->

Polynqb=pb->

Polynheadc,hc,qc;

hc=(Polyn)malloc(sizeof(structPolynomial));

//建立头结点

hc->

headc=hc;

while(qa||qb)

{qc=(Polyn)malloc(sizeof(structPolynomial));

switch(compare(qa,qb))

{case1:

{qc->

coef=qa->

qc->

expn=qa->

expn;

qa=qa->

break;

case0:

{

coef+qb->

qb=qb->

case-1:

coef=qb->

expn=qb->

}//switch

if(qc->

=0)

next=hc->

next=qc;

hc=qc;

elsefree(qc);

//当相加系数为0时,释放该结点

returnheadc;

}//AddPolyn

{Polynh=pb;

Polynp=pb->

Polynpd;

while(p)//将pb的系数取反

coef*=-1;

p=p->

pd=AddPolyn(pa,h);

for(p=h->

p;

p=p->

next)//恢复pb的系数

p->

returnpd;

}//SubtractPolyn

PolynMultiplyPolyn(Polynpa,Polynpb)//求解并建立多项式a*b,返回其头指针

{Polynhf,pf;

Polynqa=pa->

hf=(Polyn)malloc(sizeof(structPolynomial));

hf->

for(;

qa;

qa=qa->

{for(qb=pb->

qb;

qb=qb->

{pf=(Polyn)malloc(sizeof(structPolynomial));

pf->

coef*qb->

expn+qb->

Insert(pf,hf);

//调用Insert函数以合并指数相同的项

returnhf;

}//MultiplyPolyn

//定义各式的头指针,pa与pb在使用前赋初值NULL

请输入a的项数:

%d"

m);

pa=CreatePolyn(pa,m);

//建立多项式a

请输入b的项数:

n);

pb=CreatePolyn(pb,n);

//建立多项式b

//输出菜单

********************操作提示**************************\n"

\t1.输出多项式a和b\n"

\t2.建立多项式a+b\n"

\t3.建立多项式a-b\n"

\t4.建立多项式a*b\n"

\t5.退出\n*******************************************\n"

;

flag=0)

执行操作"

flag);

if(flag==1){

多项式a:

PrintPolyn(pa);

多项式b:

PrintPolyn(pb);

continue;

if(flag==2)

pc=AddPolyn(pa,pb);

多项式a+b:

PrintPolyn(pc);

DestroyPolyn(pc);

if(flag==3)

pd=SubtractPolyn(pa,pb);

多项式a-b:

PrintPolyn(pd);

DestroyPolyn(pd);

if(flag==4){

pf=MultiplyPolyn(pa,pb);

多项式a*b:

PrintPolyn(pf);

DestroyPolyn(pf);

if(flag==5)break;

if(flag<

1||flag>

8)printf("

Error!

!

}//for

DestroyPolyn(pa);

DestroyPolyn(pb);

return0;

设计过程中质疑(或答辩)记载:

问题1:

用什么存放数据?

答:

用带头结点的的单链表

问题2:

用结构体的系数coef和指数expn加上输出的结果,形成的结构是什么?

单链表

问题3:

怎样画流程图?

答:

先设计一个总流程图,结束,然后再按模块画出各个流程图,如图

指导教师评语:

签名:

2013年7月1日

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 水产渔业

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1