您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业财务 > 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,然后输出这两个三角形的各种参数。将文件命名为S15_1.cpp。#includeiostream.h#includemath.hclassTri{doublea,b,c;//定义三角形的三边public:Tri(doublex,doubley,doublez)//构造函数,初始化三边{a=x;b=y;c=z;}doublePeri()//返回三角形的周长{return(a+b+c);}doubleArea()//返回三角形的面积{doubles=Peri()/2;doublearea=sqrt(s*(s-a)*(s-b)*(s-c));returnarea;}voidShow()//输出三角形的参数{cout三角形的边长:a'\t'b'\t'cendl;cout三角形的周长:Peri()endl;cout三角形的面积:Area()endlendl;}};//三角形类的定义结束,定义了三角形的各种属性和可实施的操作voidmain()//main函数决定了程序运行的过程和顺序{Tritri1(3,4,5),tri2(5,6,7);//定义了两个具体的三角形tri1.Show();//输出这两个三角形的参数tri2.Show();}要求:编译运行程序,程序的输出是。2.根据程序要求,完善程序后输入源程序,编译连接,并写出运行结果。如果某个自然数除了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个连续的合数,并输出计算结果。将文件命名为S15_2.cpp。#includeiostream.hclassNUM{//定义数据类NUMprivate:intn;int*p;public:NUM(intn1)//构造函数,用n1初始化n,并且用p动态开辟n个整数空间,存放符合条件的合数{n=n1;p=newint[n];//连续开辟n个整型空间,将整型空间的首地址赋给p}intyes(intx)//判断x是否为合数,若是返回1,否则返回0{for(inti=2;i=x/2;i++)//i从2循环到x/2,依次判断x能否整除iif(x%i==0)//若能整除,说明x是合数return1;//直接返回1return0;//循环结束,说明不能整除,不是合数,返回0}voidfun(void)//寻找n个连续的合数{intj;for(inti=3;1;i++)//从3开始向上找,因为未给上限,所以一直循环(循环条件永远满足){j=0;//对连续的合数计数,所以在每次寻找之前清零while(yes(i)==1&&jn)//当前的数i是合数且没有找到连续n个时,循环向后寻找{p[j]=i;//边找边将合数赋给动态开辟的数组空间,赋完值后序号加1j++;i++;//继续判断下一个连续的数是否满足条件}if(j==n)//当找到n个连续的合数,退出上面的while循环break;//操作完成,用break强制退出for循环}}voidprint(void)//输出满足条件的连续的合数{for(inti=0;in;i++)coutp[i]'\t';coutendl;}~NUM()//析构函数,释放在构造函数中动态开辟的数组空间{if(p)delete[]p;}};voidmain(void){NUMnum(10);//定义类的对象,并调用构造函数动态开辟10个整型空间num.fun();//对这个对象完成寻找连续的合数的操作,并把操作结果存放在动态开辟的空间中num.print();//调用对象的成员函数,输出连续的合数}//函数结束,对象num的作用域也结束,调用析构函数释放对象所占用的空间要求:(1)完善程序;(2)编译运行程序,程序的输出为。3.仿照样例程序编写程序定义一个字符串类STR,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。例如,若字符串为cocoon,删除重复出现的字符后,其结果是字符串con。具体要求如下:(1)私有数据成员:char*s1:指向原字符串,存放字符串的空间需动态分配。char*s2:指向结果字符串,存放字符串的空间需动态分配。(2)公有成员函数STR(char*str):构造函数,用str初始化s1,动态分配s1和s2指向的空间。voiddelsame():删除重复出现的字符。voidshow():输出原字符串和结果字符串。~STR():析构函数,释放动态分配的存储空间。(3)在主函数中定义一个STR类的对象test,用字符串concoon初始化test,通过调用成员函数完成删除工作,输出删除前后的两个字符串。代码:#includeiostream#includecstringusingnamespacestd;classSTR{private:char*s1;char*s2;public:STR(char*str):s1(str){s2=newchar[strlen(str)+1];}//删除字符串里相同的元素voiddelsame(){char*s1_temp=s1;char*s2_temp=s2;while(*s1_temp!='\0'){char*t=s1_temp;boolflag=0;//不定义flag也可以!后面就可以用break跳出循环,if里面直接写不相等条件就行!while(*t!='\0'){++t;if(*t==*s1_temp){flag=1;}}if(flag==0)//如果s1_temp后面的字符都跟s1_temp不相等,就放入s2{*s2_temp++=*s1_temp;}++s1_temp;}*s2_temp='\0';}voidshow();~STR(){delete[]s2;}};//输出原来与删除后的数组voidSTR::show(){cout原字符串为:s1endl;cout删除后的字符串为:s2endl;}intmain(){STRtext(concoon);text.delsame();text.show();return0;}4.进阶提高圆盘找数问题。定义一个圆盘类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,通过调用成员函数完成题目要求的任务。将文件命名为S15_4.cpp。要求:代码:#includeiostream#includectimeusingnamespacestd;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);i20;i++)num[i]=rand();}voidCircle::Show(void){inti;cout圆盘的所有数为:endl;for(i=0;i20;i++)coutnum[i];coutendl;cout圆盘的最大连续4个数为:endl;for(i=0;i4;i++)coutMax[i];coutendl;cout其和值为:sum_maxendl;cout圆盘的最小连续4个数为:endl;for(i=0;i4;i++)coutMin[i];coutendl;cout其和值为:sum_minendl;}voidCircle::Find_Max(){intmax_index=0;for(inti(0);i20;i++){intt=0;for(intk=0;k4;k++)//连续4个数之和{intn;n=(i+k)%20;t+=num[n];}if(i==0){sum_max=t;}elseif(sum_maxt){sum_max=t;max_index=i;}}for(intk=0;k4;k++){intn;//存放20个随机数中连续4个数之和中最大的那4个连续的数n=(max_index+k)%20;Max[k]=num[n];}}voidCircle::Find_Min(){intmin_index=0;for(inti(0);i20;i++){intt=0;for(intk=0;k4;k++)//连续4个数之和{intn;n=(i+k)%20;t+=
本文标题:C++实验--类和对象——普通数学题计算
链接地址:https://www.777doc.com/doc-5456845 .html