一元多项式计算器设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计计划任务书:
针对本课程设计,完成以下课程设计任务,
1.熟系统实现工具和上机环境;
2.根据课程设计任务,查阅相关资料;
3.针对所选课程设计任务完成以下工作:
(1).需求分析;
(2).概要设计;
(3).详细设计;
(4).编写源程序;
(5).静态做查程序和上机调试程序.
4.书写上述文档和撰写课程设计报告.
第一章设计课题
1.1 设计目的
设计一元稀疏多项式简单计数器:
1.2 基本功能要求
功能要求如下:
1.输入并建立多项式;
2.输出多项式,输出形式为整数序列n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;
3.多项式a和b相加,建立多项式a+b;输出相加的多项式
4.多项式a和b相减,建立多项式a-b。输出相加的多项式
用带表头结点的单链表存储多项式。
测试数据:
(1)(2x+5x8-3.1x11)+ (7-5x8+7.8x15)
(2) (6x-3-x+4.4x2-1.2x9) – (-6x-3+5.4x2+7.8x15)
第二章需求分析
2.1 输入的形式和输入值的范围:
输入是从键盘输入的,输入的内容为多项式的系数和指数,数为任意的整数,指数为大于等于0的整数
2.2 输出的形式
从屏幕输出,显示用户输入的多项式,并显示多项式加减以后的多项式的值。
2.3程序所能达到的功能
a:输入并建立多项式;
b:输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,……,cn,en,其中n是多项式的项数,ci和ei分别是第i项的系数和指数,序列按指数降序排列;
c:多项式a和b相加,建立多项式a+b;
d:多项式a和b相减,建立多项式a-b;
e:多项式的输出形式为类数学表达式。
系数值为1的非零项的输出形式中略去系数1。而-1x的输出形式为-x。
第三章概要设计
3.1 设计思路
A:数据结构的选用
为了实现任意多项式的加法,减法,因此选择单链表的结构体,它有一个系数,指数,下一个指针3个元属;
B:多项式的输入
采用头插法的方式,输入多项式中一个项的系数和指数,就产生一个新的节点,建立起它的右指针,并用头节点指向它;为了判断一个多项式是否输入结束,定义一个结束标志,当输入非0时就继续,当输入0时,就结束一个多项式的输入;
C:2个多项式的加法
它从2个多项式的头部开始,2个多项式的某一项都不为空时,如果指数相等的话,系数就应该相加;相加的和不为0的话,用头插法建立一个新的节点。
p的系数小于q的系数的话,就应该复制q接点到多项式中。p的系数大于q的系数的话,就应该复制p接点到多项式中。当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生。当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生
D:2个多项式的减法
它从2个多项式的头部开始,2个多项式的某一项都不为空时,如果指数相等的话,系数就应该相减;相加的和不为0的话,用头插法建立一个新的节点。
p的系数小于q的系数的话,就应该复制q接点到多项式中。p的系数大于q的系数的话,就应该复制p接点到多项式中,并且建立的接点的系数为原来的相反数;当第2个多项式空,第1个数不为空时,将第一个数剩下的全用新节点产生。当第1个多项式空,第1个数不为空时,将第2个数剩下的全用新节点产生,并且建立的接点的系数为原来的相反数。
3.2 流程图,如图3.2.1 。
图3.2.1 流程图
第四章详细设计
4.1 程序头的设计:
#include
#include
typedef struct pnode
{int coef;
int exp;
struct pnode *next;
}pnode;
4.2 用头插法生成一个多项式,系数和指数输入0时退出输入pnode * creat()
{int m,n; pnode *head,*rear,*s;
head=(pnode *)malloc(sizeof(pnode));
rear=head;
printf("input coef:");
scanf("%d",&n);
printf("input exp:");
scanf("%d",&m);
while(n!=0)
{s=(pnode *)malloc(sizeof(pnode));
s->coef=n;
s->exp=m;
s->next=NULL;
rear->next=s;
rear=s;
printf("input coef:");
scanf("%d",&n);
printf("input exp:");
scanf("%d",&m);
}
head=head->next;
return head;
}
4.3 显示一个多项式
void display(pnode *head)
{pnode *p;int one_time=1; p=head;
while(p!=NULL)
{
if(one_time==1)
{if(p->exp==0)
printf("%d",p->coef);
else if(p->coef==1||p->coef==-1)
printf("x^%d",p->exp);
else if(p->coef>0)