return0;
}
运行结果:
5、调试和运行参考程序8和参考程序9,并观察输出结果,体会和理解内存动态分配的概念与new、delete运算符的基本使用方法。
参考程序8
#include
main()
{
int*p;//声明一个整型指针变量p
//在下画线处,用new关键字动态分配一个int型存储区,并将首地址赋给p
______________
*p=10;
cout<<*p;//在下画线处填上语句,用于撤销指针p,释放p指向的存储空间
________________
return0;
}
运行结果:
参考程序9
#include
main()
{
int*p;
//在画线处填上语句,用new关键字动态分配一个int型存储区,并将首地址赋给p
_____________________
if(!
p)
{
cout<<"allocationfailure\n";
return1;
}
//在下画线处填上语句,将p所指向的存储区赋值20
________________
cout<<*p;
//在下画线处填上语句,用于撤销指针p,释放p指向的存储空间
________________
return0;
}
(二)程序设计题
1、用三种循环语句来分别实现输出10~50之间的3的倍数。
2、从键盘上读入两数,比较两个数的大小,并按从小到大的次序输出。
3、输出1到100的偶数,一行5个。
4、打印出所有的“水仙花数”。
所谓“水仙花数”是指一个三位数,其各位数字的立方和等于该数本身。
例如,153是一个“水仙花数”,因为153=13+53+33。
5、打印一个三角形的1~9的乘法表。
6、写一个程序,100~200间的所有素数。
7、给出一个百分制的成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。
90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。
8、求
(即求1!
+2!
+3!
+4!
+……+10!
)。
9、求1+
……
的和。
10、有一分数序列
,
,
,
,
,
……,求出这个数列的前20项之和。
11、一个10个整数的数组(34,91,83,56,29,93,56,12,88,72),找出最小数和其下标,并在主函数中打印最小数和下标。
12、编程求矩阵的加法:
。
13、编写一个程序,用来分别求2个整数、3个整数、2个双精度数和3个双精度数的最大值。
要求使用重载函数来完成。
14、编写一个程序,计算并输出Fibonacci数列的前n项的值,n是用户由键盘的输入值。
实验二类与对象
一、实验目的
1、学习类与对象的定义,掌握类与对象的使用方法。
2、学习数据成员与成员函数的访问方式,理解构造函数和析构函数的定义与执行过程,学会构造函数的重载方法。
3、掌握数组与指针的定义与使用方法,理解数组与指针的存储分配与表示。
4、掌握用指针和引用向函数传递参数。
5、掌握静态数据成员和静态成员函数的使用。
6、理解友元与友元函数的作用与使用方法。
二、实验内容
1、下面是一个计算器类的定义,请完成该类成员函数的实现。
classCounter
{
public:
Counter(intnumber);
voidincrement();//给原值加1
voiddecrement();//给原值减1
intgetValue();//取得计数器值
intprint();//显示计数
private:
intvalue;
};
2、根据注释语句的提示,实现类Date的成员函数。
classDate
{
public:
voidprintDate();//显示日期
voidsetDay(intd);//设置日的值
voidsetMonth(intm);//设置月的值
voidsetYear(inty);//设置年的值
private:
intday,month,year;
};
intmain()
{
DatetestDay;
testDay.setDay(5);
testDay.setMonth(10);
testDay.setYear(2014);
testDay.printDate();
return0;
}
3、建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。
用类cylinder计算圆柱体的体积,并存储在一个double变量中。
在类cylinder中包含一个成员函数vol(),用来显示每个cylinder对象的体积。
4、构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1~5,将price初始化为qu的10倍。
显示每个对象的qu*price值。
5、修改上题,通过对象指针访问对象数组,使程序以相反的顺序显示对象数组的qu*price值。
6、构建一个类Stock,含字符数组stockcode[]及整型数据成员quan、双精度型数据成员price。
构造函数含3个参数:
字符数组na[]及q、p。
当定义Stock的类对象时,将对象的第一个字符串参数赋给数据成员stockcode,第2个和第3个参数分别赋给quan和price。
未设置第2个和第3个参数时,quan的值为1000,price的值为8.98。
成员函数print()使用this指针,显示对象内容。
7、参考课本例子,建立一个源程序文件,在此文件中建立一个新的类,将新建的类命名为Rect。
classRect
{
public:
intArea_int();
doubleArea_double();
Rect(doublelength,doublewidth);
Rect(intlength,intwidth);
virtual~Rect();
private:
intnLength;
intnWidth;
doubledLength;
doubledWidth;
};
【要求】
(1)向Rect类中添加数据成员及成员函数,并完善成员函数的功能。
如设计一个Area_int()函数,计算边长为整型的长方形的面积;设计一个Area_double()函数,计算边长为double型的长方形的面积。
(2)重载构造函数。
一种构造函数用整型变量记录长方形的长和宽,另一种构造函数用double型记录。
(3)体现对象的构造和析构过程。
例如,在构造函数中用cout<<”Iamtheconstructor!
”<(4)在main()函数中定义两个Rect类的对象,一个对象用实例实现(就像定义普通的变量一样),另一个对象用指针实现(利用关键字new,给指针分配内存空间)。
并用不同的参数,以调用不同的构造函数体现构造函数的重载。
8、声明一个Student,在该类中包括一个数据成员score(分数)、两个静态数据成员total_score(总分)和count(学生人数);还包括一个成员函数account()用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum()用于返回学生的成绩之和,另一个静态成员函数average()用于求全班成绩的平均值。
在main()函数中,输入某班学生的成绩,并调用上述函数求出全班学生的成绩之和和平均分。
9、设计一个用来表示直角坐标系的Location类,在主程序中创建类Location的两个对象A和B,要求A的坐标点在第3象限,B的坐标点在第2象限,分别采用成员函数和友元函数计算给定两个坐标点之间的距离,要求按如下格式输出结果:
A(x1,y1),B(x2,y2)
Distance=d
其中:
x1、y1、x2、y2为指定的坐标值,d为两个坐标点之间的距离。
10、使用C++的string类,将5个字符串按逆转后的顺序显示出来。
例如,逆转前的5个字符串是:
Germany、Japan、American、British、France
按逆转后的顺序输出字符串为:
France、British、American、Japan、Germany
11、设计一个矩阵类Matrix,有分配空间和对矩阵赋值的功能,将这个矩阵类的对象作为参数传送到函数Mul(Matrixa,Matrixb),用Mul(Matrixa,Matrixb)函数实现两个Matrix对象相乘的运算。
实验三派生类与继承
一、实验目的
1、学习类的继承,能够定义和使用类的继承关系。
2、学习派生类的声明与定义方法。
3、掌握类的定义和对象的声明。
4、熟悉公有派生和私有派生的访问特性。
5、掌握派生类构造函数和析构函数的执行顺序。
6、掌握利用访问声明调整基类成员在派生类中的访问属性。
二、试验内容
1、下面的程序可以输出ASCII字符与所对应的数字的对照表。
修改下列程序,使其可以输出字母a到z(或任意两个字符间)与所对应的数字的对照表。
classtable
{
public:
table(intp)
{
i=p;
}
voidascii(void);
protected:
inti;
};
voidtable:
:
ascii(void)
{
intk=1;
for(;i<127;i++)
{
cout<if((k)%12==0)
cout<<"\n";
k++;
}
cout<<"\n";
}
classder_table:
publictable
{
public:
der_table(intp,char*m):
table(p)
{
c=m;
}
voidprint(void);
protected:
char*c;
};
voidder_table:
:
print(void)
{
cout<table:
:
ascii();
}
intmain()
{
der_tableobl(32,"ASCIIvalue---char");
obl.print();
return0;
}
提示:
修改后的主程序为:
intmain()
{
der_tableob('a','z',"ASCIIvalue---char");
ob.print();
return0;
}
2、已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同事设计主程序显示一个小孩的出生时间和名字。
classTime
{
public:
Time(inth,intm,ints)
{
hours=h;
minutes=m;
seconds=s;
}
voiddisplay()
{
cout<<"出生时间:
"<}
protected:
inthours,minutes,seconds;
};
classDate
{
public:
Date(intm,intd,inty)
{
month=m;
day=d;
year=y;
}
voiddisplay()
{
cout<<"出生年月:
"<}
protected:
intmonth,day,year;
};
3、编写一个学生和教师的数据输入和显示程序。
学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。
要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。
4、给出下面的基类:
classarea
{
protected:
doubleheight;
doublewidth;
public:
area(doubleh,doublew)
{
height=h;
width=w;
}
virtualdoublegetarea()=0;
};
【要求】
(1)建立基类area的俩个派生类rectangle与isosceles,让每一个派生类都包含一个函数getarea(),分别用来返回矩形与三角形的面积。
用构造函数对height与width进行初始化。
(2)写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。
(3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。
5、编写一个程序,递归调用被继承的基类成员函数,实现求素数的功能。
实验四多态性
一、实验目的
1、掌握运算符重载的基本方法。
2、掌握友元运算符函数和成员运算符函数的使用方法及两者之间的不同。
3、学习虚函数的定义与使用方法。
4、了解静态多态性和动态多态性。
5、学习使用虚函数和继承实现动态多态性。
二、试验内容
1、编写一个程序,要求:
(1)生明一个类Complex(复数类),定义类Complex的两个对象c1和c2,对象c1通过构造函数直接指定复数的实部和虚部(类私有数据成员为double类型:
real和imag)为2.5及3.7,对象c2通过构造函数直接指定复数的实部和虚部为4.2及6.5;
(2)定义友元运算符重载函数,它以c1、c2对象为参数,调用该函数时能返回两个复数对象相加操作;
(3)定义成员函数print,调用该函数时,以格式“real+imagi”输出当前对象的实部和虚部,例如:
对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:
4.2+6.5i;
(4)编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。
2、编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。
要求将小时范围限制在大于等于0,分钟范围限制在0~59分,秒钟范围限制在0~59秒。
提示:
时间类Time的参考框架如下:
classTime
{
public:
Time(inth=0,intm=0,ints=0);//构造函数
Timeoperator+(Time&);//运算符重载函数,实现两个时间的相加
voiddisptime();//显示时间函数
private:
inthours,minutes,seconds;
};
3、用友元运算符函数或成员运算符函数,重载运算符“+”、“-”、“*”,实现对实验二中实现的矩阵类的对象的加、减、乘法。
4、编写一个程序,用于进行集合的和、并和交运算。
例如输入整数集合{9,5,4,3,6,7}和{2,4,6,9},计算出他们进行集合的并、差和交运算后的结果。
【提示】
(1)可以用一下表达式实现整数集合的基本运算:
s1+s2两个整数集合的并运算
s1-s2两个整数集合的差运算
s1*s2两个整数集合的交运算
(2)参考以下Set类的框架,用于完成集合基本运算所需的各项功能。
classSet
{
public:
Set();
voidinput(intd);//向集合中添加一个元素
intlength();//返回集合中的元素个数
intgetd(inti);//返回集合中位置i的元素
voiddisplay();//显示集合的所有元素
Setoperator+(Sets1);//成员运算符重载函数,实现集合的并运算
Setoperator-(Sets1);//成员运