首页 > 中学考试杂题 > 题目详情
一元多项式运算一.问题描述设计一个简单的一元稀疏多项式加法运算器.二.基本要求一元稀疏多项式简单计算器的基本功能包括:1
题目内容:
一元多项式运算
一.问题描述
设计一个简单的一元稀疏多项式加法运算器.
二.基本要求
一元稀疏多项式简单计算器的基本功能包括:
1.按照指数升序次序,输入并建立多项式A与B.
2.计算多项式A与B的和,即建立多项式A+B.
3.按照指数升序次序,输出多项式A、B、A+B.
三.提示与分析
1.一元n次多项式:P(x,n)=P0+P1X1+P2X2+…+PnXn,其每一个子项都是由“系数”和“指数”两部分来组成的,因此可以将它抽象成一个由“系数、指数对”构成的线性表,其中,多项式的每一项都对应于线性表中的一个数据元素.由于对多项式中系数为0的子项可以不记录它的指数值,对于这样的情况就不再付出存储空间来存放它了;基于此,可以采用一个带有头结点的单链表来表示一个一元多项式.
例如,多项式A= 3+6X3-2X8+12X20 、B= 2X-2-6X3+8X10可分别表示为:
2.数据类型定义可描述如下:
typedef struct pnode
{int coef; /*系数域*/
int exp; /*指数域*/
struct pnode *next; /*指针域,指向下一个系数不为0的子项*/
}PolyNode,*PolyLink;
PolyLink A,B,C; /*单链表存储的多项式A、B、C*/
3.基本功能分析
(1)输入多项式,建立多项式链表
首先创建带头结点的单链表;然后按照指数递增的顺序和一定的输入格式输入各个系数不为0的子项:“系数、指数对”,每输入一个子项就建立一个结点,并将其插入到多项式链表的表尾,如此重复,直至遇到输入结束标志的时候停止,最后生成按指数递增有序的链表.
(2)多项式相加
多项式加法规则:对于两个多项式中指数相同的子项,其系数相加,若系数的和非零,则构成“和多项式”中的一项;对于指数不同的项,直接构成“和多项式”中的一项.
将(1)中单链表表示的两个多项式A和B相加,运算的结果是利用原表空间生成一个新链表,表示和多项式C.运算规则如下:
设指针pa、pb分别指向多项式链表A、B的第一个结点,比较pa、pb所指两结点中的指数项:
① 若pa->exp < pb->exp,则将pa所指结点插入到“和多项式”链表中去;
② 若pa->exp > pb->exp,则将pb所指结点插入到“和多项式”链表中去;
③ 若pa->exp== pb->exp,则计算系数和pa->coef+pb->coef,若和非零,插入到“和多项式”链表中去,删除pb所指结点;否则删除pa、pb所指结点.
继续比较下一项,重复上述过程,直至A、B中某一链表结束,此时将非空链表中剩余的结点出入到“和多项式”链表即可.
(3)多项式的输出
可以在文本界面下,采用类似于数学表达式的方式输出多项式,如多项式A可显示为:
A=3+6XÙ3-2XÙ8+12XÙ20
需要注意:
系数值为1的非零次项的输出形式中略去系数1,如子项1x8的输出形式为x8,项-1x3的输出形式为-x3.
多项式的第一项的系数符号为正时,不输出“+”,其它项要输出“+”、“-”符号.
一元多项式运算
一.问题描述
设计一个简单的一元稀疏多项式加法运算器.
二.基本要求
一元稀疏多项式简单计算器的基本功能包括:
1.按照指数升序次序,输入并建立多项式A与B.
2.计算多项式A与B的和,即建立多项式A+B.
3.按照指数升序次序,输出多项式A、B、A+B.
三.提示与分析
1.一元n次多项式:P(x,n)=P0+P1X1+P2X2+…+PnXn,其每一个子项都是由“系数”和“指数”两部分来组成的,因此可以将它抽象成一个由“系数、指数对”构成的线性表,其中,多项式的每一项都对应于线性表中的一个数据元素.由于对多项式中系数为0的子项可以不记录它的指数值,对于这样的情况就不再付出存储空间来存放它了;基于此,可以采用一个带有头结点的单链表来表示一个一元多项式.
例如,多项式A= 3+6X3-2X8+12X20 、B= 2X-2-6X3+8X10可分别表示为:
2.数据类型定义可描述如下:
typedef struct pnode
{int coef; /*系数域*/
int exp; /*指数域*/
struct pnode *next; /*指针域,指向下一个系数不为0的子项*/
}PolyNode,*PolyLink;
PolyLink A,B,C; /*单链表存储的多项式A、B、C*/
3.基本功能分析
(1)输入多项式,建立多项式链表
首先创建带头结点的单链表;然后按照指数递增的顺序和一定的输入格式输入各个系数不为0的子项:“系数、指数对”,每输入一个子项就建立一个结点,并将其插入到多项式链表的表尾,如此重复,直至遇到输入结束标志的时候停止,最后生成按指数递增有序的链表.
(2)多项式相加
多项式加法规则:对于两个多项式中指数相同的子项,其系数相加,若系数的和非零,则构成“和多项式”中的一项;对于指数不同的项,直接构成“和多项式”中的一项.
将(1)中单链表表示的两个多项式A和B相加,运算的结果是利用原表空间生成一个新链表,表示和多项式C.运算规则如下:
设指针pa、pb分别指向多项式链表A、B的第一个结点,比较pa、pb所指两结点中的指数项:
① 若pa->exp < pb->exp,则将pa所指结点插入到“和多项式”链表中去;
② 若pa->exp > pb->exp,则将pb所指结点插入到“和多项式”链表中去;
③ 若pa->exp== pb->exp,则计算系数和pa->coef+pb->coef,若和非零,插入到“和多项式”链表中去,删除pb所指结点;否则删除pa、pb所指结点.
继续比较下一项,重复上述过程,直至A、B中某一链表结束,此时将非空链表中剩余的结点出入到“和多项式”链表即可.
(3)多项式的输出
可以在文本界面下,采用类似于数学表达式的方式输出多项式,如多项式A可显示为:
A=3+6XÙ3-2XÙ8+12XÙ20
需要注意:
系数值为1的非零次项的输出形式中略去系数1,如子项1x8的输出形式为x8,项-1x3的输出形式为-x3.
多项式的第一项的系数符号为正时,不输出“+”,其它项要输出“+”、“-”符号.
一.问题描述
设计一个简单的一元稀疏多项式加法运算器.
二.基本要求
一元稀疏多项式简单计算器的基本功能包括:
1.按照指数升序次序,输入并建立多项式A与B.
2.计算多项式A与B的和,即建立多项式A+B.
3.按照指数升序次序,输出多项式A、B、A+B.
三.提示与分析
1.一元n次多项式:P(x,n)=P0+P1X1+P2X2+…+PnXn,其每一个子项都是由“系数”和“指数”两部分来组成的,因此可以将它抽象成一个由“系数、指数对”构成的线性表,其中,多项式的每一项都对应于线性表中的一个数据元素.由于对多项式中系数为0的子项可以不记录它的指数值,对于这样的情况就不再付出存储空间来存放它了;基于此,可以采用一个带有头结点的单链表来表示一个一元多项式.
例如,多项式A= 3+6X3-2X8+12X20 、B= 2X-2-6X3+8X10可分别表示为:
2.数据类型定义可描述如下:
typedef struct pnode
{int coef; /*系数域*/
int exp; /*指数域*/
struct pnode *next; /*指针域,指向下一个系数不为0的子项*/
}PolyNode,*PolyLink;
PolyLink A,B,C; /*单链表存储的多项式A、B、C*/
3.基本功能分析
(1)输入多项式,建立多项式链表
首先创建带头结点的单链表;然后按照指数递增的顺序和一定的输入格式输入各个系数不为0的子项:“系数、指数对”,每输入一个子项就建立一个结点,并将其插入到多项式链表的表尾,如此重复,直至遇到输入结束标志的时候停止,最后生成按指数递增有序的链表.
(2)多项式相加
多项式加法规则:对于两个多项式中指数相同的子项,其系数相加,若系数的和非零,则构成“和多项式”中的一项;对于指数不同的项,直接构成“和多项式”中的一项.
将(1)中单链表表示的两个多项式A和B相加,运算的结果是利用原表空间生成一个新链表,表示和多项式C.运算规则如下:
设指针pa、pb分别指向多项式链表A、B的第一个结点,比较pa、pb所指两结点中的指数项:
① 若pa->exp < pb->exp,则将pa所指结点插入到“和多项式”链表中去;
② 若pa->exp > pb->exp,则将pb所指结点插入到“和多项式”链表中去;
③ 若pa->exp== pb->exp,则计算系数和pa->coef+pb->coef,若和非零,插入到“和多项式”链表中去,删除pb所指结点;否则删除pa、pb所指结点.
继续比较下一项,重复上述过程,直至A、B中某一链表结束,此时将非空链表中剩余的结点出入到“和多项式”链表即可.
(3)多项式的输出
可以在文本界面下,采用类似于数学表达式的方式输出多项式,如多项式A可显示为:
A=3+6XÙ3-2XÙ8+12XÙ20
需要注意:
系数值为1的非零次项的输出形式中略去系数1,如子项1x8的输出形式为x8,项-1x3的输出形式为-x3.
多项式的第一项的系数符号为正时,不输出“+”,其它项要输出“+”、“-”符号.
本题链接: