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>
#