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