C语言_两个一元稀疏多项式相加
1.课程设计的目的
本课程设计是为了配合《数据结构》课程的开设,通过数据结构的应用、算法的编写、类C语言的算法转换成C程序并用TC上机调试的基本方法,设计出一个对两个一元稀疏多项式进行相加,然后输入结果的程序。程序所能达到的功能:输入两个一元稀疏多项式,能够输出相加后的值。
2.设计基本要求
1.项数的输入形式和输入值的范围:int型, -32768~32767 的整数.
2.项的输入的格式和输入值的范围:输入格式为:coef,expn
输入值范围:-32768~32767 的整数.
3.输出的形式:n, c1, e1, c2, e2, …cn , en, 其中,n是多项式项数,ci和ei分别是第 i 项的系数和指数,序列按指数降序排列.
4. 输入两个一元稀疏多项式,能够输出相加后的值
3.概要设计
3.1主程序的流程
(1)输入第一个一元稀疏多项式.
(2)输入第二个一元稀疏多项式.
(3)对两个一元稀疏多项式进行相加.
(4)输出两个一元稀疏多项式相加后的结果.
3.2程序模块
(1)项数的结构体Term
(2)建立一元稀疏多项式函数 CreatPloy(void).
(3)对两个一元稀疏多项式相加函数AddPolyn(&Pa,&Pb).
(4)输出相加后值的函数PrintPloyn(P).
沈 阳 大 学
课程设计说明书 NO.2
3.3各模块之间的调用关系
(1)主函数调用Term结构体
(2)调用两次GreatPloy函数建立一元稀疏多项式
(2)调用AddPolyn函数,对两个多项式进行相加
(3)调用PrintPloyn函数,输出结果
4.详细设计
4.1程序流程图
(1)主函数流程图
输入第一个一元稀疏多项式. CreatPloy(void)
输入第二个一元稀疏多项式. CreatPloy(void)
对两个一元稀疏多项式进行相加. AddPolyn(&Pa,&Pb)
输出两个一元稀疏多项式相加后的结果. PrintPloyn(P)
(2)GreatPloy函数流程图
输入项数n
head=p1=p2=(struct term*)malloc(LEN);
输入第一项的系数和指数 coef expn
i=2 to i=n ;i++
p1=(struct term*)malloc(LEN);
scanf("%d,%d",&p1->coef,&p1->expn);
p1->next=NULL;p2->next=p1;p2=p2->next;
return head
课程设计说明书 NO.3
(3) PrintPloyn函数流程图
int m=0;
while(p!=NULL)
m++;
printf("c%d=%d,e%d=%d\n",m,p->coef,m,p->expn);
p=p->next;
printf("number=%d\n",m);
(4) AddPolyn函数流程图
int n=0;struct term *p3,*head;
while(p1!=NULL&&p2!=NULL)
n=n+1;
n==1
真
假
比较p1和p2所指结点指数
建立头结点 head
比较p1和p2所指结点指数
把指数大的结点连入head
把p1或p2剩下的结点连入head中
返回head
4.2抽象数据类型定义
ADT Polynomial{
数据对象:D={ai|ai∈TermSet,i=1,2,…,m,m≥0
TermSet中的每个元素包含一个表示系数的实数和表示指数的整数}
数据关系:R1={
|ai-1,ai∈D,且ai-1中的指数值>ai中的指数值,i=2,…,n}
CreatPloy(void)107
数据结构课程设计_两个一元稀疏多项式相加
操作结果:输入M项的系数和指数,建立一元多项式P。
PrintPloyn(P)
初始条件:一元二项式P存在。
操作结果:输出一元二项式P。
AddPolyn(&Pa,&Pb)
初始条件:一元二项式Pa和Pb已存在。
操作结果:完成多项式相加运算,即:Pa=Pa+Pb。
}ADT Polynomial
4.3基本操作的算法描述
(1)项数的结构体
typedef struct{//项的表示,多项式作为LinkList的数据元素
int coef;//系数
int expn;//指数
}Term;
(2)输入M项的系数和指数,建立一元多项式P
status CreatPolyn(void){
scanf(n);
head=p1=p2=(elemtype*)malloc(LEN);
scanf(p1->coef,p1->expn);
for(i=2;i<=n;i++){
p1=(ElemType*)malloc(LEN);
scanf(p1->coef,p1->expn);
p1->next=NULL;
p2->next=p1;
p2=p2->next;
}//for
return(head);
}//CreatPolyn
(3)完成多项式相加运算,即:Pa=Pa+Pb
status AddPolyn(Term p1,Term p2){
n=0;
if(n==1){
if(p1->expn>p2->expn){
head=p3=p1;p1=p1->next;
}/*if*/
else if(p1->expn==p2->expn){
p1->coef=p1->coef+p2->coef;
if(p1->coef==0){
n=0;p1=p1->next;p2=p2->next;
if(!p1)head=p2;
if(!p2)head=p1;
if(!p1&&!p2){
printf("answer is 0\n");
head=NULL;}/*if*/
}/*if*/
else{
head=p3=p1;p1=p1->next;p2=p2->next;
}/*else*/
}/*else if*/
else{
head=p3=p2;p2=p2->next;
}/*else*/
}/*if*/
else{
if(p1->expn>p2->expn){
p3->next=p1;p1=p1->next;p3=p3->next;
}/*if*/
else if(p1->expn==p2->expn){
p1->coef=p1->coef+p2->coef;
if(p1->coef==0){
p1=p1->next;p2=p2->next;
} /*if*/
else{
p3->next=p1;p1=p1->next;p2=p2->next;p3=p3->next;
}/*else*/
}/*else if*/
else{
p3->next=p2;p2=p2->next;p3=p3->next;
}/*else*/
} /*else*/
}/*while*/
while(p1!=NULL){
需要完整内容的请联系QQ3710167,本文免费,转发请注明源于www.lwfree.cn return(head);
}/*daapolyn*/
(4)输出一元二项式P
status PrintPolyn(p){
while(p){
m++;
printf(cm=p->coef,em=p->expn)//输出c1,e1,c2,e2…cm,em,c为系数,e为指数
}//while
print(m);//输出项数
}//PrintPolyn
两个一元稀疏多项式相加_C语言
5.测试与分析
5.1 运行方法如下
1.根据提示输入第一个一元稀疏多项式的项数和各项数的系数和指数。如图1
图1输入显示图
2.根据提示输入第二个一元稀疏多项式的项数和各项数的系数和指数。如图2
3.输出两个一元二项式的相加后的结构,如图3
5.2测试数据
第一组:输入-7X2和7X2 输出结果为。如图4
第二组:输入-7X2和7X2+7 输出结果为。如图5
第三组:输入5X17+9X8+3X1+7和-9X8+22X7+8X1输出结果为。如图6
图6输出结果图
通过上述3组实验证明该程序,在正确输入数据的前提条件下,能够按要求输出正确的结果,并按指定的输出格式输出。
6.心得体会
《一元稀疏多项式相加》是我选择的课程设计题目,在这次设计中我学到了很多实际应用的知识。
当得到课程设计指导书时,我认真分析了这一题目及相关要求,然后根据数据结构课所学写出相映算法,再后运用C 语言的知识将算法写成程序,进行修改,最后在
Turbo C环境下进行运用,修改。
这次设计让我真切地感受到往往一个细节会决定整个程序的命运。所以在编程过程中理论与实践的结合是十分重要的,细节问题也是不容忽视的。
7.参考文献
1.晋良颍.数据结构[M].人民邮电出版社,2002.05 34-41
2.徐孝凯,魏荣.数据结构[M].机械工业出版社,1996.07 56-62
3.徐孝凯.数据结构简明教程.[M].清华大学出版社,1995.04 106-113
4.陈文博,朱青.数据结构与算法[M],机械工业出版社,1996.09 125-127
两个一元稀疏多项式相加_C语言
源程序清单
#include "stdio.h"
#define LEN sizeof(struct term)
#define NULL 0
struct term{
int coef;/*系数*/
struct term *creatpolyn(void){
struct term *p1,*p2,*head;
int n,i;
scanf("%d",&n);
head=p1=p2=(struct term*)malloc(LEN);
printf("Decline the sequence importation according to the index number\n");/*按指数降序列输入*/
printf("Input the format is coef,expn \n");/*输入格式是 系数,指数*/
printf("input 1 term: ");
scanf("%d,%d",&p1->coef,&p1->expn);
for(i=2;i<=n;i++){
p1=(struct term*)malloc(LEN);
printf("input %d term:",i);
scanf("%d,%d",&p1->coef,&p1->expn);
p1->next=NULL;
p2->next=p1;
p2=p2->next;
}/*for*/
需要完整内容的请联系QQ3710167,本文免费,转发请注明源于www.lwfree.cn
n=n+1;
if(n==1){
if(p1->expn>p2->expn){
head=p3=p1;p1=p1->next;
}/*if*/
else if(p1->expn==p2->expn){
p1->coef=p1->coef+p2->coef;
if(p1->coef==0){
n=0;p1=p1->next;p2=p2->next;
if(!p1)head=p2;
if(!p2)head=p1;
if(!p1&&!p2){
printf("answer is 0\n");
head=NULL;}/*if*/
}/*if*/
else{
head=p3=p1;p1=p1->next;p2=p2->next;
}/*else*/
}/*else if*/
else{
head=p3=p2;p2=p2->next;
}/*else*/
}/*if*/
else{
if(p1->expn>p2->expn){
p3->next=p1;p1=p1->next;p3=p3->next;
}/*if*/
else if(p1->expn==p2->expn){
p1->coef=p1->coef+p2->coef;
if(p1->coef==0){
p1=p1->next;p2=p2->next;
} /*if*/
else{
p3->next=p1;p1=p1->next;p2=p2->next;p3=p3->next;
}/*else*/
}/*else if*/
else{
p3->next=p2;p2=p2->next;p3=p3->next;
}/*else*/
} /*else*/
}/*while*/
while(p1!=NULL){
p3->next=p1;p1=p1->next;p3=p3->next;
}/*while*/
while(p2!=NULL){
p3->next=p2;p2=p2->next;p3=p3->next;
}/*while*/
p3->next=NULL;
return(head);
}/*daapolyn*/
struct term *printpolyn(struct term *p){
int m=0;
while(p!=NULL){
m++;
printf("c%d=%d,e%d=%d\n",m,p->coef,m,p->expn);
p=p->next;
}/*while*/
printf("number=%d\n",m);
}/*printpolyn*/
main(){
struct term *p1,*p2,*head;
printf("Please input the first formula number: ");/*请输入第一个一元二项式项数*/
p1=creatpolyn();
printf("Please input the second formula number: ");/*请输入第二个一元二项式项数*/
p2=creatpolyn();
head=addpolyn(p1,p2);
printpolyn(head);
}/*main*/