C-联盟
写文水平真的很差,不知道是本就没有这个天赋还是自觉没有天赋于是就从此成了硬伤。之所以会开始写是因为答应了跟某只严肃而又可爱的萌物有目标有规划地好好学习一下C and C++,而最初只是因为被某只刺激到了说想好好学习C语言来着,然而没想到还出来了这么多一系列的规章制度,有一种上了贼船的赶脚。不过果断还是因为自己虽然很水但还是有一颗要好好学习的心,于是硬着头皮答应了。答应之后看了一下范文,果断觉得好有难度啊,本就智商捉急,在家每天懒洋洋的更加智商捉急了,都有一种想放弃的赶脚,但一想到这是第一次跟某只联盟还有一丢丢小激动,也想看看自己是否能坚持下来,因为从来没有自发地有计划地朝着一个目标努力过,也想试试这种赶脚,这种优良品质还是可以考虑养成一下的。
虽然是用markdown,但是感觉初学语法略麻烦,所以允许我还是用简单的文本格式吧。现在一看到C语言首先想到的是人工智能,可能是因为选了坑坑的计算智能和神经网络这两门课吧。我们的最终目标应该可以纳入为AI的概念吧,采用传统编程的方式来实现人工智能,属于符号主义。个人理解编程最重要的就是对知识的表示以及对逻辑的设计,当然语言语法之类的是最基本的。稍微翻了一下C语言的书并看了一下某只的七日学习日记,感觉学过的基本的语法格式什么的也都不记得了,虽然本就学得很水,所以还是从现在从最基础的开始一点点地学吧。
第一次学习C语言还是在大一的时候,听课的时候完全不懂老师在讲什么,为什么要设计那些输入输出循环什么的,不明白为什么写了程序运行之后就会出现那样的结果,其实我觉得应该先学习数电、汇编、微机原理之后再学习其他的高级程序语言,要不然就一直在纠结写的程序和结果之间的对应关系,并没有真正的理解,而应付考试就只需要把C语言的语句、语法格式什么的记一记就好了,以至于现在的我对C语言感觉还没有入门,当然很重要的原因也是因为个人比较懒,从来不会真正地去实践去寻根究底。
之所以选择学习C,是因为以嵌入式为主的实验室用到C的机会比较多。C程序一般比较紧凑而且运行速度快,并且通常可表现出只有汇编程序具有的精细的控制能力,通过细调程序可以获得最大速度或是最大内存使用率,C作为面向对象的一种程序语言,比汇编用起来更方便更易懂,所以我想这就是C语言在嵌入式控制系统中用得比较多的原因吧。而对于C的可移植性等其它优点目前实在是没有什么体会,因为目前为止接触的系统实在是少得可怜。
作为只能识别高低电平也就是0和1的计算机,输入的任何指令数据都必须被翻译成计算机能够理解并执行的0、1序列(机器语言)。编译器便是这样一个存在,将高级语言程序解释成计算机所需的详细机器语言指令集的程序。一般来说,每种计算机都有其自身特有的机器语言,因为具体的电路结构不一样,因而实现相同的功能所需要的机器代码不一样,所以用机器语言为一个Intel Pentium CPU编写的程序对Motorola PowerPC CPU来说什么都不是。但可以将编译器匹配一种特定的机器语言,这样使用正确的编译器或编译器集就可以将同一高级语言程序转换为各种不同的机器语言程序,而实现相同的功能。也就是说对不同类型的计算机,想解决相同的编程问题,只需要用高级语言程序给出一种解决方案,再由编译器解释为各种机器语言即可。
对于C以及其他编译性语言的编程大致可以分为七个步骤:
(1)定义程序目标;例如目标为显示出“Hello C !”这几个字符
(2)设计程序;在对程序应该完成的事情有一个初步的认识之后,确定在程序中如何表示数据,用什么方法来处理数据、以及程序的结构。例如要对任意给的一串数字排序,就可以采用冒泡法排序、选择法排序、归并排序、堆排序等,不同算法具有不同的时间复杂度,对于不同长度的数字串采用哪种排序方式更好都是应该要考虑到的问题。
(3)编写代码;在程序有了清晰的设计之后,将设计思路用C语言表示出来,这就是那些枯燥的需要记忆的语句语法的用武之地了。
(4)编译源代码;这一步由编译器来完成,形成一个包含计算机可以理解的代码并且能够运行的可执行文件。如果编译器在编译的过程中发现了错误,就不会生成可执行文件,并且会将错误信息报告给程序员。理解特定编译器的报错信息是必须要学习的另一种技能。
(5)运行程序;这个就跟运行任意可执行文件一样
(6)测试和调试(Debugging)程序;对于新手来说,程序运行出错是再正常不过的事情了,根据出现的错误以及错误的结果判断可能出错的原因并进行修改。
(7)维护和修改程序;这一步对于初学者来说并不会怎么涉及,就先暂时不说了。
由于今天时间比较赶,就先只说这些概论吧,明天再继续!突然发现自己有时候还是蛮不靠谱的, 在此很认真地给某只致以十分真诚的歉意,我会努力让自己变得靠谱一些的!史无前例第一篇,欢迎批评和吐槽!