数据结构-多项式相乘 - 范文中心

数据结构-多项式相乘

11/25

多项式相乘

∙ 问题描述

此程序解决的是一元多项式相乘的问题。定义两个一元多项式,然后进行两个一元多项式的相乘。最后得到一个结果,并按升幂输出最终的多项式。 ∙ 设计思路

定义一个结构体,里面包含一元多项式的符号、系数、指数。对多项式进行输入时,先输入多项式的项数,然后从第一项的系数开始输入,然后输入第一项的指数,直至第一项输入完毕。然后开始输入第二项,输入第二项的方法与输入第一项的方法相同。在进行相乘时,用第二项的每个元素去乘第一项的每个元素。最终合并同类项的时候,把后面指数项加到与前面有共同指数的项的上面,然后删除该项。

∙ 数据结构设计 功能函数设计 将多项式因子的符号、系数、指数封装成一个结构为顺序表类型

void sort(LinkYinzi& Head)排序函数,采用冒泡排序对多项式进行排序 void PrintList(const LinkYinzi Head)输出多项式函数

void Creat_List(LinkYinzi& Head, int num)创建多项式函数

void DelList(LinkYinzi& Head, int n)删除多项式中某一项函数

void multip(const LinkYinzi Head1, const LinkYinzi Head2)多项式相乘函数 void menu_elect( LinkYinzi Head1, LinkYinzi Head2)功能选择函数

∙ 程序代码

#include

using namespace std;

typedef struct Yinzi{

char sign;

float coef;//系数

int expn;//指数

Yinzi* next;

}Yinzi,*LinkYinzi;

void sort(LinkYinzi& Head){

LinkYinzi Q;//采用冒泡排序对多项式进行排序

for(LinkYinzi P1 = NULL; P1 != Head->next->next; P1 = Q)

for(LinkYinzi P2 = Head->next; P2->next != P1; P2 = P2->next){

if(P2->expn > P2->next->expn){

int temp1;

double temp2;

char temp3; //temp3是交换变量

temp2 = P2->coef;

P2->coef = P2->next->coef;

P2->next->coef = temp2;

temp3 = P2->sign;

P2->sign = P2->next->sign;

P2->next->sign = temp3;

temp1 = P2->expn;

P2->expn = P2->next->expn;

P2->next->expn = temp1;

}

Q = P2->next;//此处让Q 为本次执行后的P2的下一个,以便P1=Q让P1成为P2的下一个,作为下一次循环的结束标志。

}

}//冒泡排序(升序)

void PrintList(const LinkYinzi Head){

LinkYinzi p = Head ->next;

if(p != NULL ){

if(p->coef != 0){//系数不为0

if(p->expn != 0){//指数不为0

if(p->expn != 1){

if(p->coef == 1)

cout expn;

else

cout coef expn;

}

else{

if(p->coef == 1)

cout

else

cout coef

}

}

else

cout coef;

}

p = p->next;

}//输出第一项

while(p != NULL){ if(p->sign == '+'){ if(p->coef != 0){ if(p->expn != 0){ if(p->expn != 1){ if(p->coef == 1) cout expn; else cout coef expn;

}

else{

if(p->coef == 1)

cout

else

cout coef

}

}

else

cout coef;

}

else{

p = p->next;

continue;

}

}

if(p->sign == '-'){

if(p->coef != 0){

if(p->expn != 0){

if(p->expn != 1){

if(p->coef == -1)

cout expn;

else

cout coef expn;

}

else{

if(p->coef == -1)

cout

else

cout coef

}

}

else

cout coef;

}

else{

p = p->next ;

continue;

}

}

p = p->next;

}

}//输出其余的项

void Creat_List(LinkYinzi& Head, int num){

cout

int n;

cin >> n;

LinkYinzi p = Head;

cout

for(int i = 0; i

LinkYinzi Node = new Yinzi;

cout

cin >> Node->coef;

if(Node->coef > 0)

Node->sign = '+';

if(Node->coef

Node->sign = '-';

cout

cin >> Node ->expn;

Node->next = p->next;

p->next = Node;

p = p->next;

}

p->next = NULL;

cout

cout

sort(Head);

PrintList(Head);

cout

}//创建多项式

void DelList(LinkYinzi& Head, int n){

LinkYinzi p = Head;

for(int i = 0; i

p = p->next;

LinkYinzi Q ;

Q = p->next;

p->next = Q ->next ;

delete Q;

}//删除多项式的第n 个因式

void multip(const LinkYinzi Head1, const LinkYinzi Head2){

LinkYinzi Head3 = new Yinzi;

Head3->next = NULL;

LinkYinzi P1, P2, P3;

P3 = Head3;

for(P1 = Head1->next ; P1!=NULL; P1 = P1->next)

for(P2 = Head2->next ; P2!=NULL;){

LinkYinzi Node = new Yinzi;

Node->expn = P1->expn + P2->expn;

Node->coef = P1->coef * P2->coef;

if(Node->coef >= 0)

Node->sign = '+';

else

Node->sign = '-';

P2 = P2->next;

Node->next = P3->next;

P3->next = Node;

P3 = P3->next;

}//用P2的元素去乘P1的每个元素

sort(Head3);//排序,为合并同类项做基础

int i = 1;

for(LinkYinzi P = Head3->next; P->next != NULL;){

if(P->expn == P->next->expn){

P->coef += P->next->coef;

DelList(Head3,i+1);//把后面指数项加到与前面相同的指数项上面,然后删除该项

}

else{

P = P->next;

i++;

}

}//end for 为了合并同类项 排完序后若有同类项,则一定是位置上相邻的 cout

PrintList(Head3);

cout

}

void menu_elect( LinkYinzi Head1, LinkYinzi Head2){

int judge;

cout

cin >> judge;

switch(judge){

case 1: multip(Head1,Head2); break; case 0: exit(0);

default : cout

}

int main(){

int i = 1;

LinkYinzi Head1 = new Yinzi;

LinkYinzi Head2 = new Yinzi;

Head1->next = NULL;

Head2->next = NULL;

Creat_List(Head1,i);

Creat_List(Head2,i+1);

while(true){

int ju;

menu_elect(Head1,Head2);

cout

cin >> ju;

if(ju == 0)

break;

}

return 0;

}

运行与测试 0 = 否"


相关内容

  • 12.2.1单项式与单项式相乘教案
    课题:12.2.1单项式与单项式相乘 [教学目标]: 知识与技能目标: 学生能理解并掌握单项式的乘法法则,能够熟练地进行单项式的乘法计算; 正确区别各单项式中的系数,同底数的幂和不同底数幂的因式. 过程与分析目标: 让学生感知单项式乘法法则 ...
  • 单项式乘以多项式说课稿
    整式的乘法(2) ------------单项式乘以多项式(说课稿) 一. 说教材 <整式的乘法>是人教版教材第十四章<整式的运算>的重要内容.是进一步学习其它数学知识的基础,同时也是学习理.化等学科不可缺少的工具, ...
  • 精选初一上册数学知识点归纳:整式
    成绩的提高是同学们提高总体学习成绩的重要途径,大家一定要在平时的练习中不断积累,小编为大家准备了精选初一上册数学知识点归纳:整式,希望同学们不断取得进步! 三.整式的运算1. 同类项--所含字母相同,并且相同字母的次数也相同的项叫做同类项, ...
  • 整式的乘除与因式分解小结与复习
    整式的乘除与因式分解小结与复习 考点呈现 一.幂的运算 例1 若m p  15 ,m 2q 7,m r  75 .求m 3p4q2r 的值. 分析:可以把m3p4q2r逆用幂的有关性质进行变形,化成(mp)3(m2q)2 ...
  • 七年级上册知识点总结
    初一数学知识点总结 (初一上学期) 1.有理数: (1)正数和负数 负数:比0小的数 正数:比0大的数 ①字母a可以表示任意数,当a表示正数时,-a是负数:当a表示负数时,-a是正数:当a表示0时,-a仍是0.(如果出判断题为:带正号的数是 ...
  • 数值分析作业题(1)
    第一章 误差与算法 1. 误差分为有_____, _,Taylor 展开式近似表达函数产生的误差是_方法误差 . 2. 插值余项是插值多项式的 3. 0.2499作为1/4的近似值,有几位有效数字? 0.2499=0.2499⨯100, 即 ...
  • 整式的乘法法则复习试卷
    暑期复习--整式的乘法.乘法公式 一.整式的乘法: 主要的计算思想就是利用乘法分配律,把它们转化为单项式与单项式相乘. (一)基础题 1. 下列运算正确的是( ) 236224A .x ∙x =x B.x +x =2x C.(-2x )=- ...
  • 初高中衔接教材
    第四部分 分章节突破 目 录 1.1 数与式的运算 1.1.1绝对值 1.1.2. 乘法公式 1.1.3.二次根式 1.1.4.分式 1.2 分解因式 2.1 一元二次方程 2.1.1根的判别式 2.1.2 根与系数的关系(韦达定理) 2. ...
  • 初一-分式的四则运算(12份)
    分式的四则运算 [知识梳理] 1. 分式的乘法法则:将分子相乘的积作为分子,分母相乘的积作为分母 a c ac ⋅=: b d bd 2. 分式的除法法则:将除式的分子和分母颠倒位置后,再与被除式相乘 a c a d a d ⋅ b d b ...
  • 初高中衔接教材数学因式分解及一元二次方程
    第1课时 因式分解 课标导航: 1. 熟悉常见的乘法公式, 会用乘法公式分解因式; 2. 了解方程的根与对应的代数式的因式分解之间的关系, 体会因式分解的求根法和待定系数法 . 3. 掌握十字相乘法.分组分解法; 4. 能根据问题, 灵活运 ...