c语言的奥秘
‘壹’ 想深入的学习c语言(不是c++),不知道有什么好的书籍可以使自己能把c语言学精通。请高手指教
作为一个经典书籍收藏阅读者,在此,我再次推荐我的书列~~
大学期间我也走了很多弯路,学习c一直不得章法~~这些书籍还是工作了才了解到,惭愧
楼上也提到了很多,但是没有给出合理的顺序,我按照自身的曲折路线给你推荐下吧~~希望对你有所启发。
0. 一点编程基础都没有,看下《编码的奥秘》和《c语言大学教程》或者楼上说的《the c programming language》(此书有c++版本的,把c换成c++作为书名的,两者都是经典!)也适合作以后的工具书,ps:编码的奥秘出新版了,即使有编程基础,看了此书有百利无一弊,了解计算机系统的发展史,同时对整个计算机体系的整体上的把握会有助于你学习程序员的英语 --- c语言,因为c比较接近机器的思维!
1. 如果之前学习过c语言,学的不扎实,想彻底学的扎实,如果看过国内的c语言的教程,那么你应该买一本《c和指针》,绝对没有争议!
2. 如果c和指针,认真读完了,并且把习题也做了,例子也照着编写了,思考了,学的还可以了,仍想进一步提高,再看一下《c专家编程》,《c缺陷与陷阱》(这个我没看过,但是别人推荐过,也不厚)
3. 《windows程序设计》是一本经典的书籍,和《编码的奥秘》是同一个作者,如其名,此书涉及到windows编程的各个方面,不算是c语言的入门书籍,属于针对某个操作系统平台的应用开发书籍。
4. 《windows核心编程》一书也是经典,也是属于拔高性质的书籍,此书侧重于讲解和使用windows的API进行操作系统相关的各种编程。
目前我也就看了这么多编程以及和你题目相关的书籍,如果你很勤奋,不会太久,上述书籍我是毕业这两年期间看完的,不过时常重新翻看,好书本就不是一蹴而就,读完束之高阁的~~
工作的时候买本国人的《系统程序员成长计划》(c语言的)看看,难得的国产好书~~实践出的真知~
最后与你分享下我的感受,编程习惯和思想比语言本身更重要!学习语言不能孤立地去单独学习一门语言,要从一开始养成良好的编程习惯,使用数据结构和库,同时顺带了解系统API,循序渐进~~
优秀的程序员应该对自己编写的每个字节都了如指掌,与君共勉!
不是不推荐国产的书籍,确实和国外差距很大,我当初对c语言的兴趣完全被谭浩强的那本概念书籍整没了~~好书很多,但是针对自己的情况制定学习路线才是明智的,否则会打消积极性,适得其反。
以上都是我的个人经验,走了很多弯路,终于入门了,提升了~~也希望我的回答能够抛砖引玉~~
‘贰’ C语言代码是什么,如何执行代码
c语言代码就是按c语言的语法写出的程序代码啊!
把代码放在开发环境中(如TURBOR),然后编译!源码就是代码了!是一个程序运行的奥秘所在!如果没学过c语言。不是很容易哦
‘叁’ 初学c语言就遇到困难,算法问题,麻烦各位大虾指点下…
你现在才刚开始学c语言,算法可以先跳过 不去看,从第三章开始看,等你c语言很熟了,再回过头来看算法,这样比较合适,你现在还不会走就想跑,会跌跟头的。
我个人认为 谭浩强的c语言教材,不太适合初学者学,因为书里例子太少,理论太多。
如果你想自学C语言,最好的办法是 找一本 有很多完整例子的 c语言教材,然后把例子在电脑上面运行一遍,虽然是依样画葫芦,但你动手编过程序后慢慢会有感觉的,然后在把理论部分也补上去。
如果你一直看书,看理论,学起来会很慢,很痛苦。
所以 你换本例子多点的教材,然后看完一节内容,就把书上的例子运行一遍,一遍不够就两遍,俗话说 孰能生巧。谭浩强的书名声虽大,但不是每个人都适合的看。
以上内容只是本人的个人意见 仅供参考
‘肆’ 如何才能深一层的学习C语言万分感谢~~朋友~~~
同志,我和你有同感,在也提过这样的问题,有一个人给我这样一篇文章,你可以看一下
最近 CompBook 版的一个题目:“初学者要如何学习 C++”,又引发一长串讨论。每天我啜着咖啡,看着一篇篇的长短文,在精譬与幼稚、深远与浅薄、骂声与辩白之间,固然得稍遣一日下来的疲惫身心,聊以为茶馀饭后之资。但是看着日渐众多的贴信,想到某些问题,心情也不很轻松得起来。
我有一些感触。
●不要骂人
学问高、技术好,固然可以说话比较宏声,比较强势,比较得到大家的尊敬与体谅,别人也比较不敢招惹,但不表示可以出口骂人。“废物、白痴、人渣、丑角”,这些骂人的话实在不宜。
不可以骂人,是网路的基本礼仪。“不可以”可以从两个层面来说。法律上来讲,网路上之不可以骂人也许是个灰色地带,被骂者多半也不会诉诸大动作。所以除非是名人被骂,或名人骂人,而且咽不下一口气,多半只是清风徐来,水波不兴。
我要谈的是修养层面上的“不可以骂人”。我要谈的是上网基本守则,就像谈做人的基本道理一样。
有些人的行事采“直率”原则,必要赤裸裸地表现自己的情绪而后快,至于礼仪诸等,则或斥之“伪善”。网路是个不露脸的世界,也大量容忍了这等“直率”。但是如我常说的‘文如其人’,文字表现了作者的为人处世、心境修养、学问技术。为文能不慎乎?
古云“君子不欺暗室”,意思是虽处于无人得见之暗室,亦不做欺心败德之事(唐骆宾王.萤火赋:类君子之有道,入暗室而不欺)。网路这个虚拟世界,就像一个大暗室,虽然别人不得见你的真面目,你在暗室中的一切行为,仍忠实映照你自己。
昨天,我顺道载来元智旁听课程的交大学生回竹。途中刚好他提起 CompBook 版的这阵热闹。我淡然地说:不该骂人。学生说:可是有人本来就该被骂。
哦,是吗?
如果说这个世界是“观念可能有点偏差、技术可能有点不足、态度又没让你顺眼的人,便该骂”,那麽我说,骂人有骂人的技巧与艺术,你骂人的表现这麽粗糙这麽差劲,“观念可能有点偏差、技术可能有点不足、态度又没让我顺眼”,也该骂罗?
不,你不该被骂。所以他也不该被骂。
要表现尖锐与犀利,另有办法;请不要用骂,尤其是像“废物、白痴、人渣、丑角”这种话。
或有人说,我的个性就是这样,直率是我的座右铭。那也依得。我刚才说了,网路是个不露脸的世界,大量容忍了这等“直率”。我写这篇文章,原也意不在影响骂人文章的作者(我想我没有这样的能力), 我想影响的是骂人文章的读者 — 你。
指责别人是多麽地容易,检讨自己是多麽地不容易。我回想自己的文章,也出现过情绪性字眼。虽是一个比拟,非特定指哪个人,还是觉得有点惭愧。
●文如其人
衍生而来的,我还想说的是,竞速的时代,以及台湾教育的偏颇,造成了网路上的文字错别字连连、逻辑不通、语意不畅┅。大家都急就章地,有什麽想法就脱口而出,线上回覆;不但不检阅,甚至不重读第二遍就按键送出。
文如其人。如果你连自己出手的文字 — 代表自己思想的东西,都这麽不在乎不谨慎,你会对什麽在乎?你在乎的大概只剩功利铜臭之阿睹物。如果现实生活中你是谨言慎行的,到了暗室却如脱疆野马,这让我想起现实社会中许多彬彬有礼之士,上了自家车驾驶座,便换了张头脸,骂声连连,闪超挤推,下得车来又彬彬有礼。
可是你,就是你,只有一个你。哪个是真实的你呢?半夜问问自己。
●初学者要如何学习 C++
发问者,有能力从回信内容判断回信者的经验,进而估量其正确性或适用性,进而决定自己的采用度吗?
如果能,大概不会问这个问题。如果不能,应该不必问这个问题。
网路上这些年的悠游经验,使我轻易可以判断哪一种题目又有好戏看了,哪一种题目又要引爆口水战乃至口角战 —而且最后只是一场混战,筛子上留没几家伙。
我们感谢热心的回信者,他们热切提供自身经验,不论自己是一年经验、三年经验、五年经验、十年经验┅。不论自己是 1/4 瓶水或半瓶水,或 3/4 瓶水或满瓶水。
我想知道,以发问者的水平,如何判断和取舍这些回覆?
通常我们寻求这类学习之道(这是对自己非常重要且关键的问题),不应向陌生人求助,那于事无补。因为陌生人的经历你一无所知,为什麽他的学习之道值得你遵循?你既无法判知,就没有必要发问。
为什麽不问你的老师?你的学长?你的同学?那是你看得见摸得到的人,如果你佩服他们的能力,你就可以询问他们的学习经验。因为你知道他们的表现,所以你可以决定你的采信度。
对发问者而言,这样是不是有意义多了?
●三不政策
现代学生有三不政策:不讲话,不回答,不要问我。不论是在大学殿堂,或是公司职训,我往往面对沉默的台下,所以我也学会从来不做田野调查 — 要人举手点数那种。
是的,连举手都有人不愿意。任何会曝露自己任何状态的动作,统统拒绝。
这大概是为什麽大家喜欢上网发问的原因了。呵,没人知道我是谁。
学生心头有惑,不喜欢上课问,喜欢下课问。我完全知道症结所在。因为你心里头挣扎‘这个问题有水准吗?藏拙算了,不要自曝其短’。于是上焉者下课来问,下焉者完全不问。
有的老师回答某些层次不高的问题时,会带着揶揄的表情或口吻。这种老师应该为现代学生的三不政策负点责任。
不愿自曝其短,是正常的人性。那麽,你应该做的是,课前预习。唯有课前预习,或课后复习,才有信心你所问的问题有没有水准,不是吗?我真不知道现在还有多少学生有课前预习的习惯。我的班上有一位,我很欣赏他的积极。
下学期我让大家都带面具上课,保证问题多得不得了 :)
●十倍速学习
只要保持一个原则,你就可以十倍速学习。
课前预习,课后复习。
那麽,上课时你的吸收力,便是别人的十倍。速度虽是一种绝对值(其实宇宙间没有绝对) ,也是一种相对感觉。你的吸收力是别人的十倍,那你不是十倍速学习,是什麽?你每堂课课前花一小时,课后花一小时,便比别人考试前花二十小时还有价值。
但是因为短视,看不见未来,贪玩,所以做不到。哎!
课前预习,课后复习。老调!
古调虽自爱,今人多不弹。
●眼界 .1
从一连串 C++ 学习之道的讨论信中,衍生出 C 和 C++ 的关系、C 和 C++ 的能力比较。
老掉牙的问题!
有人不认为 C++ 比 C 优秀,认为别人大力捧 C++ 是因为没看过那种“C 功力出神入化”之神人,那种“C 语言程度高到让人难以想象”之怪物。
是的,我确信,所有 C++ 能做的事,C 都做得到。"Inside the C++ Object Model" (中译《深度探索 C++ 物件模型》,侯俊杰译, 峰 1998)或是 "The Annotated C++ Reference Manual"(无中译本)书中,把许多 C++ 的奥秘(例如 object model, vptr,vtbl, template, inline...)都曝露出来,读者甚至可以因此写个C++ 编译器(当然,方向有了,你可能需要知道更多实作细节)。
也许,C++ 编译器便是以 C 语言完成的(我不确知)。
那麽,有什麽是 C++ 做得到而 C 做不到的呢?
没有。
大不了写个具有 C++ 编译器功能的 C library 附在 C 程式身上,还有什麽办不到的。
问题是,“可用”不见得“最好”。想想付出的代价。
我接触 C++ 的前数年中,和同事有时候会去听些课程。我的慧根差,连 OOP 都转不过来;我的同事慧根好一些,略可掌握 OOP。至于 OOA/OOD,我们两人都嗤之以鼻,私下窃想,那些腾云驾雾高来高去的老师,自己到底懂不懂呀。
但是我们只敢互相调侃开玩笑,不敢真的公开表达。即使表达,也语多保留,容有回旋。
因为我们知道,OO 这一软体界的大势,这麽多人的研究,这麽多人的赞美,不可能没有原因。我们也知道自己之不悟,怕只因自己的浅薄。
后来我因此对 OO 失去兴趣,改攻 Windows(programming & OS),我的同事则继续深究。他虽不喜欢看书,但 C++/OOP 的书倒是狠K了不少,并以个人卓越的 programming 功夫,在这个领域成为专家。
我自己终于在研究 MFC 的时候,不得不痛下决心好好搞 C++/OOP。所以我是为了运用一套 C++ class library,才开始学 C++。要搞当然就要搞点成绩(并且也因为搞出兴趣),所以才往object model, framework infrastructure, generic paradigm继续搞下去。
我再说一次,“可用”不见得“最好”。
我再说一次,一种技术,一种 paradigm,得到多人(可说是整个业界)的推崇与赞美,不可能没有原因。
眼界未开的时候,要知道自己眼界未开,保持谦逊。
●眼界 .2
十年前,我有了第一部车。于是我开始知道坐在驾驶座上的各种状况。
有一天我和朋友夜至景美访友,坐朋友的机车去。机车大灯坏了,我很担心,要他闪方向灯一路骑去。他斥为无稽,并且说台北路灯那麽亮,我们看得见别人,别人也看得见我们。
但我知道汽车座里的驾驶从反光镜看不见我们。
是看得见,但是要仔细看。如果仔细看反光镜,就无法分神看前方,所以驾驶人看反光镜都是目光一瞥而已。在夜间,只有灯光才能让他瞥到。他不是在看后方有没有物体,他是在看后方有没有灯光。
我很庆幸在冒险夜骑那辆没大灯的机车后,现在还活着。
我的朋友没开过车,所以他不知道这种情况。我开过车,所以我知道。这是我和他在那个时候,就交通工具的驾驶而言,层次上的差异。
我开小客车,所以对于七人座厢型车、九人座厢型车也都能够轻易掌握,立刻上手。但是要我开 10 轮大货卡、两吨半、甚至怪手,我就知道有级次(order)上的障碍需要克服。要我开飞机,那级次的障碍就更高了。
机车的驾驶难度,以及可游距离,和汽车有1个级次的差距。汽车的驾驶难度,以及可游距离,和飞机有n个级次的差距。
所以我们没有办法和井里的青蛙谈广阔的天,和河里的鱼蚌谈汪洋的海,和燕雀谈鸿鹄之志。
但是我们必须有谦逊的心:在级次更高的人面前,我们便是他们眼中的井蛙、河鱼和燕雀。
‘伍’ C指针的真正奥妙是什么
首先数组在内存中是连续存放的,这样就占了内存中整个的一部分,内存中的每一个块被各个进程占用,而系统长时间运行后各个进程块之间难免产生缝隙(windows内存整理功能主要就是把这些分散的空间整合),比如5个分散的5k的空间,如果你使用数组申请一个25k的空间,则这分散的5个5k空间无法使用,系统要在内存中另外开辟一个25k的连续空间,而使用指针则可以利用分散的空间。这样就提高了资源的利用率。其次数组在声明的时候就要确定长度,这样在具体应用的时候往往事先并不知道长度,无论是申请长了造成空间浪费还是申请短了不够用,都在编程上带来不便,而指针可以动态的分配内存。当然c的编译器不能动态的回收内存,如果你编写的是一个服务器级别的程序要长时间运行的话些许的内存泄漏(指针空间的未回收)都会造成系统崩溃,所以使用指针的时候要记得释放内存。当然指针还有很多优点,还是要靠你自己慢慢摸索的。
‘陆’ c语言如何能掌握
教材一般都是先讲解再举例,C语言教材也是如此。我学习C语言的方法是先把每节中的举例背下来几个,当然那时还不太懂那些C程序的意思,找到哪些你不懂,带着问题再去看上面的讲解!这样你不但思考了,而且记忆也比较深刻!最后再模仿你背下来的那些举例自己编写一些类似的程序!!! 下面是我在网上看到的一篇文章希望对你有所帮助:我是学文科出身的,从98年学计算机开始怀着对软件编程的一腔热情,到今天已走过了6年的漫长而又艰难的学习之路,以后的路还很长,但回首过去学习时的艰难和曲折,使我觉得有义务要和刚刚学习的以及想要学习编程技术的后学谈谈我的对学习的看法,不足之处也请其他老鸟们指正与补充。 一、 门槛降低了,我们应该怎么学 随着软件技术的发展,软件编程语言走过了一个由原始社会向工业社会发展的过程,从机器码编程到汇编语言,从汇编语言到各种高级语言;编程思想由面向过程发展到面向对象;同时编程工具也变成了可视化的。编程门槛随着技术和工具的发展变得越来越低,现在用delphi,vb等工具很快就可以做一个数据库系统、媒体播放器等在过去足以傲人的软件。但我要说,不要为你能在几分钟之内做一个软件而沾沾自喜,更不要因为工具的先进就丢掉了程序员的基本功。不管你是在校的大学生,还是自学的爱好者,如果想在程序员这条路上走的更远,一定要学好计算机的专业课。 二、 语言的选择不重要,编程思想才是根本 经常在论坛里看到初学者问,“学什么语言好?什么语言最吃香,最有前途?”,早几年,还有许多比较各种语言和编译器的文章。这种思想也深深的影响了我,使我走了许多弯路。所以我要说,选择什么语言不是最重要的,编程思想才是程序员要学的根本。各种语言发展到今天都有它存在的原因。比如现在各种高级语言都有各自的优点,delphi最让人称道的是他在编写数据库系统方面的便捷,c/c++则在于它的灵活和高效性,vb的优点在于他最方便入门,Java的跨平台性是最好的。对于初学者学什么都好,因为这一阶段学习的重点在于语言和编译器本身,毕竟书上的例子和一个实用的工程相差是在太远。 当你走过了这个阶段,语言已经不是困扰你的重要问题时,那么你选在一个平台吧。(当然我的建议是Windows,一方面是学习的资料比较多,另一方面就是使用的人也多,好的软件是不愁每人使用的。)了解在这个平台编程的方法,就Windows来说就是学习API函数,并逐渐深入到它的内核。 如果你走过了这一阶段,那我告诉你你已经是最初你佩服的那种高至恕T谡飧銎教ㄉ夏芄挥稳杏杏啵 蘼凼强 ⒏髦钟τ萌砑 故强 ⑸钊胂低车南低橙砑 愣蓟岬眯挠κ帧?BR> 三、 编程不是单纯的对技术的追求,软件的灵魂是服务 作为技术人员,往往比较单纯和执着,一心想着怎么学好技术,不要落后于他人。殊不知,自己完全背离了软件的宗旨,软件(包括一切技术)的产生都是为了更好的为人服务。用户是不会在意你是否使用了更先进的技术,他只关心你是否为他提供了完整的解决方案和便捷的服务。所以在写程序前,一定要调查一下,你所写的软件会有多少用户,他们想让你提供那些服务。 以上是整体的思路,在此我以Windows平台上的学习为例,说一说学习之路。 首先以你的个人爱好或工作方向,选择一门语言。一般来说,只需要这几方面的书就够了。一种是语言入门和开发工具使用的书,之后是语言的参考大全,最后一种就是编程指南或开发指南。如学习vb,按顺序应该看《vb开发指南》《vb中文版参考祥解》(清华大学出版社);学习c/c++,则看《C语言程序设计(第二版)》(谭诰强)或《C++程序设计》(钱能),《Visual C++ 技术内幕(第4版)》(潘爱民), 然后看些计算机专业课程和深入Windows编程的书。如:《编码的奥秘》(Charles Petzold),《数据结构》(严蔚敏 吴伟民),《编译原理和技术》,《Windows程序设计》(Charles Petzold),《深入浅出MFC(第2版)》(侯捷),《Win32多线程程序设计》(侯捷),《Windows核心编程》(jeffrey Richter)。 最后就是些深入系统内核源码和设计模式方面的书。如:《莱昂氏UNIX源代码分析》(John Lions 着,尤晋元 译),《STL源码剖析》(侯捷),《计算机程序设计艺术》(苏运霖 译),《设计模式》( Erich Gamma 等着,李英军等 译)。 以上书籍为方便学习,都是按顺序排列的。 罗罗嗦嗦了许多,不知道对你有多少帮助,但我知道希望有更多的向我一样在这条路上摸索的同志能少走些弯路。
‘柒’ 发现了C语言中printf参数的几个秘密
我们经常看到prinf("%+3f",xx)
但是不知道左边的参数的具体含义,我今天就来说下吧。
%[flags][width][.prec][F|N|h|l][type]
1.flags.
— 左对齐。
+ 右对齐。
空格 正数输出代替+,负数减号。
2.
width:
多少个字符的空格宽度。
3.prec
精度,就是指精确到小数点后几位。
4.[F|N|h|l]
f-远指针存放的地址。
n-近指针存放的地址
h-短整型数据的值。
l-长整形数据值。
5.
type用来格式转换。
‘捌’ 初一学习C语言很吃力,各种名词不懂,需要坚持吗
像你初一时间很富裕的,你说初三的话没时间学这个还是正常的,初一初二还是有很多时间来学的,就像我在高一高二时候学C语言的,高三时候几本上也没什么 时间来整这个东西了
我学的时候是这样的,先弄了本书, 然后网上找了点教程,首先从输入输出学起,因为所有书吧,开头一般都是先讲C语言的历史之类的,对于一个不懂C的人来说简直是越看越没意思,然后就是数据类型和表达式,这里不建议开始就从它学起,因为你跟本开始就不懂C语言是干嘛的,特别你初一的,估计你也不知道计算机内部处理数据都怎么分类的。所以看的是一头务水,还记不住,从这开始纯是靠背才能记住的,因为你这块没法实践。也就没法练熟
所以我建议从printf 和scanf开始,首先以简单的加减法计算题入手, 然后学学条件结构和循环结构。这三种控制结构学完了以后,你对编程有了一定了解了,开始学数据类型和表达式吧。这回不难了,也能看懂了,也能简单的就记住了。
接下来是数组 函数 认真看书就可以了,最难的到了指针这里,你得先理解指针是什么东西,它能有哪些特殊的用途,指针自己不是很难,但指针与数组和函数再就是后边的结构体连系在一起的时候就复杂了许多。总的来说也是靠自己看书,并且多上机写程序,上机是最好的办法学C语言,遇到什么不对的地方,细心调试一下。 提示你一下,想学好指针这里,特别是对指针的工作方式有个全面的了解,建议以后学学汇编语言,这样你才能真正理解指针的奥秘。
加油吧,初一学这个也不是难事,我见过小学开始学VB的,到了高中就已经成一个牛人的了。现在我上大一,他上高二,那小子可以用VB写程序来赚钱了。
‘玖’ c语言奥妙……
运行结果:
37之后换行
希望能够帮到您。