实验一、C++语言基础
[实验目的]
1、熟练掌握基本语句及其用法;
2、熟练掌握分支结构:if语句和switch语句;
3、熟练掌握循环结构:while语句、do-while语句、for语句。
[实验要求]
1、能熟练使用Code::Blocks的IDE环境;
2、能独立排除程序中的语法错误;
3、掌握基本问题的算法。
[实验内容]
1、编写程序,提示用户输入两个点(x1,y1)和(x2,y2),计算两点之间的距离并输出。
注:求平方根的库函数为sqrt(),要包含标准库
2、编写程序,提示用户输入年份和月份,显示这个月的天数。例如,输入年份为2016,月份为2,则应输出29天。
3、利用switch-case结构判断学生成绩的等级,
level=优秀 grade≥90良好 80≤grade<90及格 60≤grade<80不及格 grade<60
4、找出1-100中所有的素数。
5、计算1!+2!+…+10!
6、哥德巴赫猜想中写到,一个充分大的偶数(大于等于4),它可以分解为两个素数(质数)的和。
注:挑战题,可选做。
7、斐波那契数列,a1=1,a2=1,an=an-1+an-2,求前20项。
实验二、复合类型
[实验目的]
1、熟练掌握指针的使用语法;
2、熟练掌握数组的应用;
3、熟练掌握结构体的用法;
4、熟练掌握字符串的处理。
[实验要求]
1、会使用指针访问数组;
2、会利用数组进行数据统计;
3、会处理结构体数据;
4、理解字符串的三种定义形式。
[实验内容]
1、假设一个班级有30人,英语成绩如下表,统计班级的最高分、最低分、平均分、及各分数段的百分比。
| 92 | 45 | 89 | 70 | 69 |
| 56 | 80 | 66 | 45 | 90 |
| 88 | 90 | 76 | 56 | 99 |
| 100 | 89 | 55 | 79 | 34 |
| 67 | 37 | 93 | 95 | 85 |
| 66 | 78 | 96 | 64 | 62 |
(1)用一维数组存储,分别用下标法和指针法访问。
(2)用二维数组存储,分别用下标法和指针法访问。
2、杨辉三角
3、6个评委对5选手打分,去掉最高分和最低分,然后求出平均分就是他们的成绩。
4、生成100个0~9之间的随机数,然后显示每个数出现的次数。
5、输入一个字符串,统计该字符串中大小写字母的数目。
(1)按字符数组形式存储;
(2)按字符指针形式存储;
(3)按string方式存储。
6、假设一个班有6个学生,三门功课的成绩如下表,计算每个学生三门课的总分,并按总分排序。
| 姓名 | 英语 | 数学 | 语文 |
| 张小红 | 45 | 89 | 70 |
| 李明 | 80 | 66 | 45 |
| 周松 | 90 | 76 | 56 |
| 黄伟光 | 89 | 55 | 79 |
| 刘三喜 | 37 | 93 | 95 |
| 王小瑞 | 78 | 96 | 64 |
实验三、函数
[实验目的]
1、掌握函数的定义和调用;
2、理解三种参数传递方式;
3、理解变量的作用域与生命期;
4、掌握函数重载的解析过程。
[实验要求]
1、会将一个功能封装成函数,并加以调用,会使用递归解题;
2、能判断哪种调用情况会改变调用变量的值;
3、能识别变量的作用域,理解其生命期;
4、熟练了解重载函数的匹配规则。
[实验内容]
1、编写函数判断一个整数是否为2的阶次方数,返回bool类型的结果,并测试。
2、编写函数将字符数组a中的前n个字符复制到数组b中,数组a、b和整数n由参数传入。
3、将传入的字符串逆序,用递归和非递归两种方法实现。
4、交换两个数,分别用指针和引用作为函数的参数。利用函数重载的方法,也就是函数名相同,参数不同。
5、课本p161程序5.12 文件作用域上机调试分析与讨论。
//module0.cpp
static int ival=5; //ival是文件作用域的
static int sf() //函数sf()是文件作用域的
{
ival++;
return ival;
}
int fun() //普通函数的默认作用域为全局的
{
ival = 6; //fun()中可以使用ival
return sf(); //fun()中可以使用sf()
}
//----------------------------------------------
//----------------------------------------------
//module1.cpp
#include
using namespace std;
extern int ival; //!错误,ival只在module0.cpp中可见
int fun(); //OK
int main()
{
cout< cout< cout< } 解释错误的原因。 6、请写出下面程序的输出,并上机验证,说明原因。 #include using namespace std; float maxx(float x,float y){ cout<<"float function is called!"< return x>y?x:y; } int maxx(int x,int y){ cout<<"int function is called!"< return x>y?x:y; } char maxx(char x,char y){ cout<<"char function is called!"< return x>y?x:y; } int main() { cout< cout< cout< return 0; } [实验目的] 1、理解类类型,掌握类的定义,对象的定义; 2、掌握访问限定符的作用; 3、掌握友元函数; 4、构造函数和析构函数的语法格式和功能; 5、常成员的含义和作用; 6、静态成员的含义和作用。 [实验要求] 1、能正确设计实现一个基本类; 2、能根据自己定义的类,定义一个对象并实例化; 3、能理解构造函数的作用、自动触发调用机制; 4、正确使用友元函数、常成员和静态成员。 [实验内容] 1、设计时间Time类,要求: (1)有表示时、分、秒的数据成员; (2)初始化操作(构造函数); (3)有get和set方法; (4)以24小时格式输出当前时间。 编写测试程序。 2、设计实现一个平面点Point类,要求: (1)用x、y两个坐标值表示一个点; (2)正确初始化每个点,默认坐标值为原点; (3)计算点到原点的距离; (4)计算点到另一个点的距离(友元函数)。 编写测试程序。 3、设计实现一个圆形类Circle,要求: (1)圆心和半径数据成员; (2)π定义为常数据成员; (2)合理初始化,默认圆心为原点,默认半径为1; (3)计算面积、计算周长、获取半径、移动和缩放。 编写测试程序。 4、设计并实现一个ObjectCounter类,要求:(静态数据成员) (1)对系统中现存的本类实例计数; (2)每个对象都有一个唯一的整型ID,按照创建的次序建立; (3)获取当前系统中本类对象的个数; (4)获取每个对象的ID。 编写测试程序。 [实验目的] 1、理解构造函数和初始化的关系; 2、掌握默认构造函数、类型转换构造函数和拷贝构造函数; 3、理解深拷贝和浅拷贝; 4、了解析构函数的作用。 [实验要求] 1、能正确判断创建对象调用了哪个构造函数; 2、能识别深拷贝和浅拷贝的应用场景; 3、能在析构函数中完成内存回收工作; [实验内容] 1、分析下面程序的输出结果,并说明原因。 #include using namespace std; class A{ public: A(); A(int i,int j); void print(){ cout<<"x="< } private: int x,y; }; A::A(){ x=y=0; cout<<"default constructor called."< } A::A(int i,int j){ x=i; y=j; cout<<"two parameters constructor called."< } int main(){ A a,b(3,4); a.print(); b.print(); return 0; } 2、分析下面程序的输出结果,并说明原因。 #include using namespace std; class M{ public: M(int i,int j){ x=i; y=j; } void sum(M a,M b){ x=a.x+b.x; y=a.y+b.y; } void print(){ cout<<"x="< } private: int x,y; }; int main(){ M a(2,3); M b(a); M c(a); c.sum(a,b); c.print(); return 0; } 此题调用什么构造函数,这个构造函数怎么来的?如果让你来实现此构造函数,怎么实现? 3、分析程序,回答问题。 #include using namespace std; class T{ public: T(int i){ t=i; cout<<"int constructor called."< } T(double i){ t=(int)i; cout<<"double constructor called."< } ~T(){ cout<<" destructor called."< } private: int t; }; int main(){ int a=8; double b=10.5; T t1(2),t2(3.5),t3(0); t3=T(a); t3=T(b); cout<<"exit main."< return 0; } (1)分析程序输出的结果; (2)主程序共创建了几个对象?各对象名是什么?它们分别调用了哪个构造函数? (3)调用几次析构函数,分别释放哪个对象? 4、按下列要求编写一个程序,并上机验证。 (1)类中有构造函数的重载; (2)类中有一个友元函数; (3)类中有静态成员; (4)类中有常成员。 5、编写一个字符串处理类,并上机验证。(深拷贝与浅拷贝) (1)类中有构造函数; (2)类中拷贝构造函数; (3)输出字符串; [实验目的] 1、理解运算符重载的实质; 2、掌握运算符重载的语法; 3、了解运算符重载的限制与用途; [实验要求] 1、能对基本的运算符进行重载; 2、掌握各种类型运算符重载的方法(友元函数形式和成员函数形式) [实验内容] 1、分析下列程序的输出结果。 #include using namespace std; class Matrix{ public: Matrix(int r,int c){ row=r; col=c; elem=new double[row*col];//动态分配内存 } double & operator()(int x,int y){ return elem[x*col+y]; } ~Matrix(){ delete[] elem;//回收内存 } private: double *elem; int row,col; }; int main(){ Matrix m(10,10); for(int i=0;i<5;i++){ m(i,10)=i+5; cout< } cout< return 0; } 函数double & operator()的作用是什么?去掉函数中的&可不可以?为什么? 2、采用成员函数的形式进行元算符的重载,实现复数的四则运算。 3、采用友元函数的形式进行元算符的重载,实现复数的四则运算。实验四、类和对象
实验五、对象的初始化与复制
实验六、运算符重载



