博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[DataStructure]多项式加法与乘法--A.数组存储(适用于零元系数少的多项式)
阅读量:4546 次
发布时间:2019-06-08

本文共 5291 字,大约阅读时间需要 17 分钟。

数据结构大作业……

发出来大家乐呵乐呵……

一、问题描述

给出N个多项式,求他们的和与积

二、解题报告

(1)建立存储结构

1 struct _Poly2 {3     double Data[MAXTIMES+1];4     int Times;5 };6 struct _Poly Poly[N+1];

(2)主程序架构

1 int main()2 {3      int Sum;4      cout<<"请输入要做运算的多项式数量"<
>Sum;6 for (int i=1;i<=Sum;++i)7 Input_Poly(i);8 return 0;9 }

 俗话(WANGJIANDE)说的好,“主程序很短,写起来很爽”

(3)初始化模块Init_Poly(_Poly Poly0);

1 void Init_Poly(struct _Poly &Poly)2 {3     for (int i=0;i<=Poly.Times;++i)4         Poly.Data[i]=0;5     Poly.Times=0;6 }

(4)输入模块Input_Poly(int i);

 

1 P.S.对输入的声明 2  3      cout<<"本程序支持两种读入方式,请根据您的需要选择:"<
1 void Input_Poly(int i) 2 { 3 /*初始化多项式*/ 4     Poly[i].Times=MAXTIMES; 5     Init_Poly(Poly[i]); 6  7 /*输入*/ 8     cout<<"即将输入第"<<<"个多项式……"<
>Point;12 if (Point==2)13 {14 while (1)15 {16 cout<<"请输入本多项式的次数"<
>Poly[i].Times;18 if (Poly[i].Times<0) cout<<"Are U Kidding ME?"<
=0;--j)24 cin>>Poly[i].Data[j];25 }26 else if (Point==1)27 {28 int K;29 cout<<"请依次输入非零幂次及对应系数,全部输入完成后请输入-1."<
>K;33 if (K>Poly[i].Times) Poly[i].Times=K;34 if (K==-1) break;35 /* if (Poly[i].Times>MAXTIMES)36 {37 cout<<"Sorry,The Number is too large!I Cannot Solve it."<
>Poly[i].Data[K];41 }42 43 }44 /*测试输入正确性*/45 cout<<"您输入的多项式为:";46 Output_Data(Poly[i]);47 }

(5)输出模块Output_Data(_Poly Poly0);

没什么特别需要说明的,就是判断的各种情况输出。

1 Void Output_Data(struct _Poly Poly) 2 { 3     cout<<"f(x)="; 4     bool flag=false;///判断是否已经出现过非零输出 5     /*下输出最高次数项到二次项*/ 6     for (int i=Poly.Times;i>=2;--i) 7     { 8         if (fabs(Poly.Data[i])>1e-7) 9           {10               if (!flag)///如果这是第一个输出11               {12                   if (Poly.Data[i]!=1) cout<
0) ///不是第一次输出,正系数前应该有加号16 {17 cout<<'+';18 if (Poly.Data[i]!=1) cout<
0) ///如果曾经输出过数字,并且一次项系数为正,需要输出加号28 {29 cout<<'+';30 if (Poly.Data[1]!=1) cout<
1e-7)///else if (Poly.Data[1]!=0) 此处等价为(Poly.Data[1]<0 || !flag),即非负或者这是第一个可输出系数,只需输出系数即可36 {
37 if (Poly.Data[1]!=1) cout<
1e-7 && flag )44 cout<<'+'<
<

(6)加法模块Init_Poly(_Poly Poly0);

1 /*------------Sum个多项式相加,答案存储在Ploy0中------------*/ 2 void Plus_Poly(int Sum) 3 { 4     struct _Poly Poly0; 5     Init_Poly(Poly0); 6     for (int i=1;i<=Sum;++i) 7         if (Poly[i].Times>Poly0.Times) 8             Poly0.Times=Poly[i].Times; ///寻找最大次数 9     for (int i=1;i<=Sum;++i)10       for (int j=0;j<=Poly0.Times;++j)11          Poly0.Data[j]+=Poly[i].Data[j];///多项式系数相加,得到最终答案12     cout<<"和为:";13     Output_Data(Poly0);14 }

(7)乘法模块Multiply_Poly(int Sum);

1 /*------------Sum个多项式相乘,答案存储在Ploy0中------------*/ 2 void Multiply_Poly(int Sum) 3 { 4    struct _Poly Poly0;//临时空间Poly0存放结果 5    Poly0=Poly[1]; 6    //Output_Data(Poly0); //TEST 7    struct _Poly PolyTmp; 8    for (int i=2;i<=Sum;++i) 9    {10       Init_Poly(PolyTmp);11       PolyTmp.Times=Poly0.Times+Poly[i].Times;///Poly的最高次项系数一定不减少12       // Output_Data(PolyTmp);13       for (int j=Poly[i].Times;j>=0;--j)///第i个多项式的各项14          for (int k=Poly0.Times;k>=0;--k)///Answer多项式的各项15             {16                  // cout<
<<'='<
<

 (8)完整代码

1 /*0  2    By  3      Iris.Catch-22.S、`  4      Dept. of Mathematics,  5      School of Science,  6      HIT  7    November,2015  8 */  9 #define MAXTIMES 101 10 #define N 10 11 #include
12 #include
13 using namespace std; 14 15 void CopyRight() 16 { 17 cout<<"---------By ICS,HIT,2015/11----------"<
0) ///如果曾经输出过数字,并且一次项系数为正,需要输出加号 65 { 66 cout<<'+'; 67 if (Poly.Data[1]!=1) cout<
1e-7)///else if (Poly.Data[1]!=0) 此处等价为(Poly.Data[1]<0 || !flag),即非负或者这是第一个可输出系数,只需输出系数即可 73 {
74 if (Poly.Data[1]!=1) cout<
1e-7 && flag ) 81 cout<<'+'<
<
>Point; 97 if (Point==2) 98 { 99 while (1)100 {101 cout<<"请输入本多项式的次数"<
>Poly[i].Times;103 if (Poly[i].Times<0) cout<<"Are U Kidding ME?"<
=0;--j)109 cin>>Poly[i].Data[j];110 }111 else if (Point==1)112 {113 int K;114 cout<<"请依次输入非零幂次及对应系数,全部输入完成后请输入-1."<
>K;118 if (K>Poly[i].Times) Poly[i].Times=K;119 if (K==-1) break;120 /* if (Poly[i].Times>MAXTIMES)121 {122 cout<<"Sorry,The Number is too large!I Cannot Solve it."<
>Poly[i].Data[K];126 }127 128 }129 /*测试输入正确性*/130 cout<<"您输入的多项式为:";131 Output_Data(Poly[i]);132 }133 134 /*------------Sum个多项式相乘,答案存储在Ploy0中------------*/135 void Multiply_Poly(int Sum)136 {137 struct _Poly Poly0;138 Poly0=Poly[1];139 //Output_Data(Poly0); //TEST140 struct _Poly PolyTmp;141 for (int i=2;i<=Sum;++i)142 {143 Init_Poly(PolyTmp);144 PolyTmp.Times=Poly0.Times+Poly[i].Times;///Poly的最高次项系数一定不减少145 //cout<<"HAHAHA"<
=0;--j)///第i个多项式的各项147 for (int k=Poly0.Times;k>=0;--k)///Answer多项式的各项148 {149 // cout<
<<'='<
<

---Done By Iris.Catch-22.S、`

这个A版完全是水出来的……我主要功夫花在输入输出的修正上了。然而一坨if还是很讨人厌、

没有比数组更自然、更简便的存储结构了、、、

链表是逻辑自然书写不自然……

嗯、下一个B版是链表的

 

转载于:https://www.cnblogs.com/Catch-22/p/5092685.html

你可能感兴趣的文章
转 SQL集合函数中利用case when then 技巧
查看>>
SQL经典语句二
查看>>
IIS6/7/8 WEBserver不能訪问grf报表模板文件的问题
查看>>
常用居中方法记录
查看>>
JS如何判断是不是iphoneX
查看>>
矩阵乘法
查看>>
WEB ICON 的探讨
查看>>
关于.Net中的反射使用入门
查看>>
[内核编程] 键盘过滤第一个例子ctrl2cap(4.1~4.4)汇总,测试
查看>>
<转>Spring Test 整合 JUnit 4 使用总结
查看>>
Java读书笔记05 类与对象
查看>>
正则表达式语法 2
查看>>
c# winform 应用程序根据条件阻止窗口关闭
查看>>
转载:简单的php写入数据库类
查看>>
垂直居中的几种实现方法
查看>>
UILabel标签文字过长时的显示方式
查看>>
H5离线缓存机制-manifest
查看>>
[学习笔记]BSGS
查看>>
NHibernate 01 [简述]
查看>>
EL表达式浅析以及使用场景
查看>>