[TOC]

快速入门

什么是计算机程序?
答:所谓的程序就是计算机能识别和执行的指令,每一条指令使计算机执行特定的操作,程序和指令是计算机系统中最基本的概念。


什么是计算机语言?
答:一种人类与计算机都能识别的语言。

1)机器语言
机器指令(Machine instruction):计算机能直接识别和接受的二进制代码
机器语言(Machine Language):机器指令的集合
通过指令表,CPU 能将 0 和 1 的组合跟具体的指令挂钩,那么这些 0 和 1 的组合我们称之为机器码,属于第一代编程语言,也是 CPU 唯一可以直接读得懂的语言。

2)符号语言(Symbolic language)
由于计算机不能直接识别和执行符号语言助记符(ADD A,B == 寄存器A = A+B),需要汇编程序的软件将符号语言转成机器语言
一条符号语言对应转换一条机器指令,该过程叫”代真”或”汇编”,因此符号语言也叫符号汇编语言(Assembler Language)
缺点:通用性不行(不同型号的PC机器语言和汇编语言互不相通)

3)高级语言(High language)
20世纪50年代第一个计算机高级语言FORTRAN语言-IBM公司开发
优点:功能强,不依赖具体的机器,对任何的计算机都适用,一个高级语句往往对应多条机器指令。

比如第三代编程语言 :C 语言 C++、C#、JAVA、Delphi、Python、Object-C、Swift


高级语言的发展历程
1)非结构化的语言

  • BASIC(初学者小型会话语言)、FORTRAN/ALGOL(适合数值计算)
  • Pascal是一种传统的程序设计语言,设计的初衷是为了教学;

2)结构化的语言(面向过程)

  • QBASIC、FORTRAN 77 、C(系统描述语言)

3)面向对象的语言

  • Visual BASIC(支持面向对象程序的设计语言),C++(支持面向程序设计的大型语言),JAVA(适合网络的语言)


两种编程思想

WeiyiGeek.过程/对象

WeiyiGeek.过程/对象


1)面向过程
以事件为中心的编程思想;分析出解决问题所需要的步骤;再用函数(最小单位)把这些步骤一步一步实现;使用的时候一个一个依次调用就可以了;

2)面向对象
面向对象是以功能来划分问题,而不是步骤;注重的是对象和对象的使用;只有面向对象的程序,才真正的符合人类的思维逻辑;
三大特性:封装性,继承性,多态性;
优势:可读性,可重用性,稳定性,维护性,可测试性;


程序设计语言可以分为两类:编译型语言和解释型语言

1)编译型语言
很多传统的程序设计语言,例如Fortran、Ada、Pascal、C、C++ 都是编译型语言,这类语言需要预先将我们写好的源代码(source code)转换成目标代码(object code),这个过程被称作“编译”。

  • 优点:运行程序直接读取目标代码(object code),由于编译后的目标代码(object code)非常接近计算机底层,执行效率很高。
  • 缺点:由于编译型语言多半运作于底层,所处理的是字节、整数、浮点数或是其他机器层级的对象,往往实现一个简单的功能需要大量复杂的代码。

例如:在C++里,就很难进行“将一个目录里所有的文件复制到另一个目录中”之类的简单操作。

2)解释型语言(“脚本语言”)
执行这类程序时,解释器(interpreter)需要读取我们编写的源代码(source code),并将其转换成目标代码(object code),再由计算机运行。

多数网站开发都是使用脚本语言,它是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,纯文本保存的程序(如可以用记事本打开查看、编辑)),因为脚本不仅可以减小网页的规模和提高网页浏览速度,而且可以丰富网页的表现。

  • 特点:语法和结构、 学习和使用通常比较简单  
  • 优点:它们多半运行在比编译型语言还高的层级,能够轻易处理文件与目录之类的对象,可以由应用程序临时调用并执行,最重要的就是跨平台。
  • 缺点:它们的效率通常不如编译型语言(每次执行程序都多了编译的过程),但是好处就是可以实现跨平台的特性

通常使用脚本编程还是值得的,花一个小时写成的简单脚本,同样的功能用C或C++来编写实现,可能需要两天,而且脚本执行的速度已经够快了,快到足以让人忽略它性能上的问题。

脚本编程语言:有PHP、HTML、CSS、JavaScript、VBScript、ActionScript、MAX Script、ASP、JSP、SQL、Perl、Shell、python、Ruby、JavaFX、Lua、AutoIt

WeiyiGeek.编译型-解释型

WeiyiGeek.编译型-解释型


程序设计的任务
从确认问题到最后完成任务几个工作阶段:

  • 1)问题分析
  • 2)设计算法
  • 3)编写程序
  • 4)对源程序进行编辑、编译、连接
  • 5)运行程序分析结果
  • 6)编写程序文档


程序执行流程
大多数的程序都遵循着:输入 ->>> 处理 ->>> 输出的模型,首先接受输入数据,然后根据指定的算法进行处理,最后输出计算结果。

WeiyiGeek.执行流程

WeiyiGeek.执行流程


结构化程序设计方法
作用:解决人脑思维能力的局限性和被处理问题的复杂性之间的矛盾。
定义:一个结构化程序就是用计算机语言表示的结构化算法,使用三种基本结构组成的程序必然是结构化的程序。

结构化程序设计强调程序设计风格和程序结构的规范化,提倡清晰的结构采用以下方法:

  • 1)自顶而下
  • 2)逐步细化 (由抽象化为具体)
  • 3)模块化设计
  • 4)结构化编码 (将已设计好的算法用计算机语言表示)


程序设计调试技巧
程序出错可以分为两大类:编译时错误(complie-time error)运行时错误(run-time error)

  • 编译时错误: 常常会出现在您编程之中,由于语法方面的问题,大括号,小括号引用定义变量有误等等;
  • 运行时错误: 往往更难以查找和纠正,运行时错误一般都不会有正式的出错信息(程序逻辑方面的错误)。
  • (1)预防编译时候错误:

    • 建议一:培养并保持一种编程风格!
    • 建议二:认真对待编译器给出的错误/警告信息!
    • 建议三:开始写代码前先画流程图,三思而后行!
    • 建议四:注意检查最基本的语法!
    • 建议五:把可能有问题的代码行改为注释!
    • 建议六:换一个环境(系统有事会有杀软等等)或开发工具!
    • 建议七:检查自己是否已经把所有必要的头文件全部 include 进来!
    • 建议八:留意变量的作用域和命名空间!
    • 建议九:多多使用调试工具!
  • (2)预防运行时错误

    • 经验一:还是培养并保持一种良好的编程风格!
    • 经验二:多用注释,用好注释。
    • 经验三:注意操作符的优先级,流程图;(建议使用括号来控制优先级)!
    • 经验四:千万不要忘记对用户输入和文件输入进行合法性检查!
    • 经验五:不要做任何假设;
    • 经验六:把程序划分成一些比较小的单元模块来测试!


程序设计标准化
文件注释:

1
2
3
4
5
标题: merglist.c 
功能: 归并两个有序表.
说明:归并两个数据元素按非递减有序排列的线性表palist和pbli t bli
当前版本: x.x
修改信息: 2004 08 05 Anni 2004.08.05 Anni, Initial Version Initial Version2004.08.20 Tom, Bug xxxx fixed


函数注释:

1
2
3
4
函数功能:在在list所指顺序表中删除下标为 
函数格式:int delete_seq(PSeqList palist,int p)
函数参数:Param1:PseqList类型对象 输入框架 ,Parma2: 整形无符号,记录次数
返回值: TRUE正常, FALSE错误


功能性注释:

1
2
3
//每个变量作用简要说明
//将每月的销售额amount加到年销售额total中
total = amount + total;