如果刚开始接触c语言,听不懂也正常,不要有畏惧的心理,有些小伙伴可能看到部分同学什么都会,自己就很气馁,因为这部分同学很可能接触编程比较早,即使小孩学走路也有一个过程,刚开始有走路欲望->学会站立,腿部有力量->尝试走路,不断练习->学会走路。所以不要慌。
学C语言与走路一样,刚开始一定要有学习的欲望,然后,再制定计划,不断练习,量变会引起质变,坚持下去就发现原来这么简单。
欢迎关注 公众号:c语言与cpp编程
1、学习资料
书本推荐:《c primer plus》难得的好书。老谭的书可看可不看,但是这本蓝皮的c primer plus是我案头必备的参考书,后面还有完整的c99标准库,所以适合当个参考书。注意区分一下《c++ primer》和《c primer plus》
如果觉得这几本书还是有点难,那就先看《C语言程序设计》
有了经验后要去看看,例子很经典。后来进阶可以看看三剑客《c和指针》《c陷阱与缺陷》《c专家编程》
刚学C语言的话可以结合看下C语言编程经典100例;
编译器:VS,DevC++,VC++,CodeBlocks,C-Free,Turbo C。关于它们的特点网上介绍很多了,就不赘述了。讲真,入门和基础阶段你用哪个无所谓,还是选自己喜欢的,不过对于初学者我们推荐Dev C++。可能现在大学课堂用的还是VC++,刚入门自己习惯就行。
视频推荐:有同学曾经说过,视频这么好,上课就不用听讲了,这个是完全错误的,视频是课堂补充,上课还是一定要好好听讲的,视频可以查缺补漏,系统的学习一下。
上面提到的一些资料整理好了,可以下载:
链接:>
提取码:1234
学习方法:
1、过:学习一门新的语言,第一步就是把它所涉及的基础知识大体过一点,不求深解,只求了解——第一遍:无需了解太过深入的理论,大体知道这门语言是什么样的,主要面向哪些场合,一些基本的语法格式是什么样的就可以了。
2、抄代码:刚开始写代码,没有多少人一上来就能立刻自己写一个很完善很强大的代码,甚至连基本的语法都会写错,这时候抄代码就很关键了,从书上抄,从例子里抄,边抄边想,边想边回忆语法。
3、模仿改:自己会抄写一些简单的代码,熟悉了一遍此语言的简单语法后,但还不太清楚怎样下手写一个完整的代码模块,所以这一步要仿写了,仿照给出的代码写一个属于自己的代码
4、勤调试:没有人能一下子写出完全正确的代码,自己试着写一些代码,通过不断调试来验证自己的一些想法,继续思考,再次验证,来回折腾。熟悉一些基本的调试工具以及调试方法。
5、看n遍:出错或遇到问题时,将代码从头看到尾,看了一遍又一遍,直到快全部记住时,总能找出问题原因,相信方法总会比问题多
6、练重复2-5步三遍以上,不解释。
7、创新拿出一个完全没有写过的代码,根据要求,一步步的写出来。如果写不出来,或者中间一堆错误,请参考第六步。
8、悟:主动找到写代码的感觉和成就感,并保持下去,世界上最难的语言就掌握了,将成为你软件生涯永远的工具。
如下:
现在计算机二级考试程序设计题的环境是vs2010。vs2010是需要创建工程的,一个单独的文件是没有办法运行的,如果你使用的是考试软件,考试题里应该是有工程的,软件也应该能帮你自动打开vs2010工程,实在不行就自己创建。
当然,你也可以不使用vs2010,用cfree,devc++这种不需要创建工程的软件,单独一个文件是可以运行的。
如何备考
1选择题:
如果C语言有一定基础,考前一周开始刷题没大问题(因为刷早了会忘)。我发的模拟考试软件里有,做完题有讲解。
另外背一背公共基础知识和一些程序设计基础,软件设计基础blabla,简单的一定要拿到!其次是数据结构和数据库设计基础,这些如果是零基础确实比较困难。
从题库中看,这些题其实也都是大同小异,做多了掌握套路其实还好,比如数据结构中二叉树,栈,队列等相关知识。其他搞不懂就千万别浪费时间,直接跳过,这些题占比很小,不会影响你过的嘻嘻。
然后就是C语言相关题目,这些题目比答主学校期末试卷广度小,深度浅,复杂度翻倍,甚至有为了出题而出题嫌疑,但是只要细心,还是没问题的。但是学过C的同学们,一定要刷刷题!不要以为学过C就好考,其实并不!主要熟悉套路,陷阱一般设在哪儿。
答主考试的时候,最痛苦的是选择最后几道C语言相关,真的蛮复杂,最后实在不想看,直接懵选项了。如果是零基础,可以不用看书,直接上手刷题!
2程序填空题 、程序修改题:
这个一共36分,极其简单。尤其是修改题,一定要拿到!很多都是if写成IF这种“骚 *** 作”。最好的方法就是用我发的模拟考试软件看改错题,也就103道左右吧,1分钟就能看一道,so easy!
填空题随缘,有难有简,还是大同小异,掌握套路最重要。方法还是直接刷题,填空题一般都是两个空都简单,或是一难一简。有些题太复杂可以只看简单的那空,难的随缘,不差那分!
3程序设计题:
这个题的给分规则是只看结果!所以不管是算数还是什么,如果不会编最后就直接把结果搞上去(printf一下)然后让程序运行下去不要卡住就好了。这道题非常的重要,做好了你就一定能过,甚至是能够高分通过。但是做不好也问题不大,只要你选择题能够对一半,还是有很大机会通过的。
4全真模拟:
非常重要!考前一定要模拟考试软件模拟考试一次。记住,选择题提交之后就不能再修改了,慎重!
模拟完之后,看看有没有什么问题。
时间不够那就合理分配各题型的时间。
建议:选择题40分钟,程序设计、修改、设计题合起来60分钟。一定要留下时间交卷,不要太匆忙。改错做错了?那就回去复习下改错。哪一个题型错了,就重点复习。
注意事项:
做题过程记得保存,建议做一个小题,保存一次!
每道小题有很多个步骤,中间不要跳步骤,一步一步地做!
注意文档命名格式,认真审题,根据要求来命名,尤其是不要出现错字!
注意文件保存位置,不要随意挪动文件位置,按题目要求来。
考试时一定要带的物品:
本人证件:准考证、身份z。
其他物品:笔、草稿纸、饮用水、纸巾、等等。
C语言是一种早期的计算机语言,最初诞生目的是为了提供一种基于UNIX系统的工作语言但是,后来却被越来越多的人发现它的优点与潜力C本身比较接近底层,适合开发系统软件甚至是 *** 作系统我个人也认为它是界于高级语言与汇编语言之间的中级语言C语言是一门结构化语言(我认为主要是指它的控制结构如:if if-else while for等等)C程序设计上有提到;自顶向下,逐步深入;以函数为原子功能模块对于大型的程序来说模块化是很重要的,有一句话说的很好;优质的程序首先就是便与人们之间的相互讨论与交流,其次才是执行效率;当然我个人认为任何一名程序写作者,都应该养成一种特定的思维方式,以程序的思维方式来思考程序的实现前提就是要足够的来了解计算机底层技术要不我想就连学习都是很困难的,凡事都是一个思路的问题嘛标准的来衡量,C应该算是高级语言阵营的一份子可很多有C语言开发经验的程序写作者通常亲切的称C为界于底级语言与高级语言之间的中级计算机语言当然不是因为C比高级语言要差,之所以这么认为是因为C既具有高级语言的结构化与可理解性又具有低级语言的高效率同时C的移植性也是非常不错的,大家应该知道,越是接近硬件,接近底层的语言就越加的依赖硬件环境,也就是我们所说的设备相关性C这一点做的是非常棒的说了这些,在从另一个角度去分析C语言当然每种语言都有它自身的优缺点,C也一样比如在现在高级语言与顶层技术的角度来看的话,C最大的缺陷就是Data与算法的分离举一个例子: 对于一个拥有几千行甚至上万行Code的程序来说,如果修改Data,比如我在Structure中增加一个字段,可能为此我的整个程序都要改动,这使得程序的可重用性大大降低开发周期也大大的延长但是在底层的角度来看这也正是C的优点我为什么要这么说呢?我个人认为在求解与实现一个小问题的时候,我们可以写出一个通用的模块处理不同的Data当然比如某些经常用到的,基于数据结构的一些常用算法我们可以写出来在开发的时候我们可以直接把预先编写的模块插入到我们的程序中去,这不也是大大低了开发周期吗?初学者完全可以根据自己的需求来编写一个自定义库好了,说了这些,有些地方我理解错了,还请各位指出来,交流是很重要的,前提是要把自己的心态放平下面我将谈论本问的重点,也就是如何来学习C语言,是给那些初学者读的
正题部分:
有人可能会说:学习还用你教啊,谁没上过学啊其实我今天要说的只是,站在一个过来人的角度,来分析与解释学习C语言的过程中比较困难的地方当然我个人也会对比较具体的问题进行解释(个人看法)我一直在强调个人看法,我是想让大家明白,对于同一个问题大家可能都很难达成统一的意见,希望批评的时候客气点就好喽!
初学者该看哪些书来入门:
在学习C语言之前,首先就要选择一本教材,对于初学者,我个人并不建议去读电子书籍,最好是买纸质书来学习比如比较有名的"C程序设计"就很不错,尤其是第二版我也看过,比较适合中国人来初学整本书都在全面系统的讲解C的语法结构,构成C的语言元素包括:数据类型,支持的运算符,标识符(是由程序员按照命名规则起的名字,用于变量名,函数名,宏名等等),关键字(编译系统用于实现C内部功能的词,比如:转向goto和中断break等等)等看完这本书你基本上可以写一些简单的小程序,当然是DOS下的程序如果你想在进一步深入学习C的话,可以看;C陷阱与缺陷;这本书写这本书的作者是在Bell工作对C是非常精通的,应该算是大师级的人物了如果你暂时不想深入C的话,也没问题,因为此时你完全可以把C当作一种编程工具来使用,你要做的就是多写Code来让自己熟悉C语言经验是非常重要的,;经验是检验真理的唯一方法;当然你不会纸上谈兵,如果你有过多的开发经验的话,就知道在纸上或最初的设想的Code拿到计算机上来实现,最终会发现有很多地方都是不合理的,之前是没有办法想象到的在初学C的过程中,比如你会看;C程序设计;来初学C,当你学完每一章的时候要把习题来完成,这里就是考验你学到的知识了,看看你应用能力怎么样尤其是程序设计题目,比较有意思哪里不懂了可以翻回去看书中的解释如果没有解释或你还是不明白,可以去问别人,与其他人交流 bbs,QQ或Google直到你弄明白为止当你把问题最终解决的时候,我敢打赌,此时你一定很兴奋,或者是比较兴奋这个时候知识已经在你的大脑里了
下面我为你推荐几本不错的关于C语言籍:
C编程规范
C语言大全第四版 (个人感觉不错,里面有提及C标准方面的东西)
C和指针
The C programming Language (经典著作)
如果你要看电子书的话,以上几本书在Google上很容易就可以找到
关于C语言的初步理解:
对于初学者,会有太多的疑问,原因是你的知识面太小现在我为你解释一些C相关的东西目的是让你能够有一个大致清晰的方向,来给自己安排学习计划专业的来说,我们是或将是一名程序员,程序员当然就是要开发程序了对于软件开发方面我来解释下术语:
C,C++,ASM,Basic,Java 这些是计算机语言计算机语言很多,我就不多说了
Visual C++,Visual Basic, Microsoft研发的开发环境,开发环境包括:编译器,库函数(每种C语言编译器都支持标准库,同时它们也会扩展自己的库,所以很多比较以来库函数实现的程序员,在转向不同的开发环境的时候最初总是不使用的,会遇到很多问题),一些资源模板等等Visual 就是可视的意思,后面的就是语言Visual C++支持C与C++2种语言,是根据文件的扩展名来判断采用哪种编译内核
什么是面向对象与;面向过程 其实是2种完全不同的程序设计思想,C语言是面向过程语言,而C++是面向对象语言在面向对象的语言中有类(Class)这个东西C中没有对象是由类来派生的一个实例,相反类就象是一个模板
什么是SDK SDK就是软件开发工具包(Software Development Kit)指的范围比较广,通俗的说,凡是能够与软件开发过程占上边的东西都属于比如:库文件,参考资料,接口函数,当然语言也应该属于
DDK就是设备驱动程序开发工具包
Turbo C: 这是一个比较精致的C语言编译器
理论上来说任何一门语言都可以在任何一种 *** 作系统上运行,前提是 *** 作系统要支持也就是我们所说的应用程序接口,比如Window API(Application Programming Interface),其实是Microsoft内部定义的接口函数用于实现一些Windows内部的功能一些对象的描述术语,在不同平台上是不同的,比如:Windows下的调用,经常被称为呼叫,返回被称为传回
什么是算法 你最初只需要知道算法实际上就是对特定的Data进行运算的一段代码而已也可以认为在求解一道题目的时候,采取的方法与步骤的总称对于基本的C程序来说,实际上就是由Data与算法来组成的
什么是数据结构 如果要是系统的讲解,还需要一本书数据结构,简单的说:是程序要处理的数据在内存中的存储与组织的方式,分为:物理结构与逻辑结构逻辑结构就是我们抽象化以后得到的大脑影象
什么是函数库 它们以文件的形式存储,是预先定义好的函数的集合,我们的程序可以直接调用当然前提是要包含它的头文件(库函数的原型声明)这些函数是在静态连接期间组成到exe文件中去的Windows又存在另一种库,叫做动态连接库(DLL)
GUI: 也就是"图形用户界面",就是我们在Windows上看到的,存在:菜单栏,滚动条与显示区域的窗口
GDI: 图形设备接口,从程序写作者的角度来看,其实GDI就是由上百个函数与数据形态和一些相关的数据结构所组成的
学习C语言的全过程:
仔细想想,实际上学习C语言,最初是应该先学习C语言的基础语法也就是学习C语言的组成部分一部分一部分的向下学知识要一点一点的巩固的本人假设你学习C语言是看C程序设计我认为你应该先把C程序设计仔细的看一便,这样你应该可以对整本书和C语言的整体组成结构有个大致的清晰了解不要认为学习只是在看书,看一便就可以了你应该学会记笔记,在记笔记的过程中,其实你就是在学习,从知识的分析,理解,归纳,到最后以自己的思维方式记下来,这整个过程就是把书中的知识抽象到你自己的脑袋里个人感觉学习效果非常好,不懂就问,要多多与人交流,要多思考,遇到问题自己先多想想,实在找不到问题出在哪,在去请教别人,不要有不懂的地方就直接去问别人,那样对你没太大的好处其实要学会给自己安排适合自己的学习计划,我大致来估计了一下,如果你每天能花4个小时安静的,用心去学习的话,30天之内你应该可以掌握C语言了其实在整个学习过程中你大多数时间都在看书,而不是面对电脑在调试你的代码之前,先在纸上把核心代码大致写出来,分析一下:程序的组成模块(可以是一个函数或多个),由几个函数来实现,接口的封装采用哪种数据结构更适合一些关键在于算法在你的最终程序发布之前,最好把你的代码行数减到最少不要只想着把代码写多过多的代码对程序来说是负担你可以在Internet上下载一个文件(C语言经典例题chm),里面大致包含了上百个经典的例题每一个例题都是C语言某部分的典型应用花时间把这个文件中的所有例题代码研究一下,最好能自己把代码改善,以自己的方式来求解以后你会发现你在写一些应用程序的时候经常会有一些算法会涉及到我之前提到的例题最后我认为你可以自己来写C语言标准函数,比如strcpy(); strlen();strcat();最好不要过分依赖库函数
C语言学习的难点:
现在应该是已经讲到一个重点的环节很多网友都说学习C语言很难,我认为C中有些部分是比较复杂,难理解的当然在你具有了丰富的开发经验以后,这以不在是问题了下面我个人会对我认为学习C的时候比较难学的地方进行我自己的阐述,如果哪里不正确,还请各位指出:
指针的出现:
我想有很多初学者学习到指针那一章都感觉很难,下面我就以自己的想法来解释下指针这个特殊的数据类型,
基本变量大家可能并不难理解,因为基本变量其内部存储了同类型的常量,事实上指针也是变量,不过呢,这个变量和基本变量有点不一样,那你又问了:是哪里不一样呢 我告诉你,简单的来理解其实普通的变量内部存储了同类型的常量,而指针变量内部存储的则是同类型变量的首地址这样你能够理解吗,是很简单的解释,但不失本质事实就是这样的如果你不理解同类型变量的首地址的话,我可以给你形象的来描述一下:
float Variable; //声明一个单精度实型的变量
此时,编译器已经给Variable分配了内存空间,结构如下:
__________
| |1001
|---------
| |1002
|---------
| |1003
|---------
| |1004
|---------
以上便是Variable的内存结构了,16位下的float占用4个字节,内存地址是线性编码的,我们可以很容易的看出Variable的首地址就是他第一个单元的地址1001,好的,继续向下看:
float Pointer=&Variable; //声明一个指向Variable的指针Pointer
_________
|1001 | 这是Pointer的内存结构
|_______|
我们的程序可以这样来执行:
Variable=10;
直接给Variable赋值,我们称为直接访问
也可以这样执行:
Pointer=10;
也可以通过指针变量来赋值,前面的是间接运算符号,意思是求Pointer内部存储地址所标识的内存单元也就是Variable此时,是赋值是通过间接访问来实现的可以这样形象的描述:
________ (指向Variable) __________
|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;
不好意思,我记不清了,指针的++运算是地址+1还是向后移动一个元素的位置,如果是地址+1的话,以上代码在改成这样:
for(i=0;i<10;++i,Pointer+sizeof(int))
Pointer=i;
如果数组类型是char的话,那就更方便了,因为字符串存存在一个在尾元素之后的结束标记('\0'),下面给出一个简单的代码,应用char Pointer:
char my_strcpy(char dst, const char src)
{
char cp = dst;
while( cp++ = src++ ); // 注意运算符的优先级与结合性
return( dst ); //返回新传的指针
}
以上代码实现字符传Copy功能,代码是不是很简洁啊如果不需要移动内存块的话,我们完全可以通过交换指针(内存地址)来实现排序 *** 作,其效率应该是很客观的补充一句:千万要弄清楚,指针本身与指针所指向的变量不是一个单元
这书别看了……讲得忒乱。C语言入门推荐看《C和指针》或者《Linux C编程一站式学习》。实在不行看谭浩强的《C程序设计》也凑合,经典的K&R版《C语言程序设计》是进阶读本。《C陷阱和缺陷》侧重C语言的使用误区,《C专家编程》部分内容跟UNIX *** 作系统相关。
(1)你在源代码中写a和'a'有什么区别?
你的程序实际上是写在txt文件中(c、cpp啥的都是无格式文本)
如果你直接在源程序中写a,则编译器把它当成是你程序中的一个变量;
例如你在程序代码中写一句"int abc = 100;",abc中的a被编译器理解成一个标识符/名称的组成部分。
如果你在源程序中写'a',则编译器遇到单引号把它理解成一个字符常量,这完全是编译器词法分析过程中的区别。
不管是a还是'a',你写在源程序文件中的内容都可以叫做代码的组成成分(如果不是资源数据)。
(2)'a'并非char类型,事实上它是int类型
这话说得不仅让人难以理解,而且根本就是错的。'A'是char类型常量无疑,注意区分术语integral type(整数类型,包括有符号或无符号的int, short, char)和integer(整型int),看英文书这个区别很明显,比如case子句都要求integral type,不一定是int类型。
(3)啥是ASCII码
0x34、'a'等都是二进制机器码的一种记录方式。程序编译之后,'A'和数值65的二进制码是相同的,所以有时用int类型的数值常量代替char常量能得到同样的结果(很多时候还牵涉到隐式类型转换,初学者先不管),这其实是不太规范的。计算机喜欢用机器码,源码是写给人看的,所以有些程序虽然机器码是正确的,但源码语义不明,也是不好的。
(4)
楼主还是换本书看吧,真心的。入门的话很多问题不必深究,先写程序跑起来,选教材最重要是作者讲述方式与你的理解方式一致。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)