教学指导书第二版Word文件下载.docx

上传人:b****5 文档编号:18782931 上传时间:2023-01-01 格式:DOCX 页数:106 大小:528.54KB
下载 相关 举报
教学指导书第二版Word文件下载.docx_第1页
第1页 / 共106页
教学指导书第二版Word文件下载.docx_第2页
第2页 / 共106页
教学指导书第二版Word文件下载.docx_第3页
第3页 / 共106页
教学指导书第二版Word文件下载.docx_第4页
第4页 / 共106页
教学指导书第二版Word文件下载.docx_第5页
第5页 / 共106页
点击查看更多>>
下载资源
资源描述

教学指导书第二版Word文件下载.docx

《教学指导书第二版Word文件下载.docx》由会员分享,可在线阅读,更多相关《教学指导书第二版Word文件下载.docx(106页珍藏版)》请在冰豆网上搜索。

教学指导书第二版Word文件下载.docx

介绍怎样在面向对象的程序设计中使用异常处理技术来处理一些很难查找甚至是无法避免的运行时错误和异常。

总之,不是泛泛介绍面向对象的C++的语法和框架,而是突出实用技术,包括完善的封装、派生、多态和模板,在构造函数中动态分配资源、在析构函数中释放资源和异常处理,这是面向对象的C++程序设计的精髓。

本教材要求学生能熟练应用多态(重载和超载),熟练应用模板,熟练应用派生。

习惯在构造函数中动态分配资源、在析构函数中释放资源和异常处理的方式。

第二,强调算法,注意介绍有关独立于任何特定编程语言的算法概念和结构,即突出程序设计而不是语法。

强调算法,不是忽视语法,而是不要繁琐的钻牛角尖的语法,我们要的是基本的常用的语法,但更多的是模仿。

不是知道的语法越多,程序编得越好,而是自己动手编程越多,程序编得越好。

第三,培养面向对象程序设计能力。

掌握怎样从客观事物中抽象出类来的方法。

基础教学与实践教学相结合。

在基础教学中采用Windows平台下的控制台方式(命令行方式)以突出编程能力的培养。

在实践部分比较全面地学习标准的Windows图形界面编程。

采用研究型学习进行课程设计。

本教材第二版做了大幅改动。

首先例题和习题解答主体按三个熟练应用和一个习惯的要求,进行改编与重组,更加突出了面向对象C++程序设计的实用技术;

采用统一的规范的编程模式,不再体现编程的多样性,降低了学习难度。

其次是调整章节安排与精简教学内容。

第三,为了更好地配合精讲多练,安排了二十九个(其中两个选做)与教学内容紧密相关的同步实验。

第四,更新部分不完全符合ISO14882C++语言标准的内容。

性质与任务

程序设计课程与数学、物理、外语等一样,是大学生的通识教育课程,也是从技术角度学习计算机的主要基础课,包括面向对象程序设计及最基本的数据结构和软件工程的知识。

其任务是培养学生的面向对象的编程能力,也锻炼大学生的逻辑思维能力(计算机思维方式)。

学时安排

本教程建议授课时数48学时,习题课8学时,上机实验56学时(含课外上机)。

另有课程设计(小型软件设计的实践环节),16学时加上机实验32学时(含课外上机)。

课堂教学内容

分四部分,共十二章。

第一部分,包括第一到第三章,是基础部分。

介绍C++程序的基本组成和编写方法,函数的递归以及最简单的常用算法。

这一阶段代码的编写方法,应该是课堂教学的重点。

第二部分,包括第四到第五章,是面向对象的入门部分。

介绍类对象的组成,构造函数和析构函数的编写,运算符的重载,还有数组与指针的概念和两者之间的对应关系。

本阶段逐步过渡到以算法为重点,逐渐淡化代码的编写细节。

第三部分,包括第六到第八章,是核心部分。

介绍通用算法的编写方法,特别是数据结构的基本算法,和软件的再利用。

第六第七两章采用模板技术,第八章采用继承与派生。

一般来讲,本阶段以算法为重点,不再细讲代码的编写。

第四部分,包括第九到第十一章(标准模板库选读),是扩展部分。

包括:

输入输出重载、在构造函数中动态分配资源、在析构函数中释放资源和异常处理、以及标准模板库。

本阶段主要学习面向对象的C++程序框架构造知识。

考虑到各专业相关课程配置不同,生源不同,授课内容可有筛选。

选读内容,可以作为学有余力的同学的自学内容,做到因材施教。

其实讲哪些内容,不讲哪些内容,教师完全可以自主掌握,关键是要学生掌握课程特色中所言的三个熟练应用和一个习惯。

教学方法

现实情况是:

第一,在大一的基础课程中,大学生将程序设计排在数学、外语和物理之后,不可能投入过多的精力,大学生如果要放弃某门课以保证集中精力通过其他课时,最不熟悉的本课程列在首位;

第二,大学生对这门课学习的期望值很高,但对学习时可能遇到的困难估计不足;

第三,本科生总学时数下降,尽管计算机课程重要性上升,但总学时不可能增加;

第四,大学生上机实践的条件大大改善,特别有利于贯彻先进的精讲多练的教学思想。

所以在学时有限和学生所投精力有限的条件下,围绕课程特色中提到的面向对象关键技术进行精讲多练是第一条。

为此安排了29个同步实验。

一年级大学生认为应试教育天经地义,大学应延续中学的应试教育,不懂得主动学习。

要培养大学生的自学能力。

预习是本课程对学生的基本要求。

整个教学强调过程,知识积累的过程,能力培养的过程,使学生能快乐地学习。

(但绝不是自学,实践经验指出,自学出来的学生实际应用时编出来的程序往往效率低,错误百出,而且别人看不懂,无法交流,原因就在不会规范化地编程。

)一定要避免应试教育。

教学要求高于考试要求,必须给学生真本事。

考试可以多样化,面要广,难度要适中。

切忌题目过偏过难,切忌出弯弯绕的语法题,要考学生编程的实际能力,这是大学的第一门计算机课,不要把多数学生的自信心毁了。

授课时要采用案例教学法,从实例引出语法,尽管书中多数地方为了阅读方便是将语法条文单列,甚至放在前面,但上课时不要顺序往下讲。

现在提供的电子教案只是参考,修改和重编的过程也是熟悉教学内容和发现问题的过程。

要求每位老师自己做有自己个性的教案。

面向对象程序设计的原代码通常比较庞大,原因是数据与数据的操作封装在一起,原则上包含的操作要全面,正是众多的成员函数使学生认为自己面对的是一个庞然大物,吓也吓蒙了。

教师应该指出成员函数是一个个独立的操作,每一个成员函数都是简单的。

可以给学生讲讲庖丁解牛的故事,要求学生做到目无全牛,也就是面向对象的程序要一个一个函数来编。

习题与实验都是学生的实践机会,具体指导和讲评是必要的。

特别是在学生尚未入门时具体指导尤其重要,最好是在实验室里配大屏幕显示,学生与教师演示同步操作,或用同步操作的教学软件。

如无此条件,至少教师在第二章和第三章课堂教学时多做控制台应用程序设计全过程演示。

在辅导实验时只可能解决少数学生的少数问题,提倡上机时学生互相讨论互相帮助。

做习题,也提倡较难的题可以同学之间先讨论再独立完成。

也可以把部分习题的参考答案先发给学生作为参考,毕竟我们要求规范化编程,主要是灵活应用通用算法,不是创造别人看不懂的算法,初级阶段主要是模仿,见多识广后就能编出好的程序。

讲评是在学生做完习题和实验之后,针对学生实际发生的最常见的错误进行的,也可以介绍一些同学的好作业,这是一个总结提高的过程。

面向对象C++程序设计的习题基本是在一个C++的类或类模板定义中添加一些成员函数。

建议可以给学生提供完整的类定义和需添加的成员函数的声明,以及检测其功能的主函数代码,同时给出需添加的成员函数的思路或提示,仅让学生编写需添加的成员函数,可能效果会更好。

建议将给教师使用的习题参考答案,删去要求编写的函数,添加所需的说明,再发给同学去做习题,这样即降低了难度也突出了重点,便于学生调通程序,同时提高了学生的信心和学习的效率。

实验也可做类似的考虑。

该教学体系培养的学生所编的程序给人的第一影响应该是:

这是规范的面向对象的程序。

对于需要计算机知识较多的专业,程序设计课程应考虑后续课程的需要。

尤其是电气电子信息类专业的学生的后续课程中需要大量的面向过程的程序设计的基础知识,包括汇编语言的编程,单片机、嵌入式系统和DSP的C语言编程。

面向对象的程序设计其实与面向过程的程序设计是密不可分的。

在本课程中,算法的描述实际上是面向过程的,而面向对象是一种包装,它使程序的整体组织更合理,使用起来更方便。

教学中应该合理地将两个方面有机地结合起来,即细节上算法的编程和程序总体上的把握并重。

在前三章的教学中对算法的描述,必须侧重于采用C++语言编程的细节的讲解,即培养学生对算法的编程能力。

要求学生学会先分析算法,再画UML的活动图或普通的流程图,最后进行编程。

特别是在“基本控制结构程序设计”和“函数”这两章的教学中要严格贯彻这一要求。

“类与对象”和“数组与指针”两章是过渡阶段,对编程的细节的讲授随教学推进而逐渐淡化,对程序的整体掌握的要求逐渐加强,使学生的编程能力上一个台阶。

从第六章起,算法表述的细节基本留给学生自己看,教师重点讲解脱离具体C++语言的算法本身的描述和程序整体的构造。

一方面提高学生的自学能力,另一方面引导学生的编程的大局观。

要引导学生,不要做学生的尾巴,片面地降低要求。

 

疑难问题解答索引

第一章C++基础知识

教学目的

使大学生了解C++数据和运算的表述方法,简单的输入输出流类,引入广义的数据类型的概念。

建议学时安排

授课5学时

初识C++程序,关键字与标识符,数据类型,变量与常量。

2学时。

运算符、表达式和语句,数组。

简单的C++输入输出。

1学时。

教学方法提示

从形式上看本章与面向过程的教材差异不大,但教学上要从面向对象的思维方式出发:

数据类型总是与相关的算法封装在一起。

不要说成算法是独立的。

某种算法可以用于那些数据,这是面向过程的说法,并不切合实际。

实际上不同数据类型是重载了运算符。

例如加法,对于整型数,执行的是定点运算;

而浮点数,首先要对阶。

再如除法,对于整型数,执行的是整除,商为整数,另有求余数的运算;

而浮点数,商为浮点数,没有求余数的运算。

从不同数据有不同算法出发,很容易理解为什么要将函数附属于数据类型。

这样考虑问题,学生易于接受面向对象的思想。

在本章中,存储方式的概念要建立起来,每一个变量总是在内存中分配有一块内存单元,不仅本章中的左值、表达式、字面常量和sizeof()与之有关,后面的算法的分析、函数的传值等等全与之有关。

介绍数据的存储方式,并在教学的过程中经常利用它们,也是本书的教学特点之一。

基本数据类型,相关的算术、关系和逻辑运算,是本章最基本的知识点。

有关运算符的结合性是决定同一优先级的运算符组合在一起时的运算次序,同一优先级的运算符有相同的结合性。

如+、-的结合性是从左到右(左结合),则a+b+c-d的运算次序为:

((a+b)+c)-d//先算a+b,再加c,最后减d

赋值号=的结合性是从右到左(右结合),则a=b=c+d的运算次序为:

a=(b=(c+d))//算出c+d的和,赋给b,再将b赋给a

又如前++和单目负-的结合性是从右到左(右结合),则-++a的运算次序为:

-(++a)//先做++a,再取相反数(加负号)

这对算法描述是必须的,每一步做什么必须确定。

运算符++,学生往往没有真正理解,普通+的结果放在暂存器(累加器)中,而++的值要返回给变量,变量的值变了。

画一个演示图应该好一些。

要讲清楚a++与a+1的不同。

在第五章的运算符重载教学中,++无返回值,+=有返回值,前者友元方式时参数要使用引用,学生不理解,说看不懂,细问发现不懂在++的运算过程。

简单的数组概念的建立对算法的描述是很重要的,所以提前在这里引入。

强调3点:

第一,数组下标从0开始,这与简化大量的算法有关,不从0开始,相关的典型算法往往是错的;

第二,数组不能作为整体处理,只能按元素处理;

第三,数组的初始化方法。

字符数组与字符串现在是要求能用,因为它的应用实在太广了。

本章中只能讲清组织方式。

特别是串结束符,有了它,串的处理方式与数组大为不同。

教师必须在这里给学生点明,输出串是输出串内容,输出数组是输出数组首地址。

输入输出方式简介,强调会用。

输入方面:

第一,提醒学生字符输入容易出错,特别是数字与字符混合输入时,回车符的吸收问题要交待清楚。

第二要讲清cin和cin.get()的差异,cin会自动跳过所有空白符(包括空格、制表、回车等等与格式有关的符号),cin.get()不会。

第三,输入一系列数字时,用空格或回车分隔,不可以用逗号分隔。

第四,输入字符串使用cin.getline()的方法,提醒同学:

它提取回车符但不保存回车符,而是加一个串结束符。

其他错误解答请参考本指导书第9章。

输出方面:

格式控制演示交代清楚,学生就会理解。

字符输出要提醒同学,左值输出的才是字符,表达式输出的是ASCII码值,因为在表达式中已转为整数。

第二版中,C++程序改用标准库头文件,无后缀.h,并加usingnamespacestd。

教师应作简单说明。

注意新标准要求main()函数必须返回int型,0为正常,否则返回其他整数。

这样可以取代exit()等函数(exit()库函数通常在程序出错时用来退回到操作系统,详细见教材4.3.2节)。

一般函数返回为int的也不可省略,否则编译器发出警告。

疑难解答

优先级与结合性

优先级高的运算先做怎样理解?

请参见下式:

a*b+(-d)&

&

++c

等效为:

(a*b+(-d))&

(++c)

完全按优先级,先做(-d),第2步做(++c),第3步作a*b,第4步做(a*b+(-d)),第5步做(a*b+(-d))&

(++c)。

这是人工的做法。

计算机是从最低优先级开始,先处理最低优先级的“与”运算符左边的(因为与运算符的结合性是左→右)操作数(a*b+(-d)),括号内先做a*b,再做(-d),然后将两项相加;

其次处理“与”运算符右边的操作数(++c);

最后完成“与”操作。

如果“与”操作符的左操作数为0,则直接完成与操作。

即第1步做a*b,第2步做(-d),第3步做(a*b+(-d)),第4步做(++c),第5步做(a*b+(-d))&

如果第3步结果为0,则第4步不做。

只要交换律成立,这两种处理方法是等效的。

计算机处理表达式的优先级和结合性是借用操作数栈和运算符栈来完成的,参见教材7.3.2栈的应用。

最后的运算次序就是首先将最低优先级运算符各操作数项按该优先级的结合性依次处理,如果某操作数项为表达式,可同样按上面的规律处理。

设有表达式:

a+++b,等效于(a++)+b还是a+(++b)?

应该是前者,因为编译器在解释运算符时优先取尽可能长的符号。

而a++b是错误的表达式,改为a+(+b)才是正确的。

++a++,后++优先级高,等效于++(a++),是错的,因为(a++)后++未做,不是左值,不能进行前++。

而(++a)++是正确的,(++a)前++已完成,是左值,后++可以进行。

同样++++a是正确的,而a++++是错误的。

++-a是错的,因为第3优先级结合性是左→右,先做++,但-a不是左值。

++(-a)也是错的,尽管(-a)优先级高,但结果是右值。

-++a,等效-(++a),是对的。

---a,等效--(-a)是错的。

而+++a,等效++(+a),表面是错的,但至少VC++中单目正被忽略,所以是对的。

(-a)++是错的,因为(-a)先做,(-a)不是左值。

但-a++是对的,后++优先级高先做,a是左值。

既然后++是在表达式运算结束后做++,那么该运算符的优先级有何意义?

并且比前++高一级?

从前面的例子可见优先级是有意义的,而且前++优先级定为第3级是合理的,由于后++结合性是左→右,与前++不同,不可同列第3级,列第4级或单列一个级别也不合适,所以归入第2级。

VC++的随机数

VC++输出的随机数,并非随机数,而是特定值,如整型数,为0xcccccccc(-858993460),float型为-1.07374e+008,duoble型为-9.25596e+061。

关键字索引

and运算符代替&

and_eq运算符代替&

=;

asm运算符用于标识混编的C++源程序中的汇编语言代码;

auto说明符说明变量为自动变量,见主教材(下同)P.84;

bitand运算符代替&

bitor运算符代替|;

bool说明符用于说明布尔型变量,见P.7;

break语句结束循环语句或开关语句的执行,见P.40和P.50;

case标号用于开关语句,见P.40;

catch语句用于异常处理中捕获异常子句,见P.343;

char说明符用于说明字符型变量,见P.6;

class说明符用于说明类类型,见P.106;

compl运算符代替~;

const说明符用于说明常量类型,见P.11、136、165、193和200;

const_cast运算符常量强制类型转换运算符,详见后文;

continue语句用于循环语句,结束本次循环,见P.52;

default标号用于开关语句,表示其他情况,见P.40;

delete运算符用于回收动态存储空间,见P.220;

do语句用于循环语句,实现直到型循环,见P.44;

double说明符用于说明双精度实型变量,见P.7

dynamic_cast运算符动态强制类型转换运算符,详见后文;

else语句用于组成双分支结构条件语句,见P.34;

enum说明符用于说明枚举类型,见P.59;

explicit说明符取消构造函数隐式数据类型转换的功能,见P.357;

export说明符用于,见本指导书第六章模板;

extern说明符说明变量为外部变量,见P.84;

false逻辑值对应0,表示逻辑假,见P.7;

float说明符用于说明单精度实型变量,见P.7

for语句用于一种当型循环语句,见P.46;

friend说明符用于说明友元函数和友元类,见P.135和139;

goto语句用于无条件转移程序执行次序,见P.52;

if语句用于组成双分支结构条件语句,见P.34;

inline说明符用于说明内联函数,见P.96和110;

int说明符用于说明整型变量,见P.6;

long说明符用于说明长整型变量,见P.7;

mutable说明符使const对象和成员函数的数据成员可修改,见后文;

namespace说明符用于说明名字空间域,见P.148;

new运算符用于分配动态存储空间,见P.220;

not运算符代替!

not_eq运算符代替!

operator说明符用于定义运算符重载函数的函数名,见P.130;

or运算符代替||;

or_eq运算符代替|=;

private说明符访问限定或派生方式为私有的,见P.107和267;

protected说明符访问限定或派生方式为保护的,见P.107和267;

public说明符访问限定或派生方式为公有的,见P.107和267;

register说明符说明变量为寄存器变量,见P.84;

reinterpret_cast运算符重解释强制类型转换运算符,详见后文;

return语句作为函数返回语句,见P.2和69;

sizeof运算符计算类型或变量占用内存的字节数,见P.19;

short说明符用于说明短整型变量,见P.7;

signed说明符用于说明有符号整型变量,见P.7;

static说明符说明静态变量或类的静态成员,见P.84和139;

static_cast运算符静态强制类型转换运算符,详见后文;

struct说明符用于说明结构类型,见P.142;

switch语句用于组成多分支结构开关语句,见P.40;

template说明符用于参数化程序设计的模板构成,见P.186;

this说明符指向具体类对象本身的指针,见P.166;

throw说明符用于异常处理中抛出异常,见P.342;

true逻辑值对应1或非0,表示逻辑真,见P.7;

try语句用于异常处理测试程序块,见P.342;

typedef说明符用于类型定义,见P.173;

typeid运算符运行时类型信息运算符,详见后文;

typename说明符用于模板定义时类型参数的说明,见P.186;

union说明符用于说明联合类型,见P.144;

unsigned说明符用于说明无符号整型变量,见P.7;

using说明符用于using声明或using指示符,见P.145;

virtual说明符用于说明虚基类或虚函数,见P.278或289;

void说明符用于说明无值类型,见P.7;

volatile说明符修饰函数,表示表示该函数不做编译优化,见P.356;

wchar_t说明符宽字符类型,见P.6;

while语句用于循环语句,见P.43和44;

xor运算符代替^;

xor_eq运算符代替^=;

强制类型转换及其他运算符说明如下:

static_cast静态强制数据类型转换。

格式如下:

doublea;

intk;

k=static_cast<

int>

(a);

//将双精度型的a的值转换为整型赋给k

特别注意a本身的类型不变,仍是双精度,所有转换都是数值而非变量的转换。

允许在两种类型之间进行标准转换(如void*转换为char*,int转换为float等等),包括允许基类指针到派生类指针的向下类

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1