码迷,mamicode.com
首页 > 编程语言 > 详细

《复数-结构体练习》题解(C++)

时间:2020-03-20 14:19:44      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:链接   http   思路   调用   names   问题:   数据   空格   不能   

题目来源:

WZOI

链接:https://wzoi.cc/s/1/2330

解题思路:

由于本人是真的小白,这题之前只接触过几次结构体定义class,更别提什么重载运算符了。

我只能讲讲自己的见解,不一定完全准确,有错误欢迎指出,仅供参考

1.定义一个【复数类comp

2.在comp中,定义【初始化函数add】【输出函数Print】【重载运算符"+"】,每个comp变量有【实部a(int)】与【虚部b(int)

3.输入m,重复m次输入m*2组数据【xs】【ys】,分别表示待相加的实部与虚部

4.重复m次进行相加,输出

定义:

class comp{//定义comp类
    
    public://公共部分,即每个comp类都通用的
        void add(int x,int y){
            this->a=x;
            this->b=y;
        }
/*
这个函数应该这样用:A.add(x,y);
其中A为comp类变量
this所指的是A,那么this->a就是A的a,以此类推
*/
        void Print(){
            cout<<this->a<<(this->b>0?+:-)<<abs(this->b)<<"i\n";
        }
/*
三目运算符:当this->b大于0时,取‘+‘,否则取‘-‘
可以直接当一个量用,而且不用大段的if
然后输出this->b的绝对值(abs函数,调用cmath库)
关于为什么要绝对值的问题:
因为三目运算符的负号如果换成空字符‘‘就会报错,‘\0‘会多个空格
所以不能直接输出负数
*/
        comp operator+(comp& n){
            comp m;
            m.a = this->a+n.a;
            m.b = this->b+n.b;
            return m;
        }
/*
重载运算符+:
跟函数有些类似不过更加简单
在当中新建一个comp类的m,
然后计算(this指加号前的comp变量,n指加号后的comp变量),
最后返回结果,就是一个comp类的m。
*/
    private:
        int a;
        int b;
};

代码实现:

 1 #include <iostream>
 2 #include <cmath>
 3 using namespace std;
 4 class comp{
 5     
 6     public:
 7         void add(int x,int y){
 8             this->a=x;
 9             this->b=y;
10         }
11         void Print(){
12             cout<<this->a<<(this->b>0?+:-)<<abs(this->b)<<"i\n";
13         }
14         comp operator+(comp& n){
15             comp m;
16             m.a = this->a+n.a;
17             m.b = this->b+n.b;
18             return m;
19         }
20     private:
21         int a;
22         int b;
23 };
24 int main(){
25     int m,xs[255]={0},ys[255]={0};
26     cin>>m;
27     for(int i=0;i<m;i++)
28         cin>>xs[i*2]>>ys[i*2]>>xs[i*2+1]>>ys[i*2+1];
29 //输入xs,ys,一次两组
30     comp a1,a2,a3;
31     for(int i=0;i<m;i++){
32         a1.add(0,0);
33         a2.add(0,0);
34         a3.add(0,0);
35 /*
36 初始化a1,a2,a3,可以理解为上一个人用了水杯喝水,
37 然后把水杯洗干净再用
38 */
39         a1.add(xs[i*2],ys[i*2]);
40         a2.add(xs[i*2+1],ys[i*2+1]);
41         a3=a1+a2;//运算
42         a3.Print();//输出
43     }
44 }

参考内容:

关于重载运算符:https://www.runoob.com/cplusplus/cpp-overloading.html(RUNOOB)

《复数-结构体练习》题解(C++)

标签:链接   http   思路   调用   names   问题:   数据   空格   不能   

原文地址:https://www.cnblogs.com/wingtown/p/wzoi_P2330_key_CPP.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!