课程设计。
课程设计名称: 数据结构
专业班级 : 计科06级04班
学生姓名 : xxx
学号 : 200641404xx
指导教师 : 白 x
课程设计时间:2008.6.23—2008.6.29
计算机科学与技术专业课程设计任务书。
一需求分析。
顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。
设有一元多项式am(x)和bn(x).
am(x)=a0+a1x1+a2x2+a3x3+… amxm
bn(x)=b0+b1x1+b2x2+b3x3+… bnxn
请实现求m(x)= am(x)+bn(x)、m(x)= am(x)-bn(x)和m(x)= am(x)×bn(x)。
要求: 1)首先判定多项式是否稀疏;
2)分别采用顺序和动态存储结构实现;
3)结果m(x)中无重复阶项和无零系数项;
4)要求输出结果的升幂和降幂两种排列情况。
二概要设计。
存储方式:动态链表存储。
算法核心思想:建立俩个动态链表分别存储多项式m与n,有switch语句控制加法,减法与乘法的运算选择,当用户选定所要做的运算时分别由a() b() c()函数来调用各自的加法add()函数,加法reduce()函数和乘法multi()函数与此同时在各个运算被调用时分别对所输入地多项式进行排序以及合并同类项,最后由print()函数分别对已经做过运算且排好顺序(升幂和降幂)的多项式结果输出。
流程图如下:
m多项式n多项式。
三详细设计。
#include<>
#include<>
#include<>
typedef struct term { 项的表示,多项式的项作为linklist的数据元素
float coef; /系数
int expn; /指数。
struct term *next;
term;
term* creat(term *p,int m) {
/ 输入m项的系数和指数,建立表示一元多项式的有序链表p
term* h;
term* p;
term* q;
int i=0;
if(m <=0) return null;
h = p = term*)malloc(sizeof(term)),q;
p->coef = 0.0;
printf("依次输入%d个非零项(即系数值+空格+指数值)",m);
for (i = 1; i <=m; +i) {依次输入m个非零项
scanf("%f %d",&p->coef,&p->expn);
if(p->coef)
q = p;
p = p->next = term*)malloc(sizeof(term));
q->next = null;
free(p);
return h;
//创建一个多项式。
term* sortlow(term *h) {
term *g, *p, *q;
int i, fini = 1;
float f;
if(!h) return null;
for(g = h;g->next&&fini;g = g->next) {
fini = 0;
for(p = h,q = h->next;q;p = p->next,q = q->next)
if (p->expn < q->expn) {
f = p->coef;i = p->expn;
p->coef = q->coef;p->expn = q->expn;
q->coef = f;q->expn = i;
fini = 1;
for(g = h,p = g->next;p;)
if(g->expn==p->expn) {
g->coef +=p->coef;
g->next = p->next;
q = p;
p = p->next;
free(q);
else if(g->next) {
g = g->next;
p = p->next;
return h;
term* sorthigh(term *h) {
term *g, *p, *q;
int i, fini = 1;
float f;
if(!h) return null;
for(g = h;g->next&&fini;g = g->next) {
fini = 0;
for(p = h,q = h->next;q;p = p->next,q = q->next)
if (p->expn > q->expn) {
f = p->coef;
i = p->expn;
p->coef = q->coef;
p->expn = q->expn;
q->coef = f;
q->expn = i;
fini = 1;
for(g = h,p = g->next;p;)
if(g->expn==p->expn) {
g->coef +=p->coef;
g->next = p->next;
q = p;
p = p->next;
free(q);
else if(g->next) {
g = g->next;
p = p->next;
printf("以上结果为降幂排列!
printf("");
printf("结果升幂排列顺序如下:")
return h;
void print(term *p) {
term *q = p;
if(!q) {
putchar('0');
return;
if(q->coef!=1) {
printf("%f",q->coef);
if(q->expn==1) putchar('x');
else if(q->expn) printf("x^%d",q->expn);
else if(!q->expn) putchar('1');
else if(q->expn==1) putchar('x');
else printf("x^%d",q->expn);
q = q->next;
while (q) {
if(q->coef > 0) putchar('+
if(q->coef!=1) {
printf("%f",q->coef);
if(q->expn==1) putchar('x');
else if(q->expn) printf("x^%d",q->expn);
else if(!q->expn) putchar('1');
else if(q->expn==1) putchar('x');
else printf("x^%d",q->expn);
q = q->next;
int compare(term *a, term *b) {
if (a->expn < b->expn) return -1;
if (a->expn > b->expn) return 1;
return 0;
term* add(term *pa, term *pb) {
/ 多项式加法:pa = pa+pb,利用两个多项式的结点构成"和多项式"。
term *h, *qa = pa, *qb = pb, *p, *q;
float sum;
h = p = term*)malloc(sizeof(term));
p->next = null;
while (qa &&qb) {pa和pb均非空
switch (compare(qa,qb))
case -1: /多项式pa中当前结点的指数值小 ,后移。
p->next = qb;
p = qb;
qb = qb->next;
break;
case 0: /两者的指数值相等 ,系数直接相加。
sum = qa->coef + qb->coef;
if (sum !=0.0) {修改多项式pa中当前结点的系数值
p->next = qa;
qa->coef = sum;
p = qa;
qa = qa->next;
else { 删除多项式pa中当前结点
q = qa;
qa = qa->next;
free(q);
q = qb;
qb = qb->next;
free(q);
break;
case 1: /多项式pb中当前结点的指数值小
p->next = qa;
p = qa;
qa = qa->next;
课程设计报告格式 课程设计
洛阳理工学院。课程设计说明书。课程名称。设计课题。专业。班级。学号。姓名。完成日期2014年12月26日。问题描述 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的内容要求。基本要求 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的基本要求。测试数据 小四宋体,行间距单倍行距,每...
课程设计总结,课程设计报告
课程设计总结,课程设计报告。3.尝试应用项目管理软件进行项目进程的规划管理 绘制甘特图,不作硬性要求 二 选题说明。人事管理是企业信息管理的重要部分,面对大量的人事工资信息,财务部门采用人力处理将浪费大量的时间 人力和物力,且数据的准确性低。因此,开发一个界面友好,易于操作的人事工资管理软件进行自动...
课程设计 课程设计报告格式
学校名。课程设计报告。课程名称 c语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...