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

更新时间:2024-05-08 15:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

东北林业大学计算机科学与技术专业 《C++程序设计》实验指导书

1 实验目的与要求

上机操作是本课程必不可少的实践环节,主要目的是锻炼和培养学生实际操作技能和解决实际问题的能力。要求学生掌握C++语言程序的设计、调试和运行方法,悉用C++语言进行程序设计和调试的全过程,获得用高级语言解题的实际体会,加深对C++语言本身的理解,得到程序设计方法和技巧的实际训练,从而使学生能真正利用C++语言解决编程问题。

(1)加深对讲授内容的理解,尤其是一些语法规定,光靠课堂讲授,既枯燥无味又难以记住,但它们都很重要。通过多次上机,就能自然地、熟练地掌握。通过上机来掌握语法规则是行之有效的方法。

(2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C语言程序开发的环境。一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件。使用者应该了解为了运行一个C++程序,需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自已开发程序。每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一、二种计算机系统的使用,再遇到其它的系统时便会触类旁通,很快地学会。

(3)学会上机调试程序。也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。经验丰富的人,当编译时出现\出错信息\时,能很快地判断出错误所在,并改正之。而缺乏经验的人即便在明确的出错提示下也往往找不出错误而求救于别人。计算机技术是实践性很强的技术,要求从事这一领域的人不仅能了解和熟悉有关理论和方法,还要求自己动手实现。对程序设计来说,要求会编程序并上机调试通过。因此调试程序本身是程序设计课程的一个重要的内容和基本要求,应给予充分的重湘。调试程序的经验固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积,而且有些经验是只能\会意\难以\言传\。因此,在实验时干万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变输入数据的方法等),再进行编译、连接和运行。甚至于\自设障碍。,即把正确的程序改为有错的(例如用scanf函数输入变量时,漏写\符号;使数组下标出界;使整数溢出等),观察和分析所出现的情况。这样的学习才会有真正的收获,是灵活主动地学习而不是呆板被动的学习。

2 实验环境

(1)计算机的硬件配置 PC系列微机。

(2)计算机的软件配置 Windows xp、Windows 2000等。 C语言的集成开发环境Visual C++6.0。

3 Visual C++6.0环境的程序开发步骤

(1)启动Visual C++6.0。在Windows环境下单击【开始】按钮,然后选择弹出菜单中的【程序】→【Microsoft Visual Studio 6.0】→【Microsoft Visual C++6.0】。 (2)建立一个新项目。选择主菜单File中的New命令,调出New对话框,并在该对话框中单击Projects选项卡,在所列出的“项目”中选择“Wim32 Console Application”项目,然后在右边的项目命名框中输入要建立的项目名字,单击OK按钮,如图1所示。系统弹出如图2所示的对话框,在该对话框中选择An empty project单选钮,表示选择空项目,单击Finish按钮;系统弹出New Project Information对话框,在确认项目建立的信息后,单击OK按钮,从而完成新项目的建立。

图1 建立项目New对话框

图2 选择项目类型的对话框

(3)建立源文件。新建的项目是空的,下面要在新项目中创建一个C++源程序文件。选择主菜单File中的New,调出如图3所示的New对话框。在New对话框下,选中File选项卡,并在该选项卡中选择C++ Source File项,同时在右边的File文本框中输入源文件名,单击OK按钮。

图3 建立C++源文件New对话框

(4)编辑源文件。现在就可以在系统提供的编辑区对建立的源文件输入程序内容了。编辑以后的情况如图4所示。输入完成后,不要忘记单击存盘按钮。

(5)连编应用程序。源文件输入之后,就可以对应用程序进行连编了。单击工具条上的按钮

或选择菜单Build→Compile 源文件名.cpp是对源程序进

或选择Build→Build

行编译,而生成可执行程序,则需要单击工具条上的按钮项目名.exe。

(6)执行应用程序。单击工具条上的按钮目名.exe。

或选择菜单Build→Execute项

(7)关闭工作区。每次完成C++项目之后,必须要安全地保护好已建立的应用程序与数据,应正确地使用关闭工作区来终止项目。执行File→Close Workspace,若退出VC++环境,则执行File→Exit。

图4 编辑源文件

4 实验一般步骤

(1)准备好实验所需的程序。手编程序应书写整齐,并经人工检查无误后才能实验,以提高实验效率。对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意。初学者切忌不编程序或抄别人程序去上机,应从一开始就养成严谨的科学作风。

(2)上机输入和调试自己所编的程序。应该一人一组,独立实验。上机过程中出现的问题,除了是系统的问题以外,一般应自已独立处理,不要轻易举手问教师。尤其对“出错信息”,应善于自己分析判断。这是学习调试程序的良好机会。

在使用键盘时,最好采用正确的指法击键,为今后正确使用键盘打下基础。 在程序调试通过后,打印输出程序清单和运行结果,在运行时要注意在输入不同数据时所得到的不同结果。此时应运行几次,分别检查在不同情况下程序是否正确。

(3)实验结束后,提交实验报告,实验报告应包括以下内容:

① 实验目的; ② 实验内容;

③ 程序清单(手写或计算机打印出的程序清单);

④ 运行结果(必须是上面程序清单所对应打印输出的结果);

⑤ 结果分析:对运行情况所作的分析以及本次调试程序所取得的经验。如果程序未能通过,应分析其原因。

5 实验时数

总实验时数不得少于16学时。

6 实验内容和要求

实验一 C++语言基础

一、目的要求

1·学会并利用C++语言的基本知识编写程序; 2·理解程序的结构;

3·掌握函数重载、引用的使用等。 二、实验内容

选作以下题目,编程序,然后上机调试运行,分析运行结果。

1.用动态分配空间的方法计算Fibonacci数列的前20项并存储到动态分配的空间中。

2.建立一个称为sroot()的函数,返回其参数的二次方根。重载sroot()三次,让他返回整数,长整数与双精度数的二次方根(计算二次方根时,可以使用标准库函数sqrt())。

3.编写C++风格的程序,解决百钱问题:将1元人民币兑换成1,2,5分的硬币,有多少种换法?

4.编写C++风格的程序,用二分法求解f(x)=0的根。

5.编写一个C++风格的程序,输入两个整数,将它们按由大到小的顺序输出。要求使用变量的引用。

实验二 类和对象

一、目的要求

1·掌握类和对象的定义方法、成员函数的实现与调试方法; 2·掌握类的构造函数和析构函数的定义方法; 3·掌握对象数据成员的初始化方法;

4·深刻领会构造函数和析构函数被调用的时间和特点以及它们在程序中的作用;

5·深刻领会类和对象的区别、类实现数据隐藏与封装的原理等。 二、实验内容

选作以下题目,编程序,然后上机调试运行,分析运行结果。

1. 下面是一个计算器类的定义,请完成该类成员函数的实现 class counter { Public:

counter(int number);

void increment();//给原值加1 void decrement();//给原值减1 int getvalue();//取得计数器值 int print();//显示计数 private: int value; };

2. 根据注释语句的提示,实现类Date的成员函数。

#include class Date{ public:

void printDate();//显示日期 void setDay(int d);//设置日的值 void setMonth(int m);//设置月的值 void setYear(int y);//设置年的值 private: int day,month,year; }; void main()

{ Date testDay; testDay.setDay(5); testDay.setMonth(10); testDay.setYear(2003); testDay.printDate(); }

3. 建立类cylinder,cylinder的构造函数被传递了两个double值,分别表示圆柱体的半径和高度。用类cylinder计算圆柱体的体积,并存储在一个double变量中。在类cylinder中包含一个成员函数vol(),用来显示每个cylinder对象的体积。

4. 构建一个类book,其中含有两个私有数据成员qu和price,建立一个有5个元素的数组对象,将qu初始化为1-5,将price初始化为qu的10倍。显示每个对象的qu*price的值。

5. 修改上题,通过对象指针访问对象数组,使程序以相反的顺序显示对象数组的qu*price的值。

6. 构建一个类Stock,含字符数组stockcode[]及整型数据成员quan,浮点型数据成员price。构造函数含3个参数:字符数组na[]及q,p。当定义Stock

的类对象时,将对象的第1个字符串参数赋给数据成员stockcode,第2个和第3个参数分别赋给quan和price。未设置第2个和第3个参数时,quan的值为1000,price的值为8.98。成员函数print()使用this指针,显示对象内容。

实验三 静态成员与友元

一、目的要求

1·掌握类中静态成员的定义方法;

2·掌握静态数据成员的初始化方法、静态数据成员和静态成员函数的访问和使用方法;

3·掌握友元函数和友元类的说明方法;

4·理解友元函数和友元类的使用特点。 二、实验内容

选作以下题目,编程序,然后上机调试运行,分析运行结果。

1.编写程序,统计某旅馆住宿客人的总数。要求输入客人的姓名,输出客人编号(按先后顺序自动生成)、姓名以及总人数。

2.编写程序,统计歌手大奖赛的参赛人数,每名选手的平均得分。要求依次输入选手的编号、姓名、各评委的打分;输入参赛总人数,并按平均得分由高到低的顺序输出每位选手的名次、姓名、平均得分。

3.利用友元函数求两个数的平方差

4.编写程序,设计一个友元函数比较学生成绩的高低,并输出所有学生中最高分和最低分学生的姓名。

5.日期类Date包含日期的年、月、日三个数据成员,编写一个友元函数,求两个日期之间相差的天数。

6.点类Point,包含点的坐标x、y两个数据成员,设计两个友元函数,分别计算两点间的水平距离和垂直距离。

7. 采用友元类方式重新编写以上各题的程序。

实验四 派生类与继承

一、目的要求

1. 掌握单继承和多重继承的方式定义派生类的方法;

2·深刻理解在各种继承方式下构造函数和析构函数的执行顺序; 3·理解和掌握公有继承、私有继承和保护继承对基类成员的访问机制; 4·理解虚基类的概念以及引入虚基类的目的和作用。

二、实验内容

选作以下题目,编程序,然后上机调试运行,分析运行结果。

1.下面的程序可以输出ASCII字符与所对应的数字的对照表,修改下列程序,使其可以输出字母a到字母z。

#include #include class table{ public:

table(int p){ i=p;}

void ascii(void); protected: int I; };

void table::ascii(void) { int k=1;

for(;i<127;i++){ cout<

if ((k)==0) cout<<”\\n” ; k++; }

cout<<”\\n”; } class der_table:public table{ public:

der_table(int p,char*m):table(p){c=m;} void print(void); protected: char*c; } ;

void der_table::print(void){ cout<

{ der_table ob1(32,”ASCII value-char”); ob1.print(); der_table ob2(‘a’,”ASCII value-char”);b2.print(); } 提示:修改后的主程序为 void main()

{ der_table ob(‘a’,’z’,”ASCII value-char”); ob.print(); }

2.下面的程序包含了Time类和Date类的声明,要求设计一个Birthtime类,它继承了Time类和Date类,并且还有一项出生孩子的名字Childname,同时设计主程序显示一个小孩的出生时间和名字。

#include #include class Time{ public:

Time(int h,int m,int s){ hours=h; minutes=m; seconds=s;} virtual void display()

{ cout<

protected: int hours,minutes,seconds; }; class Date{ public:

Date(int m,int d,int y){ month=m; day=d; year=y;}

virtual void display(){ cout<

3.建立普通的基类building,用来存储一座楼房的层数,房间数以及它的总平方数。建立派生类house,继承building,并存储卧室与浴室的数量,另外,建立派生类office,继承building,并存储灭火器与电话的数目。

4.按照图4所示的类层次图要求编写程序。定义属于类score的对象c1及类teacher的对象t1,分别输入各数据成员的值后再显示出这些数据。

5.递归调用被继承的基类成员函数,实现求素数的功能。 6.递归调用被继承的基类成员函数,求最大公约数。

teacher Degree Dep student old sno person name id stud addr tel score math eng 图4 类层次图

实验五 多态性

一、目的要求

1·理解运算符重载的概念和实质; 2·掌握运算符重载函数的定义方法;

3·掌握虚函数的定义方法及其在实现多态性中的作用; 4·理解和掌握实现动态多态性的前提条件; 5·理解静态多态性和动态多态性的区别。 二、实验内容

选作以下题目,编程序,然后上机调试运行。

1. 编一个程序,用成员函数重载运算符“+”和“-”,将两个二维数组相加和相减,要求第一个二维数组的值由构造函数设置,另一个二维数组的值由键盘输入。

2. 修改上题,用友员函数重载运算符“+”和“-”将两个二维数组相加和相减。

3. 编写程序,计算汽车运行的时间,首先建立基类car,其中含有数据成员distance存储两点间的距离。假定距离以英里计算,速度为每小时80英里,使用虚函数travel_time()计算并显示通过这段距离的时间。在派生类kilometre中,假定距离以千米计算,速度为每小时120千米,使用函数travel_time()计算并显示通过这段距离的时间。

实验六 模 板

一、目的要求

1·理解类模板和函数模板的意义及作用;

2·掌握类模板和函数模板的定义方法及在程序中的使用方法。 二、实验内容

选作以下题目,编程序,然后上机调试运行,分析运行结果。

1. 写一个函数模板,求数组中的最大元素,并且使得函数调用时,数组的类型和返回类型可以是整数也可以是双精度类型。

2. 写一个函数模板,使用冒泡排序将数组内容由小到大排列,并且使得函数调用时,数组的类型可以是整数也可以是双精度型。

3. 建立类模板input,在调用构造函数时,完成以下工作: (1) 提示用户输入;

(2) 让用户输入数据;

(3) 如果数据不在预定范围内,重新提示输入。

input型的对象应当按以下形式定义:

input ob(\”,min_value,max_value)

其中,promput message是提示输入信息。可接受的最小值和最大值分别由min_value与max_value指定。

实验七 大学师生类C++程序设计

一、目的要求

1·掌握用计算机处理问题的思维方法和C++程序设计方法; 2·培养问题分析、算法设计、程序设计、程序调试的能力。 二、实验内容

编程序完成下列设计内容,然后上机调试运行,分析运行结果,分析运行结果。

设计一个大学的类系统,包括Student(学生),Professor(教师),Staff(职员)。另有一类既作为学生又兼作助教的可作为派生类StudentStaff,它是由Student类和Staff类派生而来,另外定义一个父类DataRec作为上述类(子类)的基类。设计主程序,输入各类人员信息,并将数据存放在磁盘文件中。

该类系统共有五个类,层次结构见图5。

图5 大学类系统层次结构

DataRec Student Staff StudentStaff Professor

(2) 让用户输入数据;

(3) 如果数据不在预定范围内,重新提示输入。

input型的对象应当按以下形式定义:

input ob(\”,min_value,max_value)

其中,promput message是提示输入信息。可接受的最小值和最大值分别由min_value与max_value指定。

实验七 大学师生类C++程序设计

一、目的要求

1·掌握用计算机处理问题的思维方法和C++程序设计方法; 2·培养问题分析、算法设计、程序设计、程序调试的能力。 二、实验内容

编程序完成下列设计内容,然后上机调试运行,分析运行结果,分析运行结果。

设计一个大学的类系统,包括Student(学生),Professor(教师),Staff(职员)。另有一类既作为学生又兼作助教的可作为派生类StudentStaff,它是由Student类和Staff类派生而来,另外定义一个父类DataRec作为上述类(子类)的基类。设计主程序,输入各类人员信息,并将数据存放在磁盘文件中。

该类系统共有五个类,层次结构见图5。

图5 大学类系统层次结构

DataRec Student Staff StudentStaff Professor

本文来源:https://www.bwwdw.com/article/wrwg.html

Top