从零开始学编程之C语言(1)——初识C

初识C语言

  • 前言
  • 1. 开头来点常识性的废话
    • 1.1 硬件系统
    • 1.2 软件系统
  • 2. 程序语言
    • 2.1程序语言的发展历程
    • 2.2程序语言的分类方法
    • 2.3面向过程与面向对象
  • 3. C语言简介
    • 3.1 C语言的起源与发展
    • 3.2 C语言特点

前言

第一次觉得要写点什么东西,给刚刚步入大学学习编程,亦或是刚刚毕业没接触过却想要了解编程的朋友,从C开始,到C#,再到java,再到PHP,再到C++,再到HTML、CSS、JS,再到Python,再到数据库,再到一些语言的进阶教程,再到实际工作中的项目,再到框架之类的选择和使用,等等等等,每天抽空写一点简单的教程和心得,小五算不上资深的老程序员,甚至是个初学者,但是会尽可能把文章写的精细易懂些,文无完文,如有错误之处,恳请指出,误人子弟那就不好了。

1. 开头来点常识性的废话

小五属于想到哪里写到哪里的人,想要方方面面的东西都来一遍(事实上删了好多,就怕你们看不下去),所以拜托你们看完不要把《计算机组成原理》这本书砸过来=.=,可能真有朋友不了解,但是有时间、有兴趣的真的可以捡起来看一下,毕竟《计组》和《数据结构》是软件的必修课,必然重要(认真.jpg),当然不看也不影响,后面涉及到的会详细介绍,举个例子,比如说原码、补码、反码,在后面的C语言章节中肯定是涉及得到。本节旨在科普一下。
计算机是由硬件系统(hardware system)和软件系统(software system)两部分组成的。

1.1 硬件系统

开局一张图:

计算机
主机
输入设备
输出设备
运算器
控制器
存储器
CPU

主机:是指计算机除去输入输出设备以外的主要机体部分。
运算器 + 控制器 + 存储器 = 主机
CPU:即中央处理器,是一台计算机的运算核心和控制核心。
运算器 + 控制器 = CPU
硬件5大部分组成计算机,输入、输出很好理解,就是鼠标、键盘、显示器等。还要问主板、内存、显卡、网卡的,反手就是一个自己百度。

光硬件计算机就能运作了吗?显然不是吧,我们是不是还需要软件来支持,来运转计算机。(没有软件操作控制的硬件,其实就是堆废铁)

1.2 软件系统

软件是一系列按照特定顺序组织的计算机数据和指令的集合。软件分为应用软件系统软件

1.2.1 应用软件
应用软件是为了某种特定的用途而被开发的软件。(举例:列如我们经常使用的微软的office,你玩的游戏,包括网页浏览器、手机的应用等等都属于应用软件)

1.2.2 系统软件
系统软件是负责管理计算机系统中各种独立的硬件,使得它们可以协调工作。系统软件使得计算机使用者和其他软件将计算机当作一个整体而不需要顾及到底层每个硬件是如何工作的。

1.2.2.1 操作系统:

  1. Windows系列操作系统
  2. Unix类操作系统
  3. Linux类操作系统
  4. Mac操作系统

1.2.2.2 数据库系统:
数据库系统,是由数据库及其管理软件组成的系统。(你现在在看的这段话,就存放在他们的数据库里)

  1. MySQL
  2. SQL Server
  3. Oracle

1.2.2.3 编译软件:
编译软件CPU执行每一条指令都只完成一项十分简单的操作,一个系统软件或应用软件,要由成千上万甚至上亿条指令组合而成。直接用基本指令来编写软件,是一件极其繁重而艰难的工作。
计算机只能直接识别和执行机器语言,因此要计算机上运行高级语言程序就必须配备程序语言翻译程序,翻译程序本身是一组程序,不同的高级语言都有相应的翻译程序。

2. 程序语言

2.1程序语言的发展历程

机器语言
汇编语言
C语言
Basic语言
其他
C++
Java C#等
Visual Basic

机器语言是一种指令集的体系。这种指令集,称机器码,是电脑的CPU可直接解读的数据。机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。(CPU指令系统,由0、1序列构成的指令码组成如:用10000000代表加 ,用10010000代表减)
汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。(用助记符号描述的指令系统如 ADD A, B,相当于用ADD替代了机器语言中的10000000)
高级语言相对于机器语言而言。是高度封装了的编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。由于早期电脑业的发展主要在美国,因此一般的高级语言都是以英语为蓝本。

2.2程序语言的分类方法

程序语言有多种分类方法,大部分程序语言都是算法描述型语言,如C/C++、Java等,还有一部分是数据描述型语言,如HTML等标记语言。按照编程技术难易程度可分为低级语言(机器语言、汇编语言)和高级语言;按照程序语言设计风格可分为命令式语言(过程化语言)、结构化语言、面向对象语言、函数式语言、脚本语言等;按照程序执行方式,可分为解释型语言(如JavaScript、Python等),编译型语言(如C/C++等),编译+解释型语言(如Java、C#等)。

2.3面向过程与面向对象

C语言是面向过程的程序设计语言,而C++是面向对象的语言,之后又从C++中衍生出了java等,来个网上易懂的例子,看不懂是不可能看不懂的。

例如五子棋,面向过程的设计思路就是首先分析问题的步骤:1、开始游戏,2、黑子先走,3、绘制画面,4、判断输赢,5、轮到白子,6、绘制画面,7、判断输赢,8、返回步骤2,9、输出最后结果。把上面每个步骤用分别的函数来实现,问题就解决了。

面向对象的设计则是从另外的思路来解决问题。整个五子棋可以分为 1、黑白双方,这两方的行为是一模一样的,2、棋盘系统,负责绘制画面,3、规则系统,负责判定诸如犯规、输赢等。第一类对象(玩家对象)负责接受用户输入,并告知第二类对象(棋盘对象)棋子布局的变化,棋盘对象接收到了棋子的变化就要负责在屏幕上面显示出这种变化,同时利用第三类对象(规则系统)来对棋局进行判定。
可以明显地看出,面向对象是以功能来划分问题,而不是步骤。同样是绘制棋局,这样的行为在面向过程的设计中分散在了总多步骤中,很可能出现不同的绘制版本,因为通常设计人员会考虑到实际情况进行各种各样的简化。而面向对象的设计中,绘图只可能在棋盘对象中出现,从而保证了绘图的统一。

功能上的统一保证了面向对象设计的可扩展性。比如我要加入悔棋的功能,如果要改动面向过程的设计,那么从输入到判断到显示这一连串的步骤都要改动,甚至步骤之间的循序都要进行大规模调整。如果是面向对象的话,只用改动棋盘对象就行了,棋盘系统保存了黑白双方的棋谱,简单回溯就可以了,而显示和规则判断则不用顾及,同时整个对对象功能的调用顺序都没有变化,改动只是局部的。

再比如我要把这个五子棋游戏改为围棋游戏,如果你是面向过程设计,那么五子棋的规则就分布在了你的程序的每一个角落,要改动还不如重写。但是如果你当初就是面向对象的设计,那么你只用改动规则对象就可以了,五子棋和围棋的区别不就是规则吗?(当然棋盘大小好像也不一样,但是你会觉得这是一个难题吗?直接在棋盘对象中进行一番小改动就可以了。)而下棋的大致步骤从面向对象的角度来看没有任何变化。

总结一下:
面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展

面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护
缺点:性能比面向过程低

当然,要达到改动只是局部的需要设计的人有足够的经验,使用对象不能保证你的程序就是面向对象,初学者或者很蹩脚的程序员很可能以面向对象之虚而行面向过程之实,这样设计出来的所谓面向对象的程序很难有良好的可移植性和可扩展性。

3. C语言简介

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

3.1 C语言的起源与发展

1972年,美国贝尔实验室的 D.M.Ritchie 在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。
二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。二十世纪八十年代至今的有关程序开发工具,一般都支持符合ANSI C的语法。

3.2 C语言特点

  1. 语言简洁,紧凑,灵活(C语言一共只有32个关键字,9种控制语句)
    写代码一定要规范!
    写代码一定要规范!
    写代码一定要规范!
  2. 运算符丰富(表达式丰富)功能强大,
  3. 数据结构丰富(指针)
  4. 具有结构化的控制语句
  5. 可移植行好
    尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。
  6. 兼有低级和高级语言的特点
    可以对硬件进行操作,对位进行操作
  7. 语法限制不严格,但程序设计自由度大
    C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。
  8. 设计的程序性能高,但不易于维护、复用、扩展
    C效率高,可看懂,C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编程序生成的目标代码效率低10%~20%。

你可能感兴趣的:(C语言)