C++实验报告-2

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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值