南 京 中 医 药 大 学
《C++程序设计》实验教学大纲
(适用于计算机类及相关专业)
课程名称:C++程序设计 英文名称:C++ Programming
课程类别:专业基础必修课 课程编码:081000
课程学分:3 课程学时:72
开课单位: 人工智能与信息技术学院 实验室:人工智能与信息技术学院实验室
实验(实训)项目数:12 课程负责人:李新霞
课程简介
本课程是计算机科学与技术、软件工程专业本科学生的一门专业基础必修课。课程主要讲授了C++程序设计语言的基本语法及运用C++语言进行面向对象程序设计的方法,详细描述了面向对象程序设计的抽象性、封装性、继承性和多态性,为后续的专业课程奠定程序设计基础。
二、教学目标与基本要求
本课程的主要任务是使学生掌握面向对象程序设计的方法、继承和多态的体现以及把握标准C++程序设计的灵魂。目的是使学生掌握一门高级程序设计语言,学会利用C++语言解决一般应用问题,同时培养学生运用相关知识解决实际问题的能力,是实践性较强的课程。在学习中通过编程实现各种趣味性问题以提高专业学习的自信、兴趣和自觉性,并感悟程序设计者的严谨的态度。结合研究型教学、自主性学习,了解程序设计的最新发展动态,以树立科学精神和创新思维。
(一)实践技能目标
培养基本的、良好的程序设计技能,编制高效可靠的程序。
(二)素质教育目标
1、注重培养学生独立思考能力,学会科学地分析和解决问题。
2、培养学生的团结协作能力。
3、培养学生求真务实、讲求时效和一丝不苟的学习态度。
4、为学生形成良好的职业道德打下基础。
(三)创新能力培养目标
以培养学生软件开发创新能力、逻辑思维能力为基本目标,运用新的教学理念和教学方法,注重培养学生的自主能力、应变能力、分解能力、探究能力、动手能力和合作能力,通过实例教学、任务驱动教学和多媒体教学等教学模式,弥补传统教学法的不足,从而达到培养学生创新能力的目的。
基本要求
安装Visual Studio编译环境,提前完成实验任务的代码编写,课堂上主要完成调试,解决问题,不会的不理解的当堂提问寻求帮助。
三、实验(实训)项目、内容与学时分配
序号 | 实验项目名称 | 学时 | 内容提要 | 实验类型 |
基础性 | 综合设计性 | 创新性 |
1 | VS集成编程环境使用、函数定义与调用 | 3 | [实验目的] 1、熟悉VS开发平台和程序开发步骤 2、了解程序与算法 3、掌握过程化程序设计的方法 4、掌握程序项目的生成和多文件程序的调试方法 [实验内容] 1、使用VS集成开发环境。 2、求2个或3个正整数中的最大数,用带有默认参数的函数实现。 3、对3个变量按由小到大顺序排列,要求使用变量的引用。 4、编写一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整型、单精度型、双精度型。用重载函数实现。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
2 | 定义一个简单的类 | 3 | [实验目的] 1、 熟悉面向对象程序设计的方法 2、 掌握类和对象的概念、定义和使用方法 3、 掌握成员函数的实现与调用方法 [实验内容] 1、 定义一个日期类,数据成员包括:年、月、日,成员函数包括:输入日期、输出日期,写一个主函数对类进行测试。 2、 需要求3个长方柱的体积,请编写一个基于对象的程序,数据成员包括:长、宽、高,要求用成员函数实现以下功能:(1)由键盘分别输入3个长方柱的长、宽、高;(2)计算长方柱的体积;(3)输出3个长方柱的体积。请编写程序,上机调试并运行。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
3 | 构造函数和析构函数的定义及使用 | 3 | [实验目的] 1、掌握构造函数和析构函数的定义与使用 2、熟悉对象数组的定义 [实验内容] 1、 在实验一的基础上,增加构造函数和析构函数。 2、 建立一个对象数组,内放5个学生的数据(学号、成绩),用指针指向数组首元素,输出第1、3、5个学生的数据。设立一个函数max,用指向对象的指针作函数参数,在max函数中找出5个学生中成绩最高者,并输出其学号。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
4 | 静态成员的使用 | 3 | [实验目的] 1、熟悉对象的动态建立和释放 2、了解静态成员和友元的使用 3、了解类模板的定义 [实验内容] 1、 将实验一中的输出日期函数声明为友元函数,在主函数中调用测试。 2、 商品销售某一商品,商店每天公布统一的折扣,同时允许销售人员在销售时灵活掌握售价,在此基础上,对一次购10件以上者,还可以享受9.8折优惠。编写程序,计算出当日此商品的总销售款sum,以及每件商品的平均售价。要求用静态数据成员和静态成员函数。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
5 | 单目、二目运算符重载 | 3 | [实验目的] 1、掌握运算符重载的规则 2、掌握双目运算符、单目运算符重载的方法 3、了解用成员函数和友元函数重载运算符的区别 [实验内容] 1、 定义一个复数类Complex,重载运算符“+”、“-”、“*”、“/”,使之能用于复数的加、减、乘、除,重载为成员函数和友元函数,编程实现。 2、 有两个矩阵a和b,均为2行3列,求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
6 | <<、>>的重载 | 3 | [实验目的] 1、掌握流插入运算符和流提取运算符重载的方法 2、了解不同类型数据间的转换 [实验内容] 1、 在实验五第2题基础上,重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵的输入和输出。 2、 定义一个Teacher类和一个Student类的,二者有一部分数据是相同,编写程序,将一个Student对象转换为Teacher类,只将相同的数据成员移植过去。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
7 | 单继承 | 3 | [实验目的] 1、掌握派生类的定义和使用 2、了解三种不同派生方式的特点 [实验内容] 1、编写一个学生和教师数据输入和显示程序。设学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求: (1)将编号、姓名的输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类。 (2)学生数据中的班号、成绩的输入和显示在student类中实现,教师数据中的职称和部门的输入和显示在teacher类中实现。 1. 2、定义直角坐标系上的一个点类(Point)作为基类,派生出描述一条直线的类(Line)(提示:两点坐标确定一直线),再派生出三角形类(Triangle)(提示:三点坐标确定一个三角形)。要求成员函数能求出两点间的距离,三角形的周长和面积等。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
8 | 多重继承 | 3 | [实验目的] 1、 了解多重继承的特点 2、 了解虚基类的定义方式 [实验内容] 1、 分别定义Teahcr(教师)类和Cadre(干部)类,采用多重继承方式由这两个类派生出新类Teacher_Cadre(教师兼干部)类,要求: ①在两个基类中都包含姓名、年龄、性别、地址、电话等数据成员。 ②在Teacher类中还包含数据成员title(职称),在Cadre类中还包含数据成员post(职务),在Teacher_Cadre类中还包含数据成员wages(工资)。 ③对两个基类中的姓名、年龄、性别、地址、电话等数据成员用相同的名字,在引用这些数据成员时,指定作用域。 ④在类体中声明成员函数,在类外定义成员函数。 ⑤在派生类Teachr_Cadre的成员函数show中调用Teacher类中的display函数,输出姓名、年龄、性别、职称、地址、电话,然后再用cout语句输出职务和工资。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
9 | 虚函数和抽象类 | 3 | [实验目的] 1、掌握虚函数的定义 2、熟悉多态性在继承体系中的实现 3、了解抽象类的使用 [实验内容] 1、 定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。用工程实现。 2、将Shape基类定义为抽象类,其成员函数GetArea()为虚函数,由Shape类派生出Circle类(圆)和Rectangle类(矩形),并由Rectangle类派生出Square类(正方形),它们都利用GetArea()函数计算图形面积,根据下列调用语句,分别写出各个类的定义,并且成功地调试运行程序。(用工程prog2存放) 1. Shape *s[5]; s[0]=new Circle(2); s[1]=new Circle(3); s[2]=new Rectangle(3,4); s[3]=new Rectangle(4,5); s[4]=new Square(5); for(int i=0; i<5; i++) cout<<s[i]->GetArea()<<endl; [实验方法及原理] 编写代码,上机调试。 | | √ | |
10 | 标准输入输出流 | 3 | [实验目的] 1、 掌握C++标准输入流和标准输出流的使用 2、 了解常用的输入流及输出流成员函数的定义 [实验内容] 1、 从键盘输入一批数值,要求保留3位小数,在输出时上下行小数点对齐。 输入三角形的三边a,b,c,构成三角形的条件是:a+b>c,b+c>a,c+a>b,编写程序,输入a,b,c,检查是否满足以上条件,如不满足,用cerr输出有关出错信息。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
11 | 文件输入输出 | 3 | [实验目的] 1、掌握文件流类和文件流对象的定义 2、掌握ASCII文件的打开、关闭与读写操作 3、了解二进制文件的操作 [实验内容] 1、学生信息包括:姓名、性别、年龄、数学成绩、英语成绩和语文成绩,要求: (1) 从键盘输入10个学生记录的信息并保存到文件“student.txt”中,每个学生记录占一行,各项数据中间用逗号隔开; (2) 建立一个学生类Student,依次读取文件中每条记录的值并赋给学生对象的各属性,同时计算出平均成绩显示到屏幕上,在输出字符串时左对齐,输出数值时右对齐。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
12 | 异常处理 | 3 | [实验目的] 1、了解异常处理的三步骤 2、熟悉命名空间的使用 [实验内容] 1、 求一元二次方程式ax2+bx+c=0的实根,如果方程没有实根,则输出有关警告信息。 2、 学校的人事部门保存了有关学生的部分数据(学号、姓名、年龄、住址),教务部门也保存了学生的另外一些数据(学号、姓名、性别、成绩),两个部门分别编写了本部门的学生数据管理程序,其中都用了Student作为类名。现在要求在全校的学生数据管理程序中调用这两个部门的学生数据,分别输出两种内容的学生数据。要求用ANSI C++编程,使用命名空间。 [实验方法及原理] 编写代码,上机调试。 | | √ | |
四、教材及主要参考资料
1. 教材
[1]谭浩强.《C++程序设计(第3版)》,清华大学出版社,2015年8月
[2] 谭浩强.《C++程序设计题解与上机指导(第3版)》,清华大学出版社,2015年8月
2. 参考资源
(1)教学平台
①《C++程序设计》 南京中医药大学电子教学平台
网址:http://e.njucm.edu.cn
②面向对象C++程序设计,国家精品资源共享课,
网址:https://www.icourse163.org/learn/NUAA-1001754370?tid=1461746442
(2)参考书目
①Stephen Prata. C++ Primer Plus(第6版),人民邮电出版社,2012年7月
②本贾尼·斯特劳斯特鲁普.C++程序设计语言(第1—3部分)(原书第4版),机械工业出版社,2016年7月
③H.M.Deitel P.J. Deitel.《C++程序设计教程(第4版)》,清华大学出版社,2004