C语言教学

点赞:3169 浏览:12574 近期更新时间:2024-02-03 作者:网友分享原创网站原创

摘 要 : 为提高C语言教学质量,针对C语言课程内容和特点,在教学中结合实际应用激发学生的学习兴趣,运用知识点间联系帮助学生建立知识体系,通过实践训练提高学生编程操作能力,注重编程规范使学生养成良好的编程风格,取得了较好的教学效果.

关 键 词 : C语言; 程序设计; 教学方法; 编程规范

中图分类号:TP312 文献标志码:A 文章编号:1006-8228(2012)12-41-03


On C language teaching

Sha Aijun

(School of Communication Engineering, Nanjing Institute of Technology, Nanjing, Jiangsu 211167, China)

Abstract: In order to improve the quality of C language teaching,more attention has been paid in teaching to stimulate the students' interest by practical project, helping them to establish knowledge work by using contact between knowledge. Practice training is used to enhance their programming ability. The programming rules are emphasized to develop their good programming style. Teaching effects he been proven to be good.

Key words: C language; programming; teaching method; programming norms

0 引言

C语言作为一种计算机程序设计语言,兼具高级语言和汇编语言的优点,在编写系统软件和应用软件方面得到了广泛的使用.因此,通信、计算机、信息等专业往往将其作为第一门专业基础课.C语言教学目标要求学生既掌握C语言的语法、结构、数据类型等内容,又要掌握软件工程思想,掌握常见算法,学会使用C语言编程解决实际问题并形成良好的编程风格,为后续课程及未来工作打下良好基础.

本课程知识点较多、使用灵活、实践性强、难度较大,且大部分学生是第一次接触编程,缺乏相关编程基础和思维,学时又有限(一般为48学时或64学时),如何提高C语言教学质量,是一个值得探讨的问题.本文从几个方面介绍笔者在教学中的一些体会.

1.提高学生学习兴趣

学习兴趣是推动学生积极主动学习的直接动力,是最好的老师.C语言中语法规则较多,而且相对枯燥,要让学生学好C语言,最重要的就是激发其兴趣,让他们在学习中找到乐趣,在快乐中掌握相关知识点.

例如在第一次课程中,当介绍了C语言产生背景、发展历程等知识点之后,可向学生展示一些实用性的小程序,如“推箱子”、“五子棋”、“贪吃蛇”等游戏.通过生动、形象、直观的展示,让学生对C语言产生想学的强大动力.一旦学生产生兴趣,可以先让他们尝试编写输出简单的“Hello world!”程序,在此过程中,顺势让学生了解简单的C语言程序的框架,使得语法、数据类型等知识点不再枯燥,成为程序中有血有肉的必要组成体.

在后续的课程中,也要不断地结合具体知识点的学习,选择具有趣味性、实用性和挑战性的小型案例,采取项目案例教学法,如超市购物系统[1],将其各部分的功能分散到各章去,从简单到复杂,让学生在快乐和兴趣中一步步地去学习和探索新的知识.

同时,还应鼓励学生利用所学知识,设计一些实用的小程序来解决身边的一些小问题.当学生有了目标,投入进去,遇到困难必然会想办法去克服,而当他们尝试到了成功带来的喜悦时,又会促使他们进一步爱上编程.

2.运用联系法,帮助学生建立知识体系框架

C语言知识点很多,包括基本数据类型(整型、字符型、浮点型)、算法、基本的程序结构,数组、函数、指针、结构体和共用体、文件、位运算、预编译等等【2】.根据知识点之间的联系,上述内容可整合成数据类型、算法和程序结构、函数、文件及其他等几大部分,在课堂教学中,可运用联系法,帮助学生实现知识点的迁移,建立知识体系框架.

⑴ 数据类型

数据类型包括基本数据类型、构造类型中的数组、结构体、共用体,此外还有指针类型等.不同的数据类型将决定内存中占据的空间大小以及表示数的范围,可以此为线索,讲解基本数据类型和构造类型的含义和联系,比如同类型的基本类型数据构造在一起就成了数组类型,不同的类型的数据构造在一起,就成了结构体类型等.

再联系到现实中的例子,讲解变量和指针变量的含义和定义,进而讲解指针变量不仅可以存放普通变量的地址和数组元素的地址,还可以存放结构体数组变量的地址和结构体数组元素的地址.

⑵ 算法和结构化程序设计

编制程序的过程就是形成算法、实现算法到结构化代码转化的过程.

首先,针对学生感觉编程难的问题,教学中首先让学生形成正确的思维.当遇到一个问题的时候,让学生去思考一下不用程序是如何解决的[3,4].例如:先做什么,再做什么;可分几种情况讨论;有没有需要重复做的事情.引导学生进行一题多解,分析算法的步骤和运算量小,探讨算法逻辑严密性等方面的问题.一旦学生有了自己的思路,编程就会变得更容易:只要将上述偏文字化的思路(算法)转化成用流程图描述,并进行结构化编码即可.实际上,在上面的思考和讨论中,程序框架已经体现出来了.

其次,讲解常见典型算法,拓展知识点并建立联系,引导学生悟出其中的规律.讲解迭代法、递归法、穷举法、回溯法以及一些常用的程序段[5]:如求累加、累乘;判断一个数是否为素数;对一个数的各个数位进行分离;求最大公约数和最小公倍数;对数组元素的检索、排序、插值、删除、逆序;求矩阵的转置;对字符数组进行复制、连接、比较;对链表中结点的检索、排序、插值、删除等等,这些都是学生必须要掌握的.讲解上述算法和程序的时候,可以采取阶梯法,循序渐进.例如,先讲解累加、再讲解累乘,分析有何不同;再比如,讲解数组元素的检索、排序、插值、删除操作,当讲到链表时,分析链表中结点的检索、排序、插值、删除等操作和数组中的操作有哪些异同点等. ⑶ 函数部分

函数是模块化程序设计中的基本组成单位.可以用一个小程序来引入,如:求学生平均成绩.在学习函数之前,学生喜欢将所有代码全放在main()中;而现在可以将输入、求平均成绩、输出等功能独立成函数,在main()函数中调用这些函数.让学生从总体格局上把握这两种形式有何不同,体会模块化的作用,了解耦合性和内聚性等概念,形成对模块化的初步印象.

为讲解函数的一些重要概念,可从现实生活中学生比较熟悉的数学中的函数概念入手,帮助学生理解函数名、函数定义和函数调用,理解函数的形参和实参,函数的返回值等概念,并结合已有的程序将这些知识点迁移到C语言中.

在C语言中,函数的实参可以是值或地址,这个知识点至关重要,两者区别如下:①当函数的实参为地址时,被调用时传递给形参(指针变量),若被调用函数中对形参所指向的内容进行了修改,其实质就是修改调用函数中的实参所指向的内容,即修改的结果能带回来;②其他情况,如函数的实参虽为地址,但被调用函数中是对形参(指针变量)进行修改,或者函数的实参为数值,其修改的结果都是不能带回的.上述参数中的地址,可从变量的地址推广至数组元素的地址、数组名、指针变量、结构体变量地址和结构体数组名.

⑷ 文件

文件中应首先让学生明白什么是文件,为什么需要文件,文件存储的位置和先前的变量有什么不同,文件的分类等基本概念.在缓冲文件系统中,对文件访问还要借助 “文件类型指针”, 让学生体会这和先前所学的变量访问等有哪些不同.此外,该文件类型又是一个结构体类型,描述的是打开文件的相关信息,则可以和结构体类型的定义等概念建立联系.

文件的操作主要包括文件的打开、文件的关闭、文件的读写、文件读写位置的定位、文件出错检测等.此处以讲解文件的读写为重点,可让学生明白读写前要打开文件,需提供文件名和读写方式,文件读写完后还要关闭等等;读写的过程中,可根据一个字符、一个数据块等选取不同的函数,还可以让学生将此处的fgetc()和getchar()建立起联系,明白设备文件的概念以及getchar()实质上来自于fgetc(),将前后知识融会贯通.当然,若要实现随机读写又引出fseek()等知识点,学生在联系和区别中建立框架,明白所以然.

⑸ 其他方面

如位操作、预处理等也要讲解,此部分内容相对简单,由于篇幅关系,不再进行探讨.

3.理论联系实践,注重提高学生上机实践操作能力

C语言是一门实践性极强的课程,要让学生真正学会C语言,必须让他们经过大量的实践和编程训练,在实践中提高技能.我们把实践部分分为三大块.

⑴ 课内实验

在本学院教学中,作为64学时课程的一部分(46学时理论+18学时实验),一共有9次实验,对重要知识点,每学完一章内容,就安排一次上机实验课,尽量安排在紧跟理论课之后.

在实验中,我们侧重训练学生对所学知识的理解和掌握.每次实验,在内容上采用典型的案例;在层次和题型上采用循序渐进的方式;既包括验证性等基础性的实验,又包括分析填空、改错、独立设计等提高性的实验.在教学中,充分发挥教师的主导和学生的主体作用,上机前教师讲解算法及注意点;然后让学生动手编写程序、上机调试;教师在学生上机过程中,逐个座位巡视,帮助解决学生遇到的问题;上机结束后,要求学生提交实验报告,进行总结提高.

在实验课程中,一定要让学生掌握程序纠错的方法,“授人以渔”.第一,要引导学生学会纠正语法错误[2]:看懂编译错误的英文提示信息的含义,学会排除错误并进行总结.第二,要引导学生纠正逻辑错误:除学会静态检查外,还要学会调试程序的方法.一旦学生掌握了如何单步跟踪,如何观察数据的存储空间,何时需要在何处打上断点,何时需要进入函数内部跟踪等调试的方法和技巧,程序的运行状态就变得直观、清晰、可控,程序调试将不是难事.当学生能排除错误并调试成功,必定会获得成就感,也必定会加深对语法、数据类型、算法等知识点的理解,促进他们有信心学好这门课程.

⑵ 课外上机训练

课外上机训练,我们布置10道代表性强、综合性高、实用性好的题目,让学生利用课外时间,进行编程和调试,并提交程序和报告使学生的能力得到进一步提高.

⑶ 课程设计(1周时间)

在为期一周的过程课程设计中,我们要求学生将C语言课程中学到的知识综合运用到一个小的项目中,从选题到整体规划、模块划分、详细设计、编码、调试,再到撰写一个类似毕业论文的课程报告,对学生进行一个完整的训练.课程设计的题目可为职工信息管理系统或者通讯录这种类型的题目,鼓励学生用数组或链表两种不同的数据类型来实现,并比较其中的优缺点;学生也可以根据自己的兴趣和能力,经指导老师同意后,选择编程实现一些游戏项目.

C语言教学参考属性评定
有关论文范文主题研究: 关于课程设计的论文范文集 大学生适用: 自考毕业论文、本科毕业论文
相关参考文献下载数量: 83 写作解决问题: 写作资料
毕业论文开题报告: 标准论文格式、论文前言 职称论文适用: 职称评定、高级职称
所属大学生专业类别: 写作资料 论文题目推荐度: 经典题目

4.注重编程规范化训练,养成良好的编程风格

在C语言的教学中,还应从软件工程的角度,按照企业对程序员的要求,注重编程规范的训练,养成良好的编程风格[6].

⑴ 注意程序书写格式

要注意程序的书写格式,比如,程序中添加必要的空行,一行代码只做一件事,有正常的缩进,{}的匹配,正确的对齐,加必要的注释,使用括号确定表达式的操作顺序,这样可使程序美观、可读性好.此外,一些书写习惯有助于提示一些语法错误,比如,初学者将等于等于经常误写成等于,若if(a等于等于1)误写成if(a等于1),编译器并不提示出错信息;但若交换运算符两边的运算对象,即改写成if(1等于等于a),此时,若再误写成if(1等于a),则编译器就会提示出错信息.

⑵ 提高对内存使用管理方面的意识

C语言是一个可以对内存直接操作的语言,内存的概念在C语言中相当重要.从全局变量、局部变量的内存空间的分配,到利用malloc()等函数申请内存以及指针的运用,处处离不开内存,因此要强化学生对内存使用管理的意识.例如:全局变量、局部变量、malloc()申请的内存所在的区域有何不同,再如内存分配后要检查是否分配成功,在引用内存前要对其初始化、避免出现野指针、避免数组越界、避免内存泄露等.

⑶ 注重程序的出错处理

当程序出错时,应有正常的出错提示信息,有良好的交互性.比如对文件的打开要考虑文件打开失败的处理,比如申请一段内存时,要检查是否分配成功,再比如输入学生的成绩(0~100)时,要考虑误输入的情况等.

⑷ 形成重视软件文档的意识

文档是计算机软件产品的重要组成部分,应该适时的让学生初步形成重视软件文档的意识.比如课程设计中要求学生:学习包含软件需求分析、可行性分析、总体开发计划、概要设计、详细设计、系统测试等文档的标准和编制规范方面的内容.

5.结束语

C语言是一门得到广泛使用的语言,该课程又是一门基础课,掌握该课程对学生学习后续其他课程,以及未来就业都有着十分重要的现实意义.如何让枯燥、难懂的课程学习变成集知识、趣味于一体的学习,如何让学生快速建立起知识体系、掌握重要的知识点,如何让学生动手操作能力得到切实的提高、编写出符合规范化要求的程序,为未来成为一名合格的软件编程工程师打下扎实的基础.本文对这些问题进行了探讨,并在近年的教学实践中加以运用,取得了良好的效果,学生的编程能力和综合素养得到了明显的提高.