c#-返回值是一个复数类的,有虚部和实部,

问题描述

返回值是一个复数类的,有虚部和实部,

返回值是一个复数类的,有虚部和实部,代码的返回那块应该怎么写呢?

解决方案

 public struct Complex
{
    public int real;
    public int imaginary;

    // Constructor.
    public Complex(int real, int imaginary)
    {
        this.real = real;
        this.imaginary = imaginary;
    }

    // Specify which operator to overload (+),
    // the types that can be added (two Complex objects),
    // and the return type (Complex).
    public static Complex operator +(Complex c1, Complex c2)
    {
        return new Complex(c1.real + c2.real, c1.imaginary + c2.imaginary);
    }

    // Override the ToString() method to display a complex number
    // in the traditional format:
    public override string ToString()
    {
        return (System.String.Format("{0} + {1}i", real, imaginary));
    }
}

class TestComplex
{
    static void Main()
    {
        Complex num1 = new Complex(2, 3);
        Complex num2 = new Complex(3, 4);

        // Add two Complex objects by using the overloaded + operator.
        Complex sum = num1 + num2;

        // Print the numbers and the sum by using the overridden
        // ToString method.
        System.Console.WriteLine("First complex number:  {0}", num1);
        System.Console.WriteLine("Second complex number: {0}", num2);
        System.Console.WriteLine("The sum of the two numbers: {0}", sum);

        // Keep the console window open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}
/* Output:
    First complex number:  2 + 3i
    Second complex number: 3 + 4i
    The sum of the two numbers: 5 + 7i
*/

解决方案二:

可以建立一个无名临时对象返回,也可以直接给个名字返回,总之实质为返回一个对象。

解决方案三:

先定义一个理性 复数类 internal class complex{ int realpart;int virtualpart;} ,然后写个方法,方法返回的类型是complex不就行了

解决方案四:

把实部跟虚部放到一个一维数组int[2]就行啦,用的时候从数组取出实部虚部就行了

解决方案五:

返回一个数组不可以吗?

解决方案六:

Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->#ifndef COMPLEX_H
#define COMPLEX_H
#include
#include
class Complex
{
public:
Complex(double _real,double _imag = 0.0):real(_real),imag(_imag){} //构造函数,初始化列表和默认参数
Complex(std::istream &is){is >> this;}; //输入构造函数,调用自身的>>操作符
void SetReal(double _real); //更改实部的值
void SetImag(double _imag); //更改虚部的值
void SetVal(double _real,double _imag); //更改整个复数
inline double GetReal() const; //获取实部,常成员函数
inline double GetImag() const; //获取虚部,常成员函数
Complex& operator+=(const Complex &val); //成员操作符+=
Complex& operator
=(const Complex &val); //成员操作符-=
friend bool operator==(const Complex &lhs,const Complex &rhs); //友元函数,需访问私有数据
friend std::istream& operator>>(std::istream &,Complex &); //友元输入操作符,需私有数据
friend std::ostream& operator<<(std::ostream &,const Complex &); //友元输出操作符,需私有数据
private:
double real;

double imag;
};

Complex operator+(const Complex &lhs, const Complex &rhs); //普通函数,实现两个复数+操作
Complex operator*(const Complex &lhs, const Complex &rhs); //普通函数,实现两个复数*操作

//========================分割线,此线上面为定义代码,此线下面是实现代码===============================
inline bool operator==(const Complex &lhs,const Complex &rhs)
{
return (lhs.real == rhs.real) && (lhs.imag == rhs.imag);
}

inline bool operator!=(const Complex &lhs,const Complex &rhs)
{
return !(lhs==rhs);
}

inline Complex& Complex::operator+=(const Complex &val)
{
real += val.real;
imag += val.imag;
return *this;
}

inline Complex operator+(const Complex &lhs,const Complex &rhs)
{
Complex ret(lhs);
ret += rhs;
return ret;
}

inline Complex& Complex::operator*=(const Complex &val)
{
double tReal = real;
double tImag = imag;
real = tReal*val.real - tImag*val.imag;
imag = tReal*val.imag + tImag*val.real;
return *this;
}

inline Complex operator*(const Complex &lhs,const Complex &rhs)
{
Complex ret(lhs);
ret *= rhs;
return ret;
}

inline std::istream& operator>>(std::istream &is,Complex &com)
{
std::cout << "请输入实数部分:" ;
is >> com.real;
if(is)
{
std::cout << "请输入虚数部分:" ;
is >> com.imag;
if(is)
{
return is;
}
else
{
com = Complex(0.0);
}
}
else
{
com = Complex(0.0);
}
return is;
}

inline std::ostream& operator<<(std::ostream &os, const Complex &com)
{
os << "复数为:" << com.real << std::showpos << com.imag << "i" << std::endl;
return os;
}

inline double Complex::GetReal() const
{
return real;
}

inline double Complex::GetImag() const
{
return imag;
}

void Complex::SetReal(double _real)
{
real = _real;
}

void Complex::SetImag(double _imag)
{
imag = _imag;
}

void Complex::SetVal(double _real,double _imag)
{
real = _real;
imag = _imag;
}
#endif

时间: 2024-11-03 19:06:02

c#-返回值是一个复数类的,有虚部和实部,的相关文章

对象的初始化-用函数的返回值初始化一个类对象,这其中用了几次复制构造函数

问题描述 用函数的返回值初始化一个类对象,这其中用了几次复制构造函数 这是我自己写的一段代码#includeusing namespace std;class Example{int num;public:Example(int i){num=i;cout<<""This is construction with parameter.n"";}Example(){num=0;cout<<""This is construc

删除数组条目中重复的条目(可能有多个),返回值是一个仅包含被删除的重复条目的新数组。_javascript技巧

今日在bluediea看到淘宝在线招聘,相信淘宝的技术还是很牛的,于是赶紧打开看看题目并试着做做. 到了第三题时卡了偶老半天,并不是做不出来,感觉有很简便的方法但自己就是一时想不出来,不过费了九牛二虎之力终于完成本题,给出了一个另自己还比较满意的答案,欢迎各位朋友指点! 题目如下: 请给Array本地对象增加一个原型方法,它的用途是删除数组条目中重复的条目(可能有多个),返回值是一个仅包含被删除的重复条目的新数组. [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 复制代码 代码如下:

请教,用C#写一个复数类!

问题描述 写一个复数类,实现(1)构造函数重载(三种:缺省,实部+虚部,幅角+模)(2)实现+,-,×,/运算,尤其是注意/运算分母不等于零,包含和整数,和浮点数,和复数相乘的情况.(3)定义>,<,==,!=等(4)实现实数到复数的转换(显式,隐式),实现复数到实数的转换(显式,隐式),如果可以的话,如果不可以请显示错误信息.请各位大侠,帮帮忙!!! 解决方案 解决方案二:精华区有一个解决方案三:谢谢过楼上的了,去看了一下,不过都是用VB编的,我以前没有学过VB,不知道用C#怎么编写?解决方

session对象调用createQuery(&amp;amp;quot;from Person&amp;amp;quot;)返回值为一个空的query对象

问题描述 其中获取的session对象是没问题的,上面我写的程序已经验证过了,通过debag模式我已验证是Query对象的问题,因为query的size属性为0;这行代码的query对象为空值,但却不知怎么修改,另外我用的是hibernate4.3版本,是不是与这个版本的问题 解决方案 解决方案二:你用单元测试看看,用Junit或写一个Main函数来调用试试!解决方案三:要通过.addEntity()方法将Person加入到实体管理器.贴出HibernateUtil代码和配置看看.

const相关-为什么一个const属性的返回值可以用 非const 型来接受呢?

问题描述 为什么一个const属性的返回值可以用 非const 型来接受呢? const int func() { int j = 8; return j; } int main() {int i = 5 ;i = func(); } 为什么可以翻译通过呢? 解决方案 const int func() 说明函数func()的返回值是一个常数,不想让对象再次被修改,因为const一定是先被初始化的 而在主函数中的:i = func(),只能说明是将一个常数值赋值给一个变量,很正常啊!!! 还不懂的

c#-C#函数多个返回值,除了out ref还有什么做法?

问题描述 C#函数多个返回值,除了out ref还有什么做法? C#函数多个返回值,除了out ref还有什么做法? 解决方案 对于引用类型,完全可以不用这个修饰,比如 class A { public int a; public int b; } main() { A a = new A(); foo(a); int x = a.a; int y = a.b; } void foo(A a) { a.a = 1; a.b = 2; } 解决方案二: 再换一个思路,我们也可以靠返回值,比如返回值

c#中一个复数求模程序的异常处理的疑问

问题描述 c#中一个复数求模程序的异常处理的疑问 最近在用c#写一个复数类,其中要用到一个复数求模的运算.在网上找到了一些示例代码,但是不知道为什么要这么写.我自己的代码和示例代码都贴出来: public double Abs2() { double result = Math.Sqrt(this.real * this.real + this.imag * this.imag); return result; } public double Abs() { double x = Math.Ab

传递和返回数据到一个Delphi编写的UDF

数据 [UDF系列之四]:传递和返回数据到一个Delphi编写的UDFWarton译作者: Chris Levesque, Tina Grubbe, Brett Bandy -------------------------------------------------------------------------------- [译者叙]: 前面我已经翻译了几篇关于编写UDF的文章,虽然一些朋友可能也从中得到了一点帮助,但是可能对UDF的认识还存在一些问题.今天,我再翻译两文章,这两篇文章

C语言函数说明与返回值

在学习C语言函数以前,我们需要了解什么是模块化程序设计方法.人们在求解一个复杂问题时,通常采用的是逐步分解.分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解.程序员在设计一个复杂的应用程序时,往往也是把整个程序划分为若干功能较为单一的程序模块,然后分别予以实现,最后再把所有的程序模块像搭积木一样装配起来,这种在程序设计中分而治之的策略,被称为模块化程序设计方法.在C语言中,函数是程序的基本组成单位,因此可以很方便地用函数作为程序模块来实现C语言程序.利用函数,不仅