基础-C语言及C++基础知识.pdf





《基础-C语言及C++基础知识.pdf》由会员分享,可在线阅读,更多相关《基础-C语言及C++基础知识.pdf(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C语言及C+基础知识编程及C/C+初 学 者 FAQ本文原为本人在论坛所发若干帖,意在集中解决新手学习C/C+语言时将遭遇到的各类问题,网友反馈情况良好,集合修订后作为个人作品贴于此处。本贴主要分析概念原理和解决方案,不讨论具体程序语法,立足于让初学者能运行起第一个程序。其他事宜如解释入门语法等本文基本不涉及。本文依照创作公用约定(著名-非派生作品-非商业用途)发布。作 者(即本人)无更新计划,请勿与作者联系。作者:碧蓝右耳。联系方式:BlueA版本号:3.0完成日期:2008-03-10目 录一、开始之前FAQ 那是什么为何有这篇FAQ编程为何物如果这就是编程,那语言是怎么回事我为啥要学编程
2、听说编程很难,是真的么,那我能学会吗?我真的可以么还一定要有台电脑么好吧你说服我了,我打算开始,该怎么做那么,下一步怎么干我碰到问题了,谁能帮我我能看懂别人的程序,但自己做就觉得无从下手,怎么会这样我英语XX不会,咋办关于态度、情绪和其他二、选择C/C+语言C 语言是什么C+语言是什么为何要选择纯CC/C+语言和其他语言有什么关系我为什么要学C/C+语言Python语言作者的另一推荐三、一些重要的概念-计算机原理编程的对象是什么-计算机程序到底是怎么回事-是操作而不是结果为什么要编程-因为机器的特点你们老是提到编译器,那是什么-代码翻译机给我解释卜 啥叫编程语言-各路江湖武功语言之后要确定的事
3、情-操作系统和平台编程时什么东西最重要-源代码我的程序和一般的程序不一样,什么原因-控制台和图形界面的差异好像不能建立一个单独的文件来编译-工程和项目的问题难道一切都要从头干起-函数、API、类、控件、开发包与软件复用关于图形库的补充说明可选择的图形库四、教材、习题和示例能推荐几本好书么首先是纯C 的教材然后是C+的教材接下来是Windows编程Unix/Linux/BSD 系统数据结构和算法各种图形以及其它库软件工程思想找书的诀窍光看书似乎不解决问题,难道要做题0 J是什么哪里有可用的0J哪里有代码示例可看五、选择编译器有哪些编译器可用还有些可以配合编译器的开发环境他们在哪里怎么安装他们-特
4、别解释MingW版 GCC的安装六、TC下常见的问题解决用 TC创建第一个程序TC 的库路径设置TC 下的图形编程设置我的程序在TC下可以编译,在 VC/GCC下为什么出错七、其它编译器问题用 VC创建程序用 DEV-CPP创建程序用 MingW创建程序用 Lcc-win32创建程序八、结束语程序员成长的六个阶段=分割线=一、开始之前FAQ 那是什么FAQ就 是 Frequently Asked Questions,也就是常见问题解答。这玩意儿通常是一些所谓的高手或者前辈为了节省回答新手的大量简单重复问题所耗费的时间精力而采用的一种偷懒手法。一旦完成,高手只要一努嘴,“看 FAQ去”就万事大吉
5、了。实在是居家旅行杀人越货之必备良药,因此在各大论坛已经有大泛滥的趋势。本篇FAQ为学习C 语言、C+语言的大量新手编写,重点是如何运行起第个程序,不涉及语法、数据结构和算法等内容。如果你已经通过计算机二级或水平相似的考试,甚至你是职业选手或是大师级的人物,就不必再往下看了。同时,本 FAQ只讨论C/C+语言,其他语言如Java VB python等均不涉及,虽然阅读本文前四章节也会对学习这些语言有所帮助,但深入学习还是请阅读这些语言的专门教材。为何有这篇FAQ本文是为那些对编程新手所准备的,如果你自认已经不是新手,那么请离开把时间放到更有用的地方。如果你是那种对编程一无所知,迫切想知道他是怎
6、么回事,或者仅仅编写了几个小程序,却遇到一大堆问题,而在论坛或是其它地方又得不到帮助,但心中又有雄心壮志想要做绝世高手顶尖黑客或者想要以程序为生的入门级新人,那么你恰好是本文的服务对象,请详细阅读以下的文字,我想应该会对你有所帮助。而且请你了解,本文的这部分内容所要介绍的是那些普遍性的概念,与具体任何一种语言都无关。正如我们所知,市场上充斥着无数的编程教材,同时可以肯定的是,目前已经面世的教材(包括正式出版物和网络上的教程),穷一人一生之力是看不完的。在这些书中,有大量的垃圾书,大量的平庸之作,还有少量的精品。而即使是这少量的精品,也不可能看全。既然书这么多,我为什么那么闲还要来写一篇呢,有这
7、时间,我还能多画几张效果图挣俩钱花呢。情况是这样的,市场上的书虽多,但其中几乎没有几本是面向初学者的。我所指的初学者,是指从来没有编写过程序,甚至是连编程二字都没有听说过的人。这样的书是如此之少,以至于要去购买或是阅读到他们都是很困难的事。在我个人的学习生涯中我认识到很多编程教材有个糟糕的倾向。他们要么是一下子告诉你所有的事,好像你能在千分之一秒中突然从菜鸟变成好手,要么就是认为有些事你早就应该知道,拿你当熟手看,导致你有一种赤身裸体被抛弃于猛兽横行的非洲旷野的感觉。你还没有穿上衣服走出帐篷,连刀子都没有摸过,他们就试图告诉你草原上有多少可以捕获的猎物以及他们的位置,告诉你几百种武器和毒药的使
8、用秘籍,告诉你两百条以上的陷阱安放要领。你没有经过丝毫的练习,甚至还没有杀死过一只刚出壳的小鸡,他们就要你独自去捕猎数十头饥饿的狮子。这种看似荒谬的情况从过去持续到今天,至今仍然存在。这并不是说那些写教材的朋友都是傻瓜,这件事当然有它的原因,因为他们面向的读者是程序员。程序员就象是猎人,他们更换语言就像猎人更换武器一样,不管他使用哪一种武器,捕猎的基本原理没有变化,变化的只是武器的使用方法。对一个成熟的猎人而言,再强调基本原理就没有必要,所以教材们对人所共知的一些事也就避而不提。一个成熟的猎人,她心中的捕猎知识是浑然一体的,武器的选择,野兽的习性,陷阱的安放,怎样做和为什么这样做都结合在一起,
9、没有哪一部分可以独立出来,一部分一部分的教给别人是极度困难的的,要教就只能混杂在一起。程序员的情况类似,知识体系是完整系统的,谈到一个问题总会牵扯到另一个,最后的结果就是别人总是希望并想当然的认为你可以一口吃成一个胖子。这样的后果就是,一些很明显的事情,老手认为那是你应该知道的因而不予回答,而新人却发现没有任何地方可以找到解释,也不知道该到哪里去找答案。(不懂得如何找答案也是新人的特点之一)。有一个典型例子与这种情况很类似,鼠标,我们已经习以为常并且很熟练地使用着,但是很多第一次接触电脑的人那却是完全摸不着头脑的东西。在各地的论坛里,总有大量的新人提出诸如“学C+好还是VC,VC+好?”“C+
10、也可以编窗口程序吗?”这样的毫无常识的问题。我 的FAQ就是为了来一次性解决这种问题的。编程为何物编程就是编制程序。程序是让计算机发挥功能的命令的集合。程序有两种形式,让计算机真正执行的是电脉冲形式,叫机器码,程序员编制的通常是文本形式,叫源代码。使用一个称为编译器的工具,可以把源代码转变为机器码。而编程就是产生那些源代码的工作。这个工作类似于谱曲、编菜谱、写工作手册。我们知道,谱曲并不是一蹴而就的,往往需要反复的修改,直到最后满意为止,编程也是一样,接近工作时间的30%是完成粗制成品,剩下的70%时间是在不断的修改,这是相当枯燥和乏味的。有志于投身编程的朋友们,不要忘记这一点。如果这就是编程
11、,那语言是怎么回事文本形式的源代码,其实有些规定的。就像我们和老美用英语交流。首先你得说英文单词,不能冒法语词汇日文假名出来,其次你得按语法讲话,不能一个个单词往外蹦。程序也同样有词汇和语法上的一些规定,这些规定就构成一门语言。显然任何一门编程语言都是人造语言。人造的东西,因发明人的想法而不同,就形成了不同的语言。我为啥要学编程这个问题有两层意思。首先是编程为啥要学,很简单,因为这玩意不是生来就会,就像木匠活一样属于一门手艺,自然要通过学习才能掌握。你怎么也得花上几年来学英语不是。第二层涵义才是重点,为啥我要学它。答案因人而异。有人为了上学有人为了考试,有人为了求职挣钱,还有人就是吃饱撑没事做
12、自虐。什么为了开发智力啊证明自己啊寻找成就感啊,那都属于自虐,在下便属于自虐一族。没啥说的,确定你的目的,也许只是好奇想接触下啥是编程,也许是有课业的任务,也许是想以后靠他找工作,或者是羡慕那些黑客。总之,想继续深入的,往下看,没信心的趁早走人,外面帅哥美女多的是,不要浪费大好时光青春年华在一台破机器上,ok?听说编程很难,是真的么,那我能学会吗?你觉得说中文难么?你能流利的说普通话是不是。但是你知道么,汉语是世界上最难学习掌握的语言。稍后我会介绍计算机的特征,你就会明白知道基本上编程这件事的难度等价于指挥IQ=3个数相加都必须转化成持续的两个数相加I,就是先把第一个第二个加起来得到结果之后,
13、才能和第三个相加,照此重复求得所有的和。这忖目前的科技无法改变的铁律。这个时候我要请你记住一个重要的思想:编程中任何问题都要分解到足够小,小到机器可以一次解决的程度。回到刚才的那个题目:寻 找N个正整数中的最大值。我们知道直接解决是不可能的。而按照刚才讲过的铁律,我们知道直接找到两个数中的最大值是一次可以做到的。怎样从2个扩展到N个呢。这里就是算法的天下了。一种很常见的想法是,完全可以从两个中找出最大值,再让他和接下来的一个比较,这 就 是N=3的情况,再把三个中的最大值和第四个比较,这就解决了 N=4,以此类推,我们似乎找到了通用的算法,是的,找到前N-1个中的最大值,然后与第N个比较。不要
14、怀疑,这个算法方向是正确的。接下来就是把它细化使他能变成代码。你注意到,首先要设法从1增加到N,而且每次前进一步都要做类似的操作。显然用一个循环来实现。每一次循环中,都需要将保留的最大值和当前的这第n个数比较,如果最大值比他大,那就保留,否则就要把最大值替换成新的。这就是条件语句的作用了。写完这个循环之后,还有些小细节,比如这个最大值在于第一个数比较之前应该是多少呢,太大的话,可能会比整个数列的数都大,这就会出问题,常用的做法是,就让他等于第一个数。然后包括读入那N个数,输出这个最大值这些琐碎的细节就属于收尾工作了,没什么可多谈的。当然,即使是这样的小题,也不仅这一种算法。你记不记得有一种叫做
15、单淘汰赛的机制,最后顶点的就是最大值。用在这个地方正合适。不过,如果要把这个淘汰赛算法实现成程序的话,如何实现分组,如何表达这个淘汰过程和取出顶点的值,正是算法描述里要解决的。这个就是排序里很有名的最大堆排序。一旦算法描述齐备,程序编写不过是打字校对的工作。现在你明白本节讨论的情况的实质在哪里了吧,是的,是算法。为什么你可以看懂别人的程序呢,因为他的算法隐含在程序中已经被实现了。就像你读一段高明小说家的风景人物描写,总能在眼前浮现出那幅画面。但轮到自己写,却描绘不出那样的画面。一方面是因为你胸无成竹,不知道怎样找到可实现的算法,另一方面是即使你找到了算法,也是爱你在心口难开,也不清楚怎样去表达
16、他。算法总是从问题出发,通过一定的模式,逐渐细化再细化,直到可以直接转成程序。新手很难一下子领会怎样的算法是可以实现的。但好在新手接触的问题不是很难,算法通常很清楚明白,所以重点先要解决后面那个表达的问题。这就是为什么我建议各位默写教材上的例题程序的原因。很显然对于那些例题,只要你用心看过就会领会他的算法。那么,你再默写一遍,即使和他的原程序样子不一样,也总算是把这个算法表达出来了。反复这样练习,这个表达问题不就解决了么。而且在这个过程中,至少你学到了一个算法。基于此原则,任何你遇到的可以看懂的例程,我都建议你默写它。尤其是例如等级考试的题库的标准答案那样的东西,以及开源的精品代码。我英语XX
17、不行,咋办无法回避的事实,今日世界中的信息技术,绝大部分是欧美人的发明,更明白地说,是美国人的功劳。顺理成章的,各种资料文档技术手册,尤其是记载最新技术的,都是用美国通用语也就是英语撰写的。可能在其他领域不懂英语没有什么问题,但 在IT业,不懂英语就是无法掌握最先进的技术,基本等于没有出头之日。话说回来,不是说你一定要有个托福雅思的高分才能去学编程的。就编程本身而言。他所需要的英语水平不过是死记硬背三五个单词而己。你在看好莱坦大片时.,一部片子下来总能记住主角和主要配角的名字吧,C 语言全部关键字一共32个,而其中有6 到 7 个的使用率超过78%。这样你还有什么可担心的。但是,要想成为高手,
18、阅读大量的相关资料是免不了的,这个时候,英语就显出它的重要性了。刚才谈过算法。前辈们已经总结出很多算法和产生算法的方法,我们可以直接学习。如果你积极进取,总有一天,你会发现有需要自己开创新的算法的时候。这个时候,数学功底会帮你很大的忙。也许只是数学工具在起作用,但更有可能是你的大脑受过的数学思想训练在帮助你。总之,为了前途着想,提高数学素养是没错的。这不是说多背数学公式和多做数学题,而是指一种数学的思维方式。看不懂英语,那编程还有什么前途。数学不行,成为大师的希望不大了。不能上网,你完蛋一半。没有机器,难道要我买给你。指法不行,练去。记得没人会同情你,我亲爱的兄弟。不会就去学吧,没有什么是不可
19、跨越的障碍。请记住这段话:在信息时代,任何主观障碍都不存在。如果你要研发什么新技术的话,只需要一台便宜的二手电脑、一 张 linux光盘和一个上网账号,再加上为之献身的决心,你就可以达到想要的任何编程深度。这话是一位大牛说的,那是谁,回想一下提问的智慧,然后自己上线查。关于态度、情绪和其他和技术无关,关于学习态度和方法的一些提示。循序渐进学编程http:/ 一个程序员给初学编程人的建议http:/ 语言学习经验-请不要做浮躁的人http:/ 成为软件高手的几个忌讳http:/ D=155&PN=8 程序员四大忌http:/ D=174&PN=8二、选 择 C/C+语言C 语言是什么C 语言是一
20、种计算机编程语言。语言是什么,请查阅上面的内容。1970年前后,AT&T贝尔实验室的Ken Thompson根 据 BCPL语言设计出较先进的并取名 为 B 的语言,之后Dennis Ritchie在此基础上设计发明了 C 语言,并首次在UNIX操作系统的 DEC PDP-11计算机上使用。随后,C 语言和UNIX操作系统一起,攻占了计算机世界的大片领地。在发展的过程中,出现了许多略有差别的C 语言版本。1989年,美国国家标准研究所(ANSI)为 C 语言制定了一套ANSI标准,成为现行的C 语言标准,就是所谓的C89。当然经过10年的发展,在 C89的基础上又颁布了 C99标准。现在流行的
21、大部分编译器完全支持C89,部分编译器完全支持C99o对于初学者来说,掌握经典的C89即可。C+语旨是什么C+和 C 的关系非比寻常。1979年,当 Bjarne Stroustrup在新泽西州的Murray Hill实验室工作时,发明了 C+。Stroustrup最初把这种新语言称为“带类的C”,1983年,改名为C+。C+通过增加面向对象的特性扩充了 C。因为C+产生在C 的基础之上,因此它包括了C 所有的特征、属性和优点。在这个意义匕 你可以认为C+是 C 语言的进化,这个进化的原因是复杂性(complexity)。一旦一个程序的代码超过25 000100 000行,就很难从总体上把握它
22、的复杂性了。C+突破了这个限制,帮助程序员理解并且管理更大的程序。当然今天的C+己经不只是C 的进化那么简单,他还包含了其它很多很多的新内容,它是如此的复杂以至于你要花上几倍于学习C 的时间来学习他。但由于他和C 的历史渊源,所有支持C+的编译器都能支持C。因此他俩也就被合称为C/C+语言。C+对 于 C 的进化着重体现在规模上,几乎C+的所有新特性,都是为大规模编程服务的。如果说C 语言编程是单兵小组作战的话,C+编程就是集团军运动。为何要选择纯C在某些时候,我们不得不只使用C 语言而不是C+,这种情况称为纯C 编程。最常见是因为以下两个原因:C+的语法很复杂,所 以 C+的编译器很难制作。
23、因此在很多平台上没有现成的C+编译器,而 C 编译器因为足够简单,几乎到处都有,这时就只能用纯C。实际上最初的C+编译器也是用C 语言来实现的。仍然是因为C+很复杂,为了实现很多特性,做出的程序往往比用C 做的类似功能程序体积要大很多,在程序的空间和时间要求比较高的时候,也只好选择纯C。上面两种情况经常共同出现,实例之一就是嵌入式设备。各种单片机往往没有足够的内存和处理器能力,在上面实现C+编译器也比较困难,因此往往是纯C 开发,而非C+。C/C+语言和其他语言有什么关系ja va 只要用句话就可以概括,它是一种简化了的跨平台的C+语言。掌握了 C+的人,学习java几乎是轻而易举。basic
24、 pascal delphi(其实是objectPascal)perl python还有其他诸如此类的语言,或者与c处于同一档次,或者与C+处于一个水平,学过C/C+之后,再去学习他们是很容易的事。作者个人比较偏爱和看好python,它的很多特性使他极有前途。lisp Scheme是 和 C 的思维方式完全不同的一类,被称为函数式编程语言,在人工智能等领域有奇妙的应用。有兴趣的朋友可以去领略,如果你要成为一个大师,至少要学习其中的一种。我为什么要学C/C+语言考试的人不用讨论这个问题,他们没有选择。如果我们有选择,为什么我们学习C 语言而不是别的。首先因为C 本身是非常优秀的,他是世界上最伟大
25、的编程语言之一。许多人认为C 语言的产生标志着现代计算机语言时代的开始。它成功地综合处理了长期困扰早-期语言的矛盾属性。c 语言是功能强大、高效的结构化语言,简单易学,而且它还包括一个无形的方面:它是程序员自己的语言。它的设计、实现、开发由真正的从事编程工作的程序员来完成,反映了现实编程工作的方法。它的特性经由实际运用该语言的人们不断去提炼、测试、思考、再思考,使得c 语言成为程序员们喜欢使用的语言。在编程规模越来越大的今天,用 C 往往会遭遇协作型的问题,而 C+在保持了 C 的高效的同时,实现了大规模协作的可能,因而成为了真正工业化的语言。C/C+的优秀,使得他是主流的,在 20世纪70年
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基础 语言 C+ 基础知识

限制150内