安徽工业大学数据结构课程设计
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
多项式相乘
1、问题描述 输入入两个多项式,然后相乘,输出正确的结果。 2、设计思路 定义一一个结构体,里里面面包含了一一元多项式的系数、指数。对多项式进行行输入入的时候, 先输入入项数,然后从第一一项的系数开始输入入,然后指数,然后一一次输完其他的项。在相乘时, 用用第二二项的每个元素去乘第一一项的每个元素,然后合并同类项。 3、数据结构设计 一一个结构体需要包含它的系数指数。 class term { public: int coef; //多项式系数 int exp; //多项式指数 term( int c=0,int e=0):coef(c),exp(e){} };
//测试函数 int main() { cout<<"************本程序实现多项式的加法与乘法************"; cout<<endl; PolyArith poly_a; poly_a.Poly_input(); //输入入多项式 poly_a.Poly_add(); //多项式加法 cout<<"多项式加法的运算结果:"<<endl; poly_a.Poly_output(); //输出多项式 cout<<endl; poly_a.Poly_multi(); //多项式乘法 cout<<"多项式乘法的运算结果:"<<endl; poly_a.Poly_output(); return 0; }
6、测试与运行行
7、设计心心得 才开始我一一直以为这个程序很简单,以为和上课讲过的一一样,都快写完了,才发现是 多项式”相乘“,竟然是相乘,我一一直写的是相加,怪不得,我还以为很简单,后来已经写好 了相加了,就没有把它删掉了。 其实想一一想相乘也没有很复杂。在数学上,就是第一一个多项式的每一一项依次与第二二项 的每一一项相乘,系数乘以系数,指数乘以指数(默认未知数都是x,不然没办法写),然后再 把两次循环的结果合并同类项就可以了,这是数学上的方方法。放在程序中,其实也差不了多 少,只不过我不是最后才合并同类项,是在第一一个多项式的二二个项数完成与第二二个多项式的 所有项数相乘之后,就开始合并同类项了。 使用用STL中的list容器(省去了链表的创建、增加、遍历等代码)来保存多项式,使用用 两层循环来实现多项式相乘,第一一层循环是遍历第一一个多项式,使用用每次被遍历的元素来循 环第二二个多项式里里的每一一个元素,这是第二二层循环,然后来把第一一层循环的所得结果来与第 一一层下次的循环结果,来做合并同类项,最后输出所得的result。
} public: //输入入函数,用用以输入入多项式 void Poly_input() { int n; cout<<"请输入入第一一个多项式的项数:"; cin>>n; cout<<"按降幂输入入第一一个多项式的每一一项的系数和指数"<<endl; for(int i=1;i<=n;i++) { term t_temp; cout<<"请输入入第"<<i <<"项系数和指数:"; cin>>t_temp.coef; cin>>t_temp.exp; m_poly_list_first.push_back(t_temp); } n = 0; cout<<"请输入入第二二个多项式的项数:"; cin>>n; cout<<"按降幂输入入第二二个多项式的每一一项的系数和指数"<<endl; for(int j=1;j<=n;j++) { term t_temp; cout<<"请输入入第"<<j <<"项系数和指数:"; cin>>t_temp.coef; cin>>t_temp.exp; m_poly_list_second.push_back(t_temp);
4、功能函数设计 我直接在完整代码中给出吧 5、程序代码 #include <list> #include <iostream> using namespace std; //定义多项式的项类 class term { public: int coef; //多项式系数 int exp; //多项式指数 term( int c=0,int e=0):coef(c),exp(e){} }; //定义多项式类 class PolyArith { private: list<term> m_poly_list_first; //存储第一一个多项式 list<term> m_poly_list_second; //存储第二二个多项式 list<term> m_poly_list_result; //用用以存储运算结果 //多项式私有成员函数,用用以乘法时的调用用 list<term> Poly_add(list<term>&poly_list_first, list<term>&poly_list_second) { list<term> poly_list_result; //用用以存储运算结果 list<term>::iterator iter_first = poly_list_first.begin(); list<term>::iterator iter_second = poly_list_second.begin(); //该while循环针对两个链表迭代器都没有指到结尾的情形 while(iter_first != poly_list_first.end()&& iter_second != poly_list_second.end()) { term t_temp; term t_first = (term)*iter_first;
};
}
} //将运算结果赋值给私有数据成员,用用以输出 m_poly_list_result = poly_list_result;
list<term> poly_list_temp; //用用以存储多项式的中间运算结果 list<term>::iterator iter_second =m_poly_list_second.begin(); for(; iter_second!=m_poly_list_second.end(); iter_second++) { term t_temp; //用用以存储项的中间运算结果 term t_first = (term)*iter_first; term t_second = (term)*iter_second; //此处实现多项式项的相乘 t_temp.coef = t_first.coef*t_second.coef; //系数相乘 t_temp.exp = t_first.exp + t_second.exp; //指数相加 poly_list_temp.push_back(t_temp); } //此处调用用私有成员函数Poly_add() poly_list_result =Poly_add(poly_list_temp,poly_list_result);
term t_second = (term)*iter_second; if(t_first.exp>t_second.exp) { poly_list_result.push_back(t_first); iter_first++; } else if(t_second.exp>t_first.exp) { poly_list_result.push_back(t_second); iter_second++; } else { t_temp.coef=t_first.coef+t_second.coef; t_temp.exp=t_first.coef; poly_list_result.push_back(t_temp); iter_first++; iter_secon字处理软件的方法,类似于软件中查找的功能。 2、 设计思路 主要使用链表的知识。首先打开一个可用文本形式打开的可读文件,使用链表给文件内容 标号,包括行号和单词,然后读入需要查询的单词,与文件内容链表相匹配,如果找到就 记录下来,存在链表中。 3、 数据结构设计 直接给出源码吧,不然太多。 4、 功能函数设计 5、 程序代码 #include<iostream> #include<stdlib.h> #include<string> using namespace std; #define SIZE 20 typedef FILE *PFILE; typedef char String[SIZE]; typedef struct { String data; int len; }WordType; //单词类型 //单词串 //单词的长度 //单词结点类型
} //该for循环针对第一一个多项式的迭代器没有指到结尾 //第二二个指到结尾的情形 for(;iter_first != poly_list_first.end();iter_first++) { poly_list_result.push_back(*iter_first); } //该for循环针对第二二个多项式的迭代器没有指到结尾 //第一一个指到结尾的情形 for(;iter_second != poly_list_second.end();iter_second++) { poly_list_result.push_back(*iter_second); } return poly_list_result;
} } //输出函数,用用以输出多项式 void Poly_output() { //用用以指向输出多项式的第一一个元素 list<term>::iterator iter = m_poly_list_result.begin(); //输出多项式的每一一项 for(;iter!=m_poly_list_result.end();) { term t_temp=*iter; cout<<t_temp.coef<<"x^"<<t_temp.exp; if(++iter!=m_poly_list_result.end()) cout<<"+"; } cout<<endl; } //加法函数,其基本思想同上边的私有成员函数Poly_add() //此处不带参数,多项式运算对象为私有数据成员 void Poly_add() { list<term>::iterator iter_first = m_poly_list_first.begin(); list<term>::iterator iter_second = m_poly_list_second.begin(); while(iter_first != m_poly_list_first.end()&& iter_second != m_poly_list_second.end()) { term t_temp; term t_first = (term)*iter_first; term t_second = (term)*iter_second; if(t_first.exp>t_second.exp) { m_poly_list_result.push_back(t_first); iter_first++; } else if(t_second.exp>t_first.exp) { m_poly_list_result.push_back(t_second); iter_second++; } else { t_temp.coef=t_first.coef+t_second.coef; t_temp.exp=t_first.exp; m_poly_list_result.push_back(t_temp); iter_first++; iter_second++; } } for(;iter_first != m_poly_list_first.end();iter_first++) { m_poly_list_result.push_back(*iter_first); } for(;iter_second != m_poly_list_second.end();iter_second++) { m_poly_list_result.push_back(*iter_second); } } //乘法函数,用用以作多项式乘法 void Poly_multi() { list<term> poly_list_result; list<term>::iterator iter_first = m_poly_list_first.begin(); for(;iter_first!=m_poly_list_first.end();iter_first++) {
1、问题描述 输入入两个多项式,然后相乘,输出正确的结果。 2、设计思路 定义一一个结构体,里里面面包含了一一元多项式的系数、指数。对多项式进行行输入入的时候, 先输入入项数,然后从第一一项的系数开始输入入,然后指数,然后一一次输完其他的项。在相乘时, 用用第二二项的每个元素去乘第一一项的每个元素,然后合并同类项。 3、数据结构设计 一一个结构体需要包含它的系数指数。 class term { public: int coef; //多项式系数 int exp; //多项式指数 term( int c=0,int e=0):coef(c),exp(e){} };
//测试函数 int main() { cout<<"************本程序实现多项式的加法与乘法************"; cout<<endl; PolyArith poly_a; poly_a.Poly_input(); //输入入多项式 poly_a.Poly_add(); //多项式加法 cout<<"多项式加法的运算结果:"<<endl; poly_a.Poly_output(); //输出多项式 cout<<endl; poly_a.Poly_multi(); //多项式乘法 cout<<"多项式乘法的运算结果:"<<endl; poly_a.Poly_output(); return 0; }
6、测试与运行行
7、设计心心得 才开始我一一直以为这个程序很简单,以为和上课讲过的一一样,都快写完了,才发现是 多项式”相乘“,竟然是相乘,我一一直写的是相加,怪不得,我还以为很简单,后来已经写好 了相加了,就没有把它删掉了。 其实想一一想相乘也没有很复杂。在数学上,就是第一一个多项式的每一一项依次与第二二项 的每一一项相乘,系数乘以系数,指数乘以指数(默认未知数都是x,不然没办法写),然后再 把两次循环的结果合并同类项就可以了,这是数学上的方方法。放在程序中,其实也差不了多 少,只不过我不是最后才合并同类项,是在第一一个多项式的二二个项数完成与第二二个多项式的 所有项数相乘之后,就开始合并同类项了。 使用用STL中的list容器(省去了链表的创建、增加、遍历等代码)来保存多项式,使用用 两层循环来实现多项式相乘,第一一层循环是遍历第一一个多项式,使用用每次被遍历的元素来循 环第二二个多项式里里的每一一个元素,这是第二二层循环,然后来把第一一层循环的所得结果来与第 一一层下次的循环结果,来做合并同类项,最后输出所得的result。
} public: //输入入函数,用用以输入入多项式 void Poly_input() { int n; cout<<"请输入入第一一个多项式的项数:"; cin>>n; cout<<"按降幂输入入第一一个多项式的每一一项的系数和指数"<<endl; for(int i=1;i<=n;i++) { term t_temp; cout<<"请输入入第"<<i <<"项系数和指数:"; cin>>t_temp.coef; cin>>t_temp.exp; m_poly_list_first.push_back(t_temp); } n = 0; cout<<"请输入入第二二个多项式的项数:"; cin>>n; cout<<"按降幂输入入第二二个多项式的每一一项的系数和指数"<<endl; for(int j=1;j<=n;j++) { term t_temp; cout<<"请输入入第"<<j <<"项系数和指数:"; cin>>t_temp.coef; cin>>t_temp.exp; m_poly_list_second.push_back(t_temp);
4、功能函数设计 我直接在完整代码中给出吧 5、程序代码 #include <list> #include <iostream> using namespace std; //定义多项式的项类 class term { public: int coef; //多项式系数 int exp; //多项式指数 term( int c=0,int e=0):coef(c),exp(e){} }; //定义多项式类 class PolyArith { private: list<term> m_poly_list_first; //存储第一一个多项式 list<term> m_poly_list_second; //存储第二二个多项式 list<term> m_poly_list_result; //用用以存储运算结果 //多项式私有成员函数,用用以乘法时的调用用 list<term> Poly_add(list<term>&poly_list_first, list<term>&poly_list_second) { list<term> poly_list_result; //用用以存储运算结果 list<term>::iterator iter_first = poly_list_first.begin(); list<term>::iterator iter_second = poly_list_second.begin(); //该while循环针对两个链表迭代器都没有指到结尾的情形 while(iter_first != poly_list_first.end()&& iter_second != poly_list_second.end()) { term t_temp; term t_first = (term)*iter_first;
};
}
} //将运算结果赋值给私有数据成员,用用以输出 m_poly_list_result = poly_list_result;
list<term> poly_list_temp; //用用以存储多项式的中间运算结果 list<term>::iterator iter_second =m_poly_list_second.begin(); for(; iter_second!=m_poly_list_second.end(); iter_second++) { term t_temp; //用用以存储项的中间运算结果 term t_first = (term)*iter_first; term t_second = (term)*iter_second; //此处实现多项式项的相乘 t_temp.coef = t_first.coef*t_second.coef; //系数相乘 t_temp.exp = t_first.exp + t_second.exp; //指数相加 poly_list_temp.push_back(t_temp); } //此处调用用私有成员函数Poly_add() poly_list_result =Poly_add(poly_list_temp,poly_list_result);
term t_second = (term)*iter_second; if(t_first.exp>t_second.exp) { poly_list_result.push_back(t_first); iter_first++; } else if(t_second.exp>t_first.exp) { poly_list_result.push_back(t_second); iter_second++; } else { t_temp.coef=t_first.coef+t_second.coef; t_temp.exp=t_first.coef; poly_list_result.push_back(t_temp); iter_first++; iter_secon字处理软件的方法,类似于软件中查找的功能。 2、 设计思路 主要使用链表的知识。首先打开一个可用文本形式打开的可读文件,使用链表给文件内容 标号,包括行号和单词,然后读入需要查询的单词,与文件内容链表相匹配,如果找到就 记录下来,存在链表中。 3、 数据结构设计 直接给出源码吧,不然太多。 4、 功能函数设计 5、 程序代码 #include<iostream> #include<stdlib.h> #include<string> using namespace std; #define SIZE 20 typedef FILE *PFILE; typedef char String[SIZE]; typedef struct { String data; int len; }WordType; //单词类型 //单词串 //单词的长度 //单词结点类型
} //该for循环针对第一一个多项式的迭代器没有指到结尾 //第二二个指到结尾的情形 for(;iter_first != poly_list_first.end();iter_first++) { poly_list_result.push_back(*iter_first); } //该for循环针对第二二个多项式的迭代器没有指到结尾 //第一一个指到结尾的情形 for(;iter_second != poly_list_second.end();iter_second++) { poly_list_result.push_back(*iter_second); } return poly_list_result;
} } //输出函数,用用以输出多项式 void Poly_output() { //用用以指向输出多项式的第一一个元素 list<term>::iterator iter = m_poly_list_result.begin(); //输出多项式的每一一项 for(;iter!=m_poly_list_result.end();) { term t_temp=*iter; cout<<t_temp.coef<<"x^"<<t_temp.exp; if(++iter!=m_poly_list_result.end()) cout<<"+"; } cout<<endl; } //加法函数,其基本思想同上边的私有成员函数Poly_add() //此处不带参数,多项式运算对象为私有数据成员 void Poly_add() { list<term>::iterator iter_first = m_poly_list_first.begin(); list<term>::iterator iter_second = m_poly_list_second.begin(); while(iter_first != m_poly_list_first.end()&& iter_second != m_poly_list_second.end()) { term t_temp; term t_first = (term)*iter_first; term t_second = (term)*iter_second; if(t_first.exp>t_second.exp) { m_poly_list_result.push_back(t_first); iter_first++; } else if(t_second.exp>t_first.exp) { m_poly_list_result.push_back(t_second); iter_second++; } else { t_temp.coef=t_first.coef+t_second.coef; t_temp.exp=t_first.exp; m_poly_list_result.push_back(t_temp); iter_first++; iter_second++; } } for(;iter_first != m_poly_list_first.end();iter_first++) { m_poly_list_result.push_back(*iter_first); } for(;iter_second != m_poly_list_second.end();iter_second++) { m_poly_list_result.push_back(*iter_second); } } //乘法函数,用用以作多项式乘法 void Poly_multi() { list<term> poly_list_result; list<term>::iterator iter_first = m_poly_list_first.begin(); for(;iter_first!=m_poly_list_first.end();iter_first++) {