c++实验题

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验八函数递归算法一、实验目的1、掌握函数的嵌套调用和递归调用2、掌握递归算法二、实验内容1.函数嵌套调用是在被调用的函数内在调用其他函数,而递归调用时在被调用函数内调用自身。嵌套调用的层数没有限制,而递归调用函数必须包含使递归终止的语句。范例:求组合数Cnm=n!/[m!(n-m)!](m为指数)【分析】求组合数要用到求阶乘,可将求阶乘定义为一个函数,在求组合数的函数中嵌套调用阶乘函数。由于n!=n*(n-1)!,求阶乘是一个典型的递归算法,在此用递归方法实现。【程序】【注意】(1)因为阶乘极易发生溢出,所以n最大值取12,否则运算中会发生溢出。(2)在函数内定义局部变量时,变量名不应与函数名相同。例如,在A行,不可定义变量名为com;在B行不可定义变量名为fac;否则程序编译会出错误。(3)还有一种常见错误,例如:longfac(inti){if(i==0||i==1)fac(i)=1;elsefac(i)=i*fac(i-1);returnfac(i);}编译此程序,会出现提示信息Left_valuerequired的错误,请思考这是为什么?然后修改正确。3、用递归函数实现勒让德多项式。在主函数中求P4(1.5)。★选做题4、定义递归函数实现Ackman函数。其中m,n为正整数。设计程序求Acm(2,1),Acm(3,2)。实验九函数的重载和变量的作用域一、实验目的1、了解内联函数、重载函数、带默认参数函数的定义及使用方法。2、掌握作用域的概念、变量的存储类型及它们之间的差别。3、掌握程序的多文件组织。二、实验内容1、重载函数允许不同的函数使用相同的名字,这使得完成类似的任务时可以使用相同的函数名。范例:编写几个计算面积的函数,分别计算圆、矩形、梯形和三角形的面积,计算边长为1的正方形及其内切圆、内接等腰三角形和等腰梯形面积。函数原型如下:doublearea(doubleradius=0);//圆面积,参数为半径,默认参数为0,表示点面积doublearea(doublea,doubleb);//计算矩形面积,参数为长和宽doublearea(doublea,doubleb,doubleh);//计算梯形面积,参数为两底和高doublearea(doublea,doubleb,doublec,int);//计算三角形面积,参数为三边长,int型参数起标示作用,以区别于梯形,不参加计算。【要求】(1)编译运行程序,并记录运行结果,注意函数调用时,实参与形参之间的关系(包括类型、个数)。(2)若将计算矩形面积的函数原型改为doublearea(doublea=0,doubleb=0);重新编译运行情况会怎样?为什么?(3)若将计算三角形面积的函数原型改为doublearea(doublea,doubleb,doublec);程序还能正确运行吗?为什么?(4)若将计算三角形面积的函数原型改为doublearea(doublea,doubleb,doublec=0,int);程序还能正确运行吗?为什么?2、编程:将上题以多文件方式组织,在area.h中声明各个area()函数原型,在area.cpp中定义函数,然后在Exp9_2.cpp中包含area.h,并定义main()函数并执行。【注意:】VC++6.0中以c开头的头文件,如不在标准名字空间中,所以area.cpp中不可以加usingnamespacestd;3、范例:全局变量、局部变量和静态局部变量的应用示例。【要求】(1)分析并写出下列程序的执行结果,然后输入计算机执行,比较分析结果与执行结果。如果两结果不相同请分析原因。4、设计两个重载函数,分别求两个整数相除的余数和两个实数相除的余数。两个实数求余定义为实数四舍五入取整后相除的余数。实验十类与对象的基本概念一、实验目的类是C++扩展数据类型,可以封装不同类型的数据成员和函数成员。类是面向对象程序设计的基础。本次实验内容包括面向对象的基本概念、构造函数与析构函数,从实际问题抽象出类等,通过实验要求掌握以下内容:1、掌握面向对象的基本概念和类的定义方法。2、掌握类成员的访问权限以及访问类成员的方法。3、掌握内联函数和默认函数。4、掌握构造函数和析构函数的意义及使用方法。二、实验内容1、范例:设计并测试一个矩形类(Rectangle)。属性为矩形的左下角与右上角的坐标,矩形水平放置。操作为计算矩形的周长和面积。程序】【要求】(1)将Rectangle(doublel=0,doublet=0,doubler=0,doubleb=0);改为Rectangle(doublel,doublet,doubler,doubleb);程序仍能正确运行吗?为什么?(2)注意成员函数voidShow()、doubleArea()、doublePerimeter()的使用,因为在第三章如果需编写类似功能的一般函数是需要带参数(形参)的。而在此处作为类的成员函数又不需要带参数。思考为什么?(3)理解voidAssign(doublel,doublet,doubler,doubleb);函数的作用。将Rectangle(doublel=0,doublet=0,doubler=0,doubleb=0);改为Rectangle(doublel,doublet,doubler,doubleb);这时,有人认为Rectangle(doublel,doublet,doubler,doubleb)和voidAssign(doublel,doublet,doubler,doubleb)的功能相同,那么Assign函数能否去掉呢?请试一试,结果会怎样?2、定义一个圆类(Circle),要求用两种方法定义:方法一:要求属性为半径,操作为计算圆的周长和面积。方法二:要求属性为半径(radius)、圆周长和面积,操作为输入半径,并计算周长、面积,输出半径、周长和面积。要求定义构造函数(以半径为参数,缺省值为0,周长和面积在构造函数中生成)和拷贝构造函数。3、设计一个学校在册人员类(Person)。数据成员包括:身份证号(IdPerson),姓名(Name),性别(Sex),生日(Birthday)和家庭住址(HomeAddress)。成员函数包括人员信息的录入和显示等。★选做题4、编程建立一个分数类。分数类的数据成员包括分子和分母,操作包括约分、通分、加、减、乘、除、求倒数、比较、显示和输入。分数类的定义如下:【要求】完成上述所有成员函数并进行检验。★选做题5、集合是具有同一属性(共性)而又能互相区别(个性)的多个成员汇集起来的整体,构成集合的每个成员称为集合的元素,元素间没有顺序关系。例如,所有的大写英文字母是一个集合,它包括26个元素:A、B、…、Z。不包含任何元素的集合称为空集合。【实验要求]】自定义一个集合类set,采用数组存放集合的元素。自定义集合运算包括:1)判断元素elem是否为集合set的元素。2)为集合添加一个元素elem。3)从集合中删除一个元素elem。4)复制一个集合,其元素与原集合完全一样。5)显示集合中的所有元素。6)求两个集合中相同的元素,即求两个集合的交集。7)求两个集合中所有的元素,即求两个集合的并集。8)判断两集合包含的元素是否完全相同。9)判断一个集合是否被包含在另一个集合之中,即是否为另一个集合的子集。*/【程序】cout删除部分元素后:endl;couts;s.print();couts1;s1.print();couts2;s2.print();return0;}实验十一引用与复制构造函数一.实验目的1、掌握引用的概念及应用,掌握引用作为函数参数的方法。2、学会编写与应用复制构造函数。二.实验内容1、范例:编写一个函数,其原型为:voidIndex(inta[],intn,int&sub),其功能是,在大小为n的数组a中,查找某个数sub,若找到,将其下标存放在sub中,若没找到,将-1存放在sub中,在主调函数中通过判断值来判断数组中是否有该数。在这里,sub是引用类型的参数,但起返回值的作用。【程序】【要求】(1)修改主程序连续查找数字的循环语句,使程序能在输入特定数字后退出循环。(2)将voidIndex(inta[],intn,int&sub);改为voidIndex(inta[],intn,intsub);程序还能正确执行吗?试分析其结果并解释。(3)在上述修改的基础上如果结果不正确,怎样修改可以同样得到正确的结果。2、一个声明为返回引用的函数,既可以作为右值出现在赋值号的右边,也可以作为左值出现在赋值号的左边。下面是一个函数调用本身作为左值的例子。【要求】修改程序使用非返回引用的函数实现上述功能。试分析两者之间的区别。3、为矩形类定义复制构造函数。矩形类见主教材的例4.2.在rect.h头文件中的类rect定义中加入以下代码:Rectangle(Rectangle&rec);在rect.cpp文件中添加以下代码:Rectangle::Rectangle(Rectangle&rec){left=rec.left;top=rec.top;right=rec.right;bottom=rec.bottom;}//复制构造函数在main()函数中添加以下代码:Rectanglerect2(rect1);cout”由复制构造函数生成的rect2:”endl;rect2.Show();这里的复制构造函数是默认的按成员语义定义的,可以不写,系统会自动提供。★选作题4、编程:将实验十中的分数类的分数类型参数改为引用,并添加复制构造函数。实验十二运算符重载一、实验目的1、掌握运算符重载为成员函数的方法2、理解友元函数和友元类。3、掌握运算符重载为友元函数的方法。4、使用静态数据成员。二、实验内容1、为主教材中例4.2的Rectangle类增加加减复合赋值和加减运算符重载函数。加减复合赋值语义定义为固定长方形的左上角,对右下角的坐标进行加减运算,使新矩形的长宽为原两矩形长宽之和或差,对加和减复合赋值定义为成员函数。两个矩形加减运算定义为友元函数。【要求】(1)主程序如下,请完成类的定义及相关成员函数和友元函数的实现,并分别保存为rect.h文件和rect.cpp文件。rect2.Show();return0;}2、编程:修改上题,要求如下:(1)将加、减运算重载为成员函数。(2)为矩形类在增加一个静态数据成员Counter,并统计共产生了多少个矩形对象。为Counter添加定义、赋初值以及随程序运行而变化的代码,并在main()函数中将其输出。注意静态数据成员应该有定义性说明。3、为复数类(Complex)增加重载的运算-、-=、*=和/=。分别使用成员函数和友元函数各做一遍。并测试。实验十三数组与多维数组一、实验目的1、熟练应用数组与多维数组2、掌握数组作为函数参数的函数定义及调用方法。二、实验内容1.范例:求一个3×4矩阵中的最大元素,将求矩阵中的最大元素的过程定义为一个函数。函数的第一个参数是矩阵本身,第二个参数是第一维的大小。这种方法的优点是使函数具有通用性,即无论一个矩阵的第一维是多大,只要该矩阵的第二维是4个元素,都可用该函数求最大元素;也可用该函数求一个矩阵开始几行中的最大元素。【程序】【要求】修改上述程序使其不仅求矩阵中的最大元素而且还能求最大元素的行列值。2.打印杨辉三角形(10行)。使用二维数组并利用每个系数等于其上两系数之和。3.分别编写实现下列字符数组处理的函数,用数组作为参数:(1)voidtrim(chars[])//删除字符串s的尾部空格。(2)voidlefstring(chars1[],chars2[],intn)//得到指定字符串s1中前n个字符的子串s2.(3)intindex(chars1[],chars2[])//检查字符串s2是否为字符串s1的子串,根据查找结果返回s2在s1中的开始位置,如果s2不是s1的子串,则返回-1主程序如下,请编写

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功