论文部分内容阅读
【摘 要】本文分析了C语言的初学者在学习中出现的问题,并探究了产生这些问题的原因,说明了C语言的重点与难点学习,并对此提出了积极的解决方案,具体阐述了改进C语言学习的措施。
【关键词】C语言;方法;难点;措施
一、C语言学习方法
在学习C语言之前,首先就要选择一本教材,对于初学者,我个人并不建议去读电子书籍,最好是买纸质书来学习。比如比较有名的“C程序设计”就很不错,尤其是第二版,我也看过,比较适合中国人来初学,整本书都在全面系统的讲解C的语法结构,构成C的语言元素包括:数据类型,支持的运算符,标识符(是由程序员按照命名规则起的名字,用于变量名,函数名,宏名等等),关键字(编译系统用于实现C内部功能的词,比如:转向goto和中断break等等)等。看完这本书你基本上可以写一些简单的小程序,当然是DOS下的程序。如果你想在进一步深入学习C的话,可以看“C陷阱与缺陷”这本书。写这本书的作者是在Bell工作对C是非常精通的,应该算是大师级的人物了.之前是没有办法想象到的.在初学C的过程中,比如你会看“C程序设计”来初学C,当你学完每一章的时候要把习题来完成,这里就是考验你学到的知识了,看看你应用能力怎么样?尤其是程序设计题目,比较有意思。哪里不懂了。可以翻回去看书中的解释。如果没有解释或你还是不明白,可以去问别人,与其他人交流,bbs,QQ或Google,直到你弄明白为止。
不要认为学习只是在看书,看一便就可以了.你应该学会记笔记,在记笔记的过程中,其实你就是在学习,从知识的分析,理解,归纳,到最后以自己的思维方式记下来,这整个过程就是把书中的知识抽象到你自己的脑袋里.个人感觉学习效果非常好,不懂就问,要多多与人交流,要多思考,遇到问题自己先多想想,实在找不到问题出在哪,在去请教别人,不要有不懂的地方就直接去问别人,那样对你没太大的好处.其实要学会给自己安排适合自己的学习计划,我大致来估计了一下,如果你每天能花4个小时安静的,用心去学习的话,30天之内你应该可以掌握C语言了。其实在整个学习过程中你大多数时间都在看书,而不是面对电脑.在调试你的代码之前,先在纸上把核心代码大致写出来,分析一下:程序的组成模块(可以是一个函数或多个),由几个函数来实现,接口的封装.采用哪种数据结构更适合一些。关键在于算法.在你的最终程序发布之前,最好把你的代码行数减到最少。不要只想着把代码写多,过多的代码对程序来说是负担.你可以在Internet上下载一个文件(C语言经典例题.chm),里面大致包含了上百个经典的例题.每一个例题都是C语言某部分的典型应用,花时间把这个文件中的所有例题代码研究一下,最好能自己把代码改善,以自己的方式来求解.以后你会发现你在写一些应用程序的时候经常会有一些算法.会涉及到我之前提到的例题.最后我认为你可以自己来写C语言标准函数,比如strcpy();strlen();strcat();最好不要过分依赖库函数。
二、C语言学习的难点
我可以给你形象的来描述一下:float Variable;//声明一个单精度实型的变量;以上便是Variable的内存结构了,16位下的float占用4个字节,内存地址是线性编码的,我们可以很容易的看出Variable的首地址就是他第一个单元的地址1001,好的,继续向下看:float*Pointer=&Variable;//声明一个指向Variable的指针Pointer我们的程序可以这样来执行:Variable=1.0;直接给Variable赋值,我们称为直接访问.也可以这样执行:*Pointer=1.0;也可以通过指针变量来赋值,前面的*是间接运算符号,意思是求Pointer内部存储地址所标识的内存单元,也就是Variable。此时,是赋值是通过间接访问来实现的。可以这样形象的描述:以上应该是指针实现的基本解释,很多优秀的程序写作者都说指针是C语言中的精华,的确如此,很多优秀的程序写作者写程序都非常依赖指针,因为它很方便,实际上指针所访问的对象是没有限制的,他可以指向任何类型的变量,前提是只要我们知道内存地址。因此指针也并不安全,在开发网络程序的时候,尽量要少使用指针。下面我们在来看一下指针在数组中的使用。
数组中的指针:简单的来解释下数组,数组结构在C中使用比较普遍,其实最常用的就是char类型的数组,主要是用于字符串操作。实际上数组是“同类型变量的有限集合”。我想这应该不难理解吧。数组在内存中占用连续的内存单元(地址连续),来存储数组中的每一个元素。数组是预先分配好指定长度的内存单元,供数组元素使用,它并不支持动态内存分配。在内存中想要唯一的确定数组,需要2个标识:入口地址(函数名)和结束标记('\0')。有些语言并不向C语言这样支持字符串结束标记,它们必须要另外声明一个变量来标识尾元素的下标。那数组名其实就是这一组内存单元的首单元,他的地址就是整个数组的入口地址。此时应该明白了,数组名是一个指针,这样理解没有问题。不错,在具体操作的时候不允改变数组名的地址,也不符合实际要求。这样就可以明白数组名是一个什么 const Pointer(指针常量)。我们可以这样做:
int Array[10];
int *Pointer;
Pointer=Array;
for(i=0;i<10;++i)
Pointer==i;
以上代码应该是没问题吧,同类型的指针,完全可以胜任数组名的任务。一点问题没有而且可以运行的很好。当然,我们可以进一步把代码这样来写:把for(i=0;i<10;++i)
Pointer=i;
改成
for(i=0;i<10;++i,Pointer++)
*Pointer=i;
如果数组类型是char的话,那就更方便了,因为字符串存存在一个在尾元素之后的结束标记('\0'),下面给出一个简单的代码,应用char Pointer:
char * my_strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ );// 注意运算符的优先级与结合性
return( dst );//返回新传的指针
}
以上代码实现字符传Copy功能,代码是不是很简洁啊。如果不需要移动内存块的话,我们完全可以通过交换指针(内存地址)来实现排序操作,其效率应该是很客观的。补充一句:千万要弄清楚,指针本身与指针所指向的变量不是一个单元。
【参考文献】
[1]陈广群,孔发弟.C语言课堂教学改进初探[J].南京广播电视大学学报,2009(02).
[2]魏青.《C语言》教学中学生学习兴趣的培养[J].电脑知识与技术,2010(21).
[3]祝瑞.快乐教学法在C语言教学中的运用[J].工会论坛(山东省工会管理干部学院学报),2010(06).
[4]师艳侠.论如何激发学生学习信息技术的兴趣[J].才智,2009(10).
[5]祝贺.C语言教学中存在的问题及对策探讨[J].黑龙江科技信息,2010(13).
【关键词】C语言;方法;难点;措施
一、C语言学习方法
在学习C语言之前,首先就要选择一本教材,对于初学者,我个人并不建议去读电子书籍,最好是买纸质书来学习。比如比较有名的“C程序设计”就很不错,尤其是第二版,我也看过,比较适合中国人来初学,整本书都在全面系统的讲解C的语法结构,构成C的语言元素包括:数据类型,支持的运算符,标识符(是由程序员按照命名规则起的名字,用于变量名,函数名,宏名等等),关键字(编译系统用于实现C内部功能的词,比如:转向goto和中断break等等)等。看完这本书你基本上可以写一些简单的小程序,当然是DOS下的程序。如果你想在进一步深入学习C的话,可以看“C陷阱与缺陷”这本书。写这本书的作者是在Bell工作对C是非常精通的,应该算是大师级的人物了.之前是没有办法想象到的.在初学C的过程中,比如你会看“C程序设计”来初学C,当你学完每一章的时候要把习题来完成,这里就是考验你学到的知识了,看看你应用能力怎么样?尤其是程序设计题目,比较有意思。哪里不懂了。可以翻回去看书中的解释。如果没有解释或你还是不明白,可以去问别人,与其他人交流,bbs,QQ或Google,直到你弄明白为止。
不要认为学习只是在看书,看一便就可以了.你应该学会记笔记,在记笔记的过程中,其实你就是在学习,从知识的分析,理解,归纳,到最后以自己的思维方式记下来,这整个过程就是把书中的知识抽象到你自己的脑袋里.个人感觉学习效果非常好,不懂就问,要多多与人交流,要多思考,遇到问题自己先多想想,实在找不到问题出在哪,在去请教别人,不要有不懂的地方就直接去问别人,那样对你没太大的好处.其实要学会给自己安排适合自己的学习计划,我大致来估计了一下,如果你每天能花4个小时安静的,用心去学习的话,30天之内你应该可以掌握C语言了。其实在整个学习过程中你大多数时间都在看书,而不是面对电脑.在调试你的代码之前,先在纸上把核心代码大致写出来,分析一下:程序的组成模块(可以是一个函数或多个),由几个函数来实现,接口的封装.采用哪种数据结构更适合一些。关键在于算法.在你的最终程序发布之前,最好把你的代码行数减到最少。不要只想着把代码写多,过多的代码对程序来说是负担.你可以在Internet上下载一个文件(C语言经典例题.chm),里面大致包含了上百个经典的例题.每一个例题都是C语言某部分的典型应用,花时间把这个文件中的所有例题代码研究一下,最好能自己把代码改善,以自己的方式来求解.以后你会发现你在写一些应用程序的时候经常会有一些算法.会涉及到我之前提到的例题.最后我认为你可以自己来写C语言标准函数,比如strcpy();strlen();strcat();最好不要过分依赖库函数。
二、C语言学习的难点
我可以给你形象的来描述一下:float Variable;//声明一个单精度实型的变量;以上便是Variable的内存结构了,16位下的float占用4个字节,内存地址是线性编码的,我们可以很容易的看出Variable的首地址就是他第一个单元的地址1001,好的,继续向下看:float*Pointer=&Variable;//声明一个指向Variable的指针Pointer我们的程序可以这样来执行:Variable=1.0;直接给Variable赋值,我们称为直接访问.也可以这样执行:*Pointer=1.0;也可以通过指针变量来赋值,前面的*是间接运算符号,意思是求Pointer内部存储地址所标识的内存单元,也就是Variable。此时,是赋值是通过间接访问来实现的。可以这样形象的描述:以上应该是指针实现的基本解释,很多优秀的程序写作者都说指针是C语言中的精华,的确如此,很多优秀的程序写作者写程序都非常依赖指针,因为它很方便,实际上指针所访问的对象是没有限制的,他可以指向任何类型的变量,前提是只要我们知道内存地址。因此指针也并不安全,在开发网络程序的时候,尽量要少使用指针。下面我们在来看一下指针在数组中的使用。
数组中的指针:简单的来解释下数组,数组结构在C中使用比较普遍,其实最常用的就是char类型的数组,主要是用于字符串操作。实际上数组是“同类型变量的有限集合”。我想这应该不难理解吧。数组在内存中占用连续的内存单元(地址连续),来存储数组中的每一个元素。数组是预先分配好指定长度的内存单元,供数组元素使用,它并不支持动态内存分配。在内存中想要唯一的确定数组,需要2个标识:入口地址(函数名)和结束标记('\0')。有些语言并不向C语言这样支持字符串结束标记,它们必须要另外声明一个变量来标识尾元素的下标。那数组名其实就是这一组内存单元的首单元,他的地址就是整个数组的入口地址。此时应该明白了,数组名是一个指针,这样理解没有问题。不错,在具体操作的时候不允改变数组名的地址,也不符合实际要求。这样就可以明白数组名是一个什么 const Pointer(指针常量)。我们可以这样做:
int Array[10];
int *Pointer;
Pointer=Array;
for(i=0;i<10;++i)
Pointer==i;
以上代码应该是没问题吧,同类型的指针,完全可以胜任数组名的任务。一点问题没有而且可以运行的很好。当然,我们可以进一步把代码这样来写:把for(i=0;i<10;++i)
Pointer=i;
改成
for(i=0;i<10;++i,Pointer++)
*Pointer=i;
如果数组类型是char的话,那就更方便了,因为字符串存存在一个在尾元素之后的结束标记('\0'),下面给出一个简单的代码,应用char Pointer:
char * my_strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ );// 注意运算符的优先级与结合性
return( dst );//返回新传的指针
}
以上代码实现字符传Copy功能,代码是不是很简洁啊。如果不需要移动内存块的话,我们完全可以通过交换指针(内存地址)来实现排序操作,其效率应该是很客观的。补充一句:千万要弄清楚,指针本身与指针所指向的变量不是一个单元。
【参考文献】
[1]陈广群,孔发弟.C语言课堂教学改进初探[J].南京广播电视大学学报,2009(02).
[2]魏青.《C语言》教学中学生学习兴趣的培养[J].电脑知识与技术,2010(21).
[3]祝瑞.快乐教学法在C语言教学中的运用[J].工会论坛(山东省工会管理干部学院学报),2010(06).
[4]师艳侠.论如何激发学生学习信息技术的兴趣[J].才智,2009(10).
[5]祝贺.C语言教学中存在的问题及对策探讨[J].黑龙江科技信息,2010(13).