计算机系统构成:
完整的计算机系统包含两个部分:硬件系统、软件系统。二者相辅相成,仿佛躯体和灵魂不可分割。
(1)概念
组成计算机的各种电磁、机械部件和设备装置的总称,硬件(Hard ware) 系统是计算机实现自动控制和运算的物质基础。
(2)冯·诺依曼结构
组成:运算器、存储器、控制器、输入设备、输出设备
。
特点:程序和数据以二进制形式存在存储器中,在控制器的指挥下,自动从存储器中取指令并执行。1
(1)概念
软件(Software) 是计算机系统中各类程序、有关文档以及所需要的数据的总称。
程序:为了解决某一问题而设计的一系列指令或语句的集合。只是软件的一部分。
源程序(Source Program):用户为解决自己的问题编制的程序。
计算机指令:用来控制计算机、告诉计算机进行怎样操作的命令。
(2)两大分类
系统软件
用来管理、维护计算机及协调计算机内部更有效工作。
①操作系统(核心软件)
对计算机系统进行控制和管理的大型软件。
操作系统的基本任务:
1)管理好计算机的全部资源(包括CPU、存储器、程序、数据、各种外设);
2)担任用户与计算机之间的接口。
操作系统的主要功能:
CPU管理、存储管理、文件管理、设备管理、作业管理。
②语言处理程序
③服务性程序
应用软件
为某个具体应用开发的软件。如文字处理软件、杀毒软件、财务软件、图形软件、工具软件、游戏程序等。
(3)计算机语言的发展
人类的语言一般称为自然语言。人为了让计算机完成某种任务而需要的语言就是计算机语言。机器语言是计算机语言发展的原点,高级程序设计语言是计算机语言发展的重要阶段。C语言是高级程序设计语言中的经典,是深入掌握其他程序设计语言的基础。
冯·诺依曼结构计算机的工作原理最重要之处是“存储原理”,要先把编好的程序输入存储器中存储起来,然后依次取出指令执行。
每条指令的执行过程分为3个基本操作:
①取出指令:从存储器某个地址中取要执行的指令;
②分析指令:送指令译码器进行译码;
③执行指令:向各个部件发送控制操作,完成指令要求。
风格会影响软件的质量和可维护性。好的程序设计风格可以使程序结构清晰合理,使代码便于维护。考虑因素如下。
(1)源程序文档化
标志符命名: 见名知义。
程序注释信息:
序言性注释:位于程序开头,包括标题、程序主要功能、主要算法、作者等。
功能性注释:位于程序中间,描述变量含义、语句作用等。
视觉组织: 程序清晰,便于阅读,使用空格、空行、缩进技巧。
(2)数据说明方法
数据说明应注意次序规范化。例如多个变量按照字母顺序排列,使用注释来说明复杂数据的结构等。
(3)语句构造
当不考虑效率时,程序编写应清晰第一,效率第二。
(4)输入输出
输入输出方式和格式应尽可能方便用户使用。
以模块化设计为中心,基本原则是:采用自顶向下、逐步细化的方法进行设计,采用模块化原则和方法进行设计,限制使用goto语句。主要特点是:程序易于理解、使用和维护,提高了编程工作效率,降低了软件开发成本。
程序化设计的基本结构:
(1)顺序结构
最基本做常用的结构,按照书写顺序依次执行语句。
(2)选择结构(分支结构)
按照给定条件判断选择执行相应的语句序列,可改变程序的执行流程。
(3)循环结构(重复结构)
通过循环控制条件来决定是否重复执行相同的语句序列。包括当型循环和直到型循环。
由三部分构成
①初始化部分:为循环作准备,如为循环变量赋初值,往往位于循环语句前面。
②循环控制部分:循环控制的条件。
③循环体部分:循环工作的重复部分。
C语言程序的几点说明:
(1)以函数作为模块单位,有且仅有一个main()
函数即主函数,总是从main函数开始执行,在main函数中结束。
(2)C函数模块分为两大部分
①函数说明部分(函数首部):包括函数类型、函数名、函数参数。
②函数体部分:用左“{”表示开始,用右“}”表示结束。
(3)语句分为说明性语句和可执行语句。每条语句必须以分号“;”结束,但书写格式自由,一行可以写多条语句,一条语句也可以占多行。
(4)编译预处理命令不是C语言语句,不能用分号结束,并且需要单独一行
(5)任何位置都可以用/**/进行注释,可以用英文或者中文进行注释,但建议使用英文注释,因为不同的开发环境使用的编码格式不同时,中文易导致乱码。
#include /*编译预处理命令*/
/***** 主函数 *****/
void main(void) /*函数首部*/
{ /*函数体开始*/
int r; /*说明性语句*/
float area;
r = 2; /*可执行语句*/
area = 3.14*r*r;
printf("%f\n", area);
} /*函数体结束*/
即:编辑、编译、连接、运行、调试
。
(1)源程序的编辑
使用文本编辑器(Editor)编写扩展名为.C的C语言源程序,实质是文本文件,可用任何文本编辑器来建立。
(2)源程序的编译
使用编译系统(编译器)对源程序文件进行编译。若没有语法错误,则生成目标程序文件(.OBJ),有错会给出错误信息提示。两类错误:
①语法错误(Error):必须修改源文件的错误代码,否则无法生成目标程序文件。
②警告错误(Warning):系统按照缺省处理方式生成目标程序文件,但不一定符合作者预期。
(3)目标程序文件的连接
利用连接器将一个或多个目标程序文件与库文件连接,生成可执行文件(.EXE),若找不到所需连接信息,会给出错误提示,不生成.EXE文件。
(4)可执行文件的运行
可执行文件可以直接运行。在集成开发环境(IDE,Integrated Development Environment)下,可以方便地进行代码的运行和调试。也可不使用IDE,在Windows系统中,可直接在命令提示符中键入文件名来运行可执行文件。
(5)可执行文件的调试
若.EXE文件运行异常,得不到正确结果,则要返回源程序进行修改。
集成开发环境IDE
初学的比较经典的C语言集成开发环境有Microsoft Visual C++(简称VC++)和Microsoft Visual Studio(简称VS),前者是后者这个完整开发工具集中的针对C类语言的开发环境。在学校用的是 VC++ 6.0 和 VS 2012 这两个版本。个人目前做嵌入式开发比较多,嵌入式C语言工程多结合具体的硬件设备开发,不同的产品可能有不同的IDE,比如经典的 ICCAVR、IAR、Keil、CodeWarrior 等。
关于编辑器
最近常用两款编辑器,一个是很火的Visual Studio Code,微软推出的跨平台、多语言文件格式、轻量级代码编辑器。一个是由Scitools发行的Understand,具有很强大的代码编辑跟踪和静态分析能力,而且界面非常方便友好,堪称神器。另外一些简单代码也会拿Windows记事本或者Notepad++直接撸,不得不说程序猿的工具还是相当多而且很人性的!
THE END
控制流可由控制器指向其余四个部分,但是运算器的数据只能跟存储器交换,控制器从存储器中取数据,也就是控制器与运算器之间没有直接的数据流,但有控制流。 ↩︎