第一章 C语言概述

计算机和软件常识

  1. 什么是软件?
    • 软件:一系列按照特定顺序组织的计算机数据指令的集合。
      • 数据就是信息
      • 指令就是对数据的操作
    • 常见的软件:
      • 系统软件:
        • 如:DOS,windows,Linux,IOS,Android等。
      • 应用软件:
        • 如:微信,扫雷,迅雷,QQ等。
  2. 什么是开发?
    • 制作软件
  3. 人与计算机的交互
    • 软件的出现实现了人与计算机之间的更好的交互。
    • 交互方式:
      • 自然交互界面:声音控制,触摸屏手势识别
        • 声音控制: 通过发送语音与siri交互
      • 图形化界面:这种方式简单直观,使用者易于接受,容易上手操作。
        • 图形化界面操作的本质还是命令行
        • 把图形化操作翻译成命令行
      • 命令行方式:需要有一个控制台,输入特定的指令,让计算机完成一些操作。较为麻烦,需要记录住一些命令。
        • 举例:在运行中输入cmd,打开控制台
        • 输入notepad,计算机就打开了记事本
        • 输入tasklist,就会打开所有的应用进程
        • 输入msconfig,打开本机的系统配置
        • 输入calc,就会启动计算器
        • 输入taskkill /f /im calc.exe,就可以关闭计算机
        • 所谓的命令行方式:就是通过一个黑窗口,输入特定的指令让计算机完成一些操作
    • 命令行交互成就了IBM,图形化界面交互成就了微软,自然交互成就了苹果
  4. 语言与C语言的联系与区别
    1. 人类语言与计算机语言的差别:
      1. 人类语言可以有错误
      2. 计算机语言要求绝对的准确,不可以有任何错误,否则就不会识别。
      3. 别人的语言,我可以执行也可以不,但是计算机,只要命令正确,必须执行
  5. 计算机的运行原理
    • 硬件基本组成:硬盘、内存、CPU
    • 各个部件之间的运作协调(下图) 图片

    • 计算机只能识别0和1
      • 0和1组成的指令
    • 计算机和软件的联系
      • 软件的基本概念:指令的集合
      • 软件的安装运行过程
      • 软件安装在硬盘中,当双击打开软件的过程中,软件运行在内存中,此时存储在内存中的都是二进制,也就是指令的集合
  6. 计算机系统的组成
    • 硬件系统
      • 主机
        • 中央处理器
          • 运算器
          • 控制器
        • 内存储器
          • 只读存储器
            • 电脑的BIOS就是只读存储器中存放
          • 随机存储器
            • 通常所说的内存
      • 外部设备
        • 输入设备
          • 鼠标、键盘
        • 输出设备
          • 声卡出声音,显卡出视频
        • 外存储器
          • 电脑硬盘
    • 软件系统
      • 系统软件:
        • macos、iOS、windows
      • 应用软件:
        • qq、微信、迅雷等

计算机语言的发展史

  1. 机器语言
    • 简介:计算机只能识别0和1,计算机的发展初期,一条指令长度为16,即16个0和1排列组合,所有代码里面只有0和1,每一条指令称为“机器指令”
    • 优点
      • 代码能被计算机直接识别,直接对硬件产生作用,程序的执行效率非常高
      • 能直接访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等
    • 缺点
      • 程序全是些0和1的指令代码,可读性差,还容易出错
      • 对硬件的依赖性很强,因此不同型号计算机的机器语言又不一样。也就是说,如果2台不同型号的机器想实现一样的功能,需要编写2套完全不同的代码
      • 要熟记所用计算机的全部指令和指令的涵义,指令又多又难记
    • 综上所述,机器语言很难掌握和推广,现在除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了
  2. 汇编语言
    • 简介:用英文单词等符号代替机器指令0和1
    • 优点
      • 像机器语言一样,可以直接访问、控制计算机的各种硬件设备
      • 占用内存少,执行速度快
    • 缺点
      • 不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性,也就是说,一个程序只能在一种机器上运行,换到其他机器上就不能运行
      • 符号非常多、难记,即使是完成简单的功能也需要大量的汇编语言代码,很容易产生BUG,难于调试
      • 必须对硬件非常了解,开发效率很低,周期长且单调
    • 使用场合
      • 操作系统内核、驱动程序、单片机程序
      • 软件的加密、解密、破解(原理:所有软件一运行都放在内存中,用汇编或者C语言可以改变内存中的数据)
      • 病毒的制作、防治
      • 程序的调试、分析
  3. 高级语言
    • 简介:接近自然语言
    • 优点
      • 简单、易用、易于理解,语法和结构类似于普通英文
      • 远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用太熟悉硬件知识
      • 一个程序还可以在不同的机器上运行,具有可移植性
    • 缺点
      • 程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上
    • 种类:C语言、C++、C#、Java、Objective-C等
  4. 编译器的概念
    1. 从汇编语言开始就需要编译器了,因为计算机只认识0/1,而汇编语言以及其他高级序言,想要被计算机认识,必须有一个翻译,把这些语言翻译成0和1,才能被计算机识别,这个翻译就是编译器
    2. 编译器需要具备什么条件呢? (汇编编译器举例)
      • 即认识汇编语言,也要认识机器语言。
  5. 主流语言的进化史
    • 机器语言
      • 汇编语言
        • C语言
          • Objective-C语言
          • C/C++语言
            • java
            • C#
            • PHP
            • Lua
            • Python

C语言简介

  1. 简史
    • C语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前主要是用汇编语言写的,它奠定了操作系统的基础)
    • 随着UNIX操作系统的成功,C语言也得到了大幅度地推广,被先后使用到大、中、小、微型主机上,至今还是世界上最流行、使用最广泛的高级程序设计语言之一
    • C语言是一门面向过程的语言,非面向对象的语言
  2. 特点
    • 简洁:37个关键字,9种控制语句
      • C语言是一个很小的内核语言,只包括极少数与硬件相关的部分,C语言不直接提供输入和输出语句/有关文件操作的语句/和动态内存管理的语句等,这些操作是由编译系统所提供的库函数来实现的,
    • 丰富的运算符(34种)
    • 丰富的数据类型
    • 可以直接操作硬件
    • 高效的目标代码
    • 可移植性好
    • 灵活
    • 优点:
      • 代码量小
      • 执行速度快
      • 功能强大
      • 编程自由
    • 缺点:
      • 编写代码实现周期长
      • 可移植性较差
      • 过于自由,经验不足易出错
      • 对平台库依赖较多
  3. 主要用途
    • 编写系统软件、图形处理、单片机程序、嵌入式系统开发
    • 编写游戏外挂
    • 编写android程序
    • 编写iOS程序
    • C语言的应用极其广泛,从网站后台,到底层操作系统,从多媒体应用到大型网络游戏,均可使用C语言来开发。大公司职位,高薪职位都要求C语言基础好。(C占据了很多高薪领域)
    • C语言可以写网站后台程序,诸如百度腾讯后台。
    • C语言可以写出绚丽的GUI界面,诸如苹果界面。
    • C语言可以专门针对某个主题写出功能强大的程序库,然后供其他程序方便使用,从而让其他程序节省开发时间
    • C语言可以写出大型游戏的引擎
    • C语言可以写出另一个语言来。
    • C语言可以写操作系统和驱动程序,并且只能用C语言编写,Linux操作系统的全部源代码都可以从网上得到,要深入了解操作系统的运行秘密,懂C语言,就能看懂。
    • 任何设备只要配置了微处理器,就都支持C语言。从微波炉到手机,都是由C语言技术来推动的
  4. C语言的精髓
    1. C语言优点简洁、紧凑,使用方便、灵活,功能强大,执行效率高
    2. C语言仅有32个关键字,9种控制语句,却能完成无数的功能。某些方面C语言可能确实不如其他语言优秀,比如字符串处理方面,就不如Perl语言;比如数值计算方面,就不如Fortran语言;比如人工智能方面,就不如Lisp语言。可是这些语言在其他方面却远远不及C语言。而且C语言有其他诸如表达力强,移植性好的特点。
    3. C语言的32关键字

       32个关键字:(由系统定义,不能重作其它定义)
       auto          break       case       char       const
       continue      default     do         double     else
       enum          extern      float      for        goto
       if            int         long       register   return
       short         signed      sizeof     static     struct
       switch        typedef     unsigned   union      void
       volatile      while
      
    4. C语言的9种控制语句

       9种控制语句:
       if( )~else~
       for( )~
       while( )~
       do~while( )
       continue
       break
       switch
       goto
       return
      
    5. C语言的34种运算符

       34种运算符:
       算术运算符:+  -  *  /  %  ++  --
       关系运算符:<  <=   ==   >   >=   !=
       逻辑运算符:!  &&  ||
       位运算符  :<<   >>   ~  |  ^  &
       赋值运算符:= 及其扩展
       条件运算符:?:
       逗号运算符:,
       指针运算符:*  &
       求字节数   :sizeof
       强制类型转换:(类型)
       分量运算符:.  ->
       下标运算符:[]
       其它     :( )  - 
      
  5. 版本问题
    • 1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,开始制定C语言标准的工作
    • 1989年C语言标准被批准,这个版本的C语言标准通常被称为ANSI C
    • 1999年,国际标准化组织ISO又对C语言标准进行修订,在基本保留原来C语言特征的基础上,针对应该的需要,增加了一些功能,命名为C99
    • 2011年12月8日,ISO正式公布C语言新的国际标准草案:C11
  6. 注意: C99增加的一些内容
    • C99要求main函数的类型一律指定为int型,并在函数的末尾加一个返回语句return 0;
    • C99 新增//注释注释,加上C89/*注释*/一共有两种注释
Table of Contents