C语言教学攻略研究与整合
2017-06-29孙丽娜
孙丽娜
【摘 要】 C语言因其重要的地位,成为目前高校理工类的公共必修课之一。然而,实际的教学效果并不理想,因C语言数据类型丰富,灵活性强,比较抽象且实践性很强,学生普遍认为C语言抽象难以理解,枯燥难以掌握,达不到预期效果。根据C语言的特点及学校教学改革的情况,本人提出一些C语言的学习方法。
【关键词】 C语言
【中图分类号】 G64.2 【文献标识码】 A 【文章编号】 2095-3089(2017)13-00-01
结合C语言的教学实践,总结出在学习这门语言的过程中,高职学生感觉最难的是理解编程思想和形成良好的编程习惯。为帮助高职学生更深刻的学习C语言,整合了许多案例,编撰成教材。先把这些教学构思归纳如下,为学习C语言提供参考,同时也为更好地理解C程序设计的思想、编写出优秀的C程序奠定基础。
一、设计一个大案例,由浅入深贯穿C语言中主要知识点,让学生对各知识点的运用有比较,有提高,理解透彻。
比如制作电子辞典。编写一个C程序,实现电子辞典功能:要求用户输入某个缩略词,系统查辞典后能给出该词的完整形式,若辞典查无此词,也给出相应的提示信息。
电子辞典这个案例首先使用数组、查询两个知识点,随后扩展使用到指针、结构体、预处理、书写规范、函数等知识点。
1、讲解数组知识,建立一个简易的辞典。存储辞典使用两个二维字符数组:a[5][5]——保存辞典中的全部缩写词(假设5个要查询的缩略词,均以a开头);b[5][50]——保存辞典中的缩写词对应的完整形式(对应保存5个以a开头的单词的完整形式)。
2、讲解查询方法,实现查询功能。
数据查找有直接引用和顺序搜索两种方式:通过下标直接定位数据为直接引用;而顺序搜索至少有两个并行数组(如:一个用于存储记录关键字建立一一对应关系的引用;另一个用于存储对应数据,通过诸如项目编号、人员编号等关键字建立一一对应关系的两个数组),顺序搜索将输入的关键字与关键字数组中的各个元素进行比较,直至找到匹配元素或者遇到数组结束标记为止。找到匹配元素时,程序使用关键字数组的下标访问存储于数据数组的对应元素。
3、讲解预处理知识,提高维护性。
#define SIZE_DICT 5
#define MAX_LENGTH_INPUT 256
SIZE_DICT为5表示缩略词、完整形式的个数,MAX_LENGTH_INPUT为缩略词完整形式的个数。如果有增减会更方便。
4、引入指针知识,实现查询功能。
const char * a[SIZE_DICT] = {"AGP","ALU","AM","API","ASF"};
const char * b[SIZE_DICT] = {"accelerated graphics port",…};
const char * b[SIZE_DICT]=这是从二维字符数组改成了字符指针的一维数组,通常的实现方法,常数字符串都在数据段,MAX_LENGTH_INPUT从50提高到256,适合用在你不需要修改这些字符串的情况。如果你不用指针,数组的写法。
const char b[SIZE_DICT][ MAX_LENGTH_INPUT]={"accelerated graphics port",…};
使用数组的写法,问题在:
①不同字符串长度不同,都制定相同的长度,必然设置最大值,浪费存储空间。
②如果你要改变解释,如果设置小了,你还需要手动改最大字符串长度。
5、讲解结构体写法,增强程序安全性。
更好的写法可能是定义结构体struct
struct item{
char [MAX_LENGTH_INPUT] a;
char [MAX_LENGTH_INPUT] b;
};
然后item[size_dict]={ ... },把相关的东西放一起。
现在的写法有可能造成a和b的个数不一样,手动维护的时候,造成最后程序运行出现奇怪的问题。
6、加入书写规范要求,养成良好编程习惯。
使用字符数组常量、加上更多的大括号提高可读性。
7、拓展函數训练,增加对程序的理解。
通过函数传值,把a、b数组中的缩略词传入函数,为实现建立生成电子辞典,查询电子辞典,更新电子辞典的功能分别声明三个函数。
二、针对同一知识点设计多个不同的案例,注重知识点讲授的重复性、增强性、连贯性,让学生对知识点学习更扎实,能解决相似的实际问题同时,又不断学习新的知识点。
比如讲解排序方法,可以设计多个任务讲解。
任务1练习一维数组排序。编写一个C程序,随机产生0~100之间的随机数20个,作为学生成绩,将批量数据由大到小排序,输出前10名学生成绩。
任务2练习字符数组排序,增加字符处理知识。编写两个C程序,对字符串分别实现的不同处理。子任1:任意输入多个国家的名称(比如五个),按字母顺序排列输出——选择排序字符串。子任务3:任意输入多个学生的姓名(比如五个),按字母顺序排列输出——交换排序字符串。
任务3练习查询方法,要求在排序的基础上,实现查询的功能。比如电子辞典,可以更快的实现查询,技能对比知识点,又能加深对C语言程序结构的理解。
三、C语言发展相对成熟,注重引入案例的多样性、实用性、趣味性,让学生学习更有兴趣。
猜数游戏讲循环、抽奖游戏讲随机数、大赛计分过程讲一维数组、电子词典讲查询,加密解密讲函数、截取歌曲名讲字符处理、魔方矩阵讲二维数组,引入这些案例讲解C语言更接近生活,让学生们认可C语言有用,进而产生兴趣深入学习。
四、给学生C++编写风格的思想,注重书写代码的可读性、可维护性、安全性、规范性,让学生形成良好的编码习惯。
1、习惯预定义常量,增强程序的可维护性。
2、习惯用指针定义字符数组,可节省时间,实际工作中应用广泛,代码书写更规范。
3、习惯使用更安全的函数,增强程序的安全性。如:gets改用fgets函数,能避免找不到‘\0结束符的问题,更安全。
4、习惯使用结构体定义相关数据,增强程序的安全性。避免关联数据出现问题。
5、习惯使用函数接口,方便适应大型软件的合作研发,增强程序的可维护性。
6、习惯写注释,增强程序的可维护性。
7、习惯按照C语言格式书写代码,注意增加缩进。这样可以增强程序的可读性。