一、C语言概述

声明

本文内容大多取自《高级语言程序设计一书》,为本人学习笔记记录,切勿用于商业用途。

第一节 计算机发展

电子计算机已经历的四个发展时代:
第一代:20 世纪 50 年代,主要采用真空电子管制造计算机。这些由电子管组成的计算机被称 为第一代计算机,主要用于科学计算,人们用机器语言编写程序,此时的计算机仅仅是计算机专家 手中的工具。
第二代:20 世纪 50 年代末期,出现了以晶体管为主要元件的第二代计算机。它在体积、耗电 量和寿命等方面都有了很大改进。同时,随着高级语言和系统软件的出现,对计算机的操作和使用 不再专属于少数的计算机专家。
第三代:1964 年,IBM 公司推出 IBM360 系列计算机并垄断了 60%〜70%的国际市场,它的 出现标志着计算机进入第三代。第三代计算机的特点是采用集成电路技术在一片硅晶片上集成数 目众多的晶体管。此时小型计算机的体积通常在一立方米以下,运算速度可达每秒十万次以上。
第四代:随着大规模集成电路和微处理器的出现,计算机进入第四代。大规模集成电路的使用 标志着集成电路技术进入微电子时代。所谓微处理器就是一片集成电路芯片,计算机的控制和运算 功能都在这一芯片上实现。它从最初的 4 位微处理器,发展到 8 位、16 位、32 位和 64 位。由微处 理器组成的微型计算机,性能已经和过去的小型机、中型机不相上下。

1946年在美国问世,第一台电子数字积分计算机(ENIAC) 它的主要原件是电子管冯·诺伊曼提出了存储程序的概念。

第二节 计算机语言

计算机语言的发展经历了从机器语言汇编语言高级语言的历程。
1. 机器语言
机器语言是用二进制代码表示的能被计算机识别和执行的指令集合。
2. 汇编语言
为了克服机器语言的不足,人们利用助记符代替机器语言,因此产生了汇编语言。 汇编语言在一定程度上克服了机器语言难以编写和阅读的缺点,同时具有占用存储空间较少, 执行效率高的优点。 机器语言和汇编语言都是面向机器的语言,也称为“低级语言”。
3. 高级语言
高级语言描述算法很方便,而且不依赖于具体的机型,能够不需修改而在任何计算机上运行, 具有良好的可移植性、便于编程,但是执行效率低。 使用高级语言编写的程序称为“源程序”,源程序无法在计算机上直接运行,必须将其翻译为 二进制程序后才能执行。翻译程序通常有两种工作方式,即编译方式解释方式。编译方式是将源 程序全部翻译为二进制程序后再执行,在此完成翻译工作的程序称为“编译程序”,编译后的二进 制程序称为“目标程序”;解释方式是翻译一句执行一句,边解释边执行,在此完成翻译工作的程 序称为“解释程序”。解释方式比编译方式耗费机器时间较多,但占用内存较少
世界上第一个高级语言是 FORTRAN,后来陆续出现很多种高级语言,目前广泛应用的高级语 言有 C/C++、Java 和 C#等。

第三节 算法及其描述方法

一、算法
定义: 解决问题的步骤序列就是算法。
任何一个能够解决问题的算法都必须具备以下五个特性。

  1)可执行性。
  2)确定性。
  3)有穷性。
  4)有输入信息的说明。
  5)有输出信息的步骤


为了获得易读、易懂、易修改和扩充的算法,人们经过长期的实践认为必须采取以下三种措施:
1)利用自顶向下的方法设计算法。
2)只利用顺序、选择和循环三种基本结构构造算法。
3)具有优美的算法表达风格。

二、算法描述方法
常用的算法描述方法是自然语言、传统流程图、N-S 流程图、伪代码和计算机语言等。
1. 自然语言
自然语言是人们日常使用的语言,可以是汉语、英语或其他语言。用自然语言描述算法通俗易 懂,但文字冗长,容易出现“歧义”。自然语言表示的含义往往不太严格,要根据上下文才能判断 其正确含义。因此,除了很简单的问题,一般不用自然语言描述算法。
2. 传统流程图
流程图是用一些图形表示各种操作。用图形描述算法形象直观、易于理解。
3. N-S 流程图
已经证明使用以下三种基本结构能够表示一个良好算法。
1)顺序结构,顺序结构是最简单的一种基本结构。
2)选择结构,又称分支结构,此结构中必然包含一个判断框。
3)循环结构,又称重复结构,即反复执行某一部分的操作,可细分为两种:当型循环和直到型循环。

以上三种基本结构,具有的共同特点如下:
 只有一个入口。
 只有一个出口。
 结构内的每一个部分都有机会被执行到。
 结构内不存在“死循环”(无终止的循环)。

4. 伪代码
用传统流程图和 N-S 流程图描述算法直观易懂,但画起来比较费事。在设计算法时,可能会反 复修改,而流程图的修改比较麻烦。因此,流程图适合表示一个算法,但在设计算法时使用起来不 是很理想(尤其是当算法比较复杂、需要反复修改时)。为此,常用一种称为伪代码(Pseudocode) 的工具,以便于算法的设计。
伪代码是用介于自然语言和计算机语言之间的文字和符号描述算法。伪代码不使用图形符号, 因此书写方便,格式紧凑,也容易理解,便于向计算机语言(即程序)过渡。
在这里插入图片描述

5. 计算机语言
完成一项工作包括设计算法和实现算法两个部分。 计算机是无法识别流程图和伪代码的。只有用计算机语言编写的程序才能被计算机执行(当然 还要编译为目标程序才能被计算机识别和执行)。因此在用流程图或伪代码描述一个算法后,还要 将它转换成计算机语言程序。 用计算机语言表示算法必须严格遵循所用编程语言的语法规则。

在这里插入图片描述

第四节 程序和程序设计方法

一、程序
程序是利用计算机语言将所要解决问题中的数据以及处理问题的方法和步骤进行完整而准确地 描述,这一描述的过程称为“程序设计”。对数据的描述是指明数据结构形式;对处理方法和步骤 的描述即是本章第三节中介绍的算法问题。因此,数据结构和算法是程序设计过程中密切相关的两 个方面。图灵奖获得者瑞士著名计算机科学家沃思教授曾提出:

程序=数据结构+算法

实际上,一个程序除了上述两个要素外,还应当采用结构化程序设计方法进行程序设计,并且 采用某种计算机语言表示,因此程序还可以表示为:

数据结构+算法+程序设计方法+程序设计语言和开发环境=程序

二、程序设计方法

定义::程序是指一组计算机能够识别和执行的指令集合。

随着计算机技术的发展,开始出现了专门用于指导和规范程序设计的思想和方法,最主要的程 序设计方法有两种,即结构化程序设计方法面向对象程序设计方法

1. 结构化程序设计方法
结构化程序设计又称为面向过程的程序设计,是由荷兰计算机科学家 E.W.Dijkstra 于 1965 年 提出。模块化是结构化程序设计方法的核心思想,即将待开发的程序划分为若干个相互独立的模块, 每个模块完成特定的功能,这样就可以使程序员完成每个模块的工作变得单纯和明确,适合于设计 大规模的复杂程序。
(1)结构化程序设计的要点
1)采用“自顶向下,逐步求精”的设计方法。
2)程序由三种基本结构构成。在每一个模块内部以及模块与模块之间都只有顺序、选择和循环 三种基本结构。

(2)结构化程序设计的优点
1)采用自顶向下,逐步求精的方法使得整个设计方案层次分明,程序员容易编码实现,读者容 易阅读理解。对于复杂的程序,可以“先易后难,先抽象后具体”,使得程序设计工作整体思路清 楚,目标明确,程序员能够有条不紊地推进。

2)程序由相互独立的模块构成,因此在设计某个模块时,不会受到其他模块的牵连,因而可将 较为复杂的问题化简为一系列简单模块的设计。模块的独立性还为扩充已有的系统、建立新系统带 来方便。

(3)结构化程序设计的缺点
1)用户的要求难以在需求分析阶段被准确定义,这样有可能导致在程序交付使用时产生问题。
2)由于程序的开发工作分为若干个顺序的阶段,每一阶段任务完成才能进行之后的工作,开发 周期较长,而且如果这一过程中若用户需求发生变化,之前的工作则要推倒重来。

2. 面向对象程序设计方法
1967 年,挪威计算中心的 Kristen Nygaard 和 Ole Johan Dahl 开发了 Simula 67 语言,它 提供了比子程序更高一级的抽象和封装,引入了数据抽象的概念,被认为是第一个面向对象的 语言,从此,面向对象的程序设计方法也随之产生。

面向对象的核心思想是将程序或者软件看成是一个由对象组成的集合。

与传统的结构化程序设计相比,面向对象程序设计吸取了结构化程序设计的一切优点(自顶向 下、逐步求精的设计原则),而二者之间的最大差别表现在:

1)面向对象方法采用数据抽象和信息隐藏技术使组成类的数据和操作是不可分割的,避免了结 构化程序由于数据和过程分离引起的弊病。

2)面向对象的程序是由类、对象(类的实例)和对象之间的动态联系组成的。而结构化程序是 由结构化的数据、过程的定义以及调用过程处理相应的数据组成的。

喜欢网络安全与编程的兄弟可以关注下我的公众号
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值