《C++程序设计》各主要章节重、难点与解决办法
第2章 数据类型与表达式
重点:C++中的数据类型、表达式、表达式运算过程中运算符的优先级、结合性与数据类型的转换。
难点:运算符的优先级、结合性与数据类型的转换,表达式的综合运算。
解决办法: 第二章数据类型与表达式中,用图2.2介绍数据类型即可,并以数据类型为引例介绍常量,要讲清字符常量的转义字符。介绍逻辑与关系表达式时,将第三章中用到一些条件表达式作为例子介绍,如判数字取值区间,判闰年等。同时应讲清当逻辑与关系表达式左边值为0与1时右边表达式不再计算。
第3章 程序结构与流程控制语句
重点:程序的三种基本结构,C++中各种控制语句的格式、功能及执行过程。
难点:用if、while、for语句编写分支与循环程序。
解决办法:在《程序结构与流程控制语句》一章中,最后一次习题课非常重要,在复习单选、双选、多选条件语句时,以求一元二次方程解为例,采用先搭语句框架后填内容的教学方法。在复习开关语句时,以求一年某月天数为例。在复习循环语句时,可用if、while与for三种语句求s=1!+2!+3!+…+n!为例。详细内容见《C++程序设计》(第2版)P75页。
第4章 数组
重点:一维数组和二维数组的定义、初始化赋值和使用。字符数组的定义、初始化赋值和使用,字符串处理函数。
难点:数组的应用编程,如三种排序方法。
解决办法:在数组教学中,介绍三种排序(升序)方法,可归纳为如下的口诀:
(1)冒泡法,相邻两数两两相比,上大下小则交换,
共进行n-1轮,每轮进行n-i-1次。语句描述如下:
for( i=0;i<n-1;i++)
for(j=0 ;j< n-i-1;j++)
if (a[j]>a[j+1])
{t=a[j];a[j]=a[j+1];a[j+1]=t;}
(2)选择法,每轮首数与后数两两相比,首大后小则交换,
共进行n-1轮,每轮从i+1到n-1为止。语句描述如下:
for( i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if (a[i]>a[j])
{t=a[i];a[i]=a[j];a[j]=t;}
(3)擂台法,每轮设擂主k=i,擂主与后数两两相比,主大后小则换主,
共进行n-1轮,每轮从i+1到n-1为止。语句描述如下:
for( i=0;i<n-1;i++)
{ k=i;
for(j=i+1;i<n;j++)
if (a[k]>a[j]) k=j;
if (k>i)
{t=a[k];a[k]=a[i];a[i]=t;}
}
第5章 函数
重点:函数的定义和调用,实参和形参间数据的传递方式,数组作为函数参数的调用过程及方法。
难点:数组作为函数参数调用过程及方法;变量作用域和存储类型;函数递归调用。
解决方法:在函数教学中,先用引例给出函数定义、函数调用、函数值返回,然后再以swap()函数为例,介绍函数参数传送与函数原型说明。
以正弦函数为例引出函数嵌套调用的概念,用杨辉三角形例子巩固此概念。函数递归调用重点介绍清递归公式、结束条件、递归与回推过程。
数组为函数参数时必须强调实参为数组名,而形参则需要重新定义。参数传送采用传地址方式,所以函数执行过形参数组与实参数组占用相同的内存单元。实参数组值随形参数组值而变化。
对于变量存储类型,应使学生掌握如下概念,块与文件作用域、局部与全局变量、静态与动态变量(生存期)、自动变量与静态变量。然后应知道:
定义在函数内默认存储类型的变量具有块作用域,为局部动态变量。
定义在函数内存储类型为static的变量具有块作用域,为局部静态变量。
定义在函数外默认存储类型的变量具有文件作用域,为全局静态变量。
第7章 指针
重点:指针的概念、指针变量、数组指针变量、字符串指针变量;指针与数组作为函数参数;用new、delete
运算符动态分配与回收内存的方法;引用的概念及使用方法。
难点:二维数组的行地址、行首地址、元素地址、指针数组;指向一维数组的指针变量;指针与数组作为函数参数;函数指针变量。
解决办法:在指针教学中,必须用一次习题课将五种指针类型的概念、使用方法给学生系统复习一遍,具体内容如下。
(1)指针变量
int * p 可指向变量、指向数组、指向字符串,并用例子说明。
(2)指针数组
int *p[3]用于解决字符串数组的处理问题。
(3)指向一维数组的指针变量
int (*p)[3]用于表示二维数组某行元素值。
用法如下:int (*p)[3];
p=a+i;
//a第i 行地址赋给p,则p可表示a的第i行元素。
(*p)[j]=a[i][j] (j=0,1,2)
(4)返回指针值的函数(int
*p(形参){函数体})实质上一种函数,与普通函数不同的是函数返回值为指针类型。
(5)函数指针变量
int (*p)(float
x);用于存放函数的入口地址,而函数名可用于表示函数入口地址,因此,当某函数名f赋给函数指针变量p后,则p(实参)与f(实参)等价。如:
p=f1;
//此时,p(1)=f1(1)
p=f2;
//此时,p(1)=f2(1)
第8章 枚举型、结构体与链表
重点:结构体的概念、定义格式与使用方法;链表的概念及链表的建立、查询、删除、输出操作。
难点:链表的操作。
解决办法:在结构体教学中,可用学生成绩二维数据表中各字段有不同数据类型为例引出结构体的概念,然后举例引出结构体类型的定义,结构体变量的定义,结构体变量数据成员的引用,最后介绍用结构体数组作为参数的函数定义与调用方法。采用边讲结构体定义、引用、函数边讲学生成绩表例子方法效果更好。
讲链表时,可以从结构体数组线性存储插入、删除困难为例引入链表。链表由表头、结点、链尾三部分组成。讲链表基本操作时,重点先介绍建无序链表、查询、输出与删除链表的操作,采用边讲操作关键步骤边画图边写程序框架最后完善的教学方法。
第9章 类与对象
重点:类与对象的概念、定义格式与使用方法;构造函数及析构函数的定义格式、对象初始化的调用过程。
难点:类的概念、this指针的概念;用new与delete运算符动态建立、撤消对象;类中对象成员的构造函数格式及调用过程。
解决办法:在类与对象教学中,先用结构体类型描述学生成绩的事例引入类与对象的概念,并由此提出类的5个特点。
对于类与对象的定义,应按类的定义、对象的定义、数据成员与成员函数的引用、对象的赋值运算这条主线来进行讲解。对于构造函数应按作用、定义格式、调用过程这条主线来介绍,重点抓住缺省、默认与拷贝构造函数。
第10章 继承与派生类
重点:继承与派生的概念、派生类的定义格式;基类成员经派生后访问权限的变化。
难点:派生类中构造函数的定义与调用;虚基类的概念、虚基类的语句定义格式及使用方法;静态数据成员的定义格式、初始化方式及作用域。
解决办法:对于继承与派生应按继承与派生的概念、派生类的定义、权限的变化、构造函数的调用过程这主线来讲解。然后理解冲突、支配规则与赋值兼容性的概念。重点介绍静态数据成员的引用性说明、定义性说明与赋值,该内容等级考试考得较多。
第11章 友元与运算符重载
重点:友元、运算符重载与多态性技术的概念;友元函数的定义方法;运算符重载函数的定义与使用方式。
难点:运算符重载的调用过程;虚函数的概念、定义格式及使用方法。
解决办法:由于函数有:函数定义、函数调用与参数传送三个教学环节。而运算符重载是通过运算符重载函数来完成的。因此,本章教学方法应按运算符重载函数定义、运算符重载函数调用、运算符重载函数参数传送这条主线进行。
在“运算符重载函数”一词中包含运算符与函数两个概念,由于运算符分为一元运算符、二元运算符,而函数又分为成员函数与友元函数,因此,必须分一元运算符重载函数为成员函数、一元运算符重载函数为友元函数、二元运算符重载函数为成员函数、二元运算符重载函数为友元函数四种情况进行讨论。
第12章 流类体系与文件操作
重点:C++输入/输出基本流类体系、文件流类体系的概念;用文件对象实现对文本文件的打开、读/写、关闭等操作编程。
难点:C++输入/输出基本流类体系、文件流类体系的概念;用文件对象实现对文本文件的打开、读/写、关闭等操作编程;二进制文件的操作。
解决办法:对于文件操作应重点介绍文件的建立、打开、读/写、关闭的方法及应用,而不要过多介绍输入类与输出类的定义格式。
加载中,请稍候......