C++实验报告-2
**实验题目4 【对象指针作为函数的参数】建立一个对象数组,内放5个学生数据(学号(字符串类型)、成绩(整型)),设计一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。
程序源代码
#include<iostream>
#include<cstring>
using namespace std;
class Student
{
public:
Student() {};
Student(string n, int a) :num(n), score(a) {};
void display();
string max(Student *t[5]);
private:
string num;
int score;
};
string Student::max(Student* t[5])
{
int i, n,a;
string b;
for (i = 0; i < 5; i++)
{
for (n = i + 1; n < 5; n++)
{
if (t[i]->score> t[n]->score)
{
a = t[n]->score;
b = t[n]->num;
t[n]->score= t[i]->score;
t[n]->num = t[i]->num;
t[i]->num = b;
t[i]->score= a;
}
}
}
return t[4]->num;
}
void Student::display()
{
cout << num << ",";
cout << score << endl;
}
int main()
{
int i = 0;
Student t;
Student stu1[5] =
{
Student("dsj001",89),
Student("dsj002",86),
Student("dsj003",68),
Student("dsj004",75),
Student("dsj005",69)
};
Student* p[5];
for (int n = 0; n < 5; n++)
{
p[i] = &stu1[n];
i++;
}
t.max(p);
cout << t.max(p) << endl;
return 0;
}
**实验题目5 【构造函数】有如下程序,按要求增加构造函数。 #include #include using namespace std; class Triangle { public: **double perimeter();//**计算三角形的周长 **double area();//**计算并返回三角形的面积 void showMessage(); private: **double a,b,c; //**三边为私有成员数据 }; double Triangle::perimeter() { return (a + b + c); } double Triangle::area() { double s = (a + b + c) / 2; return sqrt(s * (s - a) * (s - b) * (s - c)); } void Triangle::showMessage() { **cout<<"**三角形的三边长分别为:"<<a<<’ ‘<<b<<’ '<<c<<endl; **cout<<"**该三角形的周长为"<<perimeter()<<",面积为"<<area()<<endl<<endl; } |
---|
(1)使用带参数构造函数,即Triangle(double x, double y, double z),三边长在调用时由实参直接给出。需要的测试函数是: int main(){ **Triangle Tri(7,8,9); //**定义三角形类的一个实例(对象) Tri.showMessage(); return 0;} |
带参数构造函数:
#include<iostream>
#include<Cmath>
using namespace std;
class Triangle
{
public:
Triangle(double n, double m, double t) :a(n), b(m), c(t) {};
double perimeter();//计算三角形的周长
double area();//计算并返回三角形的面积
void showMessage();
private:
double a, b, c; //三边为私有成员数据
};
double Triangle::perimeter()
{
return (a + b + c);
}
double Triangle::area()
{
double s = (a + b + c) / 2;
return sqrt(s * (s - a) * (s - b) * (s - c));
}
void Triangle::showMessage()
{
cout << "三角形的三边长分别为:" << a << ' ' << b << ' ' << c << endl;
cout << "该三角形的周长为" << perimeter() << ",面积为" << area() << endl << endl;
}
int main() {
Triangle Tri(7, 8, 9); //定义三角形类的一个实例(对象)
Tri.showMessage();
return 0;
}
(2)设计默认构造函数,即不指定参数时,默认各边长为1。需要的测试函数是: int main() { **Triangle Tri; //**调用默认构造函数,不指定参数时,默认各边长为1; Tri.showMessage(); return 0;}
默认构造函数:
Triangle(double n= 1, double m = 1, double t = 1)
{
a = n;
b = m;
c = t;
};
(3)使用有默认参数的构造函数,不给定实参时,默认边长为1。需要的测试函数是:
int main(){
**Triangle Tri1; //**定义边长为1 1 1的三角形类实例
Tri1.showMessage();
**Triangle Tri2(1.5);//**定义边长为1.5 1 1的三角形类实例
Tri2.showMessage();
**Triangle Tri3(1.5,1.5);//**定义边长为1.5 1.5 1的三角形类实例
Tri3.showMessage();
**Triangle Tri4(7,8,9); //**定义边长为7 8 9的三角形类实例
Tri4.showMessage();
return 0;}
有默认参数的构造函数:
Triangle(double n= 1, double m = 1, double t = 1)
{
a = n;
b = m;
c = t;
};
(4)在构造函数中使用参数初始化表对数据成员初始化,这是一种更加提倡的写法。需要的测试函数是:
int main(){
**Triangle Tri(7,8,9); //**定义三角形类的一个实例(对象)
Tri.showMessage();
return 0;
}
使用参数初始化表对数据成员初始化的构造函数:
#include<iostream>
#include<Cmath>
using namespace std;
class Triangle
{
public:
Triangle(double n = 1, double m = 1, double t = 1) :a(n), b(m), c(t) {};
double perimeter();//计算三角形的周长
double area();//计算并返回三角形的面积
void showMessage();
private:
double a, b, c; //三边为私有成员数据
};
double Triangle::perimeter()
{
return (a + b + c);
}
double Triangle::area()
{
double s = (a + b + c) / 2;
return sqrt(s * (s - a) * (s - b) * (s - c));
}
void Triangle::showMessage()
{
cout << "三角形的三边长分别为:" << a << ' ' << b << ' ' << c << endl;
cout << "该三角形的周长为" << perimeter() << ",面积为" << area() << endl << endl;
}
int main()
{
Triangle Tri(7, 8, 9); //定义三角形类的一个实例(对象)
Tri.showMessage();
return 0;
}
**实验题目6 【静态数据成员和静态成员函数】商店销售某一商品,商店每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,对一次购10件以上者,还可以享受98折优惠。现已知3个销货员一次销售情况为 销货员号(num) 销货件数(quantity) 销货单价(price) 101 5 23.5 102 12 24.56 103 100 21.5 请编写程序,计算出此商品的总销售款sum以及每件商品的平均售价。要求用静态数据成员和静态成员函数实现。
程序源代码:
#include <iostream>
#include<cstring>
using namespace std;
class Goods
{
public:
Goods(int a,int b,double c) :num(a), quantity(b), price(c) {};
static void every();
static double fun(Goods p[3]);
private:
double price;
int num;
int quantity;
double sum;
static double total;
static double array;
};
double Goods::total;
double Goods::array;
void Goods::every()
{
array = total / 135;
cout << "每件商品的均价为:" << array << "元"<<endl;
}
double Goods::fun(Goods p[3])
{
for (int i = 0; i < 3; i++)
{
p[i].sum = p[i].quantity * p[i].price;
if (p[i].sum > 10)
p[i].sum=p[i].sum * 0.98;
cout << "货号" << p[i].num << "的销售总价为:" << p[i].sum << "元"<<endl;
}
total = p[0].sum + p[1].sum + p[2].sum;
return total;
}
int main()
{
Goods seller[3] =
{
Goods(101,5,23.5),
Goods(102, 12, 24.56),
Goods(103,100,21.5)
};
Goods::fun(seller);
Goods::every();
return 0;
}