C语言基础篇-1.C语言学习前的准备

1.C语言学习前的准备

本章是正式学习C语言前的准备工作,了解计算机的发展并不是一蹴而就,经历了数百年的发展才成为现在生活中必不可少的工具,这其中有无数的先辈的努力,本章就介绍这些计算机发展的关键的人和事,同时计算机编程语言也经历由低级语言到高级语言的变化,C语言作为一门高级语言,它的变化又是怎样的呢?学完本章就能够解密计算机的神秘面纱!

1.1.计算机被发明前的世界

1.1.1.最早的程序设计装置

在计算机发展史上,差分机和分析机占有重要地位,它们的研制者查尔斯.巴贝尔,他经过十年的努力,设出一种可以进行加减计算并完成数表编制的自动计算装置,把它称为 差分机,能够按照设计者的控制自动完成一连串的运算,体现了计算机最早的程序设计。

1834年,查尔斯.巴贝尔设计了一台更加完善的通用计算机工具,称为 分析机 这种程序设计思想的创建为现代计算机的发展开辟了道路。为 现代计算机设计思想奠定基础,从尚存的手稿看,他的设计已经具备 输入装置、处理装置、存储装置、控制装置和输出装置 等5个部分.

在这里插入图片描述

1.1.2.现代计算机中数学方法确立

英国数学家布尔在1847年发表《逻辑的数学分析》、1854年发表的《思维规律的研究》,这两本著作建立了完整的二进制代数理论体系,为 现代计算机提供数学方法。布尔(Boolean)是计算机科学中的逻辑数据类型,以发明布尔代数的数学家乔治·布尔为名。

在这里插入图片描述

1.1.3.现代计算机的逻辑工作方式基础奠定

英国数学家、逻辑学家图灵提出著名的图灵机模型为 现代计算机的逻辑工作方式奠定基础。图灵也被誉为 计算机科学之父。美国计算机学会在1966年创立图灵奖,用于鼓励在该领域作出杰出贡献的计算机科学家,这是世界计算机科学领域的最高奖项,有该领域的诺贝尔奖之称。

在这里插入图片描述

1.1.4.数字电路的理论基础奠定

美国数学家克劳德·香农(Claude ElwoodShannon)1938年在MIT获得电气工程硕士学位,硕士论文题目是《A Symbolic Analysis of Relay and Switching Circuits》(继电器与开关电路的符号分析)。当时他已经注意到电话交换电路与布尔代数之间的类似性,即把布尔代数的“真”与“假”和电路系统的“开”与“关”对应起来,并用1和0表示。于是他用布尔代数分析并优化开关电路, 奠定了数字电路的理论基础

在这里插入图片描述

1.1.5.现代计算机的设计基础奠定

1946年,大数学家冯·诺依曼参与设计的世界上第一台电子数字计算机(ENIAC)终于问世了,在这台电子计算机的设计中,冯诺依曼提出了他一整套的设计思想与原则,因而被称为冯·诺依曼机。冯·诺依曼也由于他的杰出卓越贡献而获得 :guilabel:计算机之父 的桂冠。冯.诺伊曼1954年发表EDVAC计算机报告,提出计算机的 五大结构及存储程序的设计思想,奠定现代计算机的设计基础

在这里插入图片描述

  • 控制器(Control):整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、地址,协调计算机各部分工作及内存与外设的访问等。
  • 运算器(Datapath):运算器的功能是对数据进行各种算术运算和逻辑运算,即对数据进行加工处理。
  • 存储器(Memory):功能是存储程序、数据和各种信号、命令等信息,并在需要时提供这些信息。
  • 输入(Input system):输入设备的作用是将程序、原始数据、文字、字符、控制命令或现场采集的数据等信息输入到计算机。常见的输入设备有键盘、鼠标器、光电输入机、磁带机、磁盘机、光盘机等。
  • 输出(Output system):计算机的中间结果或最后结果、机内的各种数据符号及文字或各种控制信号等信息输出出来。微机常用的输出设备有显示终端CRT、打印机、激光印字机、绘图仪及磁带、光盘机等。

1.2.计算机软硬件的发展

1.2.1.计算机硬件发展的四个阶段

1. ``电子管时代`` 1946-1956年:一般认为 ***\*ENIAC\**** 是世界上第一台电子计算机,1946年诞生于美国宾夕法尼亚大学,建成是为了二战计算弹道。也有ABC是世界上第一台计算机的说法。ENIAC占地170多平方,重达30多吨,使用18000个电子管,耗电巨大且操作复杂。

2. ``晶体管时代`` 1956-1964年:1947年晶体管的诞生标志计算机的发展进入第二个阶段,1954年,贝尔实验室造出来第一台晶体管计算机TRADIC,计算速度突飞猛进。

3. ``集成电路与大规模集成电路时代`` 1964-1970年:科技发展推动了集成电路的诞生,1964年,IBM推出了世界首个指令集可兼容的集成电路计算机IBM System/360,从此出现了现代编程设计意义深远的高级编程语言BASIC、FORTRAN、C语言等。

4. ``超大规模集成电路时代`` 1970至今:在1967年到1977年相继出现了大规模和超大规模集成电路,至此才出现第四代计算机。1971年Intel研发出MCS-4的四位微型计算机,1978年到1983年16位计算机蓬勃发展,最具代表的是苹果公司的Macintoch,1983-1993年Intel相继推出32位和64位微处理器。

在这里插入图片描述

1.2.2.计算机软件发展五个阶段

1. 第一阶段1946—1953: ``机器语言,汇编语言`` 只有少数专业人员能够编写程序,主要用于科学研究计算

2. 第二阶段1954—1964: ``高级程序设计语言`` 容易学习,方便编程,提高了程序的可读性。这一时期的程序规模小,因此编写比较容易,还没有形成系统化的方法,对软件的开发过程更没有进行任何管理。

3. 第三阶段1965—1970:计算机得到发展:集成电路取代晶体管,处理器的运算速度大幅度提高。 ``出现操作系统``,结构化程序设计理念逐渐确立数据规模更庞大,用户对共享数据的需求, ``出现了数据库技术及数据库管理系统``。出现“软件危机”1968年北大西洋公约组织的计算机科学家召开会议,正式提出“软件工程”

4. 第四阶段1971—1989: ``出现了结构化程序设计技术`` (Pascal、Modula-2、Basic)1973年,功能强大的C语言诞生人机交互的方式改变:引入了鼠标的概念和点击式的图形界面20世纪80年代,微电子和数字化声像技术发展,在计算机应用程序中开始使用图像、声音等多媒体信出现了多用途的应用程序,面向没有任何计算机经验的用户。

5. 第五阶段1990年—至今: ``面向对象的程序设计`` 逐步代替了结构化程序设计HTML语言和浏览器产生,软件体系结构由集中式的主机模式变为分布式的客户端/服务器模式或浏览器/服务器模式,通信技术和计算机网络的飞速发展。

在这里插入图片描述

1.3.C语言的发展历史

1.3.1.C语言出现

1972到1973年美国贝尔实验室的D.M.Ritchie在B语言的基础上设计了C语言。 最初的C语言只是为描述和实现UNIX操作系统提供一种工作语言而设计的,1973年Ken Thompson和D.M.Ritchie 合作把UNIX的90%以上用C语言改写,即UNIX第5版(原来的UNIX操作系统是1969年由美国的贝尔实验室Ken Thompson和D.M.Ritchie开发成功的,用汇编语言编写的)。随着UNIX的日益广泛使用,C语言也迅速得到推广。开发C语言的目的在于尽可能降低用它所写的软件对硬件平台的依赖程度,使之具有可移植性。1978年以后,C语言先后被一直到大、中、小和微型计算机上。C语言便很快风靡全世界,成为世界上应用最广泛的程序设计高级语言。

1.3.2.第一个C语言标准

以UNIX第7版中的C语言编译程序为基础,1978年,Brian W.Kernighan和DennisM.Ritchie 合著了影响深远的名著 《The C Programming Language》,这本书中介绍的C语言成为后来广泛使用的C语言版本的基础,它是实际上第一个C语言标准。

1.3.3.ANSIC标准

1983年,美国国家标准协会(ANSI)成立了一个委员会,根据C语言问世以来各种版本对C语言的发展和扩充,制定了第一个C语言标准草案(’83 ANSI C)。ANSIC比原来的C有了很大的发展。Brian W.Kernighan和Dennis M.Ritchie 在 1988年修订了他们的经典著作《The C Programming Language》,按照即将公布的ANSI C新标准重新写了该书。1989年,ANSI公布了一个完整的C语言标准—ANSI X3.159-1989(常称ANSI C或C89)。1990年,国际标准化组织ISO(International Standard Organization)接受C89作为国际标准ISO/IEC9899 : 1990,它和ANSI的C89基本上是相同的。

在这里插入图片描述

1.4.C语言学习前的准备

1.4.1.C语言学习中问题的抽象

C语言中使用 printf("Hello,world!"); 语句向屏幕输出一串字符 Hello,world! ,需要预处理、编译、汇编、链接过程,最终得到可执行文件。 可执行文件就是机器能够直接识别和接受的二进制代码,也被称为机器指令。

作为使用者只需要知道调用特定的函数就可以实现某种功能 知其然,不知其所以然 ,我们不用去关心计算机硬件是如何将机器指令“翻译”为屏幕输出字符。这就是学习C语言中的问题抽象,如果刨根问底计算机硬件怎么就能执行这些机器指令在屏幕显示字符,就是减慢学习C语言的速度。当然这些问题也会随之学习的深入自然而然的理解达到 知其所以然

我们能够这样把问题抽象是因为操作系统以及C语言已经为我们建立起软件到硬件的控制体系,这也是学习C语言这个高级语言的优势,会帮助我们屏蔽很多细节,只需要专注于业务功能实现。

1.4.2.计算机程序概念

计算机每一个操作都是按照程序设计人员提前设定好的指令执行的,而不是计算机会自动的进行所有工作。所谓 计算机程序,就是一系列的计算机能够识别和执行的指令 。每一条指令使计算机执行特定的操作。只要执行这个程序计算机就会“自动的”执行各个指令,有条不絮地进行工作。每个特定的指令序列完成一定的功能。为了是计算机实现各种各样的功能,需要成千上万个程序。这些程序大多数是计算机软件开发人员根据需要设计好的,作为计算机的软件系统的一部分提供给用户使用,用户也可以根据自己的实际需要自己设计一些应用软件。

1.4.3.计算机语言

计算机作为一种人与计算机交互的语言,其发展经历了几个发展阶段:

  • 机器语言:计算机工作基于二进制,根本上说计算机只能识别和执行0和1组成的指令。这种能够被计算机识别和执行的二进制代码称为机器指令,机器指令的集合就是该计算机的机器语言。

  • 符号语言:符号语言克服了机器难以理解、难以推广等问题,使用英文符号和数字表示指令,例如ADD代表“加”,SUB代表“减”,LD代表“传送”。显然,计算机不能直接识别和执行符号语言的命令,需要汇编程序的软件,把符号语言的指令转换为机器语言,转换的过程称为“汇编”,因此符号语言也称为汇编语言。由于“贴近”计算机,也被称为计算机“低级语言”。

  • 高级语言:高级语言克服了低级语言不同机器不能够通用的兼容问题,它更加接近与人们的自然语言和数学语言,很容易被理解和使用,且不依赖与具体机器,它与机器距离较远,称为计算机“高级语言”。

1.5.C语言程序编译

1.5.1.C语言程序编译运行流程

1. 编辑:编辑类似于文本编辑,将程序代码输入进去,可以修改,增加,删除。

2. 编译:编译是将C代码转换成CPU可执行机器指令的过程,每个.c文件生成一个.obj文件。

3. 链接:链接是把生成的(多个).obj文件及用到的库文件(.lib)一起组合生成可执行文件(.exe)。

4. 运行:运行是指运行链接环节生成的可执行文件,得到预期结果的过程。

1.5.2.C语言的编译器从哪里来的?

首先需要知道机器语言是直接被CPU执行,不需要编译器。汇编语言虽然是机器语言的助记符,但是也需要编译为机器语言才能执行,因此用机器语言编写了第一个编译器。有了汇编语言后就可以使用汇编语言去写C语言的编辑器。用汇编语言写的C语言编译器是编译器的老祖宗。有了这个老祖宗后可以使用C语言去写C语言的编译器,只不过这个C语言编译器本身需要汇编去编译。经过层层的努力,最终可以使用C语言开发的编译器去开发C语言本身。

1.6.C语言中注释的两种写法

注释是方便自己或者他人理解程序的 解释性文字。在程序编译的时候不会被编译到可执行文件中,有没有注释都不会影响代码的执行结果。

编写注释的目的就是为了 提高代码的可读性,当然并不是注释越多越好为每一行代码都编写注释,好的代码不需要注释就能通俗易懂。比如自己编写的一段代码,过来很长时间想改动这段代码,就可以通过注释快速的回忆起当时为什么自己要这样编写代码。又或者有其他人想使用你编写的代码时候,通过必要的注释说明函数的输入和输出用法,使用者不需要知道代码具体的实现细节就能调用。

/***************************************************************************
* @brief    多行注释,两者之间的都为注释
* @author   奈斯编程
***************************************************************************/
#include <stdio.h>         //单行注释,引入标准输入输出库文件

//主函数main(单行注释,单独占一行)

int main(void) {
  printf("Hello,world!\n");    //向屏幕打印 Hello,world! 字符串并换行(单行注释,在一行内容的右侧)
  return 0;
}
  • *单行注释* 以//开始并以换行符结束 ,单行注释可以单独占一行,也可以写在一行中其他内容的右侧。由于以换行符结束,所以单行注释不能跨行,但是可以编写多个单行注释。

  • *多行注释* 以/*开始并以*/结束 ,多行注释可以跨越多行注释内容,也可以单独占一行(在行开头以/*开始,行末以*/结束),编译系统在发现一个/*后,会开始找注释结束符*/,把二者间的内容作为注释。

  • 30
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值