经典c++实验题目.docx
- 文档编号:10284845
- 上传时间:2023-05-24
- 格式:DOCX
- 页数:27
- 大小:68.83KB
经典c++实验题目.docx
《经典c++实验题目.docx》由会员分享,可在线阅读,更多相关《经典c++实验题目.docx(27页珍藏版)》请在冰点文库上搜索。
经典c++实验题目
软件学院2010级面向对象程序设计实验手册
姓名班级学号
文件名:
班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件)
实验1VisualC++6.0开发环境的初步使用(3学时)
实验目的
(1)熟悉VC6开发环境。
(2)初步掌握简单程序的上机操作基本步骤,熟悉C++单文件程序的输入、编译、链接和运行的过程。
(3)初步掌握菜单栏、工具栏、项目工作区、文件编辑区、输出区和状态栏等的使用。
(4)初步掌握程序的编辑修改和调试。
实验内容
使用VC6开发环境来调试以下两个C++源程序。
程序1
#include
#include
voidmain()
{doublea,b,c,s,area;
cout<<"a,b,c,=";
cin>>a>>b>>c;//输入三角形的三条边
s=(a+b+c)/2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));//求三角形的面积
cout<<"area="<
思考并验证:
(1)给出两组输入/输出数据
a=b=c=area=
a=b=c=area=
(2)如果去掉第一行和第二行的包含命令,编译时出现什么信息?
程序2
#include
doublemax(doublex,doubley);
voidmain()
{doublea,b,c;
cout<<"inputtwonumbers:
";
cin>>a>>b;//输入两个实数
c=max(a,b);//求两个实数最大值
cout<<"maximum="< doublemax(doublex,doubley) {if(x>y) returnx; else returny; } 思考并验证: (1)如果输入a=1.3b=3.5,输出结果是什么? (2)程序由哪几个函数组成,哪个函数是必须的? 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验2数据类型、运算符和表达式(3学时) 实验目的 (1)掌握C++数据类型的概念。 (2)掌握常量与变量的概念和定义方法。 (3)掌握引用的概念和定义方法。 (4)初步掌握各种运算符的功能,优先级和结合性。 (5)掌握表达式的构成、表达式中运算符的运算顺序和如何求表达式的值。 实验内容 假设有变量说明: charc1='a';,c2='B',c3='c'; inti1=10,i2=20,i3=30; doubled1=0.1,d2=0.2,d3=0.4; 先写出下列表达式的值,然后上机验证。 (a)c1+i2*i3/i2%i1;(b)il+++i2%i3; (c)i2--*++i3;(d)i1>i2>i3 (e)(c1=i2*i3)! =(i2%1)(f)d1>d2||(i1=i2) (g)c1>i1? i1: c2;(h)0? 1: 0? 2: 0? 3: 4 (i)i1+=i2*=i3;(j)i3=(i1=1,i2--); (k)i1=(c1,c2,c3);(l)! i1&&i2--; 在做本实验时可以使用下面程序框架上机验证。 #include voidmain() {charc1='a',c2='B',c3='c'; inti1=10,i2=20,i3=30; doubled1=0.1,d2=0.2,d3=0.4; x;//填一表达式相应的数据类型说明符 x=//填上表达式 cout<<"x="< } 思考并验证: (1)利用上面的主函数框架,求出每个表达式的值 (2)表达式(i)可以用哪几个简单表达式代替 (2)自增和自减运算符位于变量之前和之后有什么不同,以表达式(b)和(c)为例说明 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验3顺序结构程序设计(6学时) 实验目的 (1)掌握顺序结构程序的概念。 (2)掌握数据的输入/输出方法。 (3)掌握转义字符和常用格式控制符的使用。 (4)掌握赋值语句和复合语句的使用。 (5)掌握打开旧程序文件和编辑修改程序的方法。 实验内容 1、分析下列程序,写出执行结果,然后上机调试程序,比较结果的正确性。 程序1 #include voidmain() {cout<<"\x07Visual\tC++\n"; cout<<"abc\nde\rf\tg"< cout<<"h\ti\b\bjk"< } 思考并验证: (1)写出程序的运行结果,解释为什么输出结果中没有“de” (2)程序中用到哪些转义字符,分别表示什么含义? 程序2 #include #include voidmain() { intnumber=100; cout<<"decimal: "< cout<<"hexadecimal: "< cout<<"octal: "< cout< (2)<<21< cout< cout< cout< } 思考并验证: (1)写出程序的运行结果 (2)setfill('')的作用是什么 2、输入一个五位正整数,求出该整数的各位数字并输出。 思考并验证: (1)程序中定义了几个变量,各代表什么值? (2)如何把求出的五个数字转化为相应的数字字符 (3)画出程序流程图 (4)应该注意哪些编程风格 3、从键盘上输入五个整数分别存放到变量a,b,c,d和e中,将五个数按降序排列并且输出。 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验4选择结构程序设计(6学时) 实验目的 (1)掌握选择结构程序的概念。 (2)掌握if语句的执行过程和使用 (3)掌握switch语句的执行过程和使用。 (4)掌握使用不同情况的数据测试程序的方法。 实验内容 1.输入三个整型数,将三个数作为三角形的边,编程判断能否构成三角形。 思考并验证: (1)给出至少四组测试数据,说明不同的运行结果 (2)画出程序流程图。 2、某公司按购买商品的款项数目x给予不同优惠折扣y,给出计算优惠折扣y的公式如下。 编写程序: 从键盘上输入x的值,求应付款项s。 y= 思考并验证: (1)用switch语句实现时,x应作什么转换 (2)给出各种情况的输入数据和输出数据 (3)在使用switch结构时,应该注意哪些问题? 2、输入圆的半径R和运算标志,按照运算标志进行指定运算,给定的运算标志及其表示的运算如下: C(Corcle)——表示计算周长 A(Area)——表示计算面积 B(Both)——表示周长和面积都计算 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验5循环结构程序设计(6学时) 实验目的 (1)掌握循环结构程序的概念。 (2)掌握while语句的执行过程并熟练使用。 (3)掌握do_while语句的执行过程并熟使用。 (4)掌握for语句的执行过程并熟练使用。 (5)掌握多重循环的概念、执行过程并熟练使用。 (6)掌握break语句、continue语句和goto语句的执行程序并熟练使用。 (7)初步学会设置断点调试程序的方法。 (8)初步掌握使用“单步执行”方式跟踪程序程序执行过程的方法。 实验内容 1、输入带符号的短整型数,求该数是几位数。 思考并验证: (1)画出程序流程图 (2)你的程序中循环的结束条件是什么 2、设t=1×2×……×n,编写程序求t>10000时的最小n值。 要求使用while语句实现循环。 思考并验证: (1)写出程序运行结果 (2)画出程序流程图 (3)如果用for语句,如何实现 3、写程序找出100┄1000之间、其各位数之和等于5的整数。 要求使用二重循环编程。 思考并验证: (1)程序的输出结果是什么 (2)画出程序流程图 4、rand()函数产生一个在10┄100之间的随机整数,要求用户猜测这个整数。 输入一个猜测想的整数,判断是否与产生的随机数相等,由屏幕显示判断结果。 如果猜得不对,重新猜这个数,直到猜出这个数为止。 实验指导 VisualC++中提供了用于产生随机数的有关整数: rand()产生0—32767之间的随机整数 srand(number)种子函数。 其中number是无符号整型参数,称为种子值。 当种子值number不同时,函数rand()产生的随机数序列也不同。 time(0)返回用整型数表示的系统当前时间。 在此作为srand函数的参数。 函数srand()和rand()在头文件stdio.h中定义 函数time(0)在time.h文件中定义 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验6函数(6学时) 实验目的 (1)熟悉VC6应用程序的构成。 (2)掌握函数的定义及其调用。 (3)掌握C++函数传值参数、传指针参数和引用参数的定义和应用。 (4)掌握嵌套调用和递归调用的概念并熟练使用。 (5)掌握重载函数的概念并熟练使用。 (6)初步学会使用VC6Debug功能跟踪程序执行到函数的内部,观察函数的调用过程。 实验内容 1、键盘上输入x、y和z的值,求s=f(x,y,z)的值。 其中 思考并验证: (1)自己给出至少三组输入数据,验证结果是否正确。 (2)在你的程序中定义了哪几个函数,写出函数原型。 (3)你定义的函数采用了哪种参数传递机制 (4)在计算过程中需要注意哪些特殊情况 2、给定以下两个函数原型声明: voidsortl(int*,int*,int*); voidsort2(int&,int&,int&); voidsort3(int,int,int); 并假设它们的功能都是把三个整数按升序排列。 编写程序实现这三个函数,并且写一个测试程序调用它们,验证这三个函数的正确性。 思考并验证: (1)三个函数有何不同,应该如何调用? (2)以函数sort1(int*,int*,int*)为例说明指针传递参数的过程 (3)给定10个整数,设计一种排序算法。 (用一个C++函数实现) 3.重载一组Average()函数,能求两个或三个整型或浮点型数据的平均值。 思考并验证: (1)重载函数有什么特点 (2)写出你定义的重载函数原型 (3)当重载函数使用默认参数时,需注意什么问题 4、求组合数公式为: ,编一程序,输入m和n的值,求cnm的值。 要求分别定义求阶乘和求组合的函数,并且使求组合数的函数能调用求阶乘的函数来实现。 5、(选做)使用递归函数,把任意一个正整数颠倒过来输出。 例如,输入正整数678,输出应为876。 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验7数组(6学时) 实验目的 (1)掌握一维数组、二维数组和字符数组的概念和定义。 (2)掌握数组元素的引用、赋值和输入/输出方法。 (3)掌握使用循环结构控制数组元素的下标按规律变化、来处理一维数组元素和二维数组元素的程序设计方法。 (4)掌握字符数组的使用。 (5)掌握指针的定义和使用方法 实验内容 1、随机函数产生10个互不相同的两位整数并存放到一维数组中,然后输出该一维数组,并把该数组中的素数输出。 思考并验证: (1)如何产生限定范围的两位随机整数 (2)写出判断素数的算法 (3)数组很大时,循环判断素数并输出需要耗费大量的时间开销,你能否改进算法以尽量减少循环次数 2、已知某个学习小组三门课程的成绩如下: 英语 高等数学 C++程序设计 学生1 85 90 80 学生2 65 70 75 学生3 75 85 77 使用二维数组存放该学习小组三门课程的成绩,计算每个学生的平均成绩和该小组每门课程的平均成绩。 思考并验证: (1)如何定义二维数组,用什么方法给数组赋值? (2)如何用指针实现 (3)设计一个算法实现对英语成绩的排序,使得成绩高的学生成绩放在数组的首位。 3、写一个函数,可以根据输入的参数值建立不同长度的动态数组,并置全部元素初始值为0。 如果要求在已生成的动态数组上添加元素,以致需要扩充数组时,应该如何操作? 请编程序试一试。 4.(选做)数据排序是为了快速查找。 定义一个函数,在有序数组中查找指定值,想一想怎样才能找得更快。 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验8指针的应用(6学时) 实验目的 (1)掌握指针的用法 (2)掌握单向链表的基本操作方法,包括建立和遍历链表,在链表中插入和删除节点。 实验内容 1、建立一个单向链表,该链表中每个节点是一个整型数,编写三个函数完成以下各项工作: 1显示链表中每个节点数据; 2输入一个整数i,在第i个节点之后插入一个节点,若i大于节点总数,则在链表的尾部插入一个节点; 3输入某个整数,删除该相应节点。 思考并验证 (1)写出三个函数原型,并说明其功能 (2)采用动态内存分配方法,若不及时释放空间会出现什么情况 (3)你在调试本程序时常出现哪些问题,原因何在? (4)总结在使用指针时应该注意哪些问题 2.分别把两个字符串存放到两个字符数组中,将其中一个字符串插入到另一个字符串的指定位置。 要求用指针实现 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验9类与对象(6学时) 实验目的 (1)掌握类和对象的概念、定义和使用方法。 (2)掌握不同特性对象成员的访问方法,以及this指针的概念和使用方法。 (3)掌握构造函数和析构函数的使用方法。 (4)掌握静态成员的使用方法。 (5)掌握友员的使用方法。 学会使用VC6的Debug功能跟踪构造函数、析构函数和成员函数的执行顺序。 实验内容 1、定义一个score类,其中包括私有数据成员和公有成员函数,即 num学号 Math高等数学成绩 English英语成绩 Programming程序设计成绩 inscore()输入学号和各科成绩,并且计算平均成绩 showscore()输出学号和各科成绩 使用score类,输入某班n(事先不能确定)个学生的学号和各科成绩,然后求各个学生的平均成绩,并列表输出学生的学号、各科成绩和平均成绩。 思考并验证: (1)定义什么结构表示n个学生? (2)用什么方法输入n个学生的学号和成绩? (3)你的类中定义了几个构造函数,写出原型并说明其功能 (4)在类中定义一个静态成员,用于表示类中所有对象的个数。 当一个对象创建时,对象个数增1,当一个对象被撤销时,对象个数减1。 说明如何定义静态成员,如何统计对象的个数。 2.建立一个复数类imaginary,其私有数据成员x和y表示复数的实部和虚部,构造函数imaginary用于对复数的实部和虚部初始化,成员函数show用于显示复述对象,形式为“实部+虚部i”;友员函数add,sub,mul和div分别用于进行复数的加、减、乘和除法运算。 在主函数中,实例化两个复数,并输入一个运算符,按运算符选择相应的友员函数进行复数运算,然后调用成员函数show输出计算结果。 思考并验证: (1)四个友员函数的形参和返回值分别是什么? (2)四个友员函数可以定义为相应的成员函数吗,写出原型 (3)比较友员函数与成员函数的用法 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验10运算符重载(6学时) 实验目的 (1)理解重载运算符的意义。 (2)掌握用成员函数、友员函数重载运算符的特点。 (3)掌握重载运算符函数的调用方法。 实验内容 1、建立一个二维数组类Douary,使该类中有以下数据成员、成员函数及友员函数。 构造函数: Douary(intm,intn);用于建立一维动态数组存放m行n列的二维数组元素,并对该数组的边界进行检查和将该数组元素初始化为0。 析构函数: ~Douary();用于释放动态数组所占用的存储空间。 友员函数: friendistream&operator>>(istream&input,Douary&d); 重载运算符“>>”输入二维数组,基中d为Dousry类对象; friendostream&operator<<(ostream&output,Douary&d); 重载运算符“<<”以矩阵的形式输出二维数组,其中d为Douary类对象。 私有数据成员: int*Array;Array为动态数组指针。 introw;row为二维数组的行数。 intcol;col为二维数组的列数。 在主函数中,实例化一个二维数组,然后测试Douary类。 思考并验证: (1)二维数组类中的构造函数和析构函数是必须的吗? 如果不定义构造函数和析构函数会出现什么情况? (2)构造函数中对数组的边界检查包括哪些方面? (3)这两个操作符重载函数可以定义为类的成员函数吗,为什么? 2、为本实验第 (1)题的Douary类增加重载运算符“+,-,”和“=”函数,以便实现两个矩阵相加、相减和赋值的运算。 给定函数原型如下: frienaDouary&operator+(constDouary&d1,constDouary&d2); frienaDouary&operator-(constDouary&d1,constDouary&d2); Douary&operator=(constDouary&d); 其中d1,d2和d为Douary类对象。 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验11继承(6学时) 实验目的 (1)掌握单继承和多继承的概念。 (2)理解不同的继承类型: public(公有)、protected(保护)和private(私有),掌握何时使用何种继承类型。 (3)掌握类层次中构造函数的定义方式和建立对象时构造和析构次序。 (4)根据问题建立合理的类层次体系。 实验内容 1、建立一个建筑物类的层次体系。 其中building包括保护数据成员name(建筑物名称)、floors(层数)和areas(总面积),由building类派生住宅类house和办公楼类office;住宅类house包括私有数据成员rooms(房间数)和balcony(阳台数);办公楼类office包括私有数据成员offices(办公室数)和meetingrooms(会议室数)。 住宅类house和办公楼类office都含有构选函数和print函数,以分别用于对数据成员的初始化和输出。 在主函数中,实例化house类和office类对象并且将其数据输出。 思考并验证: (1)画出此继承结构中类的层次关系图 (2)building类中的成员name、floors和areas为什么定义为保护成员,可以定义为私有成员吗? (3)通过你的程序输出说明类层次中构造函数的特点及执行次序。 (4)通过你的程序输出说明类层次中析构函数的特点及执行次序。 2、设计图2.4所示的学校师生类层次结构。 第一层“在校人员”类的数据成员包括姓名、性别、出生日期、出生地和身份证号码。 图2.4学校师生类体系 由“在校人员”类派生“学生类”和“教师类”。 学生类的数据成员有学号、专业、班级和每周学时数。 教师类的数据成员有工作证号、职称、课程和每周课时。 助教类继承学生类和教师类,可以用学生类的全部数据成员,以及教师类的课程和每周课时数据成员。 每个类提供自定义的构造函数和析构函数,定义一组公有成员函数分别用于置各数据成员的值和返回数据成员的值。 建立类体系时,应仔细考虑各类的继承特性,成员的访问特性。 请编写主函数测试这个类体系。 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验12虚函数与多态性(6学时) 实验目的 (1)掌握动态联编的概念 (2)掌握虚函数和纯虚函数的使用方法 实验内容 1、设计一个计算图形面积的类库。 它的顶层是一个抽象类,并且提供了三个纯虚函数: 显示数据成员。 返回面积、返回体积。 classShape{ virtualvoidshowDate()=0; virtualdoublereArea()=0; virtualdoublereVolume()=0; }; 第二层由Shape类派生TwoDimShape(二维图形)、ThreeShape(三维图形)类、他们增加了有关的数据成员,但没有成员函数的实现。 第三层派生具体的图形类。 TwoDimShape类派生Circle、Ellipse、Rectangle、Triangle等类。 ThreeShape类派生Ball、Cylinder(圆柱体)、RectangularParallelepiped(长方体)等类。 在主函数测试中使用多态方式调用不同对象的求值函数。 思考并验证 (1)程序中如何体现多态性 (2)如果顶层类中的函数不定义为虚函数,执行程序会什么结果,为什么? (3)你是否定义了虚析构函数,虚析构函数有什么作用? 2、修改实验11中第 (2)题的类定义,把第一层的“在校人员”类定义为抽象类,把print函数定义为纯虚函数,析构函数定义为虚函数。 在测试程序中用指针分别创建学生、教师和助教三个对象,然后通过在校人员的基类指针调用不同版本的print函数,输出对象的有关数据。 姓名班级学号 文件名: 班级号_学号_姓名_题号.cpp(多文件应压缩为rar文件) 实验13文件(6学时) 实验目的 (1)掌握流的概念 (2)掌握文本文件和二进制文件的使用方法 实验内容 1、建立一个文本文件“textfi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 c+ 实验 题目