《C++程序设计实验》教学大纲
课程英文名称(Experiments of C++ Programming)
课程代码:BK002006 学时:32学分:1
适用专业:计算机,网络,物联网,计测试,计开发,空间,信息,数学,遥感
课程性质:必修
撰稿人:朱红梅审定人:张继军
一、实验课的性质与任务
本实验大纲与该课程教学大纲的内容相配合,由浅入深的指导学生了解和掌握如何在Visual C++ 6.0,Visual C++ 2008或CodeBlocks8.0以上集成开发环境中利用C++程序设计语言进行简单的程序设计。通过这些实验内容加深学生对课堂讲授内容的理解,使学生得到程序设计方面的基本训练,培养学生程序设计的能力和调试程序的基本技能,并熟练掌握用C++设计结构化程序的基本知识和编程技巧,提高学生利用计算机解决实际问题的能力,使之能把程序设计应用到今后的专业学习中。本课程的实践与操作是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。本实验课程的任务是使学生在实验过程中深化理解和灵活掌握教学内容,并训练问题的综合分析、解决的能力和编程能力,形成良好的编程风格,同时,培养学生的工作规范和科学作风,为后续课程的学习奠定坚实的理论和实践基础。
二、实验目的与要求
实验目的:本实验课注重培养学生的操作能力、实践能力、逻辑思维能力、系统设计与分析能力以及知识转化与应用能力。使学生了解软件开发的系统环境,掌握软件设计开发的基础知识、基本技能和方法。使学生在掌握C++语言的同时,能够对现实世界中较简单的问题及其解决方法用计算机语言进行描述,为软件设计和开发打下基础。
实验要求:熟悉Visual C++2008编程环境,掌握使用Visual C++2008开发应用程序的基本方法和步骤,能够编写、调试和运行一般的应用程序。掌握C++的语法规则,全面了解C++的特点,熟练掌握C++程序设计的基本方法和编程技巧,提高程序设计和程序调试的能力,能够运用结构化程序设计思想设计出易读、易调试、易维护的程序设计能力和技巧,并养成良好的程序设计风格和习惯。独立完成所布置实验题目。在实验前一定要先行了解实验目的、内容、要求以及注意事项,事先设计好程序框架、流程图和基本代码,统一实验时再进行上机调试,最后按照要求提交实验材料。
三、实验项目设置情况
序号 | 实验项目名称 | 学时 | 开出要求 | 实验项目类型 |
必做 | 选做 | 基础型 | 综合设计 | 研究创新 |
演示 | 验证 |
1 | 类与对象的基本概念和应用 | 4 | √ |
| | | √ | |
2 | 类与对象的应用程序设计 | 4 | √ |
|
|
| √ |
|
3 | 静态成员与友元函数的应用 | 4 | √ | | | | √ | |
4 | 运算符重载 | 4 | √ | | | | √ | |
5 | 继承与派生的应用 | 4 | √ | | | | √ | |
6 | 虚函数与多态性的应用 | 4 | √ | | | | √ | |
7 | 模板的应用程序设计 | 4 | √ | | | | √ | |
8 | 输入输出流程序设计 | 4 | √ | | | | √ | |
9 | | | | | | | | |
| | | | | | | | |
四、各实验项目教学内容
实验项目一:类与对象的基本概念和应用4学时
(一)实验目的要求
1、掌握类的概念和定义方法;
2、掌握对象的定义方法和对象成员的表示方法;
3、初步掌握面向对象的程序设计方法。
(二)实验材料和仪器设备
硬件:计算机
软件:Micro Soft Visual C++ 6.0或CodeBlocks8.0以上集成开发环境
(三)实验内容
1、定义一个Book(图书)类,在该类定义中包括以下数据成员和成员函数。
数据成员: bookname(书名)、price(价格)和number(存书数量)。
成员函数: display()显示图书的情况;borrow()将存书数量减1,并显示当前存书数量;restore()将存书数量加1,并显示当前存书数量。
在main函数中,要求创建某一种图书对象,并对该图书进行简单的显示、借阅和归还管理。
实验项目二:类与对象的应用程序设计4学时
(一)实验目的要求
1、加深对类和对象以及面向对象程序设计有关概念的理解,进一步了解面向对象程序设计的特点和方法;
2、初步掌握构造函数和析构函数以及友元函数的概念及用法;
3、初步掌握对象数组、对象指针和对象引用及其相关知识。
(二)实验材料和仪器设备
硬件:计算机
软件:Micro Soft Visual C++ 6.0或CodeBlocks8.0以上集成开发环境
(三)实验内容
编写程序实现下列的要求:
1、定义一个Box(盒子)类,在该类定义中包括以下数据成员和成员函数。
数据成员:length(长)、width(宽)和height(高)。
成员函数:构造函数Box,设置盒子的长、宽和高3个初始数据;成员函数setBox对数据成员置值;成员函数volume 计算盒子的体积。
在main函数中,要求创建Box对象,输入长、宽、高,输出盒子的体积。
2、定义一个名为Integer的整数类,具有数据成员d、成员函数GetD( )获取d的值、SetD( )设置d的值、IsOdd( )判断d是否为一个数、IsPrine( )判断d是否为一个素数,并设计主函数用一个对象分别设置d的值为15和31,测试这个类。
实验项目三:静态成员与友元函数的应用4学时
(一)实验目的要求
1、掌握类的静态成员的使用方法;
2、理解友元概念,掌握友元函数、友元类的使用方法。
(二)实验材料和仪器设备
硬件:计算机
软件:Micro Soft Visual C++ 6.0或CodeBlocks8.0以上集成开发环境
(三)实验内容
编写程序实现下列的要求:
1、定义一个Student类,在该类定义中包括:一个数据成员(分数score)及两个静态数据成员(总分total和学生人数count);成员函数scoretotalcount (double s) 用于设置分数、求总分和累计学生人数;静态成员函数sum()用于返回总分;静态成员函数average()用于求平均值。在main函数中,输入某班同学的成绩,并调用上述函数求全班学生的总分和平均分。
2、定义一个表示点的结构类型Point和一个由直线方程y = ax + b确定的直线类Line。结构类型Point有两个成员x和y,分别表示点的横坐标和纵坐标。Line类有两个数据成员a和b,分别表示直线方程中的系数。Line类有一个成员函数print用于显示直线方程。友元函数setPoint(Line &l1,Line &l2)用于求两条直线的交点。在main函数中,建立两个直线对象,分别调用print函数显示两条直线的方程,并调用函数setPoint求这两条直线的交点。
实验项目四:运算符重载4学时
(一)实验目的要求
1、掌握通过运算符重载实现多态性的方法;
2、学会运算符重载的成员函数法和友元函数法;
3、能区分单目运算符的前置与后置。
(二)实验材料和仪器设备
硬件:计算机
软件:Micro Soft Visual C++ 6.0或CodeBlocks8.0以上集成开发环境
(三)实验内容
编写程序实现下列的要求:
1、分别使用成员函数和友元函数编写程序重载运算符“+”,使该运算符能实现两个字符串的连接。
2、假设有向量X = ( x1,x2,…, xn) 和Y = ( y1,y2, …, yn),它们之间的加、减和乘法分别定义为:
X + Y = ( x1+ y1,x2+ y2,…, xn+ yn)
X-Y = ( x1-y1,x2-y2,…, xn -yn )
X*Y = x1*y1+ x2*y2+,…,+ xn*yn
编写程序定义向量类Vector,重载运算符“+”、“-”、“*”和“=”,实现向量之间的加、减、乘、赋值运算;重载运算符“>>”、“<<”实现向量的输入、输出功能。注意检测运算的合法性。
3、定义一个类nauticalmile_kilometer,它包含两个数据成员kilometer(千米)和meter(米);还包含一个构造函数对数据成员进行初始化;成员函数print,用于输出数据成员kilometer和meter的值;类型转换函数operator double,实现把千米和米转换为海里(1海里=1.852千米)的功能。编写main函数,测试类nauticalmile_kilometer。
4、定义一个集合类setColour,要求元素为枚举类型值。例如,
enum colour { red, yellow, blue, white, black };
集合类实现交、并、差、属于、蕴含、输入、输出等各种基本运算。设计main函数测试setColour类的功能。
实验项目五:继承与派生的应用4学时
(一)实验目的要求
1、加深对继承与派生的理解,初步掌握定义和使用类的继承关系以及定义派生类;
2、熟悉不同继承访式下对基类成员的访问。
(二)实验材料和仪器设备
硬件:计算机
软件:Micro Soft Visual C++ 6.0或CodeBlocks8.0以上集成开发环境
(三)实验内容
编写程序实现下列的要求:
1、定义一个Rectangle类,它包含两个数据成员length和width,以及用于求长方形面积的成员函数。再定义Rectangle的派生类Rectangular,它包含一个新数据成员height和用来求长方体体积的成员函数。在main函数中,使用两个类,求某个长方形的面积和某个长方体的体积。
2、假设某销售公司有一般员工、销售员工和销售经理。月工资的计算办法是:
一般员工月薪=基本工资;
销售员工月薪=基本工资+销售额*提成率;
销售经理月薪=基本工资+职务工资+销售额*提成率。
编写程序,定义一个表示一般员工的基类Employee,它包含3个表示员工基本信息的数据成员:编号number、姓名name和基本工资basicSalary;
由Employee类派生销售员工Salesman类,Salesman类包含2个新数据成员:销售额sales和静态数据成员提成比例commrate;
再由Salesman类派生表示销售经理的Salesmanager类。Salesmanager类包含新数据成员:岗位工资jobSalary。
为这些类定义初始化数据的构造函数,以及输入数据input、计算工资pay和输出工资条print的成员函数。
设公司员工的基本工资是2000元,销售经理的岗位工资是3000元,提成率=5/1000。在main函数中,输入若干个不同类型的员工信息测试你的类结构。
3、试写出你所能想到的所有形状(包括二维的和三维的),生成一个形状层次类体系。生成的类体系以Shape作为基类,并由此派生出TwoDimShape类和ThreeDimShape类。它们的派生类是不同的形状类。定义类体系中的每一个类,并用main函数进行测试。
实验项目六:虚函数与多态性的应用4学时
(一)实验目的要求
1、了解虚函数的概念和作用;
2、学习虚函数的用法。
3、理解多态性的概念;
(二)实验材料和仪器设备
硬件:计算机
软件:Micro Soft Visual C++ 6.0或CodeBlocks8.0以上集成开发环境
(三)实验内容
编写程序,由给定的基类进行虚函数的设计。
1、使用虚函数编写程序,求球体和圆柱体的体积及表面积。由于球体和圆柱体都可以看做由圆继承而来,因此,可以把圆类Circle作为基类。在Circle类中定义一个数据成员radius及两个虚函数area和volume。由Circle类派生Sphere类和Column类。在派生类中对虚函数area和volume重新定义,分别求球体和圆柱体的体积及表面积。
2、某学校教职工的工资计算方法为:
所有教职工都有基本工资;
教师月工资为固定工资+课时补贴。课时补贴根据职称和课时计算。例如,每课时教授补贴50元,副补贴30元,讲师补贴20元。
管理人员月薪为基本工资+职务工资;
实验室人员月薪为基本工资+工作日补贴。工作日补贴等于日补贴×月工作日数。
定义教职工抽象类,派生教师、管理人员和实验室类,编写程序测试这个类体系。
实验项目七:模板的应用程序设计4学时
(一)实验目的要求
1、理解类模板的概念;
2、掌握类模板的使用方法;
3、能用类模板方式编写简单”通用”类程序。
(二)实验材料和仪器设备
硬件:计算机
软件:Micro Soft Visual C++ 6.0或CodeBlocks8.0以上集成开发环境
(三)实验内容
编写程序,实现以下功能:
1、使用函数模板实现对不同类型数组求平均值的功能,并在main函数中分别求一个整型数组和一个浮点型数组的平均值。
2、建立结点,包括一个任意类型数据域和一个指针域的单向链表类模板。在main函数中使用该类模板建立数据域为整型的单向链表,并把链表中的数据显示出来。
3.定义类模板T_Counter,实现基本类型数据的+、-、*、=、>>、<< 运算;类模板T_Vector,实现向量运算;类模板T_Matrix,实现矩阵运算。请分析使用类模板建立T_Counter、T_Vector、T_Matrix对象和使用类继承体系建立IntReal、Vector、Matrix对象(见第8章习题8.4第4、5、7小题)的语法区别和运算功能区别。
实验项目八:输入输出流的应用4学时
(一)实验目的要求
1、C++的输入输出含义及其实现方法;
2、掌握标准输入输出流的应用;
3、掌握文件的应用方法。
(二)实验材料和仪器设备
硬件:计算机
软件:Micro Soft Visual C++ 6.0或CodeBlocks8.0以上集成开发环境
(三)实验内容
编写程序,实现以下功能:
1、以表格形式输出当x = 1°,2°,…,10°时sinx、cosx和tanx的值。要求:输出时,数据的宽度为10,左对齐,保留小数点后5位。
2、建立一个文本文件,从键盘输入一篇短文存放在文件中。短文由若干行构成,每行不超过80个字符。读出建立的文本文件,显示在屏幕上并统计该文件的行数。
3、读出一个作业cpp文件,删除全部注释内容,即以“/*……*/”相括的文本和以“//”开始到行末的文本,生成一个新的cpp文件。
4、建立某单位职工通讯录的二进制数据文件,文件中的每个记录包括:职工编号、姓名、电话号码、邮政编码和住址。从键盘输入职工的编号,在建立的通讯录文件中查找该职工资料。查找成功后,显示职工的姓名、电话号码、邮政编码和住址。
5、设有两个按升序排列的二进制数据文件f和g,将它们合并生成一个新的升序二进制数据文件h。
五、实验报告要求
1.需求和规格说明(问题描述)
描述问题,简述题目要解决的问题是什么,规定软件做什么,原题条件不足时要补全。
2.设计
设计思想:存储结构,主要算法的基本思想。不要画框图。
设计表示:每个函数或过程的头和规格说明;列出每个函数或过程所调用和被调用的过程和函数。
详细设计表示:主要算法的框架。
3. 用户手册:即使用说明,如输入怎样的数据、输入多少、何时输入、如何结束等。
4. 调试报告:测试用例,测试结果,调试过程中遇到的主要问题是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等。
5. 附录:源程序清单和结果。程序要加注释,还可手工添加一些注释。测试数据及输出结果。
六、课程考核方式及成绩评定
(一)考核方式
平时成绩:ð课堂提问//☑学习态度//ð课外资料收集整理//ð预习报告//☑实验报告//☑其他;
结课后考试:ð笔试//☑操作。
(二)课程成绩评定办法
成绩构成:考勤10%//平时20%//考试70%
七、实验应配套的主要仪器设备及台(套)数(以一个实验教学班为标准)
硬件:计算机
软件:Windows 系列操作系统,Micro Soft Visual C++ 6.0或CodeBlocks8.0以上集成开发环境
30套/实验教学班
附:教学参考资料
1、选用的教材:
周霭如,林伟健. C++程序设计基础 (上). 电子工业出版社,2012.7,第4版。
2、主要参考书:
[1]林伟健, 周霭如. C++程序设计基础实验指导与习题解答. 电子工业出版社,2004。
[2]郑莉等编著,C++语言程序设计,清华大学出版社,2003,第3版。
[3]黄维通编著,Visual C++面向对象与可视化程序设计习题解析与编程实例,清华大学出版社,2003,第2版。
3、其他参考资料:
[1] OpenJudge开放的在线程序评测系统,http://openjudge.cn/。
[2] 杭州电子科技大学开放的在线程序评测系统Online Judge,http://acm.hdu.edu.cn/.