大一下实验总结(二)

用类实现:计算复数的加和减运算。

下面给出此题用结构类型实现的程序,现要求仿照着此程序,再用类完成。

#include <iostream>
#include <iomanip>
using namespace std;
struct complex
{
  double re, im;
};
int main()
{
	complex a,b,c;  char oper;
	cout << "输入复数a的实部和虚部: ";
	cin >> a.re >> a.im;
	cout << "输入复数b的实部和虚部:";
	cin >> b.re >> b.im;
	cout << "输入运算符: ";
	cin >> oper;
switch ( oper )
   {     case '+':	c.re=a.re+b.re; c.im=a.im+b.im;
				break;
	      case '-':	c.re=a.re-b.re; c.im=a.im-b.im;
				break;
		
	      default:	       cout << "input error!" << endl;
				return 0;
}
cout << "c=" << c.re;
cout << setiosflags( ios::showpos );//显示正负符号
cout << c.im << "i" << endl;
return 0;
}

分析:使用类,内含输入数据、返回数据等成员函数。可以在成员函数中通过调用类内函数完成加减法的判断,简化主函数。注:为了让代码可读性更高,更利于封转等可以将成员函数在类内声明,在类外定义。

参考代码

#include <iostream>
#include  <iomanip>

using namespace std;

class A
{
private:
       double re,im;
public:

  void get()
  {
    cin>>re>>im;
  }
  double rget()
  {
      return re;
  }
  double iget()
  {
      return im;
  }
  void rchange(double a,double b,char c)
  {
      switch(c)
      {
          case '+': re=(a+b);break;
          case '-': re=(a-b);break;        
      }
  }
  void ichange(double a,double b,char c)
  {
      switch(c)
      {
          case '+': im=(a+b);break;
          case '-': im=(a-b);break;
      }
  }

};
int main()
{
  A a,b,c;
  char oper;
  cout <<"输入复数a的实部和虚部: ";
  a.get();
  cout << "输入复数b的实部和虚部:";
  b.get();
  cout<<"请输入运算符:";
  cin>>oper;
  if(oper!='+'&&oper!='-')
  {
    cout << "input error!" << endl;
    return 0;
  }
    
    c.rchange(a.rget(),b.rget(),oper);
    c.ichange(a.iget(),b.iget(),oper);
    cout << "c=" << c.rget();
    cout << setiosflags( ios::showpos );
    cout << c.iget() << "i" << endl;
  return 0;

}

运行结果

Last login: Fri Mar 11 23:53:50 on ttys000

输入复数a的实部和虚部: 1 3
输入复数b的实部和虚部:2 3
请输入运算符:+
c=3+6i
i@HUAWEI-MateBook-X-Pro ~ % 

******************************************

定义一个dog类,包含私有的age、weight属性,以及对这些属性的操作方法。实现并测试这个类。

参考代码

#include <iostream>

using namespace std;

class Dog
{
private:
    double age,weight;
public:
    void input()
    {
        cin>>age>>weight;
    }
    double aget()
    {
        return age;
    }
    double wget()
    {
        return weight;
    }
    double achange(double a)
    {
        age=a;
    }
    double wchange(double b)
    {
        weight=b;
    }
};
int main()
{
    Dog a;
    double m,n;
    cout<<"请输入年龄体重:"<<endl;
    a.input();
    cout<<"年龄为:"<<a.aget()<<"\n"<<"体重为:"<<a.wget()<<endl;
    cout<<"更改年龄:";
    cin>>m;
    a.achange(m);
    cout<<endl<<"更改体重:";
    cin>>n;
    a.wchange(n);
    cout<<endl<<"年龄:"<<a.aget()<<endl<<"体重:"<<a.wget()<<endl;
    return 0;
}

运行结果

Last login: Sat Mar 12 09:46:37 on ttys000

请输入年龄体重:
18
56.7
年龄为:18
体重为:56.7
更改年龄:20

更改体重:60

年龄:20
体重:60
i@HUAWEI-MateBook-X-Pro ~ % 

*******************************************************************

定义计数器类Counter。要求具有以下成员:计数器值;可进行增值和减值记数(每次增1或减1即可);可提供记数值。(要求使用构造函数对数据成员初始化)

分析:类内包含控制增值减值的及输出的成员函数。

参考代码

#include <iostream>

using namespace std;

class Counter
{
private:
   int sum;
public:
   Counter(int ins);
   void increase();
   void decrease();
   int output();
};

Counter::Counter(int ins)
{
    sum=ins;
}
void Counter::increase()
{
    sum++;
}
void Counter::decrease()
{
    sum--;
}
int Counter::output()
{
    return sum;
}

int main()
{
    int a;
    cout<<"请输入计数器初值:";
    cin>>a;
    Counter b(a);
    b.increase();
    b.decrease();
    b.increase();
    b.increase();
    cout<<"当前的值为:"<<b.output()<<endl;

    return 0;

}

输出结果

Last login: Fri Mar 11 20:02:27 on ttys000

请输入计数器初值:2
当前的值为:4
i@HUAWEI-MateBook-X-Pro ~ % 

***************************************************************

定义一个阶乘类Cfactorial实现阶乘的计算和显示。 (要求使用构造函数对数据成员初始化)

分析:可利用简单的递归调用实现计算。

代码

#include <iostream>

using namespace std;
class S
{
private:
    int num;
public:

   S(int a);
   int D(int b);
};
S::S(int a)
    {
        num=a;
    }
int S::D(int b)
    {
        if(b==0)
            return 1;
        else
            return D(b-1)*b;
    }
int main()
{
    int m;
    cin>>m;
    S n(m);
    cout<<"阶乘为:";
    cout<<n.D(m)<<endl;

}

 输出结果

Last login: Sat Mar 12 09:53:12 on ttys000

5
阶乘为:120
i@HUAWEI-MateBook-X-Pro ~ % 

**************************************************************

写两个重载函数sort,分别实现对int和double 数组进行排序。两个函数分别采用冒泡排序和选择排序。在main函数中调用这两个函数。

分析:需注意冒泡排序与选择排序的代码是否正确,可改进排序方法提高代码效率。

#include <iostream>
#include <cmath>

using namespace std;

void sort(int a[5],int n)
{
    int flag=0;
    for(int i=0;i<n-1;i++)
    {
        flag=0;
           for(int j=0;j<n-j-1;j++)
           {
              if(a[j]>a[j+1])
               {
                 swap(a[j],a[j+1]);
                 flag=1;
               }
           }  
        break;
    }
    for(int i=0;i<n;i++)
    cout<<a[i]<<" ";
    cout<<endl;
}

void sort(double b[5],int n)
{
    int m;
    for(int i=0;i<n-1;i++)
    {
        m=i;
        for(int j=i+1;j<n;j++)
        {
            if(b[j]>b[m])
               m=j;
            if(m!=j)
            swap(b[j],b[m]);
        }
    }
    for(int i=0;i<n;i++)
    cout<<b[i]<<" ";
    cout<<endl;
}
int main()
{
    int a[5]={2,5,3,7,6};
    double b[5]={2.4,4.6,6.5,1.7,3.2};
    sort(a,5);
    sort(b,5);
    return 0;
}

 运行结果

Last login: Fri Mar 11 20:37:09 on ttys000

2 3 5 7 6 
2.4 1.7 3.2 4.6 6.5 
i@HUAWEI-MateBook-X-Pro ~ % 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值