论文部分内容阅读
作者简介:陈子森(1946—),广东汕尾人,1970年毕业于中山大学物理系,电子技术高级工程师,电子技术副教授,现为广东财经大学信息工程系教师,研究方向:计算机软硬件。
摘要:C语言程序设计是理论紧密联系实践的一门课程,上机编程实践是学习C语言的重要教学环节。本文阐述了循环渐进项目实践教学法的目的在于使学生在C语言的学习过程中不断温故拓新,巩固和拓展知识,不断提高C语言的编程能力和调试程序的能力。本文还给出了循环渐进项目实践教学法的举例,以便同行读者在共同探索时能起到抛砖引玉的作用。
关键词:C语言;实践教学;循环渐进
中图分类号:G642文献标志码:A文章编号:2095-9214(2015)09-0070-02
1.编程实践是学好C语言的重要教学环节
C语言的特点是其功能十分丰富,语法很精练,表达能力非常强,使用起来灵活方便,因而得到广泛的应用。小到上C语言课时的实例和C语言课程中的简单实验,大到复杂的计算机操作系统,都可以使用C语言来开发。特别是单片机系统中,用C语言编程更是常见。正因为如此,在大学里几乎所有要学习编程语言的专业首先学习的语言就是C语言。通过学习C语言,可以使学生在初步接触计算机语言的过程中,对程序设计中的算法有初步的认识,对面向过程程序设计的模块化设计思想初步领会,能运用C语言的知识分析问题和解决问题,初步具备程序设计与程序调试的能力。
和学习任何计算机语言一样,C语言是一门实践性很强的课程。真正学好C语言,不是说听懂课了,看懂书了,就是学会了。检验一个人C语言学得好不好,主要是看他是不是具有较强的编程能力和较强的程序调试能力。给出一个课题、一个要求,能够得心应手地进行需求分析,构思方案,设计算法,编写程序,调试程序,实现课题的要求。如此这样,才能说明你的C语言掌握得差不多了。而要达到这一目标,最重要的是要勤学苦练,进行大量的实践,要做大量的上机操作。要充分地认识到,C语言并不是一门纯理论的课程,而是实践性很强的应用型课程。听懂课,看懂书,是做好上机实践的前提条件,是为了掌握C语言的基本概念、语法、算法、模块化程序设计思想,领会编程的基本要领。只有经过大量的、反复的上机实践,才能培养出熟练的编程能力,才能练就出娴熟的程序排错能力和程序调试能力。
2.应用循环渐进项目实践教学法的目的在于温故拓新,不断巩固和扩展知识
为了培养学生用C语言编写程序和调试程序的能力,作为主讲老师,在搞好理论教学、上好理论课的同时,精心组织安排好实践教学是重要的一环。主讲老师必须用心编写出紧密联系理论教学的内容、包含理论教学所涉及的重要知识点、针对性强的实验指导书。在编写实验课的实验指导书时,首先应明确实验要求,即本次实验要应用本实验前所学过的知识要点,应在课程实验过程中逐次包括各种数据类型、各种运算符、各种表达式、数据输入/输出的方法、各种经典算法、程序结构、数组、函数的定义与调用、指针的应用、结构体的定义及引用、文件的输入/输出等知识点。然后再给出设计思路、有关算法等,让学生独立完成实验。而在编写下一次实验课的实验指导书时,应包括上一次实验的全部或大部要求,再增加本实验之前新学到的知识要点,……。如此类推,到学生最后完成全部实验时,由于反复应用所学知识上机实践,重要的编程技巧,常见的典型算法、典型函数经多次演练,从而变得轻车熟路,甚至熟能生巧,不少学生不知不觉中成为了编程高手。这就是循环渐进项目实践教学法。
采用循环渐进项目实践教学法,其最大的好处在于,能够使学生在实验的进程中,不断重温历次实验的内容,从而达到复习、牢固掌握此前所学知识的目的。同时,又在实验的过程中,应用新学的知识点,设计、编写、调试出实现新的要求、具有创新和实现更多功能的程序,达到了拓展知识、增加新的编程思路、掌握新技能、新算法的目的。
3.循环渐进项目实践教学法应用举例
我们在C语言程序设计课程的教学过程中,共安排了12个实验。前6个实验,因为所学的知识比较浅显,各知识点联系不够紧密,实验也比较简单,所以这几个实验是相对独立的,上一次实验和下一次实验没有太大的联系。从第7个实验开始,随着学生所学知识面越来越广,我们以“学生成绩管理系统”从V1.0到V6.0六个不同版本为课题作为实验内容。后一个版本的实验与前一个版本相比,实验所涉及的知识面会越来越多,实验要求也会越来越复杂、越严格,所需编程知识也越来越深奥。后一个实验既包含了上一次的实验要求,继承了上一次的一些算法、函数,也新增了新的实验要求,新的算法、函数,实现新的功能。
在做“学生成绩管理系统”V1.0实验之前,学生已经学习了常量与变量、数据类型、运算符、表达式、数据的格式化输入/输出、选择控制结构、循环控制结构、函数、数组、结构化程序设计的概念和自顶向下、逐步求精的模块化程序设计方法。我们对“学生成绩管理系统”V1.0实验的要求是:某班有最多30人参加某门课程的考试,用一维数组做函数参数编程实现学生成绩管理系统:(1)录入每个学生的学号和考试成绩;(2)计算课程的总分和平均分;(3)按成绩由高到低排出名次表;(4)按学号由小到大排出成绩表;(5)按学号查询学生成绩;(6)按优秀(90~100分)、良好(80~89分)、中等(70~79分)、及格(60~69分)和不及格(0~59分)5个等级,统计每个等级的人数以及所占的百分比。(7)用列表形式输出每个学生的学号、考试成绩。程序设计的要点是用一个一维长整型数组保存学号,用一个一维实型数组保存成绩,用菜单函数menu()在屏幕上显示7个菜单项,然后在main()函数中根据用户所选择的菜单项进入各个功能模块执行相应的函数。调用函数时以数组名作为实参传递给被调用函数中的数组形参。
做完“学生成绩管理系统”V1.0之后,继续学习指针、按值调用与按地址调用、函数指针等知识。在“学生成绩管理系统”V2.0实验中,要求基本同V1.0,但在V1.0实验要求中的(3)之后增加了一项(4)按成绩由低到高排出名次表(其余要求编号顺序后推)。但在设计思路上,(3)按成绩降序排序和(4)按成绩升序排序两个菜单却是同时对应一个既可以实现升序排序,也可以实现降序排序的函数SelectionSort(),之所以有这个功能是因为SelectionSort()函数的形参中有一个指向返回整型且有两个形参的函数指针“int *compare(int a,int b)”。在调用函数SelectionSort()时,若是升序排序,则用升序函数int Ascending(int a,int b)作为实参;若是降序排序,则用降序函数int Descending(int a,int b)作为实参。通过这个实验,即使学生进一步巩固在V1.0中所学的知识,又使学生较好地掌握函数指针的应用。 做完“学生成绩管理系统”V2.0之后,继续学习字符串,包括字符串常量、字符指针、字符串处理函数、向函数传递字符串等知识点。在“学生成绩管理系统”V3.0实验的要求中,要求学生信息要包括姓名,还增加了“按姓名的字典顺序排出成绩表”和“按姓名查询学生成绩”两项,菜单项由8项增加到10项。在程序设计思路上,用二维字符数组来存储班级中的学生姓名(字符串),实验中的排序要应用到字符串处理函数,例如字符串比较函数strcmp(),字符串复制函数strcpy()等。在排序函数中,要调用交换函数(例如交换长整型的学号、交换实型的成绩,交换字符串姓名),这些交换函数都用指针变量当形参。通过这个实验,除了进一步巩固前面所学到的知识外,还使学生学到了字符串及指针变量等方面的知识,知识面进一步扩大。
“学生成绩管理系统”V3.0实验之后的教学内容是进一步学习指针和数组,包括指针和一维数组的关系、指针和二维数组的关系、指针数组、动态分配内存等内容。而“学生成绩管理系统”V4.0实验的目的是在“学生成绩管理系统”V3.0实验的基础上,通过增加任务要求,熟悉二维数组做函数参数、模块化程序设计等知识要点。在实验要求上,学生成绩由一门课的成绩变为多门课的成绩,还增加了计算每个学生的总分和平均分的要求,成绩排序改为按总分排序,成绩列表要求输出学生的学号、姓名、各门课的成绩、总分和平均分。在设计思路上,需用二维数组来表示一个班内多个学生多门课程的成绩,第一维(行)表示学生,第二维(列)表示一个学生各门课程的成绩。当然还需增加计算每个学生总分和平均分的函数。这样,实验完成后,学生进一步巩固了前面所学的知识,又掌握了二维数组的应用,进一步拓展了知识面。
在做“学生成绩管理系统”V5.0实验之前学习的内容是结构体,包括结构体、结构体变量、结构体数组、结构体指针的定义和应用等。“学生成绩管理系统”V5.0实验的要求同V4.0完全一样,但是在设计思路上却大相径庭。本实验的设计思路是定义一个包含学号成员num、姓名成员name、成绩数组score[]、总分成员sum和平均分成员aver的结构体STU,再定义一个结构体数组stu[]来保存全部学生的全部信息,摒弃了此前几个实验要分别用几个数组来表示学生学号、学生姓名、各门课程的成绩、总分和平均分的做法,一个结构体数组取代了几个不同数据类型的数组,数据结构变得更加合理,程序设计思路变得更清晰,程序变得更简练。结构体是C语言中比较抽象不易理解的难点,通过本实验,使学生对结构体及其应用有了深刻的全面的理解。
本课程最后一章的教学内容是文件,包括二进制文件和文本文件的概念、文件的打开和关闭、按字符读写文件、按格式读写文件、按数据块读写文件等内容。“学生成绩管理系统”V6.0实验目的是在V5.0的基础上,通过增加任务要求,熟悉文件的操作。在实验要求上,比V5.0增加了两项要求,即能将全部学生的记录信息写入文件保存,也能从文件中读出每个学生的记录信息并显示。本实验采用按格式读写文件的方法来把全部学生的记录信息写入文件或从文件读出。通过实验,学生真正感悟到C语言功能的强大。此前做实验,退出程序后实验数据就没有了。这次实验以后,实验数据保存了下来,既可写入文件,又可从文件读出,感觉很新奇,大大提高了学习C语言的兴趣。从难度上讲,“学生成绩管理系统”V6.0实验已经与一个C语言课程设计了相当了,这就为学生在C语言程序设计课程结束后的课程设计打下了坚实的基础。
至此,循环渐进项目实践教学完成了。学生普遍反映,通过实践,真正提高了C语言编程技能和程序调试能力,收获颇丰。
4.结语
学习C语言,上机实践是一个重要的教学环节。主讲老师要为学生的上机实践创造条件,编写出有连贯性,循环渐进的实践项目指导书,使学生通过上机实践,能复习巩固前面所学的知识,又能不断拓展新知识,达到提高学生的编程能力和程序调试能力的目的。
(作者单位:广东财经大学华商学院)
参考文献:
[1]苏小红,王宇颖,孙志岗等.C语言程序设计(第2版)[M].北京:高等教育出版社,2013
[2]苏小红,车万翔,王甜甜等.C语言程序设计学习指导(第2版)[M].北京:高等教育出版社,2013
[3]陈子森.C语言程序设计课程教学改革研究[J].无线互联科技,2015(1)
摘要:C语言程序设计是理论紧密联系实践的一门课程,上机编程实践是学习C语言的重要教学环节。本文阐述了循环渐进项目实践教学法的目的在于使学生在C语言的学习过程中不断温故拓新,巩固和拓展知识,不断提高C语言的编程能力和调试程序的能力。本文还给出了循环渐进项目实践教学法的举例,以便同行读者在共同探索时能起到抛砖引玉的作用。
关键词:C语言;实践教学;循环渐进
中图分类号:G642文献标志码:A文章编号:2095-9214(2015)09-0070-02
1.编程实践是学好C语言的重要教学环节
C语言的特点是其功能十分丰富,语法很精练,表达能力非常强,使用起来灵活方便,因而得到广泛的应用。小到上C语言课时的实例和C语言课程中的简单实验,大到复杂的计算机操作系统,都可以使用C语言来开发。特别是单片机系统中,用C语言编程更是常见。正因为如此,在大学里几乎所有要学习编程语言的专业首先学习的语言就是C语言。通过学习C语言,可以使学生在初步接触计算机语言的过程中,对程序设计中的算法有初步的认识,对面向过程程序设计的模块化设计思想初步领会,能运用C语言的知识分析问题和解决问题,初步具备程序设计与程序调试的能力。
和学习任何计算机语言一样,C语言是一门实践性很强的课程。真正学好C语言,不是说听懂课了,看懂书了,就是学会了。检验一个人C语言学得好不好,主要是看他是不是具有较强的编程能力和较强的程序调试能力。给出一个课题、一个要求,能够得心应手地进行需求分析,构思方案,设计算法,编写程序,调试程序,实现课题的要求。如此这样,才能说明你的C语言掌握得差不多了。而要达到这一目标,最重要的是要勤学苦练,进行大量的实践,要做大量的上机操作。要充分地认识到,C语言并不是一门纯理论的课程,而是实践性很强的应用型课程。听懂课,看懂书,是做好上机实践的前提条件,是为了掌握C语言的基本概念、语法、算法、模块化程序设计思想,领会编程的基本要领。只有经过大量的、反复的上机实践,才能培养出熟练的编程能力,才能练就出娴熟的程序排错能力和程序调试能力。
2.应用循环渐进项目实践教学法的目的在于温故拓新,不断巩固和扩展知识
为了培养学生用C语言编写程序和调试程序的能力,作为主讲老师,在搞好理论教学、上好理论课的同时,精心组织安排好实践教学是重要的一环。主讲老师必须用心编写出紧密联系理论教学的内容、包含理论教学所涉及的重要知识点、针对性强的实验指导书。在编写实验课的实验指导书时,首先应明确实验要求,即本次实验要应用本实验前所学过的知识要点,应在课程实验过程中逐次包括各种数据类型、各种运算符、各种表达式、数据输入/输出的方法、各种经典算法、程序结构、数组、函数的定义与调用、指针的应用、结构体的定义及引用、文件的输入/输出等知识点。然后再给出设计思路、有关算法等,让学生独立完成实验。而在编写下一次实验课的实验指导书时,应包括上一次实验的全部或大部要求,再增加本实验之前新学到的知识要点,……。如此类推,到学生最后完成全部实验时,由于反复应用所学知识上机实践,重要的编程技巧,常见的典型算法、典型函数经多次演练,从而变得轻车熟路,甚至熟能生巧,不少学生不知不觉中成为了编程高手。这就是循环渐进项目实践教学法。
采用循环渐进项目实践教学法,其最大的好处在于,能够使学生在实验的进程中,不断重温历次实验的内容,从而达到复习、牢固掌握此前所学知识的目的。同时,又在实验的过程中,应用新学的知识点,设计、编写、调试出实现新的要求、具有创新和实现更多功能的程序,达到了拓展知识、增加新的编程思路、掌握新技能、新算法的目的。
3.循环渐进项目实践教学法应用举例
我们在C语言程序设计课程的教学过程中,共安排了12个实验。前6个实验,因为所学的知识比较浅显,各知识点联系不够紧密,实验也比较简单,所以这几个实验是相对独立的,上一次实验和下一次实验没有太大的联系。从第7个实验开始,随着学生所学知识面越来越广,我们以“学生成绩管理系统”从V1.0到V6.0六个不同版本为课题作为实验内容。后一个版本的实验与前一个版本相比,实验所涉及的知识面会越来越多,实验要求也会越来越复杂、越严格,所需编程知识也越来越深奥。后一个实验既包含了上一次的实验要求,继承了上一次的一些算法、函数,也新增了新的实验要求,新的算法、函数,实现新的功能。
在做“学生成绩管理系统”V1.0实验之前,学生已经学习了常量与变量、数据类型、运算符、表达式、数据的格式化输入/输出、选择控制结构、循环控制结构、函数、数组、结构化程序设计的概念和自顶向下、逐步求精的模块化程序设计方法。我们对“学生成绩管理系统”V1.0实验的要求是:某班有最多30人参加某门课程的考试,用一维数组做函数参数编程实现学生成绩管理系统:(1)录入每个学生的学号和考试成绩;(2)计算课程的总分和平均分;(3)按成绩由高到低排出名次表;(4)按学号由小到大排出成绩表;(5)按学号查询学生成绩;(6)按优秀(90~100分)、良好(80~89分)、中等(70~79分)、及格(60~69分)和不及格(0~59分)5个等级,统计每个等级的人数以及所占的百分比。(7)用列表形式输出每个学生的学号、考试成绩。程序设计的要点是用一个一维长整型数组保存学号,用一个一维实型数组保存成绩,用菜单函数menu()在屏幕上显示7个菜单项,然后在main()函数中根据用户所选择的菜单项进入各个功能模块执行相应的函数。调用函数时以数组名作为实参传递给被调用函数中的数组形参。
做完“学生成绩管理系统”V1.0之后,继续学习指针、按值调用与按地址调用、函数指针等知识。在“学生成绩管理系统”V2.0实验中,要求基本同V1.0,但在V1.0实验要求中的(3)之后增加了一项(4)按成绩由低到高排出名次表(其余要求编号顺序后推)。但在设计思路上,(3)按成绩降序排序和(4)按成绩升序排序两个菜单却是同时对应一个既可以实现升序排序,也可以实现降序排序的函数SelectionSort(),之所以有这个功能是因为SelectionSort()函数的形参中有一个指向返回整型且有两个形参的函数指针“int *compare(int a,int b)”。在调用函数SelectionSort()时,若是升序排序,则用升序函数int Ascending(int a,int b)作为实参;若是降序排序,则用降序函数int Descending(int a,int b)作为实参。通过这个实验,即使学生进一步巩固在V1.0中所学的知识,又使学生较好地掌握函数指针的应用。 做完“学生成绩管理系统”V2.0之后,继续学习字符串,包括字符串常量、字符指针、字符串处理函数、向函数传递字符串等知识点。在“学生成绩管理系统”V3.0实验的要求中,要求学生信息要包括姓名,还增加了“按姓名的字典顺序排出成绩表”和“按姓名查询学生成绩”两项,菜单项由8项增加到10项。在程序设计思路上,用二维字符数组来存储班级中的学生姓名(字符串),实验中的排序要应用到字符串处理函数,例如字符串比较函数strcmp(),字符串复制函数strcpy()等。在排序函数中,要调用交换函数(例如交换长整型的学号、交换实型的成绩,交换字符串姓名),这些交换函数都用指针变量当形参。通过这个实验,除了进一步巩固前面所学到的知识外,还使学生学到了字符串及指针变量等方面的知识,知识面进一步扩大。
“学生成绩管理系统”V3.0实验之后的教学内容是进一步学习指针和数组,包括指针和一维数组的关系、指针和二维数组的关系、指针数组、动态分配内存等内容。而“学生成绩管理系统”V4.0实验的目的是在“学生成绩管理系统”V3.0实验的基础上,通过增加任务要求,熟悉二维数组做函数参数、模块化程序设计等知识要点。在实验要求上,学生成绩由一门课的成绩变为多门课的成绩,还增加了计算每个学生的总分和平均分的要求,成绩排序改为按总分排序,成绩列表要求输出学生的学号、姓名、各门课的成绩、总分和平均分。在设计思路上,需用二维数组来表示一个班内多个学生多门课程的成绩,第一维(行)表示学生,第二维(列)表示一个学生各门课程的成绩。当然还需增加计算每个学生总分和平均分的函数。这样,实验完成后,学生进一步巩固了前面所学的知识,又掌握了二维数组的应用,进一步拓展了知识面。
在做“学生成绩管理系统”V5.0实验之前学习的内容是结构体,包括结构体、结构体变量、结构体数组、结构体指针的定义和应用等。“学生成绩管理系统”V5.0实验的要求同V4.0完全一样,但是在设计思路上却大相径庭。本实验的设计思路是定义一个包含学号成员num、姓名成员name、成绩数组score[]、总分成员sum和平均分成员aver的结构体STU,再定义一个结构体数组stu[]来保存全部学生的全部信息,摒弃了此前几个实验要分别用几个数组来表示学生学号、学生姓名、各门课程的成绩、总分和平均分的做法,一个结构体数组取代了几个不同数据类型的数组,数据结构变得更加合理,程序设计思路变得更清晰,程序变得更简练。结构体是C语言中比较抽象不易理解的难点,通过本实验,使学生对结构体及其应用有了深刻的全面的理解。
本课程最后一章的教学内容是文件,包括二进制文件和文本文件的概念、文件的打开和关闭、按字符读写文件、按格式读写文件、按数据块读写文件等内容。“学生成绩管理系统”V6.0实验目的是在V5.0的基础上,通过增加任务要求,熟悉文件的操作。在实验要求上,比V5.0增加了两项要求,即能将全部学生的记录信息写入文件保存,也能从文件中读出每个学生的记录信息并显示。本实验采用按格式读写文件的方法来把全部学生的记录信息写入文件或从文件读出。通过实验,学生真正感悟到C语言功能的强大。此前做实验,退出程序后实验数据就没有了。这次实验以后,实验数据保存了下来,既可写入文件,又可从文件读出,感觉很新奇,大大提高了学习C语言的兴趣。从难度上讲,“学生成绩管理系统”V6.0实验已经与一个C语言课程设计了相当了,这就为学生在C语言程序设计课程结束后的课程设计打下了坚实的基础。
至此,循环渐进项目实践教学完成了。学生普遍反映,通过实践,真正提高了C语言编程技能和程序调试能力,收获颇丰。
4.结语
学习C语言,上机实践是一个重要的教学环节。主讲老师要为学生的上机实践创造条件,编写出有连贯性,循环渐进的实践项目指导书,使学生通过上机实践,能复习巩固前面所学的知识,又能不断拓展新知识,达到提高学生的编程能力和程序调试能力的目的。
(作者单位:广东财经大学华商学院)
参考文献:
[1]苏小红,王宇颖,孙志岗等.C语言程序设计(第2版)[M].北京:高等教育出版社,2013
[2]苏小红,车万翔,王甜甜等.C语言程序设计学习指导(第2版)[M].北京:高等教育出版社,2013
[3]陈子森.C语言程序设计课程教学改革研究[J].无线互联科技,2015(1)