面向对象程序设计实验指导.docx
- 文档编号:25278040
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:35
- 大小:2.94MB
面向对象程序设计实验指导.docx
《面向对象程序设计实验指导.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验指导.docx(35页珍藏版)》请在冰豆网上搜索。
面向对象程序设计实验指导
面向对象程序设计(C++)实验指导
一、实验环境
本实验基于当前主流的面向对象开发平台,编码规范遵循主流的参考规范。
二、编程语言和开发工具
C++语言,开发工具不限,建议使用VisualC++6.0版本
三、编码规范(编码规范的要求)
要求遵循良好的的程序设计习惯来设计实验和编写代码。
(注:
如果你将程序的很多功能全部放在一个长长的main()主函数中实现,这样的程序设计和编码风格会被扣分,请将不同的功能模块分别用函数来实现。
)
1.在实验过程中应注意培养规范的编码风格:
2.标识符的命名应要求达到顾名思义的程度,一看就知道用来做什么;
3.提供足够的注释,注释文字清晰明了;
4.程序排版的要求:
a)不同功能模块用空行分隔,使功能块一目了然;
b)基本上一条语句一行;
同一层次的语句统一缩进对齐。
四、实验
见后文……
五、注意事项
●所有实验要求独立完成,同学之间可以讨论,但严禁抄袭,若发现雷同,抄袭者和被抄袭者此次实验成绩均记零分。
●实验结束后书写实验报告,实验报告的内容包括实验目的、实验内容、结果分析以及本次实验的心得体会。
要求将程序源码和运行时的输入/输出数据情况写在实验内容部分,并对程序的输出结果进行分析(如对某组输入得不到预期的结果,则分析说明其原因)。
实验一简单C++程序的设计(2课时)
实验目的和要求:
1.掌握C++程序的基本格式与规范,学会编写简单的C++程序。
2.理解C++程序结构的特点。
3.熟悉C++程序的基本输入输出操作。
4.掌握函数的使用方法。
5.掌握VC6.0中程序调试的方法。
预习内容:
cin/cout的使用;分支和循环结构的使用;函数的定义和调用。
实验内容:
1.书写一个“Helloworld!
”的程序,熟悉VC6.0的运行环境。
2.编写程序Ex_Swap实现输入两个整数,并将最大的整数输出显示。
3.编写一个Max函数,实现求两个整数最大值的功能。
要求在main函数中进行数据的读取和结果的显示。
提示:
1.VC6.0中C++程序的编写步骤
(1)运行VC6.0;
(2)新建工程;
(3)选择工程类型“win32ConsoleApplication”,输入工程名和路径;
(4)创建一个空的工程;
(5)确认后工程创建完成;
(6)工程创建后的界面;
(7)新建一个C++源文件,加入到刚才创建的工程中,并为该源文件取名;
(8)编辑源程序;
(9)编译并创建可执行文件(F7)
(10)运行(Ctrl+F5)
(11)运行结果显示
2.调试程序
(1)将光标定位到需要设置断点的行,点击断点设置图标(或F9),则在对应的行出现断点标志;
(2)点击调试按钮(或F5),程序运行到断点处(注:
如果断点前有输入语句,则程序会等待用户的输入);
(3)可在watch窗口中输入变量名,观察其运行到当前步骤时的值(也可以将光标定位到变量上,观察其值),如果值与预想的不一致,说明当前的程序之前出现了错误,应仔细阅读前面的代码进行修改。
实验二C++基础(2课时)
实验目的和要求:
1.掌握一维数组和二维数组的定义和使用。
2.掌握for和while循环的用法。
预习内容:
数组;循环结构。
实验内容:
1、假设我们举行一次班长选举,对一个班(20名同学)中的5名候选人(分别用代号1~5表示)中进行投票选举,以得票最多者当选,请编程统计5名候选人的得票情况。
假设原始投票数据如下:
13244335215433521441。
2、A[3][4]是一个3行4列的整数矩阵,编写程序求出所有元素之和。
3、(选做)编写程序。
先读入10个整数,再把它们按从小到大排序;最后再读入一个整数k,并将k插入到该整数序列中,插入后的数任然从小到大排列。
例如,若输入6,3,42,23,35,71,98,67,56,38,最后输入待插入的数59,则输出结果应为:
36233538425659677198。
提示:
1、一维数组的定义为:
类型数组名[元素数量]。
例如要定义5个元素的一维整形数组,则为intA[5]。
注意:
数组的下标是从0开始,即这5个元素分别为a[0]、a[1]、a[2]、a[3]、a[4]。
二维数组的定义为:
类型数组名[元素行数量][元素列数量]。
例如要定义一个4行5列的整形数组,则为intA[4][5]。
通常数组的遍历可用for循环,对于二维数组则使用两重的for循环进行遍历,例如对A[4][5]中的元素进行遍历时,可如下进行:
for(inti=0;i<=3;i++)
for(intj=0;j<=4;j++)
{
//访问A[i][j]的代码
}
2、第一题:
用一个具有5个元素的一维数组A[5]记录五个候选人的得票情况,用一个具有20个元素的一维数组B[20]记录每个同学的投票情况,对B[20]进行遍历统计每个候选人的得票数。
3、第二题:
用一个二维数组A[3][4]保存数组,通过一个二重循环遍历数组中的每个元素。
4、第三题:
定义数组时要按照11个元素进行定义;在对10个元素进行排序,排序完成后,读入一个待插入的数,与排好序的10个元素进行比较,找到插入的位置。
之后的数组元素进行后移,数组元素后移的实现是将从下标j开始的单元整体后移,最后将待插入的数赋值到空位
实验三函数重载和引用(2课时)
实验目的和要求:
1.掌握函数重载的定义和使用方法。
2.理解引用的概念,掌握引用的使用方法。
3.掌握带有缺省参数的函数用法。
预习内容:
引用;函数重载;带缺省值的函数。
实验内容:
1、利用重载求两个整数、三个整数和四个整数的最小值。
2、程序Ex_Swap实现数据交换。
分别用指针和引用作为函数mySwap的形参,并通过重载int、double型变量值的交换。
3、编写一个具有5个参数的函数,其中三个具有默认值,然后在main函数中针对不同的设置情况进行调用,要求运行时显示参数的设置情况。
提示一:
重载
(1)实现函数重载的方法
C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。这就是函数的重载(functionoverloading)。
写程序说明
intmax(inta,intb);//函数声明
doublemax(doublea,doubleb);//函数声明
longmax(longa,longb);//函数声明
强调一下:
重载函数并不要求函数体相同
(2)注意事项:
不能只有函数的返回值类型不同而参数的个数和类型相同,否则编译出错。
编译系统无法判别应该调用哪一个函数。重载函数的参数个数、参数类型或参数顺序3者中必须至少有一种不同(但是一般不会在参数顺序上做文章,从使用该系列函数的人中考虑),函数返回值类型可以相同也可以不同。
比如
intf(int);//函数返回值为整型
longf(int);//函数返回值为长整型
voidf(int);//函数无返回值
上面是错误的!
在编程时,有时我们要实现的是同一类的功能,只是有些细节不同。例如希望从3个数中找出其中的最大者,而每次求最大数时数据的类型不同,可能是3个整数、3个双精度数或3个长整数。程序设计者往往会分别设计出3个不同名的函数,其函数原型为:
intmax1(inta,intb,intc);//求3个整数中的最大者
doublemax2(doublea,doubleb,doublec);//求3个双精度数中最大者
longmax3(longa,longb,longc);//求3个长整数中的最大者
C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同。这就是函数的重载(functionoverloading)。即对一个函数名重新赋予它新的含义,使一个函数名可以多用。
对上面求最大数的问题可以编写如下的C++程序。
例求3个数中最大的数(分别考虑整数、双精度数、长整数的情况)。
#include
usingnamespacestd;
intmain()
{intmax(inta,intb,intc);//函数声明
doublemax(doublea,doubleb,doublec);//函数声明
longmax(longa,longb,longc);//函数声明
inti1,i2,i3,i;
cin>>i1>>i2>>i3;//输入3个整数
i=max(i1,i2,i3);//求3个整数中的最大者
cout<<″i_max=″<
doubled1,d2,d3,d;
cin>>d1>>d2>>d3;//输入3个双精度数
d=max(d1,d2,d3);//求3个双精度数中的最大者
cout<<″d_max=″< longg1,g2,g3,g; cin>>g1>>g2>>g3;//输入3个长整数 g=max(g1,g2,g3);//求3个长整数中的最大者 cout<<″g_max=″< } intmax(inta,intb,intc)//定义求3个整数中的最大者的函数 {if(b>a)a=b; if(c>a)a=c; returna; } doublemax(doublea,doubleb,doublec)//定义求3个双精度数中的最大者的函数 {if(b>a)a=b; if(c>a)a=c; returna; } longmax(longa,longb,longc)//定义求3个长整数中的最大者的函数 {if(b>a)a=b; if(c>a)a=c; returna; } 运行情况如下: 185-76567↙(输入3个整数) 56.8790.23-3214.78↙(输入3个实数) 67854-912456673456↙(输入3个长整数) i_max=567(输出3个整数的最大值) d_max=90.23(输出3个双精度数的最大值) g_max=673456(输出3个长整数的最大值) 上例3个max函数的函数体是相同的,其实重载函数并不要求函数体相同。重载函数除了允许参数类型不同以外,还允许参数的个数不同。 参数的个数和类型可以都不同。但不能只有函数的返回值类型不同而参数的个数和类型相同。例如: intf(int);//函数返回值为整型 longf(int);//函数返回值为长整型 voidf(int);//函数无返回值 在函数调用时都是同一形式,如“f(10)”。编译系统无法判别应该调用哪一个函数。重载函数的参数个数、参数类型或参数顺序3者中必须至少有一种不同,函数返回值类型可以相同也可以不同。 在使用重载函数时,同名函数的功能应当相同或相近,不要用同一函数名去实现完全不相干的功能,虽然程序也能运行,但可读性不好,使人莫名其妙。 提示二: 引用 讲解: (1)引用是c++中一种新的变量类型,其作用是给变量起一个别名。 例如: inta;//定义a是整型变量 int&b=a;//声明b是a的引用 这样声明后,a和b都代表同一变量。 注意: A、在上述声明中,&是引用声明符,并不代表地址。 B、声明变量b为引用类型,并不需要另外开辟内存单元来存放b的值。b和a占内存中的同一个存储单元,它们具有同一地址。 C、在声明一个引用类型变量时,必须同时使之初始化,即声明它代表哪一个变量。以后不能改变再作为其他变量的引用(别名)。 (2)引用的主要使用地方: 用于函数参数传递 C++之所以增加引用类型,主要是把它作为函数参数,以扩充函数传递数据的功能。 (3)实例讲解引用作为参数传递 函数参数传递: 传递变量名,传递指向变量的指针(指针形参),传递变量的别名(引用形参) 例子,编写程序通过引用方式,要求将变量i和j的值互换。 #include usingnamespacestd; intmain() {voidswap(int&,int&); inti=3,j=5; //调用swap函数时,实参不必用变量的地址(在变量名的前面加&),而直接用变量名。 swap(i,j); cout<<″i=″< return0; } voidswap(int&a,int&b)//形参是引用类型 {inttemp; temp=a; a=b; b=temp; } 可以看到使用引用作为形参,在函数编写的时候很方便,调用函数的时候也很方便。 (4)引用作为函数参数传递与指针相比的优势: 指针变量要另外开辟内存单元,其内容是地址。而引用变量不是一个独立的变量,不单独占内存单元 (5)引用不仅可以用于变量,也可以用于对象。 什么是变量的引用 对一个数据可以使用“引用”(reference),这是C++对C的一个重要扩充,引用是一种新的变量类型,它的作用是为一个变量起一个别名。假如有一个变量a,想给它起一个别名b,可以这样写: inta;//定义a是整型变量 int&b=a;//声明b是a的引用 以上语句声明了b是a的引用,即b是a的别名。经过这样的声明后,a或b的作用相同,都代表同一变量。 注意: 在上述声明中,&是引用声明符,并不代表地址。不要理解为“把a的值赋给b的地址”。声明变量b为引用类型,并不需要另外开辟内存单元来存放b的值。b和a占内存中的同一个存储单元,它们具有同一地址。声明b是a的引用,可以理解为: 使变量b具有变量a的地址 在声明一个引用类型变量时,必须同时使之初始化,即声明它代表哪一个变量。在声明变量b是变量a的引用后,在它们所在函数执行期间,该引用类型变量b始终与其代表的变量a相联系,不能再作为其他变量的引用(别名)。下面的用法不对: inta1,a2; int&b=a1; int&b=a2;//企图使b又变成a2的引用(别名)是不行的 引用的简单使用 例引用和变量的关系。 #include #include usingnamespacestd; intmain() {inta=10; int&b=a;//声明b是a的引用 a=a*a;//a的值变化了,b的值也应一起变化
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 实验 指导