染血的赞达拉日记:C++习题与解析(引用-02)

来源:百度文库 编辑:偶看新闻 时间:2024/04/28 22:50:29

05.设计一个类Sample,实现两个复数的乘法运算。
解:
Sample类包括复数的实部和虚部,以及实现复数相乘的成员函数mult()和输出复数的成员函数disp()。
本题的程序如下:
#include
class Sample
{
float a; // 实部
float b; // 虚部
public:
Sample(){}
Sample(float x,float y){a=x;b=y;}
void mult(Sample &s) // 对象引用作为参数
{
if(&s==this) // 不能自己相乘
cout<<"自己不能相乘"<else
{
float x=a*s.a-b*s.b;
float y=a*s.b+b*s.a;
a=x;b=y;
}
}
void disp()
{
if(b>0)
cout<else
cout<}
};
void main()
{
Sample s1(2,3),s2(3,4);
cout<<"复数s1:"; s1.disp();
cout<<"复数s2:"; s2.disp();
s1.mult(s2);
cout<<"相乘结果:"; s1.disp();
cout<}
本程序执行结果如下:
复数s1:2+3i
复数s2:3+4i
相乘结果:-6+17i

------------------------------------------------------

06.有若干教师,每个教师只有姓名,一个教师可以指导多名研究生;每名研究生有姓名、研究方向和班号数据,编写一个程序,要求输出每个教师指导的所有研究生的姓名、研究方向和班号数据。
解:
先设计一个学生类student,然后设计一个教师类teacher。teacher类中添加一个student对象数组,存放该教师指导的所有研究生对象,top为当前研究生的指针。这样实现了两个类之间一对多的关系。
本题程序如下:
#include
#include
#define Max 10
class student
{
char name[10]; // 姓名
char search[20]; // 研究方向
char cname[10]; // 班号
public:
student(){}
student(char n[],char s[],char c[])
{
strcpy(name,n);
strcpy(search,s);
strcpy(cname,c);
}
char *getname(){return name;}
char *getsearch(){return search;}
char *getcname(){return cname;}
};
class teacher
{
int top;
char name[10];
student stud[Max]; // 对象数组
public:
teacher(char t[]){top=0;strcpy(name,t);}
void add(student &s) // 对象引用作为参数
{
stud[top]=s; top++;
}
void disp()
{
cout<<"指导教师:"<for(int i=0;i{
cout<<""<<}
}
};
void main()
{
teacher t[]={teacher("李明"),teacher("王华")};
student s1("孙强","数据库","99010");
student s2("陈文","软件工程","99010");
student s3("章锐","计算机网络","00010");
t[0].add(s1);
t[0].add(s2);
t[1].add(s3);
for(int i=0;i<2;i++)
t[i].disp();
}
本程序的执行结果如下:
指导教师:李明
研究生:
孙强(方向:数据库,99010班)
陈文(方向:软件工程,99010班)
指导教师:王华
研究生:
章锐(方向:计算机网络,00010班)