《C程序设计》实验指导书.docx

上传人:b****6 文档编号:7592724 上传时间:2023-01-25 格式:DOCX 页数:46 大小:169.14KB
下载 相关 举报
《C程序设计》实验指导书.docx_第1页
第1页 / 共46页
《C程序设计》实验指导书.docx_第2页
第2页 / 共46页
《C程序设计》实验指导书.docx_第3页
第3页 / 共46页
《C程序设计》实验指导书.docx_第4页
第4页 / 共46页
《C程序设计》实验指导书.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

《C程序设计》实验指导书.docx

《《C程序设计》实验指导书.docx》由会员分享,可在线阅读,更多相关《《C程序设计》实验指导书.docx(46页珍藏版)》请在冰豆网上搜索。

《C程序设计》实验指导书.docx

《C程序设计》实验指导书

《C++程序设计》实验指导书

杜红燕编

《C++程序设计》

课程实验指导书

 

长沙学院计算机科学与技术系

前言

本书是《C++程序设计》课程的实验指导书。

初学程序设计的人,都有一个体会,看程序容易,但自己动手写程序难,甚至感觉无从下手,究其原因就在于没有把握住学习程序设计的根本方法,学习程序设计的关键是多实践,通过上机体会和掌握程序设计的思想和方法,通过上机验证程序的正确性,为此我们编写了这本实验指导书。

本书的主要内容分为三个部分,第一部分为实验内容,对每个实验的实验目的、实验类型、实验学时、实验原理及知识点、实验环境(硬件环境、软件环境)和实验内容及步骤进行简单介绍,第二部分为实验指导,对每个实验的实验方法,实验步骤及补充的实验知识进行详细介绍,第三部分为实验报告。

C++程序设计的环境有许多,在这里我们选用的是MicroSoftVisualC++6.0。

对书中的每个实验题目,在实验指导部分都给出了编程提示,个别实验给出了程序的参考代码,最后还介绍了常用标准库函数的函数原型。

需要强调一点,程序设计是一个创作的过程,解决一个问题的方法不是唯一的,所以请大家在阅读本书的实验指导之前,已经独立思考过对这些问题的解决方法,这样才有助于程序设计水平的提高。

 

编者

2008年2月

第一部分实验内容

实验1:

类的定义和构造……………………………………………………………………2

实验2:

堆与拷贝构造函数、静态成员与友元、运算符重载……………………………4

实验3:

通过继承进行软件的渐增式开发…………………………………………………8

实验4:

I/O流与文件操作………………………………………………………………….11

实验5:

模板与异常处理……………………………………………………………………13

第二部分实验指导

VisualC++6.0的集成环境………………………………………………………………….16

实验1:

类的定义和构造……………………………………………………………………26

实验2:

堆与拷贝构造函数、静态成员与友元、运算符重载……………………………31

实验3:

通过继承进行软件的渐增式开发…………………………………………………34

实验4:

I/O流与文件操作…………………………………………………………………..39

实验5:

模板与异常处理……………………………………………………………………43

C/C++常用标准库函数………………………………………………………………………46

 

第一部分

实验内容

实验1:

类的定义和构造

一、实验目的

1、掌握类的定义和使用

2、学习构造类的方法

3、掌握如何定义构造函数和析构函数

4、掌握初始化对象的方法

5、理解面向对象程序设计的思想

二、实验类型验证

三、实验学时4学时

四、实验原理及知识点

1、类的定义

2、类成员的访问控制

3、类的数据成员和成员函数

4、构造函数和析构函数

5、对象的定义与初始化

五、实验环境(硬件环境、软件环境)

1、软件:

Windows操作系统,VisualC++6.0

2、硬件:

CPU奔腾Ⅲ;内存64兆以上(最好128兆以上);

六、实验内容及步骤

1、定义一个描述学生通讯录的类,数据成员包括:

姓名、学校、电话号码和邮编;成员函数包括:

输出各个数据成员的值,分别设置和获取各个数据成员的值。

2、将第一个上机实验题中的成员函数Init改为构造函数,将成员函数FreeSpace改为析构函数。

增加一个缺省的构造函数,使指针pName,pSchool和pNum的初值为0,使Box包含空字符串。

3、定义分数类Rational,要求在private部分用整数表示分子和分母,分子和分母以简化形式表示,即24/36应该以2/3的形式表示,并提供public成员函数实现如下功能:

(1)两个分数相加,结果表示为简化形式;

(2)两个分数相减,结果表示为简化形式;

(3)按a/b的形式输出分数的值,a、b为整数;

(4)按浮点数的形式输出分数的值。

七、思考与练习

1、编写Time类,要求:

(1)包含年、月、日、时、分、秒的信息;

(2)构造函数将类的对象初始化为系统当前时间(使用头文件time.h中的time()函数);

(3)能按标准格式输出对象表示的时间。

2、编写矩形类,要求可以提示用户输入矩形的长度和宽度,并显示该矩形的长度、宽度和面积。

实验2:

堆与拷贝构造函数、静态成员与友元、运算符重载

一、实验目的

1、领会拷贝构造函数的实质

2、学会使用堆对象的分配与释放

3、领会运算符重载的意义

4、学会使用this指针

5、理解友元的语法和含义

6、在此基础上领会和掌握面向对象的程序设计思想。

二、实验类型验证

三、实验学时4学时

四、实验原理及知识点

1、堆对象的分配与释放

2、拷贝构造函数

3、类的复合

4、This指针

5、静态数据、友元函数和友元类

6、运算符重载的概念

7、单目运算符重载

8、双目运算符重载

9、重载流插入和流提取运算符

10、赋值运算符重载

五、实验环境(硬件环境、软件环境)

1、软件:

Windows操作系统,VisualC++6.0

2、硬件:

CPU奔腾Ⅲ;内存64兆以上(最好128兆以上);

六、实验内容及步骤

1、建立一个Stock类,含有股票代码和股票现价两个数据成员。

用new自动为Stock类的对象分配内存,并将股票”600001”,现价8.89存入内存的相应域中。

在类中增加静态数据成员记载创建对象的个数,增加拷贝构造函数并调用。

2、对如下圆柱类Column的定义:

classColumn{

public:

Column(doublex,doubley,doubler,doubleh);

~Column();

doublearea();//求圆柱面积

doublevolume();//求圆柱体积

private:

doubleheight;//高度

doubleradius;//半径

doublex;//底面圆心x坐标

doubley;//底面圆心y坐标

};

要求:

(1)实现类Column中的四个成员函数;

(2)增加一个友元函数,实现从键盘读取四个double类型的数据对类Column的对象进行赋值的功能;

(3)增加一个友元函数,实现将类Column的对象输出到屏幕的功能,输出信息包括对象的基本信息以及对象的面积和体积。

3、对于下面定义的类Test:

classTest{

private:

inta;

doubleb;

};

要求:

(1)为类Test的每个数据成员增加一个set函数,并使这些set函数都可以被连续调用;

(2)为类Test的每个数据成员增加一个get函数。

(3)如果要求所有get函数都可以被连续调用,这些函数该如何编写?

4、定义一个复数类,通过重载运算符:

*,/,直接实现二个复数之间的乘除运算。

编写一个完整的程序,测试重载运算符的正确性。

要求乘法“*”用友元函数实现重载,除法“/”用成员函数实现重载。

七、思考与练习

1、定义一个复数类,通过重载运算符:

*,/,直接实现二个复数之间的乘除运算。

编写一个完整的程序,测试重载运算符的正确性。

要求乘法“*”用友元函数实现重载,除法“/”用成员函数实现重载。

2、定义包含年、月、日信息的日期类Date,并重载二元运算符“+”,使之具有日期对象和整数(天数)相加的功能,并编程测试。

3、下列程序定义了一实部为real,虚部为imag的复数类complex,要求重载运算符“+”、“-”、“*”实现复数对象的加法、减法、乘法运算,并编写测试程序。

如果要进行a=b+c*d;(a、b、c、d都是类Complex的对象)这样的运算,需要重载赋值运算符吗?

为什么?

classComplex{

public:

complex(doubler=0,doublei=0)

{

real=r;

imag=i;

}

private:

doublereal,imag;

};

4、于下面的类MyString,要求重载一些运算符后可以计算表达式:

a=b+c;,其中a、b、c都是类MyString的对象。

请重载相应的运算符并编写程序测试。

classMyString{

public:

MyString(char*s){

str=newchar[strlen(s)+1];

strcpy(str,s);

}

~MyString(){

delete[]str;

}

private:

char*str;

};

5、对于下面的Time类:

classTime{

public:

Time(inth=0,intm=0,ints=0);

private:

inthour,minute,second;

};

要求:

(1)实现构造函数,是类Time的数据成员可以得到正确的赋值;

(2)重载流插入运算符<<,按照hh:

mm:

ss的格式输出类Time的对象;

(3)重载流提取运算符>>,按照hh-mm-ss的格式输入类Time的对象。

实验3:

通过继承进行软件的渐增式开发

 

一、实验目的

1、掌握继承方法,理解多态性

2、掌握虚函数的用法,观察其多态性

3、掌握软件的渐增式开发方法

二、实验类型设计

三、实验学时6学时

四、实验原理及知识点

1、继承和派生的基本概念

2、继承的定义

3、基类和派生类对象的转换

4、类指针的使用

5、多态性的意义和作用

6、虚函数的定义方法

7、抽象基类的作用和定义方法

8、虚析构函数的作用和使用方法

9、如何在程序中实现多态性

10、软件的渐增式开发方法

五、实验环境(硬件环境、软件环境)

1、软件:

Windows操作系统,VisualC++6.0

2、硬件:

CPU奔腾Ⅲ;内存64兆以上(最好128兆以上);

六、实验内容及步骤

1、下面是一个形状类Shape,编写类Shape的派生类:

圆类Circle、三角形类Triangle和矩形类Rectangle,并重定义基类的成员函数使之返回正确的结果(show函数要输出对象的基本信息),然后编写程序测试它们。

classShape{

public:

//形状的面积

doublearea(){

return0;

}

//形状的周长

doublegirth(){

return0;

}

//输出对象的信息

voidshow(){

cout<<"ShapeObject:

"<

}

private:

};

2、声明一个基类Currency,其中含有protected类型的数据成员Japan和Europe,分别代表日元、欧元对美元的汇率。

成员函数set()用来设置两个数据成员的初始值,定义print_exchang()为纯虚函数。

声明类Ja和Eur分别为Currency的派生类,其成员函数print_exchange()分别用来计算10000日元和100欧元兑换多少美元。

按照惯例,汇率的表示方式是:

1美元兑换日元116.30,1欧元兑换美元1.1634(116.30和1.1634要在set()中存入Japan和Europe中)。

3、给定如下抽象类:

classshape{

protected:

doubler;

public:

shape(doublex){r=x;}

virtualvoidarea()=0;

virtualvoidperimeter()=0;

};

(1)以shape类为基类,派生一个circle圆形类、一个in_square圆的内接正方形类、一个ex_square圆的外接正方形类,在派生类中对shape类中求面积和周长的纯虚函数进行重载。

(2)对类进行实例化,输出运算结果

4、给定单向链表类List,要求以List类为基类建立两种类型的表:

队列(先进先出)与堆栈(先进后出),请编写程序实现队列与堆栈的存储和读取操作,编写一个测试程序,演示类的功能。

classList{

public:

List()

{

head=NULL;

tail=NULL;

next=NULL;

}

virtualvoidstore(inti)=0;//存储数据

virtualintretrieve()=0;//读取数据

List*next;//指向表的下一项

intnum;//用于存储节点数据

protected:

List*head;//指向表头

List*tail;//指向表尾

};

六、思考与练习

1、编写一个学生和教师数据输入和显示程序,学生数据有编号、姓名、班级和成绩,教师数据有编号、姓名、职称和部门。

要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师类数据操作类teacher的基类。

2、编写一个程序计算出球、圆柱和圆锥的表面积和体积。

要求:

(1)定义一个基类圆,至少含有一个数据成员半径;

(2)定义基类的派生类球、圆柱、圆锥,都含有求表面积和体积的成员函数和输出函数。

(3)定义主函数,求球、圆柱、圆锥的和体积。

实验4:

I/O流与文件操作

一、实验目的

1、掌握文件和流的概念

2、学会使用FILE结构和使用文件流进行文件的打开、建立、读、写和关闭操作

二、实验类型验证

三、实验学时2学时

四、实验原理及知识点

1、文件和流的概念

2、使用FILE结构操作文件

3、使用文件流操作文件

五、实验环境(硬件环境、软件环境)

1、软件:

Windows操作系统,VisualC++6.0

2、硬件:

CPU奔腾Ⅲ;内存64兆以上(最好128兆以上);

六、实验内容及步骤

1、假设有一个文件“one.dat”已经存在,编写程序创建文件“two.txt”,并将文件“one.dat”中的内容复制到文件“two.txt”中。

2、下面是一个三角形类Triangle的定义:

classTriangle{

public:

Triangle(doublea,doubleb,doublec){

x=a;

y=b;

z=c;

}

intsaveToFile(ostream&outFile);

intloadFromFile(istream*inFile);

private:

doublex,y,z;

};

(1)实现成员函数saveToFile,将对象自身保存到文件中;

(2)实现成员函数loadFromFile,从文件中恢复对象;

(3)编写程序使用类Triangle,并实现如下功能:

(1)将类Triangle的多个对象保存到一个指定文件中;

(2)能一次从指定文件中恢复多个对象。

七、思考与练习

1、输入三角形的三边a,b,c,计算三角形的面积的公式:

Area=sqrt(s*(s-a)*(s-b)*(s-c)),其中s=(a+b+c)/2

形成三角形的条件是:

a>b+c,b>a+c,c>a+b;

编写程序,输入a,b,c,检查a,b,c是否满足以上条件,如不满足,由cerr输出有关出错信息。

2、建立两个磁盘文件f1.dat和f2.dat,编写程序实现以下工作:

(1)从键盘输入20个整数,分别存放在两个磁盘文件中(每个文件放10个);

(2)从f1.dat读入10个数,然后存放到f2.dat文件原有数据的后面;

(3)从f2.dat中读入20个整数,将它们按从小到大的顺序存放到f2.dat(不保留原来的数据)。

3、设计一个管理图书目的简单程序,提供的基本功能包括:

可连续将新书存入文件“book.dat”中,新书信息加入到文件的尾部;也可以根据输入的书名进行查找;把文件“book.dat”中同书名的所有书显示出来。

为简单起见,描述一本书的信息包括:

书号,书名,出版社和作者。

实验5:

模板与异常处理

一、实验目的

了解模板的概念、定义,了解C++的异常处理机制。

二、实验类型验证

三、实验学时4学时

四、实验原理及知识点

1、异常的基本概念

2、异常的触发、传播和处理

3、类属程序设计

4、模板的定义和使用

五、实验环境(硬件环境、软件环境)

1、软件:

Windows操作系统,VisualC++6.0

2、硬件:

CPU奔腾Ⅲ;内存64兆以上(最好128兆以上);

六、实验内容及步骤

1、编写一个程序,使用new运算符动态分配空间,当空间分配失败时抛出异常,并捕获处理该异常,处理异常时要考虑不能有内存泄漏。

2、写一个函数模板,求数组中的最大元素。

使得函数调用时,数组的类型和返回值类型可以是整数也可以是双精度类型。

3、以下是一个整数栈类的定义:

constintSIZE=100;

classStack

{

public:

Stack();

~Stack();

voidPush(intn);

intPop();

private:

intstack[SIZE];

inttos;

};

(1)编写一个栈的类模板(包括其成员函数定义),以便为任何类型的对象提供栈数据结构操作

(2)在应用程序中创建整数栈、字符栈和浮点数栈,并提供一些数据供进栈、退栈和打印操作

七、思考与练习

求一元二次方程式ax2+bx+c=0的实根,如果方程没有实根,则利用异常处理机制输出有关警告信息。

 

第二部分

实验指导

 

VisualC++6.0的集成环境

一、VC++6.0主要菜单、工具

可视化与面向对象的编程技术是当今世界流行的编程技术,在众多的开发工具中,Microsoft公司的VC++6.0独树一帜,深得广大程序员的青睐。

VC++6.0提供了编写应用程序的所有工具,它包含了许多单独的组件,并由窗口、对话框、菜单、工具栏等组成了一个统一的整体。

首先,看一下启动的主界面:

1.VC++6.0的菜单

VisualC++6.0的菜单栏如图所示,其中包括File,Edit,View等共九个菜单选择项,通过它们,你可以轻松地完成编辑程序和资源、编译、链接及调试程序等各项工作。

要激活菜单栏中的菜单有两种方法:

一是用鼠标左键直接单击相应的菜单,另一种方法是在按住Alt键的同时,按下相应菜单的热键,例如要激活Edit菜单只要按下Alt+E键即可。

下图是VisualC++6.0的主菜单,当激活某个菜单后,会弹出相应的下拉子菜单。

其中包含了多个菜单项,用于执行相应的功能或命令

有一些常用的菜单命令具有快捷键,例如File菜单中的New菜单命令,它的快捷键是Ctrl+N,只要直接按下此快捷键就可以执行相应的菜单命令。

有的菜单项显示为灰色,表示这些菜单命令在此时为禁用状态。

以下介绍几种常用的菜单,这些在今后的编程中会经常使用。

1、File文件菜单

File菜单如图所示,

其中包含了各种对文件进行操作的选项,如加载、保存、打印和退出等。

各菜单项的功能分述如下:

New菜单项(Ctrl+N)此菜单项的快捷键是Ctrl+N。

用于创建新的文件、工程、工作区或其他文档。

当您选中此菜单项后,屏幕将会出现New对话框,如图所示。

其中包含了4个选项卡:

File、Project、Workspace和OtherDocuments。

在File选项卡中,您可以选择创建各种文件,当选中Addtoproject复选框时,则新创建的文件将加入到当前工程中。

表1-1New对话框中可创建的项目类型工程

选项说明

ATLCOMAppWizard创建ATL应用程序

ClusterResourceTypeWizard创建多重资源类型

CustomAppWizard创建自定义的AppWizard

DatabaseProject创建数据库项目

DevStudioAdd-inWizard创建自动化宏

ExtendedStoredProcWizard创建扩展存储过程

ISAPIExtensionWizard创建Internet服务器或过滤器

Makefile创建Make文件

MFCActiveXControlWizard创建ActiveX控件程序

MFCAppWizard[dll]创建MFC动态链接库

MFCAppWizard[exe]创建MFC可执行程序

UtilityProject创建实用工具项目

Win32Application创建Win32应用程序

Win32ConsoleApplication创建Win32控制台应用程序此项即为控制台程序项目

Win32Dynamic-LinkApplication创建Win32动态链接库

Win32StaticLibrary创建Win32静态库

在新建立程序时,首先要建立工程项目文件,根据程序类型选择工程。

上表说明了各种工程项目的说明。

File选项卡中可以创建的文件类型见表1-2

New对话框中可创建的文件类型

文件选项说明

ActiveXServerPage创建活动的服务器页

BinaryFile创建二进制文件

BitmapFile创建位图文件

C/C++HeaderFile创建C/C++头文件

C++SourceFile创建C++源文件

CursorFile创建光标文件

HTMLPage创建HTML文件

IconFile创建图标文件

2、编辑菜单

Edit菜单中的命令是用来使用户便捷地编辑文件内容,如进行删除、复制等操作,其中的大多数命令功能与windows中的标准字处理程序的编辑命令一致。

3、VIEW菜单:

 view菜单中的命令主要用来改变窗口和工具栏的显示方式,激活调试时所用的各个窗口等。

 

4、插入菜单

Insert菜单中的命令主要用于项目

及资源的创建和添加。

   

5、Project菜单

  Project菜单中的命令主要用于项目

的操作,如项目中添加源文件等。

6、Build菜单

Build菜单中的命令主要用来应用

程序的编译、连接、调试、运行。

7、工具菜单Tools菜单中的命令主要用于选择

或制定开发环境中的一些实用工具。

8、窗口菜单

Windows菜单中的命令主要用于文档窗口的操作。

如排列文档、打开或关闭一个文档窗口、重组或切分文档窗口等。

9、帮助菜单

VisualC++6.0 同大多数其它的Windows应用软件一样,提供了大量详细的帮助信息,而Help菜单便是得到这些帮助信息的最

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

当前位置:首页 > 高等教育 > 工学

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

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