C++实验报告.docx

上传人:b****6 文档编号:8245737 上传时间:2023-01-30 格式:DOCX 页数:26 大小:280.66KB
下载 相关 举报
C++实验报告.docx_第1页
第1页 / 共26页
C++实验报告.docx_第2页
第2页 / 共26页
C++实验报告.docx_第3页
第3页 / 共26页
C++实验报告.docx_第4页
第4页 / 共26页
C++实验报告.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

C++实验报告.docx

《C++实验报告.docx》由会员分享,可在线阅读,更多相关《C++实验报告.docx(26页珍藏版)》请在冰豆网上搜索。

C++实验报告.docx

C++实验报告

 

 

姓名:

XX

学院:

XXX

班级:

XXX

学号:

XXX

实验二:

简单程序设计

1、实验目的

1.学会编写简单的C++程序。

2.练习使用简单的输入输出。

3.观察头文件的作用。

4.学会使用VC++6.0的DEBUG调试程

2、实验内容

1.输入并运行教材《C++语言程序设计》中的例题2-7,即:

用do-while语句编程,求自然数1~10之和。

程序正确运行之后,去掉源程序中的#include语句,重新编译,观察会有什么问题。

2.do-while语句用for语句代替,完成相同的功能。

3.程计算图形的面积。

程序可计算圆形、长方形、正方形的面积,运行时先提示用户选择图形的类型,然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值,对正方形要求用户输入边长的值,计算出面积后将其显示出来。

a)使用debug调试功能观察程序运行中变量值的变化情况。

b)定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。

3、实验步骤

(1)例题2-7

#include

usingnamespacestd;

voidmain()

{

inti

(1),sum(0);

do

{

sum+=i;

i++;

}

while(i<=10);

cout<<"sum="<

}

(2)用FOR语句代替

#include

usingnamespacestd;

voidmain()

{inti

(1),sum(0);

for(i;i<=10,i++)

{

sum+=i;

}

cout<<"sum="<

}

(3)计算图形面积:

#include

usingnamespacestd;

constfloatpi=3.1416;

voidmain()

{

intitype;

floatradius,a,b,area;

cout<<"图形的类型是:

1:

圆形2:

长方形3:

正方形";

cin>>itype;

switch(itype)

{

case1:

cout<<"圆的半径是:

";

cin>>radius;

area=pi*radius*radius;

cout<<"面积是:

"<

break;

case2:

cout<<"矩形的长,宽分别为";

cin>>a>>b;

cout<<"面积为:

"<

break;

case3:

cout<<"正方形的边长是";

cin>>a;

cout<<"面积是"<

break;

defaut:

cout<<"不是合法的输入"<

}

}

时间的结构体:

#include

usingnamespacestd;

structriqi

{

intyear;

intmon;

intday;

inthour;

intminut;

intsecond;

};

voidmain()

{

riqia;

cout<<"输入时间日期"<

cout<<"输入年份"<

cin>>a.year;

cout<<"输入月份"<

cin>>a.mon;

cout<<"输入日期"<

cin>>a.day;

cout<<"输入小时"<

cin>>a.hour;

cout<<"输入分钟"<

cin>>a.minut;

cout<<"输入秒"<

cin>>a.second;

cout<<"时间是:

"<<<

"<

"<

}

[实验结果]

运行结果:

sum=55

去掉#include后出现四个错误

errorC2143:

syntaxerror:

missing';'before'<'

errorC2065:

'cout':

undeclaredidentifier

errorC2297:

'<<':

illegal,rightoperandhastype'char[5]'

errorC2065:

'endl':

undeclaredidentifier

实验三、函数的应用(2学时)

 

1、实验目的:

掌握函数的定义和调用方法。

练习重载函数使用。

练习函数模板的使用

练习使用系统函数。

2、实验任务:

编写一个函数把华氏温度转换为摄氏温度,转换公式为:

C=(F-32)*5/9。

编写重载函数Max1可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。

使用重函数模板重新实现上小题中的函数Max1。

使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。

用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。

3、实验步骤与结果

编写函数floatConvert(floatTempFer),参数的返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。

程序名为lab3_1.cpp.

分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。

程序名:

lab3_2.cpp。

使用函数模板实现求任意类型数的最大值,针对不同的参数个数,编写两个同名函数模板max1,其参数个数不同,实现函数重载,在main()函数中测试函数的功能。

和序名:

lab3_3.cpp。

在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。

程序名:

lab3_4.cpp。

编写递归函数intfib(intn),在主程序中输入n的值,调用fib函数计算Fibonacci级数。

公式为fib(n)=fib(n-1)+fib(n-2),n>2;fib

(1)=fib

(2)=1。

使用if语句判断函数的出口,在程序中用cout语句输出提示信息。

程序名:

lab3_5.cpp。

 

7)调试操作步骤如下:

选择菜单命令Build|StartDebug|StepIn,系统进入单步执行状态,程序开始运行,并出现一个DOS窗口,此时光标停在main()函数的入口处。

把光标移到语句answer=fib(n)前,从Debug菜单单击RunToCursor,在程序运行的DOS窗口中按提示输入数字10,这时回到可视界面中,光标停在第11行,观察一下n的值。

从Debug菜单中单击StepInto,程序进入fib函数,观察一下n的值,把光标移到语句return(fib(n-2)+fib(n-1))前,从Debug菜单单击RuntoCursor,再单击StepInto,程序递归调用fib函数,又进入fib函数,观察n的值。

继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归调用的理解。

再试试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。

4、实验原理

C++中函数的重载使得同样的函数名下,只要参数类型、数目不同时,即可根据输入的数据进行相应的函数调用,使用起来简单方便。

5、思考与体会

C++中,函数的运用与之前学过的C语言既有相同之处,也有着不同的地方。

相同的地方在于格式、用法等框架上的不变。

但是C语言中对于同样的函数名是只能够申明一种函数的,倘若有相同的函数名出现系统即会报错,所以用起来有时是极为不便的。

而C++中,函数的多态性与重载使得这一缺点得以补偿。

在对于不同的元素或对象进行同一种操作时,可以使用同样的函数名,只是对于形参类型的不同,虽然是调用的不同的函数,但是只要形参的个数、类型不同,是允许同名函数的存在的。

这对于编程与审阅都是很方便的。

6、部分参考代码

lab3_1:

#include

//转换公式

floatConvert(floatTempFer){

floatcon;

con=(TempFer-32)*5/9.0;

returncon;

}

//主函数

voidmain(void){

floatTem;

cout<<"请输入华氏温度:

"<

cin>>Tem;

cout<<"摄氏温度为:

"<

}

 

Lab3_2:

#include

//参数为两个整形的函数

intmax1(inta,intb){

a=a>b?

a:

b;

returna;

}

//参数为三个整形的函数

intmax1(inta,intb,intc){

a=a>b?

a:

b;

a=a>c?

a:

c;

returna;

}

//参数为两个双精度浮点形的函数

intmax1(doublea,doubleb){

a=a>b?

a:

b;

returna;

}

//参数为三个双精度浮点形的函数

intmax1(doublea,doubleb,doublec){

a=a>b?

a:

b;

a=a>c?

a:

c;

returna;

}

voidmain(void){

inta;

doubleb;

a=max1(1,2);

cout<

a=max1(3,9,5);

cout<

b=max1(1.3,4.4);

cout<

b=max1(3.4,5.6,7.5);

cout<

}

Lab3_3:

#include

usingnamespacestd;

intmax1(inta,intb){

a=a>b?

a:

b;

returna;

}

intmax1(inta,intb,intc){

a=a>b?

a:

b;

a=a>c?

a:

c;

returna;

}

intmain(){

inti,j,k;

cout<<"请输入要比较的3个数:

"<

cin>>i>>j>>k;

cout<<"最大数为:

"<

cout<<"请输入要比较的2个数:

"<

cin>>i>>j;

cout<<"最大数为:

"<

}

Lab3_4

#include

#include

voidmain(void){

doublex;

inty;

cout<<"请输入X,Y的值"<

cin>>x>>y;

cout<

}

Lab3_5

#include

intfib(intn){

ints;

if(n<=2)

s=2;

else

s=fib(n-1)+fib(n-2);

returns;

}

voidmain(void){

intn;

cout<<"Inputn:

"<

cin>>n;

cout<

}

 

实验四、类与对象(2学时)

 

1、实验目的:

掌握类的定义和使用

掌握类的定义和对象的声明

复习具有不同访问属性的成员的访问方式。

察构造函数和析构函数的执行过程。

学习类的聚集使用方法。

使用DEBUG来调试程序,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。

2、实验任务

1)定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。

其中rank为枚举类型CPU_Rank,定义为enumCPU_Rank={P1=1,P2,P3,P4,P5,P6,P7},frequency为单位为MHz的整型数,voltage为浮点型的电压值。

观察构造函数和析构函数的调用顺序。

2)定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。

3、实验步骤与结果

首先定义枚举类型CPU_Rank,例如enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。

在主程序中定义一个CPU类的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。

程序名:

lab4_1.cpp。

使用debug调试功能观察lab4_1.cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。

参考程序如下:

(3)调试操作步骤如下:

Build|StartDebug|StepInto命令,系统进行单步执行状态,程序开始运行,一个DOS窗口出现,此时光标停在main()函数的入口处;

A)从Debug菜单栏中单击StepOver,此时,光标下移,程序准备执行CPU对象的初始化;

B)单击StepInto,程序准备执行CPU类的构造函数;

C)连续单击StepOver,观察构造函数的执行情况,直到执行完构造函数,程序回到主函数;

D)此时程序准备执行CPU对象的run()函数,单击StepInto,程序进入run()成员函数,连续单击StepOver,直到回到main()函数;

E)继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、析构函数、成员函数的执行顺序的认识;

F)再试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。

G)选定义CPU类、RAM类、CDROM类。

再定义Computer类:

定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop,可在其中输出提标信息居主程序中定义一个Computer的对象,调用其成员函数,观察类对象及其成员变量的构造与析构顺序,以及成员函数的调用。

程序名:

lab4_2.cpp。

(5)使用debug调试功能观察lab4_2.cpp程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。

4、实验原理

类的引入、定义和使用

类的嵌套使用

构造函数与析构函数的作用即执行时段

枚举类型的用法

Visualc++调试工具的使用

 

5、思考与体会

C++是面向对象的一种计算机语言,虽然与C语言有着很大的关系,但是于面向过程的C,还是有不同,比如引入了类这一概念。

类类似于C语言中的结构体,但又与结构体有区别。

类是抽象得到的数据和行为的封装,在C++中是一个基础的成员。

6、部分参考代码

Lab4_1

#include

enumRank{p1=1,p2,p3,p4,p5,p6,p7};

//CPU类

classCPU{

public:

Rankrank;

intfrequency;

floatvoltage;

CPU(Rankr,intf,floatv){//构造函数

cout<<"构造了一个CPU"<

rank=r;

frequency=f;

voltage=v;

}

voidrun(){

cout<<"CPU开始运行"<

}

voidstop(){

cout<<"CPU停止运行"<

}

voidshow(){

cout<<"RANK="<

cout<<"frequency="<

cout<<"voltage="<

}

~CPU(){cout<<"析构函数";}//析构函数

};

intmain(){

CPUcpu(p5,500,2000);

cpu.run();

cpu.show();

cpu.stop();

return0;

}

Lab4_2

#include

usingnamespacestd;

enumRank{p1=1,p2,p3,p4,p5,p6,p7};

//CPU类

classCPU{

public:

Rankrank;

intfrequency;

floatvoltage;

CPU(Rankr,intf,floatv){

cout<<"构造了一个CPU"<

rank=r;

frequency=f;

voltage=v;

}

voidrun(){

cout<<"CPU开始运行"<

}

voidstop(){

cout<<"CPU停止运行"<

}

voidshow(){

cout<<"RANK="<

cout<<"frequency="<

cout<<"voltage="<

}

~CPU(){cout<<"cpu析构函数"<

};

//RAM类

classRAM{

public:

RAM(inti=0){cout<<"构造了一个RAM"<

~RAM(){cout<<"Ram析构函数"<

};

//CDROM类

classCDROM{

public:

CDROM(inti=0){cout<<"构造了一个CDRAM"<

~CDROM(){cout<<"CDRam析构函数"<

};

//computer类

classcomputer{

public:

computer(Rankr,intf,floatv){

CPUcpu(r,f,v);//定义CPU对象

RAMram

(1);//定义RAM对象

CDROMcdrom

(1);//定义CDROM对象

cpu.run();

cpu.show();

cpu.stop();

}

};

intmain(){

computercom(p4,300,3000);

return0;

}

实验七、继承与派生(一、二)4学时

 

1、实验目的:

学习定义和使用类的继承关系,定义派生类。

熟悉不同继承方式下对基类成员的访问控制。

学习利用虚基类解决二义性问题

2、实验任务

a)定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?

编程试试看。

b)定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观察构造函数和析构函数的执行情况。

c)定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。

自行车类有高度(height)等属性,汽车类有座位数(SeatNum)等属性。

从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设置为虚基类。

如果不把vehicle设置为虚基类,会有什么问题?

编程试试看。

3、实验步骤

编写程序定义基类Animal,成员变量age定义为私有的。

构造派生类dog,在其成员函数SetAge(intn)中直接对age赋值时,会出现类似以下的错误提示:

errorC2248:

’age’:

cannotaccessprivatememberdeclaredinclass‘Animal’

errorC2248:

’age’:

cannotaccessprivatememberdeclaredinclass‘Animal’

把age改为公有成员变量后重新编译就可以了。

程序名为:

lab7_1.cpp

(2)编写程序定义一个基类BassClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提示信息,观察构造函数和析构函数的执行情况。

程序名为:

lab7_2.cpp。

4、实验原理

C++语序一个基类衍生出多个派生类,也允许一个派生类继承多个父类

派生类中可以调用父类的的Public和protect成员,但不能直接调用基类的private成员

对于构造函数,先调用父类的构造函数,在调用子类的。

析构函数的调用则相反

5、思考与体会

对于一个派生类有众多的基类是C++继承方面的一个特殊之处,别的面向对象语言像Java都是不允许的。

C++的这种允许有时的确方便我们编程。

6、部分参考代码

Lab7_1

#include

usingnamespacestd;

 

classAnimal{

public:

intage;

};

classdog:

publicAnimal{

public:

intSetAge(intn){

age=n;

returnage;

}

};

voidmain(void){

intage;

dogd;

age=d.SetAge(3);

cout<<"age="<

}

Lab7_2

#include

usingnamespacestd;

classBaseClass{

public:

intNumber;

BaseClass(){

cout<<"这是父类的构造函数"<

}

~BaseClass(){

cout<<"这是父类的析构函数"<

}

};

classDerivedClass:

publicBaseClass{

public:

DerivedClass(inti=0){

cout<<"这是子类的构造函数"<

}

~DerivedClas

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1