北邮《面向对象程序设计实践(C++)》课程基础实验

1、C++基础知识实验

编写C++程序完成“矩阵”以下功能:
(1) 假定矩阵大小为4×5(整型);
(2) 矩阵空间采用new动态申请,保存在指针中;
(3) 定义矩阵初始化函数,可以从cin中输入矩阵元素;
(4) 定义矩阵输出函数,将矩阵格式化输出到cout;
(5) 定义矩阵相加的函数,实现两个矩阵相加的功能,结果保存在另一个矩阵中;
(6) 定义矩阵相减的函数,实现两个矩阵相减的功能,结果保存在另一个矩阵中;
(7) 动态申请三个矩阵:A1、A2、A3;
(8) 初始化A1、A2;
(9) 计算并输出A3 = A1加A2,A3 = A1减A2;
(10) 释放矩阵空间。

对指针地址进行改变时,要传引用(init和delete);其他只改变值的时候可以不需要&

运行结果如图:

#include<iostream>
using namespace std;

#define ROW 4
#define COL 5
//初始化矩阵
void initMatrix(int**& A1, int**& A2, int**& A3);
//实现两个矩阵相加
void addMatrix(int** A1, int** A2, int** A3);
//实现两个矩阵相减
void subMatrix(int** A1, int** A2, int** A3);
//输出矩阵
void outputMatrix(int** A);
//释放矩阵空间
void deleteMatrix(int**& A);


int main()
{
   
	int** A1, ** A2, ** A3;
	initMatrix(A1, A2, A3);

	addMatrix(A1, A2, A3);
	outputMatrix(A3);

	subMatrix(A1, A2, A3);
	outputMatrix(A3);

	deleteMatrix(A1);
	deleteMatrix(A2);
	deleteMatrix(A3);
	return 0;
}

void initMatrix(int**& A1, int**& A2, int**& A3)
{
   
	//开辟空间
	A1 = new int* [ROW];
	A2 = new int* [ROW];
	A3 = new int* [ROW];
	for (int i = 0; i < ROW; i++)
	{
   
		A1[i] = new int[COL];
		A2[i] = new int[COL];
		A3[i] = new int[COL];
	}
	cout << "请输入矩阵A1:" << endl;
	for (int i = 0; i < ROW; i++)
		for (int j = 0; j < COL; j++)
			cin >> A1[i][j];
	cout << "请输入矩阵A2:" << endl;
	for (int i = 0; i < ROW; i++)
		for (int j = 0; j < COL; j++)
			cin >> A2[i][j];
}

void addMatrix(int** A1, int** A2, int** A3)
{
   
	for (int i = 0; i<ROW;i++)
		for (int j = 0; j < COL; j++)
		{
   
			A3[i][j] = A1[i][j] + A2[i][j];
		}
}

void subMatrix(int** A1, int** A2, int** A3)
{
   
	for (int i = 0; i < ROW; i++)
		for (int j = 0; j < COL; j++)
		{
   
			A3[i][j] = A1[i][j] - A2[i][j];
		}
}

void outputMatrix(int** A)
{
   
	cout << "输出矩阵A3:" << endl;
	for (int i = 0; i < ROW; i++)
	{
   
		for (int j = 0; j < ROW; j++)
			cout << A[i][j] << " ";
		cout << endl;
	}
}

void deleteMatrix(int**& A)
{
   
	for (int i = 0; i < ROW; i++)
	{
   
		delete[]A[i];
	}
	delete[]A;
}

2、类与对象实验

2.1编写C++程序完成“圆形”以下功能:

(1) 定义一个Point类,其属性包括点的坐标,提供计算两点之间距离的方法;
(要求当用户不输入坐标数据时,能够默认为坐标原点(0,0))
(2) 定义一个圆形类,其属性包括圆心和半径;
(3) 创建两个圆形对象,提示用户输入圆心坐标和半径,判断两个圆是否相交,并输出结果;
(4) 观察圆形对象以及Point类成员的构造函数与析构函数的调用。
(提示及要求:1,可通过在构造与析构函数中加入输出提示信息的方式观察相关调用;可以使用system(“pause”)进行程序的暂停;2,能够理解并说明每一次构造与析构函数调用是哪个对象的调用,并观察和解释相关调用顺序及其原因)

1.类内声明,类外初始化
2.类模块输出要有using namespace std;
3.构造的顺序是 :先调用对象成员的构造,再调用本类构造
4.!!!注意圆的五种特殊情况(外切、内切、相离、相交、内含)!!!

运行结果如图:

结论:

  • 当类中成员是其他类对象时,我们称该成员为 对象成员
  • 构造的顺序是 :先调用对象成员的构造,再调用本类构造
  • 析构顺序与构造相反
//Point.h
class Point
{
   
public:
	int x, y;
	double Distance(int x1, int y1, int x2, int y2);
	Point();
	Point(int a, int b);
	~Point();
};

//Point.cpp
#include<iostream>
#
  • 23
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值