实验一 C++面向过程练习(一) (2学时) ✧ 实验目的和要求:1.掌握C ++程序的基本格式与规范,学会编写简单的C ++程序。
2.理解C ++程序的结构和特点。
3.熟悉C ++程序基本的输入和输出操作。
4.掌握C ++数据类型、常量和变量以及修饰符的使用方法。
5.掌握C ++的各种流程控制语句的使用。
6. 熟悉C ++语言实验环境,能够在VC6.0或BC3.0的环境下调试与运行程序。
✧ 实验内容:1. 求解方程02=++c bx ax 在复数域上的解,a,b,c 由终端输入。
注意分析的全面性。
2. 用!1!21!111n e ++++≈ ,求e 之值,直到610!1-<n 为止。
实验二 C++面向过程练习(二)(2学时)✧ 实验目的和要求:1. 掌握一维数组、二维数组的定义与使用。
2. 掌握函数定义、函数调用和函数说明的方法。
3. 掌握函数递归调用的概念和使用方法。
✧ 实验内容:1. 编程求若干个整数中的最大和次大,最小和次小这四个数。
2. 由键盘输入两个整数,试编写两个函数分别求出这两个数的最大公约数和最小公倍数。
3. 编写一个递归函数void reverse(int a[],int n),将数组a 中的数倒置。
如a 数组原来为:1 2 3 4 5,则调用reverse 函数后,a 数组内容变为:5 4 3 2 1。
实验三 C++在非面向对象方面的扩充(2学时) ✧ 实验目的和要求:1.掌握函数重载的方法及定义重载函数时的注意事项。
2.掌握函数缺省参数的使用。
3.掌握指针的定义及使用方法,理解void 型指针。
4.理解动态内存分配意义,掌握new 和 delete 使用方法。
5.掌握引用的声明方法及使用。
6.掌握const 修饰符及其内联函数的使用。
7.熟悉C++在非面向对象方面的其他扩充特性。
✧实验内容:1.编写10个重载函数max,分别求两个整数、实数、双精度数、字符、字符串及三个整数、单精度数、双精度数、字符、字符串中的最大数。
2.编写函数void add1(int sum),void add2(int * sum),void add3(int & sum),功能如下:输入若干个整数,以0结束,并用参数sum返回这若干个整数之和。
在主程序中分别调用这三个函数,观察结果,总结值传递和地址传递的规律。
3.矩阵中填数:当给出N*N 的矩阵,要求用程序填入下列形式的数:(1)S形填数,例如N=5 (2)回转填数,例如N=5要求:用new和delete动态分配空间(提示:可用一维数组来表示二维数组)。
实验四类与对象(一)(4学时)✧实验目的和要求:1.掌握类、类的数据成员、类的成员函数的定义方式。
2.理解类成员的访问控制方式。
3.掌握对象的定义和操作对象的方法。
4.理解和掌握构造函数、析构函数、拷贝构造函数的定义与执行过程。
5.掌握重载构造函数的方法。
6.理解浅拷贝与深拷贝。
7.了解对象的生存期。
✧实验内容:1.设计三个图形类:Circle(圆)、Rectangle(矩形)、Triangle(三角形),要求:(1)Circle 类基本信息:圆心坐标、半径;Rectangle 类基本信息:长、宽;Triangle 类基本信息:三个顶点坐标;其中:成员变量为private 属性,成员函数为public 属性。
(2)为Circle类设计缺省的构造函数,并用init成员函数进行数据成员的初始化。
(3)为其余两个类设计多个构造函数:无参、带参、参数值缺省的构造函数。
(4)每个图形类有计算图形的面积GetArea(),计算图形的周长GetPerimeter(),显示图形的基本信息函数Show(),修改基本信息的函数Set(形参)。
以Circle 类为例:通过GetArea()计算圆的面积,GetPerimeter()计算圆的周长,Show()函数中显示圆心坐标、直径、周长、面积等基本信息;Set(int x,int y, int r)函数可以修改圆心坐标和半径。
(5)注意多个构造函数的声明方式与定义的实现。
(6)当输入数据为不合理数据时(例如:输入的三角形的顶点是否能组成一个三角形),提示用户输入错误。
2.一维数组是应用极为广泛的数据结构,但是C++语言的数组没有下标越界检查,因而极易出错。
请定义一个安全的一维整型数组类intArray,要求:(1)基本信息:存储数据的基址指针,数组的大小,均定义为private属性。
(2)定义构造函数、析构函数、拷贝构造函数。
(3)定义以下成员函数:int GetSize();返回数组的大小,即数组的元素个数。
int GetAt(int nIndex) ;获得nIndex索引位置上的数组元素值。
void SetAt(int nIndex , int newElement);向nIndex位置设定新的newElement值。
(4)使用intArray类实现一个冒泡排序程序。
实验五类与对象(二)(4学时)✧实验目的和要求:1.掌握对象数组的定义与使用方法。
2.理解对象指针的概念,学会用指针引用对象。
3.理解this指针的工作方式。
4.掌握静态数据成员和静态成员函数的基本使用方法。
5.理解友元与友元函数的作用,掌握其使用方法。
6.掌握对象成员及其常类型的使用方法。
7.学会使用C++的多文件方式编写程序。
✧实验内容:1.设计一个Student(学生)类,并使Student类具有以下特点:(1)该类具有学生姓名、学号、程序设计、信号处理、数据结构三门课程的成绩。
(2)学生全部信息由键盘输入,以提高程序的适应性。
(3)通过成员函数分别统计每个学生的平均成绩和每门课程的平均成绩,当课程数量增加或减少时成员函数无需修改仍可求取平均成绩。
(4)输出学生的各科成绩与平均成绩。
(5)学生对象的定义采用对象数组实现。
(6)统计不及格学生人数。
(7)表格输出整齐美观。
(8)能以最方便的方式实现对课程数量和学生人数的修改。
(9)采用多文件方式组织程序。
实验六继承与派生类(4学时)✧实验目的和要求:1.理解类的继承的概念,能够定义和使用类的继承关系。
2.掌握派生类的声明与定义方法。
3.熟悉三种派生方式的访问特性。
4.掌握多基继承,理解和掌握虚基类。
5.理解赋值兼容规则。
✧实验内容:1.定义点Point类作为基类,在此基础上派生出直线Line类和圆Circle类,在Circle类的基础上以不同的属性派生出圆柱Cylinder类和球Spheroid类。
并要求基类和各派生类具有以下特点:(1)Line类含有计算直线长度和斜率的成员函数。
(2)Circle类含有计算圆面积的成员函数。
(3)Cylinder类含有计算圆柱表面积和体积的成员函数。
(4)Spheroid类含有计算球体的表面积和体积的成员函数。
(5)要求在实验报告中画出类层次图。
2.小型公司人员管理。
某小型公司有四类人员:总经理、技术人员、销售经理、推销员。
设计一个基类person,并派生出employee(职员),再由employee派生出manager(总经理)、technician(技术人员)、salesmanager(销售经理)、saleman(推销员)。
销售经理既是经理又是销售人员,兼具两类人员的特点,因此同时继承manager 和salesman 两个类。
(1)类定义●person类:基本信息:姓名、性别、出生日期(使用自定义的Date(日期)类)其中:基本信息为private 属性,成员函数为public 属性●Date 类:成员变量:年、月、日●派生类employee :新增属性:编号、职位、薪水等●派生类technician:新增属性:工作时间●派生类saleman:新增属性:销售额、所属部门(2)实现人员信息的录入与显示。
(3)计算并显示个人月薪:月薪计算办法:总经理拿固定月薪8000 元,技术人员按每小时25 元领取月薪;推销员的月薪按当月销售额的4%提成;销售经理固定月薪5000 元加所管辖部门当月销售总额的5‰。
实验七多态性与虚函数(4学时)✧实验目的和要求:1.理解编译时的多态性和运行时的多态性。
2.掌握虚函数的定义与使用方法。
3.掌握纯虚函数和抽象类的概念和使用方法,运用纯虚函数实现多态性。
✧实验内容:1.在实验六题目1的基础上,增加以下内容:在Line类的基础上派生长方形Rectangle类和正方形Squre类,并分别在长方形Rectangle类和正方形Squre类的基础上派生长方体Cuboid类和正方体SquareBody类,并要求基类和各派生类具有计算各图形的周长、面积和体积的功能,要求用纯虚函数实现。
注:可先定义一个抽象类---图形Figure类,含有求周长、面积、体积的纯虚函数,用此类进行派生。
假设某个图形由上述几个图形组成,求该图形的总面积(若为平面图形)或总体积(若为立体图形)。
2.员工管理:(1)将实验六中题目2中不同员工的工资计算函数pay(),改用虚函数实现。
(2)将每个类中的信息显示函数:display()改用虚函数实现。
(3)对每个类增加一个升职函数:promote()。
(4)employee()类中的pay()和display()设计为纯虚函数;在主函数中便可以依据赋值兼容规则用基类类型的指针数组来处理不同派生类的对象。
(5)由于不同类的对象调用升级函数promote()需要赋于不同的实参值,难以对各类对象统一处理,因此,employee()中promote()定义为虚函数,各派生类再定义同名函数。
实验八运算符重载(6学时)✧实验目的和要求:1.理解运算符重载的概念和使用方法。
2.掌握运算符重载的两种形式。
3.掌握几种常用运算符的重载。
✧实验内容:1.请为complex类(复数类)定义下列重载运算符函数(1)算术运算符+、-、*、/;(2)求复数的共轭运算符!(3)插入运算符<<;(4)提取运算符〉〉2.请为fraction类(分数类)定义下列重载运算符函数(1)算术运算符+、-、*、/;(2)关系运算符<,>,<=,>=,==,!=(3)插入运算符<<;(4)提取运算符>>3.对实验四中的题目2实现的intArray类定义下标运算符“[]”重载函数,并用下标运算符的方法实现冒泡排序。
实验九模板(2学时)✧实验目的和要求:1.掌握函数模板及其声明方法。
2.掌握模板函数及其生成方法。
3.学习类模板的声明与使用方法。
✧实验内容:1.定义函数模板实现求一维数组中所有数据的和。
其数据类型可以为整数、单精度数、双精度数、字符型数,并规定字符型数据的和为这两个字符连接起来的字符串,如:‘a’+‘b’=“ab”。