基于“阶梯递进”模式《C语言程序设计》主讲教材的设计
2014-03-30肖海容
肖 捷 肖海容
(1.东莞理工学院 计算机学院,广东东莞 523808;2.东莞理工学院 图书馆,广东东莞 523808)
基于“阶梯递进”模式《C语言程序设计》主讲教材的设计
肖 捷1肖海容2
(1.东莞理工学院 计算机学院,广东东莞 523808;2.东莞理工学院 图书馆,广东东莞 523808)
培养学生编程能力是《C语言程序设计》课程教学的重点,其教材必须围绕“程序设计”来组织内容,以适应课程教学的要求。本文基于“阶梯递进”模式,研究设计了一套《C语言程序设计》主讲教材的构建方案,该方案将教材划分为程序设计主线和语言知识辅线两条线索。程序设计主线基于“案例分析—模仿改写—独立编程”的“阶梯递进”模式,侧重学生程序设计能力的培养;语言知识辅线基于程序设计主线中涉及到的相关语言知识进行组织,为程序设计主线服务,力求讲解清楚,详略适当。实践证明,该方案有效地改进了“传统”教材存在的诸多问题,具有较好的完整性、科学性、创新性和可操作性等特点。
阶递递进模式;教材设计方案;程序设计;语言知识
程序设计是高校一门重要的计算机基础课程,它以编程语言为平台,介绍程序设计的思想和方法。学生通过课程学习,不仅要掌握程序设计语言的知识,更重要的是在实践中逐步掌握程序设计的思想和方法,培养学生问题求解和程序语言的应用能力[1]。目前,C语言已被许多高校列为程序设计课程的首选语言。
培养学生编程能力是《C语言程序设计》课程教学的重点,教学必须围绕“程序设计”来展开,一方面,教师必须精讲大量的程序设计案例,着重培养学生问题分析、问题求解和语言应用的能力,另一方面,学生必须通过大量的编程训练,在实践中掌握程序设计语言,培养程序设计的基本能力,并逐步理解和掌握程序设计的思想和方法[2]。因此,教材必须围绕“程序设计”来组织内容,以适应课程教学的要求。本文基于“阶梯递进”模式,提出了构建《C语言程序设计》主讲教材的设计方案,并应用于具体的教材建设。
1 主讲教材的设计
1.1 设计思想
目前,介绍C语言的教材很多,但在多年的教学实践中,发现比较适合程序设计入门课程教学的教材并不多。现有的许多教材一般围绕语言本身的体系展开内容,以讲解语言知识特别是语法知识为主线,辅以一些编程技巧的介绍,不利于培养学生的程序设计能力和语言应用能力[3]。当然,C语言的案例教材也不少,但在案例分析时,问题分析和算法设计描述不够,主要突出程序代码和代码解析两个方面,也不利于培养学生问题分析和问题求解的能力。
基于传统教材的不足,本文提出了基于“阶梯递进”模式的主讲教材设计思想,将教材划分为程序设计主线与语言知识辅线两条线索,其中:
①程序设计主线:基于“案例分析—模仿改写—独立编程”的“阶梯递进”模式,以编程应用为驱动,通过案例和问题引入内容,重点讲解程序设计的思想和方法,侧重学生程序设计能力的培养[4]。“案例分析”基于问题求解的基本过程,即问题分析、算法设计、编写程序和调试运行4个过程,以前3个过程为重点,通过经典案例,突出讲解程序设计的思想、方法和编程风格。“模仿改写”是针对每节中的相关概念和“案例分析”,在每节的模仿改写练习中给出一些难度较低的相关问题,学生可以模仿案例完成,以加深理解,提高兴趣[5]。“独立编程”是“阶梯递进”模式的最后环节,在每章习题中给出一些难度稍大的编程问题,在前两个环节基础上独立完成并上机调试通过。
②语言知识辅线:基于程序设计主线中涉及到的相关语言知识进行组织,为程序设计主线服务,力求讲解清楚,详略适当。一般穿插在“案例分析”之后讲解。
1.2 教材结构和内容设计
在教材的结构设计上,强调编程实践,让学生从第1周起就练习编程,使程序设计主线贯穿始终。前两章简单介绍一些背景知识和利用计算机求解问题的过程,然后从案例出发,介绍顺序、分支和循环3种控制结构的最简单使用形式及函数的简单使用,使学生对C语言有一个总体的了解,并学习编写简单的程序,培养学习兴趣。第3章介绍C语言的基本数据类型和表达式,为后续章节做准备。从第4章开始,逐步深入地讲解程序设计的思想和方法,说明如何应用语言知识解决实际问题。
教材分成五个部分,包含13章内容和一个附录。第一部分:简单程序设计,学习编写简单程序,培养学习兴趣。包括第1~3章,第1章介绍程序与程序设计语言的知识以及利用计算机求解问题的过程。第2章从实例出发,简单介绍顺序、分支和循环3种控制结构的最简单使用形式及函数的简单使用,以及在实例程序中用到的语言知识,使学生对C语言有一个总体的了解。第3单介绍数据类型和表达式等基本语言知识,为后续章节做准备。第二部分:控制结构程序设计,基于简单数据类型,学习编写三种控制结构的程序。包括第4~6章,通过大量的案例分析,进一步分别介绍分支结构、循环结构以及函数结构的程序设计思想和方法,侧重基本知识和基本编程能力。第三部分:基于构造数据类型的程序设计,学习用模块化方法实现有一定复杂度的编程问题和基本算法等内容。包括第7~12章,第7章介绍数组类型的基本知识,并通过大量的案例分析,介绍模块化方法在一维数组、二维数组和字符串的编程应用。第8章介绍指针类型的基本知识,并通过大量的案例分析,介绍模块化方法在指针与数组相结合的编程应用。第9章介绍结构类型的基本知识,并通过大量的案例分析,介绍模块化方法在结构与数组、结构与指针类型的编程应用。第10章介绍链表的基本知识,并通过案例分析,介绍链表结构的基本操作和模块化方法在链表结构中的编程应用。第11章介绍共用体与枚举类型的基本知识,并通过案例分析,简单介绍共用体与枚举类型的编程应用。第12章介绍文件的基本知识,并通过案例分析,介绍文件结构的基本操作和模块化方法在文件结构中的编程应用。第四部分:综合应用程序开发,即第13章,学习用结构化程序设计方法实现复杂问题的编程。本章首先介绍结构化程序设计方法,接着介绍结构化程序设计方法在C语言中的实现技术,最后结合一个较复杂的案例,介绍结构化程序设计方法在C语言中的编程应用。第五部分:附录,包括4个子附录,以备读者速查。附录Ⅰ:常用字符与ASCII代码对照表;附录Ⅱ:C语言常用语法提要,分类描述C语言语法方面的主要特性。附录Ⅲ:C库函数,分类列出ANSIC的常用标准库函数。附录Ⅳ:常见错误分析,列出常见的编译错误、连接错误和运行错误,分析出错原因并给出相应的解决方法。
1.3 教材结构解析
由于教材篇幅大,不能对各章枚举解析。下面以教材重点章节“第5章循环结构程序设计”中的“5.1 while语句”为例,详细解析5.1节的组织结构,进而归纳教材结构的设计思想。第5章的目录结构如下。
5.1 节(5.1 while语句)基于“阶梯递进”模式,按照“案例分析—模仿改写—独立编程”的分步教学思想(即:教学做一体化)来进行组织。其中:
A.5.1.1引例
本小节通过一个经典案例,详细描述求解问题的基本过程,即“问题分析—算法设计—编写程序—调试运行”4个过程,以前3个过程为重点,突出讲解程序设计的思想、方法和编程风格[6]。在此基础上,引出while语句,并对while语句的语言知识进行解析。具体描述如下:
【例5-1】编写一个程序,输入一个班学生的成绩,求全班的平均成绩。
问题分析与算法设计:求全班平均成绩,需要先求全班总成绩和总人数。显然,这是一个求累加和与求计数的问题,其中:输入成绩、累加成绩和计数人数都是一个重复性过程,需要使用循环结构来实现。在这里,我们并不知道有多少个学生,也就是说事先不知道循环次数,但考虑到成绩没有负数,这样就可以把循环条件设定为:每当输入的分数大于等于0时就继续循环,当输入的分数小于0时就停止循环。算法用自然语句描述如下:
第一步:设置2个统计变量并赋初值:总成绩sum=0,总人数count=0
第二步:输入第一个学生分数=>score
第三步:输入一批学生成绩,统计总成绩和总人数:当score>=0时,重复下列三项工作。
①累加总成绩:sum=sum+score
②计数人数:coount=count+1
③输入下一分数=>score
第四步:计算平均成绩:若count不为0,用公式sum=sum/count计算平均成绩
第五步:输出平均成绩sum
源程序清单:
/*输入一个班学生的成绩,求全班的平均成绩*/
#include<stdio.h>
void main()
{
float score,sum=0; /*sum:存放总成绩,初值为0*/
int count=0; /*count:存放学生数,初值为0*/
/*输入一批学生成绩,统计总成绩和总人数*/
printf(″Enter grades:″); /*输入提示*/
scanf(″%f″,&score); /*输入第一个学生分数*/
while(score>=0){ /*循环条件:score>=0*/
sum+=score; /*累加总分*/
count++; /*计数人数*/
scanf(″%f″,&score); /*输入下一个学生分数*/
}
/*计算并输出学生平均成绩*/
if(count!=0)sum=sum/count; /*计算平均成绩*/
printf(″Grade average is%6.2f″,sum); /*输出平均成绩sum,保留两位小数*/}
运行结果:
程序解析:本例使用while语句解决求累加和与计数的问题。程序首先输入第一个学生成绩,接着进入while循环语句求总成绩和总人数,循环条件是while后面括号内的关系表达式score>=0,循环体语句包括由sum+=score、count++和scanf(″%f″,&score)三条语句构成的一条复合语句,循环结束后求平均成绩并输出结果。
while语句在C语言中用得比较多,它是通过判断循环控制条件是否成立来决定是否继续循环,又称“当型”循环,它的一般形式是:
while(表达式)
循环体语句
相关说明:
◆表达式:可以是任意合法的表达式,通常是关系表达式和逻辑表达式,表示循环条件。
◆循环体语句:可以是一条简单语句,也可以是一对花括号{}括起来的复合语句。表示要重复执行的语句。
执行流程:如图1所示。首先计算表达式的值,如果表达式的值为非0(“真”),就执行循环体语句,直至表达式的值为0(“假”),才结束循环并继续执行while语句的下一条语句。
特别说明:在使用while语句的时候,需要注意以下几个问题:
◆循环体如果包含一个以上的语句,应该用花括号括起来,以复合语句的形式出现。如果不加花括号,则while语句的范围只到while后面的第一个分号处。在上例中,while语句中如无花括号,则while语句范围只到“sum+=score;”语句。
◆在循环体中应有使循环趋向于结束的语句,否则会出现“死循环”。在上例中,循环结束的条件是“score>=0”,当班级成绩全部输完,一定要通过循环体内的“scanf(″%f″,&score);”语句输入一个负数,才能退出循环,使程序继续往下执行。
◆while循环是先判断循环条件再决定是否执行循环体,若一开始循环条件就是“假”,则循环体一次都不执行。比如上例,当第一次输入的分数就为负数时,则循环体语句一次也不执行。
B.5.1.2用while语句编程
在5.1.1小节基础上,本小节再通过1个经典案例,进一步介绍while语句的编程应用。在案例介绍中,强调求解问题基本过程的规范化,即“问题分析—算法设计—编写程序—调试运行”,特别是“问题分析和算法设计”过程,以此加强学生逻辑思维能力的训练,进而培养学生问题分析和问题求解的能力。由于篇幅关系,【例5-2】就不再详细描述求解过程。
【例5-2】利用格里高利公式求π的近似值,要求精确到最后一项的绝对值小于10-4。计算公式:
C.5.1.3模仿改写练习
在5.1.1和5.1.2两个小节基础上,本小节主要针对5.1.1和5.1.2两个小节中的相关概念和“案例分析”,给出一些难度较低的相关问题,学生可以模仿案例完成,以加深理解,提高兴趣。
练习5-1:运行例5-1程序时,如果将最后一个输入数据改为-2,运行结果有变化吗?如果第一个输入数据是-1,运行结果是什么?为什么?
练习5-2:在例5-2程序中,如果对item赋初值0,运行结果是什么?为什么?如果将精度改为10-3,运行结果有变化吗?为什么?
练习5-3:输入一个正实数eps,计算并输出下面表达式的值,直到最后一项的绝对值小于eps。
D.习题5
每章习题包括三种题型:选择题、填空题和程序设计题。选择题侧重本章的基础知识,填空题侧重程序阅读,程序设计题侧重独立编程。独立编程是“阶梯递进”模式的最后环节,针对每章习题中的第三种题型(程序设计题),给出一些难度稍大的编程问题,学生可以在前两个环节“案例分析—模仿改写”基础上,利用所学知识独立完成编程并上机调试通过。从而进一步规范问题求解的过程,提高学生分析问题、解决问题和实践编程能力,进而掌握程序设计的思想和方法。
仔细分析本章其他节的目录结构,可以发现本章内容的组织包含两条线索,即:程序设计主线和语言知识辅线,程序设计主线基于“案例分析—模仿改写—独立编程”的“阶梯递进”模式,侧重学生程序设计能力的培养,语言知识辅线基于程序设计主线中涉及到的相关语言知识进行组织,为程序设计主线服务,力求讲解清楚,详略适当。其实,这也是教材结构组织的设计思想。
2 结语
程序设计课程的实践性很强,培养学生程序设计能力是教学重点。因此,教材的设计和组织非常重要,直接影响课程的教学质量和教学目标。本文基于“阶梯递进”模式,研究设计了一套《C语言程序设计》主讲教材的构建方案,将教材组织划分成程序设计主线和语言知识辅线两条线索,程序设计主线侧重规范和训练学生问题求解的过程和方法,培养学生实践编程能力。语言知识辅线为程序设计主线服务,力求讲解清楚,详略适当。实践证明,该方案有效地改进了“传统”教材存在的诸多问题,具有较好的完整性、科学性、创新性和可操作性等特点,对课程教学质量和教学目标具有积极作用。
[1] 何钦铭,颜晖.C语言程序设计[M].2版.北京:高等教育出版社,2012:1-10.
[2] 颜晖.C语言程序设计实验与习题指导[M].2版.北京:高等教育出版社,2012:46-76.
[3] 肖捷.《C语言程序设计》课程教学问题剖析及对策研究[J].东莞理工学院学报.2013,20(5):111-115.
[4] 肖捷.程序设计课程教学方案的研究与设计[J].东莞理工学院学报.2012,19(3):103-107.
[5] 肖捷.C语言程序设计实践教学方案研究与设计[J].东莞理工学院学报.2012,19(3):105-109.
[6] 肖捷.基于“阶梯递进”模式《C语言程序设计》实验教材的设计[J].东莞理工学院学报.2014,21(1):99-102.
The Design for Main Teaching Materials of the C Language Programming Based on Progressive Mode
XIAO Jie1XIAO Hai-rong2
(1.Computer College,Dongguan University of Technology,Dongguan 523808,China;2.Library,Dongguan University of Technology,Dongguan 523808,China)
Themain teaching point of C Language Programming is training students'programming ability,so the teaching materials should be centered on“Rrogramming”tomeet the requirements of course teaching.This paper,based on“Rrogressive Mode”,designs a scheme for themain teachingmaterials of C Language Programming.According to this scheme,the teachingmaterials follow two clues,the main clue being programming and the auxiliary clue being C language knowledge.The main clue is based on“Rrogramming Mode”(namely case-analysis—modification—independent programming),which focuses on training students'programming ability;while the auxiliary clue is to serve for themain clue and explain C language knowledge related to the main clue.The explanation should be clear and concise.It is proved that this scheme improvesmany defects of the traditional teachingmaterials,has better integrity,scientificity,innovativeness and maneuverability,etc.
Rrogressive Mode;scheme of teachingmaterials;programming;C language knowledge
TR312
:A
1009-0312(2014)05-0101-06
2014-09-10
广东省高等学校教学质量与教学改革工程本科类项目(粤教高函〔2012〕123号)。东莞理工学院教学改革项目(莞工教〔2012〕33号)。
肖捷(1966—),男,湖南邵东人,副教授,主要从事网络与数据库技术、企业ERR技术研究。