C++实验类和对象普通数学题计算.docx
《C++实验类和对象普通数学题计算.docx》由会员分享,可在线阅读,更多相关《C++实验类和对象普通数学题计算.docx(8页珍藏版)》请在冰豆网上搜索。
C++实验类和对象普通数学题计算
实验报告
实验九类和对象
(1)
一、实验目的
1.掌握类的概念、类的定义格式、类与结构的关系、类的成员属性和类的封装性;
2.掌握类对象的定义;
3.理解类的成员的访问控制的含义,公有、私有和保护成员的区别;
4.掌握构造函数和析构函数的含义与作用、定义方式和实现,能够根据要求正确定义和重载构造函数。
能够根据给定的要求定义类并实现类的成员函数。
二、实验内容
1.输入以下程序,并写出程序的输出结果。
定义一个描述三角形的类Tri,具体要求如下:
(1)私有数据成员
doublea,b,c:
三角形的三边。
(2)公有成员函数
Tri(doublex,doubley,doublez):
构造函数,用x,y,z初始化a,b,c,对指定的对象初始化。
doublePeri():
求三角形的周长。
doubleArea():
求三角形的面积。
voidShow():
输出三角形的各种参数(边长、周长、面积)。
(3)在主程序中定义两个三角形对象:
三角形tri1,边长分别为3,4,5,三角形tri2,边长分别为5,6,7,用构造函数初始化这两个对象a,然后输出这两个三角形的各种参数。
将文件命名为。
#include<>
#include<>
classTri
{doublea,b,c;
根据程序要求,完善程序后输入源程序,编译连接,并写出运行结果。
如果某个自然数除了1和它本身外还有其他因子,则这个自然数就是合数(非素数)。
试定义一个类NUM,从3开始向上试探找出n个连续的自然数,且它们都是合数。
当找到第一组连续n个合数后,即停止查找。
具体要求如下:
(1)私有数据成员:
intn:
存放满足条件的连续自然数的个数。
int*p:
根据n的值申请一个动态数组用来存放求出的满足条件的n个自然数。
(2)公有成员函数。
NUM(intn1):
构造函数,用n1初始化n,根据n的值申请动态数组空间,使p指向该动态数组空间。
intyes(intx):
判定x是否为合数。
如果是,返回1,否则返回0。
voidfun():
从3开始向上试探找出n个连续的自然数,且它们都是合数,并依次放入动态数组。
voidprint():
输出满足条件的n个合数。
~NUM():
析构函数,释放动态数组所占用的存储空间。
(3)在主函数中定义一个NUM类的对象num,求出10个连续的合数。
然后通过对象num调用成员函数求出10个连续的合数,并输出计算结果。
将文件命名为。
#include<>
classNUM{
仿照样例程序编写程序
定义一个字符串类STR,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。
例如,若字符串为"cocoon",删除重复出现的字符后,其结果是字符串"con"。
具体要求如下:
(1)私有数据成员:
char*s1:
指向原字符串,存放字符串的空间需动态分配。
char*s2:
指向结果字符串,存放字符串的空间需动态分配。
(2)公有成员函数
STR(char*str):
构造函数,用str初始化s1,动态分配s1和s2指向的空间。
voiddelsame():
删除重复出现的字符。
voidshow():
输出原字符串和结果字符串。
~STR():
析构函数,释放动态分配的存储空间。
(3)在主函数中定义一个STR类的对象test,用字符串"concoon"初始化test,通过调用成员函数完成删除工作,输出删除前后的两个字符串。
代码:
#include
#include
usingnamespacestd;
classSTR
{
private:
char*s1;
char*s2;
public:
STR(char*str):
s1(str)
{
s2=newchar[strlen(str)+1];
}
进阶提高
圆盘找数问题。
定义一个圆盘类Circle,用20个随机数组成一个圆(首尾相接),分别求出连续的四个数之和为最大的四个数及其和值)以及连续的四个数之和为最小的四个数(输出整个数列、最大、最小的四个数及其和值。
)
具体要求如下:
(1)私有数据成员
intnum[20]:
存放生成的20个随机数
intMax[4]:
存放20个随机数中连续4个数之和中最大的那4个连续的数
intMin[4]:
存放20个随机数中连续4个数之和中最小的那4个连续的数
intsum_max:
存放20个随机数中连续4个数之和中最大的和
intsum_min:
存放20个随机数中连续4个数之和中最小的和
(2)公有成员函数:
Circle():
构造函数,用20个随机数初始化圆盘中的num数组
voidFind_Max():
圆盘类的主要操作,寻找符合条件(和为最或最小)的连续的4个数
voidShow(void):
输出圆盘类的整个数列,最大、最小的四个数及其和值
(3)在主函数中定义一个Circle类的对象cir,用20个随机数初始化该对象cir,通过调用成员函数完成题目要求的任务。
将文件命名为。
要求:
代码:
#include
#include
usingnamespacestd;
classCircle
{
public:
Circle();
//圆盘类的主要操作,寻找符合条件(和为最或最小)的连续的4个数
voidFind_Max();
voidFind_Min();
voidShow(void);//输出圆盘类的整个数列,最大、最小的四个数及其和值
private:
intnum[20];//:
存放生成的20个随机数
intMax[4];//:
存放20个随机数中连续4个数之和中最大的那4个连续的数
intMin[4];//:
存放20个随机数中连续4个数之和中最小的那4个连续的数
intsum_max;//:
存放20个随机数中连续4个数之和中最大的和
intsum_min;//:
存放20个随机数中连续4个数之和中最小的和
};
Circle:
:
Circle()
{
srand(time(0));
for(inti(0);i<20;i++)
num[i]=rand();
}
voidCircle:
:
Show(void)
{
inti;
cout<<"圆盘的所有数为:
"<for(i=0;i<20;i++)
cout<cout<cout<<"圆盘的最大连续4个数为:
"<for(i=0;i<4;i++)
cout<cout<cout<<"其和值为:
"<cout<<"圆盘的最小连续4个数为:
"<for(i=0;i<4;i++)
cout<cout<cout<<"其和值为:
"<}
voidCircle:
:
Find_Max()
{
intmax_index=0;
for(inti(0);i<20;i++)
{
intt=0;
for(intk=0;k<4;k++)//连续4个数之和
{
intn;
n=(i+k)%20;
t+=num[n];
}
if(i==0)
{
sum_max=t;
}
else
if(sum_max{
sum_max=t;
max_index=i;
}
}
for(intk=0;k<4;k++)
{
intn;
//存放20个随机数中连续4个数之和中最大的那4个连续的数
n=(max_index+k)%20;
Max[k]=num[n];
}
}
voidCircle:
:
Find_Min()
{
intmin_index=0;
for(inti(0);i<20;i++)
{
intt=0;
for(intk=0;k<4;k++)//连续4个数之和
{
intn;
n=(i+k)%20;
t+=num[n];
}
if(i==0)
{
sum_min=t;
}
else
if(sum_min>t)
{
sum_min=t;
min_index=i;
}
}
for(intk=0;k<4;k++)
{
//存放20个随机数中连续4个数之和中最小的那4个连续的数
intn;
n=(min_index+k)%20;
Min[k]=num[n];
}
}
intmain()
{
Circle*cir=newCircle();
cir->Find_Max();
cir->Find_Min();
cir->Show();
deletecir;
cir=0;
return0;
}程序的输出为
三、实验总结
本次实验难度非常的大。
首先指针使用不熟练,使用经常错误。
逻辑混乱错误。
类的方面要多多注意私有成员是不可以直接访问。
只能用类内的方法访问才行!
总之要多多努力才行!
指针方面太抽象了,一开始是能看懂,用起来真是一塌糊涂!