目录
一、什么是程序?
二、程序怎么来的?
三、什么是计算机语言?
一、什么是程序?
-
认识计算机程序(软件)
- 传统电脑PC领域:PC上的程序大致可以分为三种情况
- 应用:比如QQ,游戏,Windows系统上位机,等。针对Windows系统上位机开发(比如设计界面控制智能家居),我们也有许多开发语言(括号中是它们的库): C++ (MFC、QT);Java(Swing);C#;Python(pyqt,即python结合qt);C(Gtk,Minigui)。
- 操作系统OS内核、手机安卓系统:开发语言是C语言、汇编。可见C的主要作用体现在操作系统领域。
- 后端服务器代码:比如淘宝、学生登录管理系统:开发语言有很多,比如,Java(市场需求大);PHP;Go(大数据);C#
- 嵌入式领域:按照功能需求的递增,简略介绍三种情况
- 80C51单片机:智能小车(循迹、避障、红外等),刷卡门禁等。
- STM32单片机:无人机,两轮平衡小车等。
- ARM高级(带Linux内核):手机上的程序(操作系统、各种app、微信小程序),智能终端(酒店送餐机器人、人脸识别、蜂巢快递柜等)。
- 传统电脑PC领域:PC上的程序大致可以分为三种情况
- 程序的定义:沃思(Nikiklaus Wirth)提出“数据结构+算法=程序”。举个简单的例子就是算账,算账时各个账目就是数据结构,账目里有许多数据,我们搜集好数据后统一进行处理,处理的方法就是算法。
- 数据结构:数据结构=数据类型+数据组织方式
- 数据类型:程序中可能用到许多不同类型的数据,比如整型、字符型、浮点型、数组、结构体、共用体等等
- 组织方式:即数据结构,比如队列、栈、链表、树、图等
- 算法:算法是对操作的描述,不同的算法,它们结果可能相同,但是效率上会有差异
- 逻辑性算法:推理演绎的过程,程序员根据事物的规律进行写代码,比如天黑了就要打开电灯,看到红灯就要停下来等。
- 数学数据型算法:
- 简单的:比如
- 计算1加到100的和
- 计算两个正整数的最大公因数
- 复杂的:比如
- 音视频处理
- 维纳滤波算法
- AEC、AGC、NS算法
- 频谱泄露
- PID算法、模糊PID算法、人工神经网络等算法
- 音视频处理
- 简单的:比如
- 数据结构:数据结构=数据类型+数据组织方式
- 进程/任务:程序分为静止的和动态的,跑起来的程序叫做进程,这是个动态概念,比如打开我们电脑上的任务管理器,里面就有许多进程,这些跑起来的程序会占用CPU、内存、磁盘、网络等。
二、程序是怎么来的?
总体来说分为三大部分:编辑、编译、运行。
①编辑: 源程序(程序员编辑的,以文件形式存在,C程序的扩展名为“.c”)
↓
②编译: 编译预处理(此过程中检查所有内容,将.c转化为.exe)
↓
③运行:执行程序(是二进制形式的文件,扩展名为“.exe”)
这里重点介绍C语言的编译的过程:它分为四个部分
- 预处理:将.c文件处理为.i文件(.i文件是预处理之后的文件)
- 找到.c中#include的头文件,头文件中包括一些全局变量以及函数的声明,将其进行展开替代#include这句话
- 将宏定义进行替换
- 编译:将预处理后生成的.i文件生成.s文件(.s文件是汇编文件)
- 汇编:将编译后生成的.s文件生成.o文件(.o文件是目标文件,是二进制形式的文件)
- 链接:将汇编后的.o文件链接成.exe文件(.exe文件是可执行文件,也是二进制形式的文件)
- 如果程序中有多个.c文件,那么编译器会经过前面3步,将每一个.c生成对应的.o文件,在最后一步,将所有的.o文件链接成一个可执行程序
我们可以使用Linux环境下的GCC编译器来查看C语言的上述编译过程(下一节会讲gcc指令):
注:当有多个.c时
a)要依次经过上述步骤将每一个.c生成.o文件;
b)最后将所有生成的.o文件链接,步骤为上述第4步将多个.o用空格隔开,比如:
gcc hello.o main.o max.o -o main (这里hello.o、main.o、max.o是我们经过前3步得到的汇编文件,最后统一将它们链接在一起成为一个可执行文件)
三、什么是计算机语言?
简单来说,发明计算机语言就是为了让人能和机器交流。它的发展经过三个阶段:
- 机器语言:人们编辑程序的方式就是通过打孔与不打孔,让机器区别1和0
- 符号语言:汇编,人们通过将一串二进制形象化地记为一个符号,这个符号代表这一条指令,比如ADD就是加,SUB就是减
- 高级语言:这是接近于人类的语言,我们通常可以分为两种
- 面向过程:这是一种结构化的语言,我们之后写C语言就要培养结构化程序的思维,将一个源文件分为多个c文件和多个h文件(头文件),在其中进一步建立各种函数,它们代表不同的功能。
- 面向对象:涉及到类的概念,比如C++、Java、PHP、C#都是面向对象语言,能够制作很多具有良好人机交互功能的计算机程序。