简单的一元多项式计算器程序

更新时间:2024-04-30 20:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

简单的一元多项式计算器程序

朱琳

摘要 ............................................................................................................................... 2 1. 绪论 .......................................................................................................................... 2 2. 系统设计 .................................................................................................................. 2 2.1 功能需求 ............................................................................................................. 2 2.2 数据需求 ............................................................................................................. 3 2.3 性能需求 ............................................................................................................. 3 3. 总体设计 .................................................................................................................. 3 3.1功能模块设计 ...................................................................................................... 3 3.2系统设计方案 ...................................................................................................... 4 4. 详细设计 .................................................................................................................. 4 4.1输入并建立模块 .................................................................................................. 4 4.2输出模块 .............................................................................................................. 6 4.3相加模块 .............................................................................................................. 6 4.4相减模块 .............................................................................................................. 8 5. 调试与测试 .............................................................................................................. 9 5.1 调试 ..................................................................................................................... 9 5.2 测试 ..................................................................................................................... 9 6. 结论 .......................................................................................................................... 9 结束语 ........................................................................................................................... 9 参考文献 ..................................................................................................................... 10 附录2-源程序 .......................................................................................................... 14

I

摘要

计算器是人们生活中必不可少的简单程序。在我们的学习生活中经常会用到计算器来进行简单的运算。因此如何编写一个简单的一元多项式计算器程序也是我们所应该掌握的。

本系统使用的C语言作为程序开发的语言,开发设计一个一元多项式的和差计算程序实现输入并建立多项式;输出多项式;两个多项式相加,建立并输出和多项式;两个多项式相减,建立并输出差多项式。

本文从分析课题的题目背景、题目意义、题目要求等出发,分别从需求分析、总体设计、详细设计、测试等各个方面详细介绍了系统的设计与实现过程,最后对系统的完成情况进行了总结。

关键词:计算器;系数;指数;一元多项式;

1. 绪论

计算器是人们生活中必不可少的简单工具。在我们的学习生活中经常会用到计算器来进行简单的运算。因此如何编写一个简单的一元多项式计算器也是我们所应该掌握的。

本系统使用的C语言作为程序开发的语言,开发设计一个一元多项式的和差计算程序实现输入并建立多项式;输出多项式;两个多项式相加,建立并输出和多项式;两个多项式相减,建立并输出差多项式。

根据课程设计任务书要求,本系统开发主要完成以下功能。 (1)能够实现输入并建立多项式; (2)能够实现输出多项式;

(3)能够实现两个多项式相加,建立并输出和多项式; (4)能够实现两个多项式相减,建立并输出差多项式。 2. 系统设计 2.1 功能需求

本系统主要是一个简单的一元多项式计算器程序系统。

本程序需要设计一个一元多项式的和,差计算程序。多项式的每一项用数组表示,每项包括一个系数和一个指数(一个数组存系数,一个数组存指数)。

2

2.2 数据需求

需要向系统输入运算符,所需要运算的数据。 2.3 性能需求

在运行本程序时只要按照正确的操作方法不会出现无法运行的情况,系统稳定性好,安全,可靠。 3. 总体设计

简单一元多项式计算程序输入并建立模块 输出模块图1功能模块图

相加模块相减模块

3.1功能模块设计

根据分析整个系统主要划分为4个功能模块,分别执行要求该系统中的功能。输入并建立模块,输出模块,相加模块,相减模块。需要有功能模块图如图1所示。

(1)输入并建立模块

能够实现输入并建立多项式子模块。

3

(2)输出模块

能够实现输出多项式子模块。 (3) 相加模块

能够实现两个多项式相加,建立并输出和多项式子模块。 (4) 相减模块

能够实现两个多项式相减,建立并输出差多项式子模块。 3.2系统设计方案

根据分析整个系统设计一个总菜单,分别执行要求的功能.1输入并建立多项式;2

输出多项式;3两个多项式相加,建立并输出和多项式;4两个多项式相减,建立并输出差多项式。

(1)建立结构体如下:

typedef struct PNode {

int coef; //系数

int expn; //指数

struct PNode *next; //指针域

}

(2)函数如下:

void CreatPoly() //一元多项式的创建操作,其中n为一元多项式的项数 void OutputPoly() //一元多项式的输出操作

void SubtractPoly() //一元多项式的相减操作,即实现Hc=Ha-Hb void SubtractPoly2( ) //一元多项式的相减操作,即实现Hc=Ha+Hb

4. 详细设计

4.1输入并建立模块

输入所要求的一元多项式,首先输入项数,在依次输入第一个多项式的第一个系数,项数,回车输出一元多项式,程序流程图如图2

4

开始inti,coef,expn;i=1i<=nNYprintf(\请输入第%d个系数:\i++结束 图2 输入并建立流程图

5

4.2输出模块

输入完成所要求的一元多项式,回车输出一元多项式,程序流程图如图3所示;

开始intflag=1;YNpflagNYprintf(\printf(\p=p->next;printf(\结束

图3输出流程图

4.3相加模块

输入两个多项式,相加运算并求和。按提示输入并建立第一个多项式,再输入并建立第二个多项式,进行加法运算并求和;。最后,输出运算结果。程序流程如图4所示;

6

开始int x; POLY pa,pb,pc,s; Hc=(POLY)malloc(sizeof(struct PNode)); Hc->next=NULL;pc=Hc;pa=Ha->next; pb=Hb->next; Npa&&pbYNNpa->expnexpnpa->expn>pb->expnYs=(POLY)malloc(sizeof(struct PNode)); s->coef=pb->coefs->expn=pb->expn;s->next=NULL;pc->next=s;pc=s; pb=pb->next; Y s=(POLY)malloc(sizeof(struct PNode));s->coef=pa->coef;s->expn=pa->expn;s->next=NULL; pc->next=s; pc=spa=pa->next; ; x=pa->coef+pb->coefNNx!=0paN YYs=(POLY)malloc(sizeof(struct PNode)); s->coef=pa->coef;s->expn=pa->expn;s->next=NULL; pc->next=s; pc=s; pa=pa->next;s=(POLY)malloc(sizeof(struct PNode));s->coef=x; s->expn=pa->expn; s->next=NULL;pc->next=s;pc=s; pa=pa->next; pb=pb->next; pbN Ys=(POLY)malloc(sizeof(struct PNode));s->coef=pb->coef;s->expn=pb->expn; s->next=NULL; pc->next=s; pc=s; pb=pb->next; 结束

图4相加流程图

7

4.4相减模块

输入两个多项式,相减运算并求差。按提示输入并建立第一个多项式,再输入并建立第二个多项式,进行减法运算并求差;。最后,输出运算结果。程序流程如图5所示

开始int x; POLY pa,pb,pc,s; Hc=(POLY)malloc(sizeof(struct PNode)); Hc->next=NULL;pc=Hc;pa=Ha->next; pb=Hb->next; Npa&&pbYpa->expnexpnNpa->expn>pb->expnNYYs=(POLY)malloc(sizeof(struct PNode)); s->coef=pb->coef s=(POLY)malloc(sizeof(struct PNode));s->expn=pb->expn;s->next=NULL;s->coef=pa->coef;s->expn=pa->expn;pc->next=s;pc=s; pb=pb->next; s->next=NULL; pc->next=s; pc=spa=pa->next; ; x=pa->coef-pb->coefNNNx!=0pa YYs=(POLY)malloc(sizeof(struct PNode)); s->coef=pa->coef;s=(POLY)malloc(sizeof(struct PNode));s->coef=x;s->expn=pa->expn;s->next=NULL; pc->next=s; s->expn=pa->expn; s->next=NULL;pc->next=s; pc=s; pa=pa->next;pc=s; pa=pa->next; pb=pb->next;pbN Ys=(POLY)malloc(sizeof(struct PNode));s->coef=pb->coef;s->expn=pb->expn; s->next=NULL; pc->next=s; pc=s; pb=pb->next; 结束 图5相减流程图

8

5. 调试与测试 5.1 调试

(1) 运行完程序一次有错误提醒

原因是上次运行程序后没有关闭操作界面当点击编译时会有一个错误提示,解决方法:将上一次运行时的操作界面关闭。

其原因是指针指向的位置出现错误导致程序传参错乱,无法运行,解决办法:使程序进入调试状态在传参,出现错误的位置一句句查找传递的参数是否是你所希望的,如若不是就加以修正。 5.2 测试

测试数据过程如下。

一元多项式计算器设计本系统需要有 (1)能够实现输入并建立多项式; (2)能够实现输出多项式;

(3)能够实现两个多项式相加,建立并输出和多项式; (4)能够实现两个多项式相减,建立并输出差多项式的功能。 本系统全部实现

6. 结论

课程设计顺利完成,任务书中所提出的要求全部实现,实现输入并建立多项式;输出多项式;两个多项式相加,建立并输出和多项式;两个多项式相减,建立并输出差多项式。不过这个程序还有些不够完善。 结束语

为期两个星期的计算机综合训练终于顺利完成,在这期间真正的学到了一些经验,能够熟练的掌握一些C语言的编程思路,能够熟练的运用学到的函数,学会了在曾经编写过的函数上加以修改实现了我期望实现的功能,知道学习编程必须亲手将每一个字符敲入电脑中这样才能真正的学到课本或一些理论中学不到的知识,这才达到了实践的目的,当程序编写完成而且能够正常运行心里一种说不出的自豪感,虽然这对于一名程序员来说可能什么也不是,但这是我编程的

9

开始,如果希望在编程这方面能够有所发展我所要走过的路还很长,还需要不断的努力学习.

参考文献

[1] 谭浩强. C语言程序设计(第三版).北京:清华大学出版社,2005.7

[2] 高涛,陆丽娜. C语言计程序设计.西安交通大学出版社,2007.2

10

附录1-用户手册

1.点击运行,首先出现的是创建第一个多项式,按提示进行操作,如图6所示.

图6输入第一个多项式界面

2.创建完成第一个多项式,开始创建第二个多项式,如图7所示.

图7输入第二个多项式界面

3.创建完成第二个多项式,如图8所示.

11

图8创建完成界面

4.两个多项式相减,输出差多项式,如图9所示.

图9相减界面

5.两个多项式相加,输出和多项式,如图10所示.

12

图10相加界面

13

附录2-源程序

#include \#include \#include \typedef struct PNode {

int coef; int expn;

struct PNode *next;

}*POLY; //POLY为一元多项式的类型

void CreatPoly(POLY &H,int n) //一元多项式的创建操作,其中n为一元多项式的项数 {

int i,coef,expn;

H=(POLY)malloc(sizeof(PNode)); POLY p,s; H->next=NULL; p=H;

for(i=1;i<=n;i++) {

printf(\请输入第%d个系数:\

scanf(\

printf(\请输入第%d个指数:\ scanf(\

s=(POLY)malloc(sizeof(struct PNode)); s->coef=coef;

s->expn=expn; p->next=s; p=s;

s->next=NULL;

} }

void OutputPoly(POLY H) //一元多项式的输出操作 {

int flag=1; //flag用来是否为第一项的标识

POLY p; p=H->next;

14

while(p) { if(flag)

{ printf(\ flag=0; } else

printf(\ p=p->next; }

printf(\ }

void SubtractPoly2(POLY Ha, POLY Hb, POLY &Hc) {

int x;

POLY pa,pb,pc,s;

Hc=(POLY)malloc(sizeof(struct PNode)); Hc->next=NULL; pc=Hc; pa=Ha->next;

pb=Hb->next; while(pa&&pb) { if(pa->expnexpn) {

s=(POLY)malloc(sizeof(struct PNode)); s->coef=pb->coef; s->expn=pb->expn; s->next=NULL;

pc->next=s;

pc=s;

pb=pb->next; }

else if(pa->expn>pb->expn) {

s=(POLY)malloc(sizeof(struct PNode));

s->coef=pa->coef;

15

s->expn=pa->expn; s->next=NULL;

pc->next=s;

pc=s;

pa=pa->next; } else {

x=pa->coef+pb->coef;

if(x!=0) { s=(POLY)malloc(sizeof(struct PNode)); s->coef=x; s->expn=pa->expn; s->next=NULL;

pc->next=s;

pc=s;

}

pa=pa->next;

pb=pb->next;

} } while(pa) { s=(POLY)malloc(sizeof(struct PNode)); s->coef=pa->coef; s->expn=pa->expn; s->next=NULL;

pc->next=s;

pc=s;

pa=pa->next; } while(pb) { s=(POLY)malloc(sizeof(struct PNode)); s->coef=pb->coef;

s->expn=pb->expn;

s->next=NULL;

16

pc->next=s; pc=s;

pb=pb->next; } }

void SubtractPoly(POLY Ha, POLY Hb, POLY &Hc) //一元多项式的相减操作,即实现Hc=Ha-Hb

{

int x;

POLY pa,pb,pc,s;

Hc=(POLY)malloc(sizeof(struct PNode)); Hc->next=NULL; pc=Hc; pa=Ha->next;

pb=Hb->next; while(pa&&pb) { if(pa->expnexpn) {

s=(POLY)malloc(sizeof(struct PNode)); s->coef=pb->coef; s->expn=pb->expn; s->next=NULL;

pc->next=s;

pc=s;

pb=pb->next; }

else if(pa->expn>pb->expn) { s=(POLY)malloc(sizeof(struct PNode)); s->coef=pa->coef; s->expn=pa->expn; s->next=NULL;

pc->next=s;

pc=s;

pa=pa->next; } else

17

{

x=pa->coef-pb->coef;

if(x!=0)

{ s=(POLY)malloc(sizeof(struct PNode)); s->coef=x; s->expn=pa->expn; s->next=NULL;

pc->next=s;

pc=s;

}

pa=pa->next;

pb=pb->next;

} } while(pa) { s=(POLY)malloc(sizeof(struct PNode)); s->coef=pa->coef; s->expn=pa->expn; s->next=NULL;

pc->next=s;

pc=s;

pa=pa->next; } while(pb) { s=(POLY)malloc(sizeof(struct PNode)); s->coef=-pb->coef; s->expn=pb->expn; s->next=NULL;

pc->next=s;

pc=s;

pb=pb->next; } }

void main() {

POLY Ha,Hb,Hc;

18

int n;

printf(\ 创建第一个多项式中…\\n\\n\ printf(\请输入第一个多项式项数:\ scanf(\ CreatPoly(Ha,n);

printf(\第一个多项式为:\\n\ OutputPoly(Ha);

printf(\ 创建第二个多项式中…\\n\\n\

printf(\请输入第二个多项式项数:\ scanf(\ CreatPoly(Hb,n);

printf(\第二个多项式为:\\n\ OutputPoly(Hb); SubtractPoly(Ha,Hb,Hc); printf(\多项式差:\\n\ SubtractPoly(Ha,Hb,Hc); OutputPoly(Hc);

printf(\多项式和:\\n\ SubtractPoly2(Ha,Hb,Hc);

OutputPoly(Hc);

}

19

完成日期:2010年7月19日

20

本文来源:https://www.bwwdw.com/article/1jlg.html

Top