用类实现:计算复数的加和减运算。
下面给出此题用结构类型实现的程序,现要求仿照着此程序,再用类完成。
#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 ~ %