return 0;
}
5、调试和运行参考程序8和参考程序9,并观察输出结果,体会和理解内存动态分配的概念与new、delete运算符的基本使用方法。
参考程序8
#include
main()
{
int *p; //声明一个整型指针变量p
//在下画线处,用new关键字动态分配一个int型存储区,并将首地址赋给p
______________
*p = 10;
cout<<*p; //在下画线处填上语句,用于撤销指针p,释放p指向的存储空间
________________
return 0;
}
参考程序9
#include
main()
{
int *p;
//在画线处填上语句,用new关键字动态分配一个int型存储区,并将首地址赋给p
_____________________
if (!p)
{
cout<<"allocation failure\n";
return 1;
}
//在下画线处填上语句,将p所指向的存储区赋值20
________________
cout<<*p;
//在下画线处填上语句,用于撤销指针p,释放p指向的存储空间
________________
return 0;
}
(二)程序设计题
1、从键盘上读入两数,比较两个数的大小,并按从小到大的次序输出。(要求使用变量引用)
2、输出1到100的偶数,一行5个。
3、给出一个百分制的成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为A,80~89分为B,70~79分为C,60~69分为D,60分以下为E。
4、一个10个整数的数组(34,91,83,56,29,93,56,12,88,72),找出最小数和其下标,并在主函数中打印最小数和下标。
5、编写一个C++风格的程序,解决百元问题:将一元人民币兑换成1、2、5分的硬币,有多少种换法?
6、编写一个程序,建立一个上sroot()的函数,返回其参数的二次方根。要求使用重载函数,重载3次,让其返回整数、长整数与双精度数的二次方根。
7、写C++风格的程序,用二分法求解f(x)=0的根。
8、编写一个程序,用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中。
实验二类与对象
一、实验目的
1、学习类与对象的定义,掌握类与对象的使用方法。
2、学习数据成员与成员函数的访问方式,理解构造函数和析构函数的定义与执行过程,学会构造函数的重载方法。
3、掌握数组与指针的定义与使用方法,理解数组与指针的存储分配与表示。
4、掌握用指针和引用向函数传递参数。
5、掌握静态数据成员和静态成员函数的使用。
6、理解友元与友元函数的作用与使用方法。
二、实验内容
1、下面是一个计算器类的定义,请完成该类成员函数的实现。
class Counter
{
public:
Counter(int number);
void increment(); //给原值加1
void decrement(); //给原值减1
int getValue(); //取得计数器值
int print(); //显示计数
private:
int value;
};
2、根据注释语句的提示,实现类Date的成员函数。
class Date
{
public:
void printDate();//显示日期
void setDay(int d);//设置日的值
void setMonth(int m);//设置月的值
void setYear(int y);//设置年的值
private:
int day,month,year;
};
int main()
{
Date testDay;
testDay.setDay(5);
testDay.setMonth(10);
testDay.setYear(2014);
testDay.printDate();
return 0;
}
3、考课本例子,建立一个源程序文件,在此文件中建立一个新的类,将新建的类命名为Rect。
class Rect
{
public:
int Area_int();
double Area_double();
Rect(double length,double width);
Rect(int length,int width);
virtual ~Rect();
private:
int nLength;
int nWidth;
double dLength;
double dWidth;
};
【要求】
(1)向Rect类中添加数据成员及成员函数,并完善成员函数的功能。如设计一个Area_int()函数,计算边长为整型的长方形的面积;设计一个Area_double()函数,计算边长为double型的长方形的面积。
(2)重载构造函数。一种构造函数用整型变量记录长方形的长和宽,另一种构造函数用double型记录。
(3)体现对象的构造和析构过程。例如,在构造函数中用cout<<”I am the constructor!”<(4)在main()函数中定义两个Rect类的对象,一个对象用实例实现(就像定义普通的变量一样),另一个对象用指针实现(利用关键字new,给指针分配内存空间)。并用不同的参数,以调用不同的构造函数体现构造函数的重载。
4、声明一个Student类,在该类中包括一个数据成员score(分数)、两个静态数据成员total_score(总分)和count(学生人数);还包括一个成员函数account()用于设置分数、累计学生的成绩之和、累计学生人数,一个静态成员函数sum()用于返回学生的成绩之和,另一个静态成员函数average()用于求全班成绩的平均值。在main()函数中,输入某班学生的成绩,并调用上述函数求出全班学生的成绩之和和平均分。
5、依据下面的描述设计并实现一个时间类Time,并在main函数中定义所需要的对象验证所实现代码的正确性。
(1)私有数据成员包含小时(Hour)、分钟(Minute)和秒(Second);
(2)三个重载构造函数:
a)一个是无参数的构造函数;
b)一个是带参数的构造函数,实现对数据成员的初始化;
c)一个是copy构造函数,实现用一个对象初始化本对象;
(3)成员函数实现时间对象相加、减运算:
a)Time Add(Time&);
b)Time Sub(Time&);
(4)友元函数实现时间对象相加、减的运算符重载:
a)friend Time operator + (Time&,Time&);
b)friend Time operator ? (Time&,Time&);
(5)公有成员函数void Display();输出对象的数据成员;
6、依据下面的描述定义并实现一个向量类Vector,并在main函数中定义所需要的对象验证所实现代码的正确性
1)私有数据成员int dimension; double* data; 表示向量的维数与向量元素存储空间的首地址
2)无参构造函数,实现把向量所有元素初始化为0
3)有参构造函数,实现用一个n维数组初始化n维向量
4)拷贝构造函数
5)析构函数
6)输出数据成员函数void display( );
7)成员函数int GetDimension();获取向量对象的维数
8)成员函数double SetAt(double newdata,int index);实现给向量的第index+1个元素赋值
9)成员函数double GetAt(int index);实现读取向量的第index+1个元素的值
10)实现向量加、减、乘运算的成员函数
Vector Add(const Vector &ob2 );
Vector Sub(const Vector &ob2 );
int Mult(const Vector &ob2 );
实验三派生类与继承
一、实验目的
1、学习类的继承,能够定义和使用类的继承关系。
2、学习派生类的声明与定义方法。
3、掌握类的定义和对象的声明。
4、熟悉公有派生和私有派生的访问特性。
5、掌握派生类构造函数和析构函数的执行顺序。
6、掌握利用访问声明调整基类成员在派生类中的访问属性。
二、试验内容
1、已有类Time和Date,要求设计一个派生类Birthtime,它继承类Time和Date,并且增加一个数据成员Childname用于表示小孩的名字,同时设计主程序显示一个小孩的出生时间和名字。
class Time
{
public:
Time(int h,int m, int s)
{
hours=h;
minutes=m;
seconds=s;
}
void display()
{
cout<<"出生时间:"<}
protected:
int hours,minutes,seconds;
};
class Date
{
public:
Date(int m,int d,int y)
{
month=m;
day=d;
year=y;
}
void display()
{
cout<<"出生年月:"<}
protected:
int month,day,year;
};
2、编写一个学生和教师的数据输入和显示程序。学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生类Student和教师类Teacher的基类。
3、给出下面的基类:
class area
{
protected:
double height;
double width;
public:
area(double h,double w)
{
height=h;
width=w;
}
virtual double getarea()=0;
};
【要求】
(1)建立基类area的俩个派生类rectangle与isosceles,让每一个派生类都包含一个函数getarea(),分别用来返回矩形与三角形的面积。用构造函数对height 与width进行初始化。
(2)写出主程序,用来求height与width分别为10.0与5.0的矩形面积,以及求height与width分别为4.0与6.0的三角形面积。
(3)要求通过使用基类指针访问虚函数的方法(即运行时的多态性)分别求出矩形和三角形面积。
实验四多态性
一、实验目的
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+imag i”输出当前对象的实部和虚部,例如:对象的实部和虚部分别是4.2和6.5,则调用print函数输出格式为:4.2+6.5 i;
(4)编写主程序,计算出复数对象c1和c2相加结果,并将其结果输出。
2、编写一个程序,其中设计一个时间类Time,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。要求将小时范围限制在大于等于0,分钟范围限制在0~59分,秒钟范围限制在0~59秒。
提示:时间类Time的参考框架如下:
class Time
{
public:
Time(int h=0,int m=0,int s=0);//构造函数
Time operator+(Time &);//运算符重载函数,实现两个时间的相加
Time operator+();//运算符重载函数,实现两个时间的相加
void disptime();//显示时间函数
private:
int hours,minutes,seconds;
};
3、写一个程序,定义抽象类Container:
class Container
{
protected:
double radius;
public:
Container(double r);//抽象类Container的构造函数
virtual double surface_area()=0;//纯虚函数surface_area
virtual double volume()=0;//纯虚函数volume
};
【要求】
建立3个继承Container的派生类:Sphere(球体)、Cylinder(圆柱体)、Cube (正方体),让每一个派生类都包含虚函数surface_area()和volume(),分别用来球体、圆柱体和正方体的表面积和体积。要求写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。
4、设计一个点类Point,其结构如下:
(1)Point类表示二维平面点的集合,数据成员由点的坐标值表示,类型为int;(2)三个重载构造函数:
a)一个是无参数的构造函数;
b)一个是带坐标值参数的构造函数,实现对数据成员的初始化;
c)一个是copy构造函数,实现用一个对象初始化本对象;
(3)两个重载成员函数:
a)v oid offert(int , int );实现点的偏移,参数是偏移量;
b)v oid offert(Point &);实现点的偏移,参数Point类对象是偏移量;
(4)6个运算符重载函数:
a)b ool operator = = (Point &);判断两个点对象是否相等;
b)v oid operator + =(Point &);将两个点对象相加;
c)v oid operator ++();将当前对象自增1(前缀);
d)v oid operator ++(int );将当前对象自增1(后缀);
e)f riend Point& operator + (Point &, Point &);将两个点对象相加;
f)friend Point &operator ? (Point &, Point &);将两个点对象相减;(5)两个成员函数提供实例对象对私有数据的访问:
a)i nt GetX();
b)i nt GetY();
(6)公有成员函数void Display();输出对象的数据成员;
实验五模板与异常处理
一、实验目的
1、正确理解模板的概念。
2、掌握函数模板与类模板的声明和使用方法。
3、学习简单的异常处理方法。
二、实验内容
1、已知下列主函数:
int main()
{
cout<cout<cout<return 0;
}
声明求3个数中最小者的函数模板,并写出调用此函数模板的完整程序。
2、编写一个求任意类型数组中最大元素和最小元素的程序,要求将求最大元素和最小元素的函数设计成函数模板,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型也可以是双精度类型。
3、编写一个函数模板,使用冒泡排序将数组内容由小到大排列并打印出来,并写出调用此函数模板的完整程序,使得函数调用时,数组的类型可以是整型也可以是双精度型。
4、编写一个程序,求输入数的平方根。设置异常处理,对输入负数的情况给出提示。
实验六C++的流类库与输入输出
一、实验目的
1、掌握C++格式化的输入输出方法。
2、掌握重载运算符“<<”和“>>”的方法。
3、掌握磁盘文件的输入输出方法。
二、实验内容
1、下面给出的程序用于打印九九乘法表,但程序中存在错误。请上机调试,使得此程序运行后,能够输出如下所示的九九乘法表。
源程序:
#include
#include
int main()
{
int i,j;
cout<<"*";
for(i=1;i<=9;i++)
{
cout<
}
cout<for(i=1;i<=9;i++)
{
cout<
for(j=1;j<=i;j++)
cout<
}
return 0;
}
2、编写一程序,将从键盘读入的一个整数、一个双精度数据和一个字符串写到磁盘文件date.dat中。
3、将“a”至“z”的26个英文字母写入文件,而后从该文件中读出并显示出来。
4、编写一个程序,将两个文本文件连接成一个文件,然后将此文件中所有小写字母转换成大写字母,并打印出来。