数据结构-多项式相乘

多项式相乘

∙ 问题描述

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

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

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

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 = 否"

多项式相乘

∙ 问题描述

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

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

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

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 = 否"


相关文章

  • 一元稀疏多项式的计算
  • 实验一 一元稀疏多项式的计算 一.实验目的 通过一元稀疏多项式的表示和计算,帮助学生熟练掌握线性表的基本操作,以及用线性链表表示线性表的存储结构和操作的实现. 二.实验内容 实现一元稀疏多项式的如下运算: (1)两个一元稀疏多项式相加运算 ...查看


  • 初二知识点总结
  • 二元一次方程组 1. 方程组的解 使方程组中的各个方程的左.右两边都相等的未知数的值,叫做方程组的解 2. 一次方程组的解法 解二元(三元)一次方程组的一般方法是代入消元法和加减消元法. 1. 列二元一次方程组解应用题的步骤 (1) 弄清题 ...查看


  • 第4章多项式的运算教案
  • 第4章 <多项式的运算>上课教案 第1课时 课题:4.1多项式的加法和减法(1) 教学目的: 1.进一步掌握整式的概念及单项式和多项式的概念. 2.会进行多项式的加法减运算,并能说明其中的算理,发展有条理的思考及语言表达能力. ...查看


  • 单项式与单项式相乘说课稿
  • "单项式与单项式相乘"说课稿 朱家沟学校 田强 今天非常荣幸和大家坐在一起,共同探讨新课程理念下的初中数学教学.我今天所说的课题是: 一.单项式与单项式相乘 二.教材分析 1.教材的结构与内容简析 单项式与单项式相乘,综 ...查看


  • 初中所有运算规律或公式
  • 初中所有运算规律或公式 一. 数 正数:正数大于0 负数:负数小于0 0既不是正数,也不是负数:正数大于负数 整数包括:正整数,0,负整数 分数包括:正分数,负分数 有理数包括:整数,分数/有限小数,无限循环小数 数轴:在直线上取一点表示0 ...查看


  • 整式的乘除
  • 本教案是以浙教七年级下册第五章为依据 整式的乘除教案 同底数幂的乘法 一.背景介绍及教学资料 本章教材是在七(上) 有理数的运算和代数式中整式加减的基础上,通过引入同底数幂相乘,幂的乘方,积的乘方,同底数幂的除法法则,建立整式的乘除法运算, ...查看


  • 七年级幂的运算性质
  • 幂的运算性质 知识梳理 1.知识结构 幂的运算性质 2.知识要点 (1)同底数幂相乘,底数不变,指数相加,即 aaa (2)幂的乘方,底数不变,指数相乘,即ammnmn同底数幂相乘 幂的乘方 积的乘方 同底数幂相除 namn n ...查看


  • 七年级下册数学第一章
  • 安心文化宫 七年级数学(下册) ______老师 七年级数学下册--第一章 整式的乘除 一.知识结构图 单项式 整 式 多项式 同底数幂的乘法 幂的乘方 积的乘方 幂运算 同底数幂的除法 零指数幂 负指数幂 整式的加减 单项式与单项式相乘 ...查看


  • 单项式乘以多项式教学设计
  • 单项式乘以多项式 阳丰镇中 赵新民 1. 使学生探索并了解单项式与多项式相乘的法则:会运用法则进行简单计算. 教 学 目 标 2. 使学生进一步理解数学中"转化""换元"的思想方法,即把单项式与多项 ...查看


热门内容