开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 4811|回复: 3
收起左侧

[原创视频分享] 原创小布丁C语言完全自学讲义

[复制链接]
发表于 2018-10-28 22:13:34 | 显示全部楼层 |阅读模式   江苏省苏州市
本帖最后由 小布丁在线 于 2018-10-28 23:13 编辑

C语言讲义-第一篇

      既然是讲义,也就没必要搞的像书一样要有前言,但是“前话”是一定要有的,也就是在看本讲义之前需要了解的一些东西,必须的废话是必要的,但是绝对都是些有用的话。
      六年前我曾经在网上写过一本关于C语言的小讲义,过去那本讲义的内容较少,难度也比较浅,主要是对完全的初学者或者自学者准备的一份入门的小讲义。后因为工作、生活等等原因没有能再继续更新下去。一转眼已经过了六年之久,也是在酝酿了这六年之后,我决定重新编写这份讲义,这份讲义虽然和以前那份讲义有一定相似之处,但是无论是从内容还是质量上都比过去有很多的不同,风格上也有很大的差异,也算是一种尝试,希望大家可以多多的给出意见,不断的完善本讲义。
我从整整10年前开始接触编程这个行业(如果你是纯初学者,那么你可以不用懂编程是什么,只要知道这是一门技术就可以),10年前到今天全部所学的内容,绝大多数均来是通过自学或者工作实践的方式得来的。这些年在工作和学习的过程中,也会经常碰到一些新鲜的东西驱使自己不断的学习,然而在这个过程中却发现了一个很重要的问题。每当我想去学习一个新鲜技术的时候,理所当然的会选择去看看书或者找找相关的视频了解一下,但是经常在找到一些书或者视频看了一会之后会有这么一种感觉:“哇,这本书/视频写的好专业,但是我看不懂”。
每当这时候就会怀疑人生,不是开玩笑,是真的怀疑人生,瞬间在脑海里就会蹦出几种我看不懂的原因:
      (1).基础不够:是不是我基础不够看不懂呢?
      (2).不够聪明:是不是我智商不够才会看不懂的?
当有了这两种想法之后,对自己的自信心就会有很大的打击:“哎,算了,我不适合干这一行”,我想很多人都会这么想。需要承认的是,有些专业性很强的学科,比如现在让我去拿一本空气动力学的书,杀了我也看不懂,因为我没有这方面的基础。可是编程不是这样一门专业,相比较来说,编程是属于入门相对容易的学科,但是入门之后想学好可很不容易。而且在当今这个五谷丰盈的、医学已经比较发达的今天,真的是智商欠缺的有几个人呢,其实大家都一样,爱因斯坦无非也就是大脑皮层比我们更厚一点而已。而至于你到底适不适合干这一行,我确实认为每个人都有适合自己的位置,有人适合学音乐,有人适合学体育,每个人都有自己喜欢的、擅长的东西。但是问题来了,又有多少人在接触一门新东西的时候是被以上两条吓跑的呢?
     归根结底,多年的学习经历让我总结出来一条:很多教材都过于偏重这门学科的专业性,而忽略了这门学科的可学习性,教材没有指向性。举个例子来说,我们在上学的第一天,也就是小学一年级开学的数学课上,应该开始学习加法了。最简单的,老师要教给我们加法是什么,1+1是什么。然而正在教授我们加法的时候老师突然蹦出了一句:“1+1和1*2结果是一样的,但*这个符号是乘法的符号,是我们以后要学的。” 对于刚上小学第一天的初学者来说,能理解加法就已经不错了,为什么要在这时候说一句乘法呢?既然是以后要学的,为什么现在说呢?这乘法是不是我也要去了解一下?”1+1和1*2结果是一样的”,作为现在的我们当然知道这句话没啥毛病,那是因为我们已经学过了,可对初学者来说有多难。
     我看过的很多教材都有这个问题,在不该出现的地方就偏偏出现了用不到的东西,左右了我们学习的视线。想去买书或者找视频学习的都是因为对这一门不了解或者不太了解的人,在这个时候,教材的指向性就非常重要,学什么的时候就是什么,用不到的东西统统扔掉。对于大多数的学习者来说,这种对于知识的描述方式,只会让学习的人更加糊涂,更加搞不清楚概念。就像刚才提到的学习加法的时候,就好好的传授给学生加法的概念就够了,这时候出现乘法的内容就是不合适的,当然不排除某些超越我们这种平凡人的天才可以秒懂,但是毕竟平凡人是多的。其实对于小学生第一天的数学课来说,学的就是加法,安排的课程也是要传授加法,那么无论对于教授课程的老师、还是台下的学生来说,学懂加法就足够了。

     总结出来一句话,一个优秀的教材应该是要充分为读者考虑的,而不是用来炫技的,虽然专业性还是要有的。但是一定要记住的是无论是书还是视频还是讲义,都是面向读者的,不是自己看看,自我感觉挺好就行的。基于以上所说,本讲义秉承这个原则,充分的为初学者考虑,用不到的东西不讲,那是完全没有意义的。而且为了不让很多专业名词给我们过多的“专业”的心理暗示,本讲义将不设置任何的章节,将从一个个的小生活的例子逐渐的引领大家进入到需要学习的内容中来。
好了,废话就这么多,虽然以上有广告的嫌疑,但是看广告不如看疗效,接下来就进入正题。
首先,引入正题的话题叫做“沟通”,沟通是我们日常生活中一样必不可少的事,每个人也都有沟通的诉求,无论通过何种方式进行。     打电话、发微信、见面时的一个眼神等等都是在进行沟通。而对于沟通来说,很重要的一个基础就是语言,我们打电话时说的话,发微信时打的字这些都属于文字语言,人类的眼神、动作都可以视为肢体语言。 不仅仅是人类,对于其他动物来说也是一样的,海豚发出的声音,老虎狮子留下的气味都属于动物彼此之间沟通的语言。所以说语言是沟通的基础一点也不为过。

     现如今,中国的网民已经达到了数亿人之多,计算机这种东西已经深入到了我们每个人的生活当中,我们平常所有的台式机电脑、笔记本电脑、手机、平板电脑都是一台计算机。可冷静下来思考一下,计算机是什么呢?其实,计算机的本质就是一台电子机器而已,既然是机器,就需要人为的给这个机器设计出一些功能出来,这个机器才有作用。就像是现在无论电脑上还是手机上都存在各种各样的美颜软件大家应该都不陌生,虽然这些东西对于男生来说意义不大,但是也都知道各种各样的美颜功能,比如让皮肤变白、让眼睛变大等等功能。可是,想要让电脑、手机能有这些功能,必须得让他们学会该怎么样去做才能让皮肤变白、让眼睛变大,计算机本身是不会这些东西的。
于是为了能让计算机(电脑、手机均可以看做一台计算机)听话,人类发明了一种语言,叫做计算机语言,顾名思义是专门和计算机进行沟通的语言,有了这样的语言,指挥计算机去做这做那,计算机就能听得懂了。那有人会问了,为什么不让计算机学习我们人类的语言呢,学个汉语多好,这样不就可以沟通的畅通无阻了么?其实计算机很笨,它学不会,我们人类比较聪明,是高级动物,还是照顾下弱者吧。

     虽然在外卖如此普及、迅捷的今天,吃个饭不是一件难事,但是总不能一直吃外卖。做饭仍然是现代年轻人一个头疼的问题,做饭真的是一件好麻烦的事情。然而有了菜谱之后就好多了,菜谱就是做菜的程序,菜谱上会写的很清楚,如果我们想要做一道菜的时候,你要先准备好什么,然后第一步该怎么做,第二步该怎么做,第三步怎么做...直到最后按照所有步骤完成之后,菜就做好了。
同样的,当我们需要给计算机设计一个功能的时候,也需要用计算机语言给计算机下指令,给计算机描述清楚:你先这么做,接下来这么做,再这么做...最终计算机也会完成你想要的功能,这种为了完成某样功能而使用计算机语言给计算机下达的一系列的指令叫做计算机程序。注意是“一系列的指令”,而不是单一的指令,只是让你去买根葱你就能做完菜谱上的菜了吗,买根葱只是菜谱上的其中一个步骤而已。所以一个计算机程序也往往都是n多条指令组成的。而指令则是使用计算机语言组织起来的。指令要完整要清晰,计算机才能懂,就像是一句话说一半,谁也懂不了。

     至此,我们应该明白,我们说的所谓“编程”到底是什么呢?就是用计算机语言来编写计算机程序,也可以叫做设计计算机程序,简称编程。以前我们都是使用者,别人写好了软件(软件是一整套的计算机程序和数据的集合),我们来使用,现在角色变换了,我们要学习的就是如何编程,是写计算机程序给别人用的。以此为工作的职业也就是所谓的程序员。本讲义的主要内容就是来了解、学习这门名叫C的计算机语言的语法和规则(不要被吓到,和英语语法没有任何关系)。至于这个计算机语言为什么叫做C语言,它就是这么个设定,我小名狗胜子找谁说理去对吧。如果有兴趣可以去查一下C语言的起源,这里就不做过多的陈述了。

     我们可以不用知道C语言为什么叫做C语言,但是一定要先知道C语言是一种什么样的计算机语言,能用C语言做什么。这一点很重要,如果你不知道你面前是一台微波炉,你就不可能知道它可以用来热饭。了解一点C语言对以后的学习很有帮助,在其他教材当中当介绍到C语言的特点的时候往往都会给你摆出一大堆的特点,这特性那特性的,现在介绍C语言的特性还远远太早,我希望的是当你看完本讲义的时候,你能自己说出C语言有什么特性。
前面介绍了关于计算机语言的基本的概念,简单理解,计算机语言就是和计算机进行沟通的语言,虽然广义上来说是和计算机进行沟通,但其实是和计算机里的CPU进行沟通。CPU这个东西我想大家都不陌生,CPU是中央处理器的缩写,是计算机里的一个核心组成部件。即使不知道CPU到底是个什么东西,但我想凡是义务教育过来的同学应该或多或少的都应该听说过这么个名词。简单的说,我们用计算机语言编写的计算机程序就是让CPU来运行的,更简单的说,用计算机语言给计算机下指令也就是给CPU下指令。
     CPU能“听得懂”的语言只有一个,是只有一个,叫做机器语言。机器语言是由0和1这两个数字构成的,有且只有这两个数构成,比如一条机器语言的指令可能会是这个样子的:101010111101011。然而我们现在先来看一下C语言长啥样
1.png
       C语言就长这个样子,你完全不需要搞清楚这段代码是什么意思,只用你眉毛下面的两颗大眼睛好好看看这段代码是由什么元素构成的。没错,是由英文字母、数字和一些符号组成的,看起来不太像只有0和1是吧。没毛病,C语言就是由一些英文字母和一些符号组成的语言,不过也不用担心,计算机发源于美国,所以C语言以英语作为母语一点也不奇怪,但是并不需要你英语多好,降低点标准的话...键盘上的字符能分得清楚就可以了(能分得清26个字母、0-9这十个数字再加上键盘上有的符号),这个要求不高吧
      
     然而刚才提到过,计算机只能识别由0和1组成的机器语言,不是C语言这个样子的。其实在当用C语言写完一段程序之后,在交给CPU运行之前,还有一个东西专门负责把C语言翻译成机器语言,然后CPU就可以执行了。这个东西叫做编译器,编译器是专门负责将C语言翻译成机器语言的。看到这又会有人问:为啥不直接学习机器语言呢,岂不省事,何必再找个翻译来呢。原因主要有两个:
       (1).机器语言的代码不好维护、不容易记忆、不易发现错误。因为只有0和1,所以无论这两个数字怎么组合去写,都很难记忆。而且你能发现11101010111001110和11101010101001110有什么不一样吗?编程的过程中,代码编写错误是经常发生的事情,要都是机器语言编写的,有点错误怎么找,这里还只是很短的两个机器语言的指令,如果多了呢?
       (2).不同的CPU是有不同的机器语言的,为什么呢?就像不同品牌的电视机的遥控器不能通用一样,每个电视机厂家在生产电视的时候都会规定了,哪个信号是关机,哪个信号是开机,不同的电视机厂家有不同的规定,这个都是电视机厂家自己来设计的。CPU能理解的是机器语言,用机器语言编写的指令叫做机器指令。每个CPU能处理的或者说能接受的指令是固定且有限的,每个CPU在出厂的时候都会做一系列的规定,这个规定里写明了这个CPU可以理解、执行的所有机器指令,这个规定叫做指令集,可以理解为CPU的说明书。       指令集里写的很清楚,比如英特尔出厂的CPU这样规定: 1011代表着执行加法操作,1010代表着执行减法操作。而另外一家比如高通(安卓手机常见的CPU生产厂家)出厂的CPU可能就是这样规定的:1100是加法操作,1110是减法操作,这就意味着不同的CPU有不同的指令集。 简单点来说,就是不同的CPU之间能听得懂的指令是不同的。 这也就是为什么电脑上的软件(软件为计算机程序和数据的集合)和手机上的软件不能通用的原因,因为电脑一般采用英特尔品牌的CPU,而手机一般采用高通品牌的CPU,两者之间的指令集不同,能听懂的机器语言自然也就不同,所以不可以通用,但是可以有一样的功能。就像是一个中国人和俄罗斯人在一起,中国人说的话中国人自己能懂,俄罗斯人说的话俄罗斯人能懂,但是中国人说的话俄罗斯人不懂,反过来也是一样,但是无论是中国人还是俄罗斯人都可以用自己的语言表达出同样的意思(就像是电脑上的QQ和手机上的QQ,功能都一样,但是电脑上的QQ放在手机里就啥也不是,反过来亦然)。 这就导致了学习机器语言的难度大大增加,如果用机器语言来编写一个QQ这样的软件,不仅仅要学习英特尔CPU的指令集,还要学习高通CPU的指令集,才能写出QQ的电脑客户端和手机客户端。 所以机器语言为什么叫机器语言,因为机器语言是面向机器这一层面的(也就是CPU),是面向具体的CPU的,不同的CPU有着不同的机器语言,所以机器语言也被称作低级语言,所谓低级是以最接近CPU这一层面的语言来说的,人类的思维才是高级的,机器没脑子的,所以很低级,毕竟CPU直接能识别、执行的语言只有0和1 组成的机器语言。
      
     因为第一个原因的存在,计算机科学家们创造了一种新的计算机语言,叫做汇编语言。所谓汇编语言就是给复杂的机器指令起一个名字,比如用ADD来代替1011这个指令作为加法操作,ADD在英语当中就是加法的意思,这样就会让程序员编写代码的需要记忆的东西以及工作量都减少了许多,但是用汇编语言写出的代码也仍然需要翻译才可以被CPU执行的。 虽然这个办法解决了第一个问题,但是仍然没有解决第二个问题,因为汇编语言只是给机器语言的指令起了个名字而已,其本质还是面向CPU的,也就说汇编语言也是低级语言,不同的CPU也有不同的汇编语言。 于是科学家们在汇编语言的基础之上发明了高级计算机语言。所谓的高级是以人这一层面来说的,毕竟人类是高级的,这种高级计算机语言是用更加接近人类的思维和认知创造出来的计算机语言,就像是C语言用英文字母和数字以及一些符号构成的,这些都是我们人类很方便去记忆去理解的东西,同时高级计算机语言还解决了不同CPU之间机器语言不同的问题,这样我们只需要学会一门高级计算机语言就可以了,剩下的问题交给编译器。就好像我去法国旅游,我带个懂法语的翻译就可以,我去英国,带个懂英语的翻译就可以,我只说中文也就可以走遍全世界了。C语言写的计算机程序,无论在什么机器上运行,只需要安装好对应的编译器就可以运行了。C语言就是一门高级计算机语言,但是相比较其他高级计算机语言来说又有一点特殊,这个算是留个悬念,现在不需要关心C语言的特殊之处。
       好了,这应该是本讲义里纯粹的文字出现最多的地方了,确实有一些概念是需要在正式动手编程之前知道的。      我曾经遇到过一名学生,在学了几个月之后他问了我一个问题,这个问题就像是一个地道的中国人问我:“我打车去飞机场”和“我去飞机场打车”有什么不同吗?       我们都知道,这两句话里所包含的字虽然都是一样的,但是意义完全不同。所以透彻的了解C语言到底是什么非常重要。
      
     综上所说,本讲义的内容就是学习C语言的语法和使用规则,从而可以使用C语言来编写计算机程序。了解了计算机语言、计算机程序、编译器、机器语言等概念再去学习C语言,可以更好的理解以后我们将要做的事情,让编程变得更加轻松自如。
       既然说要和计算机进行对话,我们现在就开始正式的开启和计算机对话的大门。前面提到了,既然计算机语言是和计算机进行沟通的,那么就得有一个沟通的平台。我们平常和别人沟通可以选择打电话、发微信等等,打电话需要打开手机的拨号界面,输入号码之后才可以拨号与对方通话,发微信需要打开微信将要发送的信息输入到文字框内,点击发送对方才能收到你的信息。想用C语言来和计算机沟通,也需要一个专门用来和计算机进行对话的窗口,这个窗口就叫做C语言的集成开发工具,简称为IDE,是专门为了和计算机“对话”准备的一系列工具。
在我们平常使用的Windows操作系统下,我们可以选择使用微软的VS系列、Codeblocks这两款开发工具。在苹果电脑Mac操作系统下,可以选择使用Xcode这款工具来进行学习,在本讲义中代码的示例是在Windows 10系统下、使用codeblocks作为开发工具进行演示的。
由于这些软件的安装过程通过截图展现出来不太方便也不够全面,所以具体的操作方法,可以私信我获取codeblocks和devc++的安装方式。由于正常使用的电脑很少有Linux和Unix系统的,而使用这两种系统的人大多都已经相对比较专业了,在这里就不做介绍了。


发表于 2018-11-19 15:29:10 | 显示全部楼层   江苏省徐州市
天书~~~~~~~~~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
发表于 2018-10-31 01:30:39 高大上手机用户 | 显示全部楼层   广西壮族自治区南宁市
非常感谢,这篇前话不讲C语言的历史是太好了,讲编程语言的发展就够了,期待后续的讲义
回复 支持 反对

使用道具 举报

结帖率:100% (8/8)
发表于 2018-10-29 09:05:37 | 显示全部楼层   河南省周口市
不明XX
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表