一元符号多项式c语言版.doc
文本预览下载声明
数据结构实验室开放项目
实验报告
题目:一元符号多项式的表示及运算
姓名:
班级:
学号:
内容总结
算法概要设计:
一元多项式的创建
Status CreatPolyn(polynomail P)
一元多项式的加法
void AddPolyn(polynomail Pa,polynomail Pb)
一元多项式的减法
void SubPolyn(polynomail Pa,polynomail Pb)
一元多项式的乘法
void MultPolyn(polynomail Pa,polynomail Pb)
发现的问题:
根据上面的设计纲要展开程序的设计,在程序编写和调试过程中主要遇到以下几点问题:
函数形参与实参的传递情况,经常忘记传值不传址的概念,导致程 序运行错误。在初始化和建立多项式等一些以改变原来多项式的一定要用指针传递。
程序运行控制条件考虑不足,例如在乘法函数的循环控制中,条件选取错误,使得结果不正确。
链表的链接混乱,链表链接有疏漏,指针链接情况考虑不周全,例如在加法case1中,没有移动ta,导致结果错误。
程序编写技巧运用,减法就是加法,编写取反函数,将被减数各项取反,减法可用加法实现。在乘法中,也是利用加法实现。
解决方法:
通常采用的方法为自我思考摸索,主要手段是查资料和上网搜索,然后与同学间相互讨论,请教老师。当自我期望与现实差距过大时,自行规避一段时间,自行调节情绪,有意识的讲问题随身携带,随时随地的思考。
实验展示
输入要求
按照多项式指数递增的顺序,依次输入多项式的参数对,第一个参数为系数,后一个参数为指数,如输入1 2,表示x^2项。以输入系数为零的项为结束。
例:1 2 3 4 5 6 8 9 0 3然后回车,就会建立一元多项式:x^2+3x^4+5x^6+8x^9。
输出要求
输出内容为建立和运算之后的结果。多项式有序的按照指数递增的顺序,输出参数对,以小括号为一个单位,第一个为系数,第二个为指数。如输出:(1,2) (3,4) (5,6)。
主要代码展示:
#include stdio.h
#include stdlib.h
#define OK 1
#define ERROR 0
typedef int Status;
/*结构定义*/
typedef struct ElemType{
int coef; //系数
int expn; //指数
}ElemType;//连个类型名
/*定义链表的结构*/
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
typedef LinkList polynomail;
//————基本操作————//
/*有序表的初始化*/
Status InitList(polynomail *P){
*P=(polynomail)malloc(sizeof(LNode));
if(!(*P))return ERROR;
(*P)-data.coef=0;
(*P)-data.expn=-1;
(*P)-next=NULL;
return OK;
}//InitList
/*有序链表的建立*/
Status CreatPolyn(polynomail P){
polynomail q=P,s;
ElemType e;
printf(\n请输入当前项的系数(系数不为零)及指数:);
scanf(%d%d,e.coef,e.expn);
while(e.coef){
s=(polynomail)malloc(sizeof(LNode));
if(!s) return ERROR;
s-data.coef=e.coef;
s-data.expn=e.expn;
s-next=NULL;
q-next=s;
q=s;
scanf(%d%d,e.coef,e.expn);
}
return OK;
}
/*有序表的遍历*/
void PrintList_L(polynomail P){
polynomail q=P-next;
printf(\n一元多项式为:);
if(!q)printf(\n链表为空);
while(q){
printf((%d,%d) ,q-data.coef,q-data.expn);
q=q-next;
}
printf(\n);
}// PrintList_L
/*
显示全部