课程设计一元稀疏多项式计算器程序文件
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计成果
学院: 计算机工程学院班级: 计算机科学与技术班学生: 学号:
设计地点(单位):
设计题目: 一元稀疏多项式计算器程序
完成日期:年月日
成绩(五级记分制):_____ _ __________
教师签名:__________ _______________
荆楚理工学院课程设计任务书
设计题目:
教研室主任:指导教师:年月日
目录
1 需求分析 (1)
2 设计概要 (2)
2.1基本结构 (2)
2.2 基本功能模块图 (2)
3算法思想 (3)
3.1建立多项式 (3)
3.2多项式相加 (3)
3.3多项式相减 (3)
3.4链表的输出 (3)
4 详细设计 (4)
4.1 函数功能介绍 (4)
4.2结构体的定义 (4)
4.3产生链表函数 (4)
4.4插入结点 (5)
4.5多项式的相加函数 (6)
4.6多项式相减函数 (7)
4.7主函数 (8)
5测试结果及运行效果 (10)
参考文献 (13)
附录全部代码 (14)
1 需求分析
1、一元多项式简单计算器的基本功能是:
1.1输入并建立多项式;
1.2输出多项式,输出形式为整数序列n,c1,e1,c2,e2,…,cn,en,其中n是多项式
的项数,ci和ei分别是第I项的系数和指数,序列指指数降序排列;
1.3多项式a和b相加,建立多项式a+b;(4)多项式a和b相减,建立多项式a-b。
实现提示:用带头结点的单链表存储多项式,多项式的项数存在头结点
2、设计思路:
2.1 定义线性表的动态分配顺序存储结构;
2.2 建立多项式存储结构,定义指针*next
2.3利用链表实现队列的构造。每次输入一项的系数和指数,可以输出构造的一元多项式
2.4演示程序以用户和计算机的对话方式执行,即在计算机终站上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运行命令;最后根据相应的输入数据(滤去输入中的非法字符)建立的多项式以及多项式相加的运行结果在屏幕上显示。多项式显示的格式为:c1x^e1+c2x^e2+…+cnx^en
3、设计思路分析:
要解决多项式相加,必须要有多项式,所以必须首先建立两个多项式,在这里采用链表的方式存储链表,所以我将结点结构体定义为
运用尾插法建立两条单链表,以单链表polyn p和polyn h分别表示两个一元多项式a和b,a+b的求和运算等同于单链表的插入问题(将单链表polyn p中的结点插入到单链表polyn h中),因此“和多项式”中的结点无须另生成。
为了实现处理,设p、q分别指向单链表polya和polyb的当前项,比较p、q结点的指数项,由此得到下列运算规则:
① 若p->expn
② 若p->expn=q->expn,则将两个结点中的系数相加,当和不为0时修改结点p 的系数。
③ 若p->expn>q->expn,则结点q所指的结点应是“和多项式”中的一项,将结点q插入在结点p之前,且令指针q在原来的链表上后移。
2 设计概要
2.1基本结构
1、元素类型、结点类型和指针类型:
typedef struct Polynomial{
float coef; //系数
int expn; //指数
struct Polynomial *next;
}*Polyn,Polynomial;
2、建立一个头指针为head、项数为m的一元多项式, 建立新结点以接收数据, 调用Insert函数插入结点:
Polyn CreatePolyn(Polyn head,int m){
int i;
Polyn p;
p=head=(Polyn)malloc(sizeof(struct Polynomial));
head->next=NULL;
for(i=0;i { p=(Polyn)malloc(sizeof(struct Polynomial)); printf("请输入第%d项的系数与指数:",i+1); scanf("%f %d",&p->coef,&p->expn); Insert(p,head); } return head; 3、主函数和其他函数: void main() { int m,n,a,x; char flag; Polyn pa=0,pb=0,pc; } float ValuePolyn(Polyn head,int x) //输入x值,计算并返回多项式的值 2.2 基本功能模块图 3算法思想 3.1建立多项式 一元多项式是由多个项的和组成的,将一元多项式的每个项用一结点表示,该 结点中应包括该项的系数、该项的指数、指向下一项的指针,可以用线性表来 依次输入各项结点,从而完成多项式链表的建立,为了使原多项式各项顺序不 变,故采用尾插法建表。 3.2多项式相加 多项式的相加主要是通过将多项式的每一项的指数cxpn进行比较,当指数expn相同时,将两个结点中的系数coef相加存放在第一个链表中,然后释放第二条链表中的这个结点。当两个结点中的指数expn不相同时,按高次在前低次在后降序的插入到链表当中。 3.3多项式相减 多项式的相减过程,其实就是相同指数的项的系数相减,对于不同指数的项,若是被减多项式,则将该结点复制输出,若是减多项式,则将该结点的系数变为原系数的相反数输出,将结果用降幂输出函数输出。 3.4链表的输出 PrintPolyn(Polyn P)函数接收链表的头结点地址,然后依次输出两个链表合并后的链表中的每个结点的中的系数和指数。