C++基础 题目练习(均调试成功)

来源:互联网 发布:99.9%软件 编辑:程序博客网 时间:2024/06/05 18:16

l类和对象

第一题
/*
题目:建立一个类Prime,用来判断某整数是否为素数
时间:2017/11/23

*/

include

using namespace std;

class Prime{
private:
int n;//存放某个整数

public:
//声明各函数
void set(int _n);//将数据成员n的值设置为参数_n的值。
int IsPrime();//判断数据成员n是否为素数,是素数则返回1,否则返回0。
void print();/* 如果n为素数(通过成员函数IsPrime判断),则输出”n is a prime number.”,否则输出”n is not a prime number.”。*/
};
//定义各函数
void Prime::set(int _n){ n = _n; }
int Prime::IsPrime()
{
int i;
for (i = 2; i <= (n - 1); i++)
{
if (n % i == 0)
{
return 0;
break;
}
}
return 1;
}
void Prime::print()
{
int flag = IsPrime();
if (flag == 1)
cout << n << ” is a primer number.” << endl;
else
cout << n << ” is not a primer number.” << endl;
}

int main()
{
Prime p;

p.set(7);p.print();p.set(9);p.print();system("pause");return 0;

}

第二题
/*
题目:求正数a的平方根的迭代公式为:xn+1=(xn+a/xn)/2。
时间:2017_11_23

*/

include

include

include

using namespace std;

define N 10

class ARRAY{
private:
float data[N];
float max;
float min;
float average;
public:
void init(float a[N]);//初始化数组data。
void process();//将数组data中的最大值、最小值和平均值分别存入max、min、average中
void print();
};

void ARRAY::init(float a[N])//传地址过来???可是这个的意思不是传值过来吗???
{
int i;
for (i = 0; i < N; i++)
data[i] = a[i];
}

/* 求 max min average*/
void ARRAY::process()
{
float max_temp = -1.0, min_temp = 1.0,sum_temp = 0;
int j;
for (j = 0; j < N; j++)
{
if (data[j] > max_temp)
max_temp = data[j];
if (data[j] < min_temp)
min_temp = data[j];
sum_temp = data[j] + sum_temp;
}
max = max_temp;
min = min_temp;
average = sum_temp / N;
}

void ARRAY::print()
{
cout << “max = ” << max << “\n” << “min = ” << min << “\n” << “average = ” << average<< “\n” << endl;
}

int main()
{
int i;
float a[N] = {3, 4, 5, 2, 1, 10, 5.5, 7.5, 8, 9};
/*
cout << “input 10 numbers :” << endl;
for (i = 0; i < 10; i++)
{
cin >> m;
a[i] = m;
}
*/

ARRAY arr;arr.init(a);arr.process();arr.print();system("pause");return 0;

}

第四题
/*
题目:建立一个矩阵类Matrix,存储一个4*4的矩阵并能在矩阵中查找某值最小的数。
时间:2017_11_23

*/

II类和继承

include

using namespace std;

class Matrix{
private:
int m_p[4][4];//存储一个4*4的矩阵的值
int m_n;//矩阵的行数
int m_x;//存储根据查找要求在矩阵中要查找到的某数
int m_row;//存储该数所在的行值
int m_col;//存储该数所在的列值
public:

Matrix(int n, int x, int row, int col);//构造函数:初始化n的值为4,x、row、col为0void input(int a[][4]);//将一个矩阵赋给该对象中的数组void find();//在该对象存储的矩阵中查找值最小的数,保存该数及该数所在的行、列值到x、row、col中void print();//按行输出矩阵的值

};

Matrix::Matrix(int n, int x, int row, int col)
{
m_n = n;
m_x = x;
m_row = row;
m_col = col;
}

void Matrix::input(int a[][4])
{
int i, j;
int m;
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
{

        m_p[i][j] = a[i][j];    }

}

void Matrix::find()
{
int i, j;
int min_temp = m_p[0][0];
for (i = 0; i < 4; i++)
for (j = 0; j < 4; j++)
{
if (m_p[i][j] < min_temp)
{
min_temp = m_p[i][j];
m_row = i+1;
m_col = j+1;
}
}
m_x = min_temp;
cout << “数组元素中 min = ” << m_x << ” 共有 ” << m_n << “行” << endl;
cout << “最小元素在第 ” << m_row << “行,第 ” << m_col << “列\n” << endl;
}

void Matrix::print()
{
int i, j, count = 0;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
cout << m_p[i][j] << endl;
count++;
}
if (count % 4 == 0)
cout << “\n” << endl;
}
}

int main()
{
int i, j;
int a[4][4];
cout << “please input 16 numbers:” << endl;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
cin >> a[i][j];
}

Matrix mat(4,0,0,0);mat.input(a);mat.find();mat.print();system("pause");return 0;

}

第一题:
/*
题目:建立一个形状类Shape作为基类,派生出圆类Circle和矩形类Rectangle,求出面积并获取相关信息
时间:2017_11_25

*/

include

using namespace std;

class Shape{
public:
Shape(double x, double y){ m_x = x; m_y = y; }
double GetArea()
{
if (m_x == m_y)
return (3.14 * m_x * m_y);
else
return (m_x * m_y);

}

protected:
double m_x, m_y;/*对于不同的形状,m_x和m_y表示不同的含义
如对于圆,x和y均表示圆的半径而对于矩形,x表示矩形的长,y表示矩形的宽
访问权限定义为保护类型是为了能被继承下去,以便派生类能直接访问x和y
*/
};

class Circle:public Shape{
public:
Circle(double r) :Shape(r, r){};
//double GetArea()//实例对象的时候直接使调用基类的//求圆的面积
double GetRadius(){ return m_x; }//获取圆的半径
};

class Rectangle :public Shape{
public:
Rectangle(double l, double w) :Shape(l, w){};//构造函数,并用l和w构造基类的m_x和m_y
//double GetArea()//实例对象的时候直接使调用基类的//求矩形的面积
double GetLength(){ return m_x; }//获取矩形的长
double GetWidth() { return m_y; }//获取矩形的宽
};

int main()
{
Circle cir(1.0);
cout << “The area of Circle is ” << cir.GetArea() << endl;
cout << “The Radius(半径) of circle is ” << cir.GetRadius() << “\n” << endl;

Rectangle rec(3.0, 4.0);cout << "The area   of Rectangle    is   " << rec.GetArea() << endl;cout << "The Length of rectangle    is   " << rec.GetLength() << endl;cout << "The Width  of rectangle    is   " << rec.GetWidth() << endl;system("pause");return 0;

}

第二题:
/*
题目:对一个5位数的任意整数,求出其降序数。例如,整数是82319,则其降序数是98321。
时间:2017_11_25

*/

include

using namespace std;

class DescendNUM{
public:
DescendNUM(int x);//构造函数,用参数x初始化n
void decompose();//将n的各位数分解到a数组
void dsort();//将a数组排成降序
void show();// 显示元素及其降序数
private:
int n;//存放5位数的整数
int a[5];//存放其元素的降序排列值
};
DescendNUM::DescendNUM(int x){ n = x; }
void DescendNUM::decompose(){
a[0] = n / 10000;//万
a[1] = n % 10000 / 1000;//千
a[2] = n % 10000 % 1000 / 100;//百
a[3] = n % 10000 % 1000 % 100 / 10;//十
a[4] = n % 10000 % 1000 % 100 % 10;//个
}
void DescendNUM::dsort()
{
int i,j,temp = 0;
/* 优化后的冒泡排序 以一维数组位载体 */
for (i = 0; i < 5; i++)
{
for (j = i + 1; j < 5; j++)
{
if (a[j] > a[i])
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
void DescendNUM::show()
{
int i;
cout << “五位整数每一位的降序如下: ” << “\n” << endl;
for (i = 0; i < 5; i++)
{
cout << a[i] << endl;
}
}

int main()
{
DescendNUM num(82319);
num.decompose();
num.dsort();
num.show();

system("pause");return 0;

}

第三题:
/*
题目:编程将一个二维数组元素变换为逆向存放,即按元素在内存中的物理排列位置,
第一个元素变成倒数第一个元素,第二个元素变成倒数第二个元素,依此类推。
时间:2017_11_25

*/

include

include

include

define M 3

define N 4

class REVARR{
public:
//构造函数,用参数x初始化n
REVARR(int x[M][N])
{
int i, j;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
a[i][j] = x[i][j];
}

//处理二维数组void reverse(){    int i, j, temp[M][N] = {0};    //倒序遍历存到临时数组    for (i = M-1; i >= 0; i--)        for (j = N - 1; j >= 0; j--)            temp[abs(i - (M - 1))][abs(j - (N - 1))] = a[i][j];    //再正序遍历 交换     for (i = 0; i < M; i++)        for (j = 0; j < N; j++)            a[i][j] = temp[i][j];}//将正序遍历后得到的数组 正序输出 最终显示的是逆向存放后的二维数组void print(){    int i, j;    //正序输出 处理后的数组    cout << "处理后的数组: " << endl;    for (i = 0; i < M; i++)    {        for (j = 0; j < N; j++)            printf("%-2d ", a[i][j]);        if (j == N)            printf("\n");    }}

private:
int a[M][N];//初始化时存放原始二维数组,最终存放逆向存放后的二维数组
};

int main()
{
int i, j;
int data[M][N];
//正序输出 原始数组
cout << “请输入” << M << “行” << N << “列” << “的数组:” << endl;
for (i = 0; i < M; i++)
for (j = 0; j < N; j++)
cin >> data[i][j];
cout << “\n” << “原始素组如下:” << endl;
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
printf(“%-2d “, data[i][j]);
if (j == N)
printf(“\n”);
}
REVARR arr(data);
arr.reverse();
arr.print();

system("pause");return 0;

}

原创粉丝点击