声明

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

第一节 计算机发展

电子计算机已经历的四个发展时代:
第一代: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)面向对象的程序是由类、对象(类的实例)和对象之间的动态联系组成的。而结构化程序是 由结构化的数据、过程的定义以及调用过程处理相应的数据组成的。

喜欢网络安全与编程的兄弟可以关注下我的公众号

一、C语言概述的更多相关文章

  1. 1-学习前言&C语言概述

    [C语言]01-学习前言&C语言概述 参考自 http://www.cnblogs.com/mjios/archive/2013/03/12/2956508.html#label2 C语言是我 ...

  2. OpenGL官方教程——着色器语言概述

    OpenGL官方教程——着色器语言概述 OpenGL官方教程——着色器语言概述 可编程图形硬件管线(流水线) 可编程顶点处理器 可编程几何处理器 可编程片元处理器 语言 可编程图形硬件管线(流水线) ...

  3. Delphi XE5教程1:语言概述

    内容源自Delphi XE5 UPDATE 2官方帮助<Delphi Reference>,本人水平有限,欢迎各位高人修正相关错误! 也欢迎各位加入到Delphi学习资料汉化中来,有兴趣者 ...

  4. java基础---java语言概述

    一.计算机编程的两种范型 1.面向过程的模型---具有线性执行特点,认为是代码作用于数据. 2.面向对象的模型---围绕它的数据(即对象)和为这个数据定义的接口来组织程序:实际上是用数据控制代码的访问 ...

  5. Python语言——Python语言概述

    Python语言概述 计算机语言概述 语言:交流工具,沟通媒介 计算机语言:人和计算机交流的工具,翻译官 Python语言简述 Python是计算机语言的一种 Python编程语言: 代码:人类语言, ...

  6. 01 C语言程序设计--01 C语言基础--第1章 C语言概述&第2章 GCC和GDB

    走进嵌入式开发的世界,企业级项目课程让你达到企业嵌入式应用开发要求.名师在线答疑,解决疑难.科学评测体系,系统评估学习.核心项目实........ 30 门课程 241小时12分钟 824 人学习 学 ...

  7. [编程笔记]第一章 C语言概述

    //C语言学习笔记 第一讲 C语言概述 第二讲 基本编程知识 第三讲 运算符和表达式 第四讲 流程控制 第五讲 函数 第六讲 数组 第七讲 指针 第八讲 变量的作用域和存储方式 第九讲 拓展类型 第十 ...

  8. 第1章 Java语言概述--HelloWorld--环境搭建

    SE学什么 第1章 Java语言概述 第2章 基本语法 第3章 数组 第4章 面向对象编程(上) 第5章 面向对象编程(中) 第6章 面向对象编程(下) 第7章 异常处理 第8章 枚举类&注解 ...

  9. javaSE习题 第一章 JAVA语言概述

    转眼就开学了,正式在学校学习SE部分,由于暑假放视频过了一遍,略感觉轻松,今天开始,博客将会记录我的课本习题,主要以文字和代码的形式展现,一是把SE基础加强一下,二是课本中有很多知识是视频中没有的,做 ...

  10. 大数据技术之_16_Scala学习_01_Scala 语言概述

    第一章 Scala 语言概述1.1 why is Scala 语言?1.2 Scala 语言诞生小故事1.3 Scala 和 Java 以及 jvm 的关系分析图1.4 Scala 语言的特点1.5 ...

随机推荐

  1. ChatGPT 背后的英雄——AI芯片

    本文分享自天翼云开发者社区<ChatGPT 背后的英雄--AI芯片>,作者:w****n AI芯片能为人工智能应用提供所需的基础算力:按技术架构主要分为GPU.FPGA和ASIC.Chat ...

  2. Sa-Token v1.20.0 发布,新增临时Token认证

    框架介绍 Sa-Token是一个轻量级Java权限认证框架,主要解决:登录认证.权限认证.分布式Session会话.单点登录.OAuth2.0 等一系列权限相关问题. 框架针对踢人下线.自动续签.前后 ...

  3. 从零开始的函数式编程(2) —— Church Boolean 编码

    [!quote] 关于λ表达式-- 详见λ表达式 本文导出自Obsidian,可能存在格式偏差(例如链接.Callout等) 本文地址:https://www.cnblogs.com/oberon-z ...

  4. 浅说 c++20 cppcoro (三)

    浅说 c++20 cppcoro (三),https://www.cnblogs.com/bbqzsl/p/18679860 接着上一篇浅说 c++20 coroutine (二) ,继续没说完的事. ...

  5. 《Indie Tools • 半月刊》第001期

    引言:独立开发者工具分享 <INDIE TOOLS>专注于分享独立开发出海精选.最新.最实用的工具. 欢迎订阅半月刊:<INDIE TOOLS • 半月刊> 如果本文能给你提供 ...

  6. [BZOJ3569] DZY Loves Chinese II 题解

    考虑不联通的情况.图不好做,就造一棵生成树出来,由于是无向图,所以只有树边和返祖边. 发现在一条树边断开后,生成树会分成两个连通块,由覆盖这条树边的返祖边链接,只有这些返祖边也全部断开,原图才会不联通 ...

  7. [SDOI2008] Sandy的卡片 题解

    讲一种自认为最暴力的方法. 首先肯定还是用差分的思想,对于每一张卡片进行重新标号,在卡片串与卡片串中插入特殊字符,然后找重复了 \(n\) 次的子串. 这里我们对于每一个子串开一个大小为 \(n\) ...

  8. Git的快速使用

    Git的快速使用 git提交到gitee 1.初始化本地仓库 git init 2.拉取远程仓库代码 git clone https://gitee.com/sword-level_0/mount-t ...

  9. java推送企业微信消息

    <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcl ...

  10. C# Lambda || Linq 效率问题

    255条数据 static void Main() { List<IPEndPoint> list = new List<IPEndPoint>(); for (int i = ...