2020-12-25

说明执行下列语句后,分别执行的什么操作,会输出什么?
Fraction a;
Fraction b(a);
Fraction c = Fraction(3, 2); Fraction d1(2, 3), d2(4, 5); Fraction e1 = divide1(d1, d2); Fraction e2 = divide2(d1, d2);
在上述类的定义基础上,完善下列操作:
1)显示定义析构函数;
2)获取分数的分子;
3)获取分数的分母;
4)实现分数的约分;
5)实现对两个分数对象进行通分;
6)使用operator/操作符重载实现两个分数的除法运算。

#include <iostream>
using namespace std;
class Fraction{
	//数据成员,访问控制属性默认是私有
	int m_numerator = 0; //  分子默认为0; C++11
	int m_denominator = 1; //分母默认为1;
	int gcd(int x, int y);
	public://公有成员函数
		int numerator()const { return m_numerator; }
		int denominator()const { return m_denominator; }
		int getnumerator()const { return m_numerator; }
		int getdenominator()const { return m_denominator; }
		double value()const;

	Fraction(int above = 0, int below = 1) : m_numerator(above), m_denominator(below) {
	 cout << "Constructor called" << endl;//构造函数
}
    Fraction(const Fraction& rhs) : m_numerator(rhs.m_numerator),    m_denominator(rhs.m_denominator) {
     cout << "Copy constructor called" << endl;//复制构造函数,复制优化
}
void makeCommon(Fraction& a, Fraction& b)

;~Faction() {
	 cout << "Destory"<<endl;
 }
};
//声明,定义makeCommon函数
void makeCommom(Fraction& a, Fraction& b) {
	a.m_numerator *= b.m_denominator;
	b.m_numerator *= a.m_denominator;
	b.m_denominator = a.m_denominator *= b.m_denominator;
}
//定义gcd 函数
int Fraction::gcd(int x, int y) {
	if (y != 0)
		gcd(y, x % y);
	else
		return x;
}
//定义value函数
double Fraction::value()const {
	return static_cast<double>(m_numerator) / m_denominator;
}

//定义divide函数
Fraction divide1(const Fraction& divident, const Fraction& divisor) {
	return Fraction(divident.getnumerator() * divisor.getdenominator(), 
		divident.getdenominator() * divisor.getnumerator());
}//两分数相除;
Fraction divide2(Fraction divident, Fraction divisor) {
	Fraction result(divident.getnumerator() * divisor.getdenominator(), 
		            divident.getdenominator() * divisor.getnumerator());
	return result;
}//两分数相除;
//声明定义重载函数,实现两个分数的除法运算
Fraction operator/(const Fraction& left, const Fraction& right) {
	Fraction result(left.numerator() *= right.denominator(),
		left.denominator() *= right.numerator());
	return result;

}
int main() {
	Fraction a;    
	Fraction b(a);   
	Fraction c = Fraction(3, 2);     
	Fraction d1(2, 3), d2(4, 5);
	Fraction e1 = divide1(d1, d2);
	Fraction e2 = divide2(d1, d2);
	return 0;
}

题目 2、数组与函数的综合应用
已知:int a[5] = { 19,67,24,11,17 }, b[5] = { 2,3,9,17,59 };
编写程序查找数组中是否存在某个指定元素;将数组a和数组b中的素数不重不漏地合并到一个vector容器c中,然后按照下标访问的方式手动对容器c中的数据,按从小到大顺序重新排序。要求依次实现:
1)编写顺序查找法函数和折半查找法函数,分别在数组a和数组b中查找元素17所在的下标并输出。
2)编写判断素数函数和排序函数,并对容器c中的结果进行输出。

#include <iostream>
#include <vector>
using namespace std;

//定义顺序查找函数
int shunxu(int a[], int high, int key) {
	for (int i = 0; i < high; i++)
		if (a[i] == key)
			cout << i << endl;
		else
			cout << "数组中无此数;" << endl;
	return 0;
}

//定义折半查找函数low,high,middle
int zheban(int a[], int number, int key) {
	int low = 0;
	int middle = 0;
	int high = number - 1;
	//在low<=high的时候才可以查找

	while (low <= high)
	{
		middle = (low + high) / 2;
		if (a[middle] == key)
			cout << middle << endl;
		if (a[middle] < key) 
		{
			low = middle + 1;
			//更改搜素的范围,中间值小于目标值,目标值在中间的下一位到末尾;
		}
		else
		{
			//中间值大于目标值,则目标值在中间的上一位到最前;
			high = middle - 1;
		}
		cout << "无此数:";
	}
	return 0;
} 

//定义判断素数的函数
bool is_sushu(int shuzi) {
	for (int i = 2; i < shuzi; i++)
	{
		if ((shuzi % i) != 0)
		{
			if (i == shuzi - 1)
				return true;
		}
		else
		{
			return false;  
		}
	}
}

//定义新增素数vector容器,并将重复的素数删除

vector <int> xinzeng(int *a,int a_number,int* b,int b_number)
{
	vector <int> add;
	for (int i = 0; i < a_number; i++)
	{
		if (is_sushu(a[i]))
		{
			add.push_back(a[i]);
		}
	}
	
	//将数组a中的素数从尾部输入到vector add中

	for (int i = 0; i < b_number; i++)
	{
		if (is_sushu(b[i]))
		{
			add.push_back(b[i]);
		}
		
		//将数组b中的素数从尾部输入到vector add 中;

		for (int j = 0; j < add.size(); j++)
		{
			if (add[j] == b[i])
			{
				add.pop_back();
			}
			
			//b是从尾部输入的,可以从尾部开始删除与a输入到vector add中的重复的;

		}

	}
	return add;
}
vector<int>change(vector<int>& add)
{
	int high = add.size();
	for (int i = 0; i < high; i++)
	{
		for (int j = 1; j < high; j++)
		{
			if (add[i] > add[j])
			{
				int x = add[i];
				add[i] = add[j];
				add[j] = x;
			}
		}
	}
	return add;
}
int main()
{
	int a[5] = { 19,67,24,11,17 };
	int b[5] = { 2,3,9,17,59 };

	vector<int> add;
	add = xinzeng(a, 5, b, 5);
	//调用新增函数
	add = change(add);
	for (int i = 0; i < add.size(); i++)
	{
		cout << add[i] << endl;
	}
}

题目 3、类的定义与基本操作
1)说明上述程序执行流程和输出结果;
2)在Point类中完善获取点的横坐标、获取点的纵坐标成员函数,并在主函数中测试;
3)通过友元函数实现平面上任意两个点的距离计算辅助函数;
4)在Circle类中完善圆的面积计算与圆的周长计算成员函数,并在主函数中测试;

#include<iostream>
using namespace std;
class Point {
private:
double m_x = 0, m_y = 0;
friend double distance(Point& A, Point& B);//友元函数,声明求距离的函数;

public:
	Point(double x = 0, double y = 0) : m_x(x), m_y(y) {
		cout << "Constructor of Point" << endl;
	}
	Point(const Point& p) :m_x(p.m_x), m_y(p.m_y) {
		cout << "Copy constructor of Point" << endl;
	}
	~Point() {
		cout << "Destructor of Point" << endl;
	}
	double get_x()const { return m_x; }//声明得到横坐标函数
	double get_y()const { return m_y; }//声明获取纵坐标函数	
};
double distance(Point& A, Point& B)
{
	double x1 = A.m_x, y1 = A.m_y;
	double x2 = B.m_x, y2 = B.m_y;
	return sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
}//定义求距离函数

class Circle {
private:
Point m_center; double m_radius = 1.0; 
public:
	Circle(double r = 1, const Point& p = Point()) :m_center(p), m_radius(r) {
		cout << "Constructor of Circle" << endl;
	}
	~Circle() {
		cout << "Destructor of Circle" << endl;
	}
	double S();//声明面积函数
	double L();//声明周长函数
};
double Circle::S()
{
	return m_radius * m_radius * 3.1415;
}//定义面积函数;
double Circle::L()
{
	return 2 * 3.1415 * m_radius;
}//定义周长函数;

int main()
{
	Circle a(2, Point(1, 1)); 
	cout << a.S() << endl;//.访问和调用面积函数
	cout << a.L() << endl;//.访问和调用面积函数
    cout << "end" << endl; 
	Point A(2, 2);
	Point B(1, 1);
	cout << distance(A, B) << endl;	
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值