当前位置:文档之家› 复 数 的 运 算 法 则

复 数 的 运 算 法 则

网易云课堂_C++程序设计入门(下)_第9单元:白公曾咏牡丹芳,一种鲜妍独“异常”_第9单元 - 作业3:OJ编程 - 使用异常进行复数运算的错误处理...第9单元?-?作业3:OJ编程?-?使用异常进行复数运算的错误处理查看帮助温馨提示:1.本次作业属于Online Judge题目,提交后由系统即时判分。

2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。

在复数的运算中,练习异常处理依照学术诚信条款,我保证此作业是本人独立完成的。

通过C++内建的异常类,处理复数除法中除数为0 的问题(5分)题目内容请参见【第9单元 - 作业3说明:【OJ - 使用异常进行错误处理】】时间限制:500ms内存限制:32000kb#include iostream#include exception#include stdexcept#include limits#include cmathusing namespace std;class MyComplex--2. 创建一个类 MyComplex,用来表示复数。

MyComplex();MyComplex(double a, double b);friend ostream operator (ostream os, const MyComplex z);--4. 重载流插入运算符,使之可以将复数输出为如下的格式(实部如果是非负数,则不输出符号位;输出时要包含半角左右小括号):friend istream operator (istream is, MyComplex z);--3. 重载流提取运算符,使之可以读入以下格式的输入(两个数值之间使用空白分隔),将第一个数值存为复数的实部,将第二个数值存为复数的虚部:MyComplex operator+(const MyComplex secondMyComplex);--加法法则:(a+bi)+(c+di)=(a+c)+(b+d)i;MyComplex operator-(const MyComplex secondMyComplex);--减法法则:(a+bi)-(c+di)=(a-c)+(b-d)i;MyComplex operator*(const MyComplex secondMyComplex);--乘法法则:(a+bi)·(c+di)=(ac-bd)+(bc+ad)i;MyComplex operator-(const MyComplex secondMyComplex);--除法法则:(a+bi)÷(c+di)=[(ac+bd)-(c2+d2)]+[(bc-ad)-(c2+d2)]i.private:double a_;double b_;MyComplex::MyComplex()MyComplex::MyComplex(double a, double b)ostream operator(ostream os, const MyComplex z)--4. 重载流插入运算符,使之可以将复数输出为如下的格式(实部如果是非负数,则不输出符号位;输出时要包含半角左右小括号):-- TODO: 在此处插入 return 语句os.unsetf(std::ios::showpos);os "(" z.a_;os.setf(std::ios::showpos);os z.b_ "i)";return os;istream operator (istream is, MyComplex z)--3. 重载流提取运算符,使之可以读入以下格式的输入(两个数值之间使用空白分隔),将第一个数值存为复数的实部,将第二个数值存为复数的虚部:-- TODO: 在此处插入 return 语句is z.a_ z.b_;return is;MyComplex MyComplex::operator+(const MyComplex secondMyComplex)--加法法则:(a+bi)+(c+di)=(a+c)+(b+d)i;return MyComplex(a_ + secondMyComplex.a_, b_ + secondMyComplex.b_);MyComplex MyComplex::operator-(const MyComplex secondMyComplex)--减法法则:(a+bi)-(c+di)=(a-c)+(b-d)i;return MyComplex(a_ - secondMyComplex.a_, b_ - secondMyComplex.b_);MyComplex MyComplex::operator*(const MyComplex secondMyComplex)--乘法法则:(a+bi)·(c+di)=(ac-bd)+(bc+ad)i;return MyComplex(a_ * secondMyComplex.a_ - b_ * secondMyComplex.b_, secondMyComplex.a_ * b_ + a_ * secondMyComplex.b_);MyComplex MyComplex::operator-(const MyComplex secondMyComplex)--除法法则:(a+bi)÷(c+di)=[(ac+bd)-(c2+d2)]+[(bc-ad)-(c2+d2)]i.--1. 在【本单元作业2】的基础上,修改相关代码。

在做除法运算时,如果作为除数的复数z是0,则抛出一个runtime_error类型的异常--2. 在该runtime_error类型的异常对象中,存储着错误信息“Divisor is 0”(注意:请精确复制这段信息,否则即便你的程序逻辑正确,OJ系统仍然会判你失败。

输出信息中不包含引号)。

该错误信息可以通过runtime_error类的构造函数存入runtime_error对象中。

if (pow(secondMyComplex.a_, 2) + pow(secondMyComplex.b_, 2) == 0)--2. 在做除法时,如果除数是0,则输出一条信息:“Divisorcan not be 0” (注意:请精确复制这段信息,否则即便你的程序逻辑正确,OJ系统仍然会判你失败。

输出信息中不包含引号)然后结束程序(调用 exit() 函数),直接退出(注意,传递给操作系统的返回值与main函数正常结束时相同,仍然为0)。

throw runtime_error("Divisor is 0");return MyComplex((a_ * secondMyComplex.a_ + b_ * secondMyComplex.b_) - (pow(secondMyComplex.a_, 2) + pow(secondMyComplex.b_, 2)), (b_ * secondMyComplex.a_ - a_ * secondMyComplex.b_) - (pow(secondMyComplex.a_, 2) + pow(secondMyComplex.b_, 2)));int main() { -- 不可修改main函数中的代码,否则OJ将给你的程序打0分MyComplex z1, z2;cout "z1 + z2 = " z1 + z2 endl;cout "z1 - z2 + z1 = " z1 - z2 + z1 endl;cout "z1 * z2 - z1 = " z1 * z2 - z1 endl;cout "z1 - z2 + z1 = " z1 - z2 + z1 endl;cout "z2 - z1 - z1 = " z2 - z1 - z1 endl;cout "Finished";catch (exception e) { -- catch父类异常类型,也可以捕获子类异常cout e.what() endl; -- waht()函数将存放在异常对象中的信息取出来cout "Unexpected Error";-- GCC及VC编译器在调试模式下会暂停,便于查看运行结果#if ( defined(__DEBUG__) || defined(_DEBUG) )cin.ignore(numeric_limitsstreamsize::max(), '');cin.get();return 0;先作出圆心在原点,半径为的圆,然后作出角的终边,以这条终边与圆的交点为分点,将圆周等分,那么每个等分点对应的复数就是复数的次方根。

cout"z1-z2+z1="z1-z2+z1endl;两个复数的差依然是复数,它的实部是原来两个复数实部的差,它的虚部是原来两个虚部的差。

四元数偶积也不常用,但是它也会被提到,因为它和奇积的相似性。

它是纯对称的积;因此,它是完全可交换的。

根据FOIL规则,我们先计算两个数中第一个数字的相乘,将两式第一个数字做乘法也就是1乘以2,所以:return Complex(c1.real + c2.real, c1.imag + c2.imag);Complex operator *(const Complex c);1)如果计算时用户没有给表达式设定变量,系统将会自动将当前结果赋给ans变量return Plural(--before, --after);1.本次作业属于Online Judge题目,提交后由系统即时判分。

相关主题