蒟蒻C语言入门篇(一)

时光匆匆,忽然发觉接触计算机语言时间已经不短了,一直觉得应该写点什么,但也因为各种原因一直在拖,突然醒悟时才感觉很多东西已经记不太清,于是写下这系列文章,作为对于自己复习路程的记录,同时更希望能对初学计算机语言的友友们有用(凌晨写文章思绪万千)

本人十足的大蒟蒻,讲的不对的地方恳请各位大佬雅正,文某人感激不尽

下来就开始进入正题了撒 (来听我跟你们吹)


首先便是第一点,先谈谈计算机的起源:

众所周知计算机之父是艾伦・麦席森・图灵,而计算机最初始的目的是为了让其使用超过数学家们人力计算的速度来帮助盟军破译二战德国海军的电报秘密(详见电影:模仿游戏 很值得一看(bushi))而其最初工作的原理来源于一个个继电器的开关,断开的继电器没有了电压,连起来的便有了高电压,这也就构成了计算机最基础的状态:0和1,正是这种最简单的组合,构建了计算机的基石。 这也就是为什么计算机会是二进制,这也就是为什么IP地址是从0到255,ASCII码表会只有256个(2的8次方嘛(什么奇怪的例子)),从此之后无数智慧的火花从中迸发,一步步使其发展至今 。

更多的就不过多赘述了,如果对于计算机的原理到底是什么非常感兴趣,可以去读Charles Petzold(一位超级大佬)写的一本名叫编码的书,里面对于计算机组成的原理进行了非常风趣的介绍(强烈推荐)


第二个问题:为什么是计算机语言:

计算机语言顾名思义,就是给计算机专门用的语言,我们人与人之间交流有汉语,英语,法语,俄语等等一系列语言,但这些东西对于计算机来讲显然是听不懂的,计算机能收到的是什么?无非就是开合开关带来的高低电压,也就是0 1两种信号。这也就是计算机语言的基础,也是计算机可以秒懂的信号,但是计算机可以秒懂0 1含义,人不能因为我想要计算机进行什么操作而敲一段01序列进去吧,那未免也太难了,跟一个正常人的思维差距未免有些大,于是乎一群大佬们一拍即合,要开发一种贴切人思维的语言来让计算机执行。但是问题也随之而至,如果一种语言越贴近人类思考和语言方式,那么计算机就越难理解,越需要时间去解析。越贴近计算机的编译方式,那么人就越难看懂(什么意思,举个栗子,我命令计算机现在告诉我我今天会爆零不和我告诉计算机把你的第四第五第十一处开关轮流发射一次高低电压,肯定是后者计算机更容易理解嘛,后者给出的是具体的操作,所以计算机可以立刻执行,而前者计算机需要理解什么是爆零,怎么知道我会不会爆零,得出结论需要把以往的数据都调出来分析一波才能得出结论)因此越接近底层越接近计算机底层的语言运行越快,但越晦涩难懂,局限性大,不完善,被逐渐淘汰掉了,而越接近于人思维的越高级的语言运行速度会变慢,但对于理解编写越友善。计算机语言从底层到高大致可以分为 (机器语言 汇编语言)低级语言(面向过程 面向对象)高级语言 而现在常见的 C C++ python java 都属于高级语言 ,对于不同的高级语言,运用起来各有优缺吧,举个简单的例子,对于高精度数运算c语言代码需要二十多行,而python却只需要一行,省事了许多,但对于运行相同的高精度运算,python赢在了代码量却输在了运算速度。因此对于不同需求选用一门合适的语言很重要。但对于初学者需要做的是,将一门语言尽可能的熟练吃透,以此来熟悉计算机的逻辑,往后若是因为需求要学习其他计算机语言,也会变得十分简单。


第三个问题:什么是算法

算法,简单来说就是描述解决问题的方法,现在对于其最普遍认可的定义是:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示为一个或多个操作。这么说可能有点玄学,为什么有算法举个简单的栗子(高中某年上台举的就是这个例子)如果我有一堆书,我将他们摆放在书架上,然后想从中间找出一本,我该怎么做?乍一看好像没什么,挨个往过看呗,但仔细想想如果这堆书是一千本呢?挨个看就不现实了吧。那么我可以将书名字的首字母按照字典序排个序,这样我就可以直接从中间开始看,超过我找的那本书字母了就往回看,没超过就往后看,直接二分解决,效率可比一本一本找简单多了。但如果我的书是十万本呢?就算是把书字典序排个队然后二分看,也需要好半天了吧。那我可不可以先把书按照类别分开,再将每个类别中的书按照字典序排列好,这样我每次找一本书只需要先找到他的类别,然后从中开始二分翻阅,就能很快地找到我需要的那本书了。但是这样虽然可以让我很方便的找到我想要的书,但是我需要对于给我的这么多书做大量的预处理(将他们分门别类放好),这也需要大量的时间。发现了吗,从某种程度上来说如何将书摆放好然后帮助我快速找到我想要的那本书就是算法,而对哪种算法最适合我现在使用,这就要取决于数据的规模和其中的规律了。而计算机届的前辈们针对于不同问题和数据规模做出了千奇百怪的各种算法,而衡量我这个算法在这里用的好不好,便取决于我为了解决这个问题需要花费多长时间(时间效率)和多少电脑内存(空间效率),我们可以为了提升时间效率而适当牺牲空间效率,也可以为了节省空间而适当牺牲时间效率,至于该如何选择,便需要由实际情况来决定了。

总的来说,算法才是计算机的基石,一个好的算法可以最大程度简化一个复杂的问题。可能很多年过去后,会有更高级的计算机语言被发明去替代现在流行的c c++,但算法不会,他是一代又一代计算机大佬们智慧的结晶,学好了算法是思维方面的提升,所以好好学算法才算是真正抓住了计算机的本质。


第四个问题:我要学C语言我需要准备什么

硬件准备:一个编译器+一些刷题网站 

编译器:

什么是编译器,我写下一段C语言的代码总该需要有地方来运行吧,而我的电脑他又不知道我写的是哪种语言,于是乎便需要编译器来解释给他听,下面推荐两个很香的编译器,二者下载一个就行,当然也阔以都下载(废话文学)

编译器推荐首先便是DEV C++ 萌新首选,懒人必备,居家旅行的不二之选(不是

他最优秀的地方就是不需要配置环境下载插件等等一系列操作,下载下来就能直接使用

Dev-C++ download | SourceForge.net

附上dev下载链接(如果不会安装可以在CSDN中搜索,有大佬教如何安装)

(本人用的小熊猫dev,dev在16年后停止了更新,5.1.1为最后一个版本,但由于dev过于好用,民间有大神自行对其进行了升级,于是乎便有了小熊猫dev) 

其次如果你有追求,可以考虑下载VSC作为你的编译器

 这个编译器是真的很优秀,不仅支持C语言编译,只要你插件给的够python Java VB都不在话下

但是难点就在于你需要自己配置编程环境,对于新手不是十分友好,除此之外非常完美了着实

Visual Studio Code - Code Editing. Redefined

(附上下载链接,这个CSDN也有大佬教你如何配置环境,可以自行搜索使用)

刷题网站:

对于变成来说,本身作为一门技能,自然需要大量的训练,因此自然就有刷题网站,对于其中的部分做了一个罗列

首页 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)(萌新必备,友善至极的网站)

Welcome To PKU JudgeOnline (poj.org)(测评有点慢,其他都很棒)

题目集列表 (pintia.cn)(PTA懂得都懂)

全部动态_牛客网 (nowcoder.com)(很多比赛会在上面举行)

.......贪多嚼不烂,剩下的等你自行去挖掘(狗头保命)

软件准备:

一具健康的身体

编程是个体力活,你需要付出大量的时间和精力在其中,没有一个好身体是抗不住的

一颗强壮的心脏

没有经历过一个bug查了一天都没有查出来的蚌埠住,不觉得很有遗憾嘛

足够的细心和耐心

编程中你主要会遇见两种错误,第一种纯属于手抖或是记忆不清犯的语法错误,如果是存粹的语法用错程序会直接报错,这个还好说,但还有一种可能是手抖敲上去了可以通过编译的错误代码(有些写法是可以通过编译,但他本身却是错误的,例如 if(某个条件);  至于会造成什么后果留给读者后面自己去尝试了)第二种错误属于逻辑错误,逻辑不清,思维存在漏洞,亦或是变量命名混乱,都可能导致程序逻辑出现问题,而这种错误也是非常难查的,你需要回顾自己的思维,或者自己创造数据进行对拍(对拍:自己编写数据或者让系统生成数据,人脑运行自己代码或者用纯粹暴力程序运行,将结果与自己写的程序生成结果来进行比较,从而分析错误)。这无一不需要花费时间和足够的细心才能找出bug。

做好这些准备,你就可以上路了,下一讲以dev为例简单讲讲如何写每个程序员的第一个程序 "hello world"

最后推荐一篇杭电刘春英老师的文章(我还有好多流传的她的表情包)   写给计算机软件工程的大学生,很有感触,可以读读希望能对诸君有用(附上链接)

(17条消息) 杭电。刘春英。老师 写给计算机软件专业的大学生_研发之道的博客-CSDN博客https://blog.csdn.net/lsgqjh/article/details/45268009(随手网上搜的链接,侵权删) 

最后希望诸君的编程之路一路顺利,好运与你同在!!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值