论文部分内容阅读
[摘 要]当今C语言的教学缺点在于长于应付考试,而短于培养学生的学习兴趣。本文从C语言诞生的历史及文化出发,探讨了UNIX文化下的C语言编程,其过程极具趣味性,可考虑从此方面着手C语言的教学,有利于培养学生学习的兴趣以及感受到编程思想。
[关键词]C语言 UNIX 编程思想 gcc
一、国内C语言当前教学状况
当今C语言的教学缺点在于长于应付考试,而短于培养学生的学习兴趣,笔者在使用C语言比较长时间后,感觉C语言学完后即使用得很少,直到进入UNIX世界后,才领略到C语言的魅力,感到无比的有趣,进而反思当初C语言的学习过程。
在国内,基本上都使用windows操作系统,学习C语言亦不例外,早年多用Turbo C,近年才开始有使用Visual C++,但面临一个矛盾,黑乎乎的命令行和窗口程序差得很远,学生编程的案例中便又很大一部分是数学运算,趣味性大减。这个状况比较糟糕,但却是可以改变的。
回顾历史,C语言伴随着UNIX的诞生而诞生,UNIX最初用汇编语言写成,不便维护,Dennis Richie因此设计出C语言并帮助重写了UNIX,因为C语言的特点,既能方便操作硬件,又具有高级语言的特点,能模块化编写程序,构筑良好结构的程序,因此在UNIX平台下风靡起来,成为UNIX平台下的标准语言。C语言与UNIX系统有着千丝万缕的联系,在UNIX平台下形成了一整套编程的文化和思想,在此思想的引导下,可以方便的编写一系列的小程序,然后协作起来完成一个任务,这些内容,因为UNIX在国内的不流行,知道的人不多。UNIX有自己的一套文化,领略了这个文化,会真正明白C语言,并且能感觉到用C语言编程是一种享受和快乐,而这些感觉在windows平台下则不能体会。事实上,计算机界大量科研以及研究都是在Unix或其衍生系统下做的,开发者和计算机科研者会发现Unix平台用起来特别方便,很多科研成果也率先在该平台下实现,如TCP/IP协议,最早并且实现得最好的即在Unix下。
鉴于国情,UNIX系统比较遥远与不便,因此可以使用现在比较流行的Linux代替。而同样Linux系统对很多人来说也不方便,再退一步,我们所真正要使用得其实可以是UNIX下编程的那一整套思想文化及相应的UNIX工具包,前者看不见摸不着,但后者确是实实在在的,并且已经被移植到了windows平台,比较流行的有Cygwin和mingw。后者其实是GNU的gcc编译工具链的windows版本。有了这些软件,便可以在windows平台下使用UNIX的这一套方法。
二、UNIX编程思想下的案例展示
首先应该从命令行开始学起,熟悉Bash,并能熟练使用一些常用命令,如cat 等,以及管道,重定向等内容,正则表达式也可以大概的学习一下,以便于学会使用grep, sed等程序。领略UNIX编程思想的案例如下:
|为管道符号,意为将管道左边程序的标准输出放到管道内,成为管道右边程序的标准输入,这样多个程序使用管道连接起来,形成一个数据流与程序处理的流水线,我们便可以只要编写一个个的小程序,解决简单的问题,然后将这样的小程序通过管道串成流水线,完成一个大的工作。cat vimdoc.txt将vimdoc.txt的内容输出到管道给tr ‘A-Z’ ‘a-z’,将所有大写字母转换成小写字母,结果输出到管道给tr –c ‘a-z’ ‘\n’,将不是a-z的字符全部转换成’\n’即换行符,结果输出到管道给grep –v ^$,这里^$为正则表达式,意为空行,意思是将空行过滤掉,结果输出到管道给sort程序进行排序,使重复的单词相邻,结果输出到uniq –c,将相邻的重复单词归并为单独一个单词,并统计单词重复数,最后将此结果输出到管道给sort –n,将统计好的数字进行排序,便输出了案例中的结果,由结果可知词频最高的是单词the,在总共85万余单词中出现了近5万次,这里体现了UNIX编程思想的精髓。该案例中用到的程序有cat, tr, grep, sort, uniq, wc, tail等7个程序,均为UNIX中最常用的程序,是UNIX工具包中的标准程序,每个程序所解决的问题均为小问题,但协作起来便能完成统计单词词频等复杂任务。
cat程序最简单,只要简单的将参数指定的文件或者标准输入的内容送入到标准输出便可,使用C语言编写大约10行以内就可以实现;
tr(translate的简称)程序也不复杂,将要操作的内容中的字符按指定的参数进行替换,用C语言实现也不难,也是个小程序;
grep是过滤器,按参数指定的过滤模式(即正则表达式)过滤数据并输出到标准输出。正则表达式的解析很难,但简单的单词查找是很容易实现的,做一个简化版的grep也是很容易的事,C语言实现也能在10行内做到;
sort程序是排序用的,这个实现设计到算法,学生有兴趣可以自己实现,没兴趣的话了解下就好;
uniq程序是将重复的行归并到单独一行的程序,比如连续8行的内容都一样,都是s,则将此8行s归并为一行s。这个用C语言实现也是非常的容易,大约也在10行左右。
wc(word count的简称)程序用来统计文本文档的字符数,行数,以及单词数。这个任务很简单,很容易用C语言实现,如果只统计行数,则大约10行可以实现。
tail程序为打印文档的末尾若干行,行数由参数指定,这个任务也非常简单,在学生的能力范围内。
除了这7个程序,UNIX工具包还有很多其他的有趣的简单命令,如head, yes, sed, tac等,这些命令组合到一起,就成了超级工具,几乎能够解决所有的文本处理问题。
三、编程趣味的启示
由此可见,使用C语言编程,只需要写一个个的小程序便可,使小程序之间协作完成复杂的任务,从中很能够感受到趣味和强大。在gcc下编写C程序,将和玩游戏一样的有趣。
UNIX工具包中像这样的小程序非常多,学生一边可以玩味这些程序,一边可以自己实现这样的程序,或者自己干脆创新一个小程序,这个过程相当有趣。通过对命令行的玩味,要占用掉学生不少时间,但这是值得的,能较好的促进之后C语言的学习。
以上是对C语言学习与教学方式变革的一些初步思考,如何完善,还有待于进一步的研究与改进。
[关键词]C语言 UNIX 编程思想 gcc
一、国内C语言当前教学状况
当今C语言的教学缺点在于长于应付考试,而短于培养学生的学习兴趣,笔者在使用C语言比较长时间后,感觉C语言学完后即使用得很少,直到进入UNIX世界后,才领略到C语言的魅力,感到无比的有趣,进而反思当初C语言的学习过程。
在国内,基本上都使用windows操作系统,学习C语言亦不例外,早年多用Turbo C,近年才开始有使用Visual C++,但面临一个矛盾,黑乎乎的命令行和窗口程序差得很远,学生编程的案例中便又很大一部分是数学运算,趣味性大减。这个状况比较糟糕,但却是可以改变的。
回顾历史,C语言伴随着UNIX的诞生而诞生,UNIX最初用汇编语言写成,不便维护,Dennis Richie因此设计出C语言并帮助重写了UNIX,因为C语言的特点,既能方便操作硬件,又具有高级语言的特点,能模块化编写程序,构筑良好结构的程序,因此在UNIX平台下风靡起来,成为UNIX平台下的标准语言。C语言与UNIX系统有着千丝万缕的联系,在UNIX平台下形成了一整套编程的文化和思想,在此思想的引导下,可以方便的编写一系列的小程序,然后协作起来完成一个任务,这些内容,因为UNIX在国内的不流行,知道的人不多。UNIX有自己的一套文化,领略了这个文化,会真正明白C语言,并且能感觉到用C语言编程是一种享受和快乐,而这些感觉在windows平台下则不能体会。事实上,计算机界大量科研以及研究都是在Unix或其衍生系统下做的,开发者和计算机科研者会发现Unix平台用起来特别方便,很多科研成果也率先在该平台下实现,如TCP/IP协议,最早并且实现得最好的即在Unix下。
鉴于国情,UNIX系统比较遥远与不便,因此可以使用现在比较流行的Linux代替。而同样Linux系统对很多人来说也不方便,再退一步,我们所真正要使用得其实可以是UNIX下编程的那一整套思想文化及相应的UNIX工具包,前者看不见摸不着,但后者确是实实在在的,并且已经被移植到了windows平台,比较流行的有Cygwin和mingw。后者其实是GNU的gcc编译工具链的windows版本。有了这些软件,便可以在windows平台下使用UNIX的这一套方法。
二、UNIX编程思想下的案例展示
首先应该从命令行开始学起,熟悉Bash,并能熟练使用一些常用命令,如cat 等,以及管道,重定向等内容,正则表达式也可以大概的学习一下,以便于学会使用grep, sed等程序。领略UNIX编程思想的案例如下:
|为管道符号,意为将管道左边程序的标准输出放到管道内,成为管道右边程序的标准输入,这样多个程序使用管道连接起来,形成一个数据流与程序处理的流水线,我们便可以只要编写一个个的小程序,解决简单的问题,然后将这样的小程序通过管道串成流水线,完成一个大的工作。cat vimdoc.txt将vimdoc.txt的内容输出到管道给tr ‘A-Z’ ‘a-z’,将所有大写字母转换成小写字母,结果输出到管道给tr –c ‘a-z’ ‘\n’,将不是a-z的字符全部转换成’\n’即换行符,结果输出到管道给grep –v ^$,这里^$为正则表达式,意为空行,意思是将空行过滤掉,结果输出到管道给sort程序进行排序,使重复的单词相邻,结果输出到uniq –c,将相邻的重复单词归并为单独一个单词,并统计单词重复数,最后将此结果输出到管道给sort –n,将统计好的数字进行排序,便输出了案例中的结果,由结果可知词频最高的是单词the,在总共85万余单词中出现了近5万次,这里体现了UNIX编程思想的精髓。该案例中用到的程序有cat, tr, grep, sort, uniq, wc, tail等7个程序,均为UNIX中最常用的程序,是UNIX工具包中的标准程序,每个程序所解决的问题均为小问题,但协作起来便能完成统计单词词频等复杂任务。
cat程序最简单,只要简单的将参数指定的文件或者标准输入的内容送入到标准输出便可,使用C语言编写大约10行以内就可以实现;
tr(translate的简称)程序也不复杂,将要操作的内容中的字符按指定的参数进行替换,用C语言实现也不难,也是个小程序;
grep是过滤器,按参数指定的过滤模式(即正则表达式)过滤数据并输出到标准输出。正则表达式的解析很难,但简单的单词查找是很容易实现的,做一个简化版的grep也是很容易的事,C语言实现也能在10行内做到;
sort程序是排序用的,这个实现设计到算法,学生有兴趣可以自己实现,没兴趣的话了解下就好;
uniq程序是将重复的行归并到单独一行的程序,比如连续8行的内容都一样,都是s,则将此8行s归并为一行s。这个用C语言实现也是非常的容易,大约也在10行左右。
wc(word count的简称)程序用来统计文本文档的字符数,行数,以及单词数。这个任务很简单,很容易用C语言实现,如果只统计行数,则大约10行可以实现。
tail程序为打印文档的末尾若干行,行数由参数指定,这个任务也非常简单,在学生的能力范围内。
除了这7个程序,UNIX工具包还有很多其他的有趣的简单命令,如head, yes, sed, tac等,这些命令组合到一起,就成了超级工具,几乎能够解决所有的文本处理问题。
三、编程趣味的启示
由此可见,使用C语言编程,只需要写一个个的小程序便可,使小程序之间协作完成复杂的任务,从中很能够感受到趣味和强大。在gcc下编写C程序,将和玩游戏一样的有趣。
UNIX工具包中像这样的小程序非常多,学生一边可以玩味这些程序,一边可以自己实现这样的程序,或者自己干脆创新一个小程序,这个过程相当有趣。通过对命令行的玩味,要占用掉学生不少时间,但这是值得的,能较好的促进之后C语言的学习。
以上是对C语言学习与教学方式变革的一些初步思考,如何完善,还有待于进一步的研究与改进。