C语言 - 概述

各位同学好,欢迎来到QingCode 课堂。本堂课我将会给大家介绍人工智能时代

引言

相信大家对于人工智能都不陌生,我们身边有哪些人工智能。- 智能手机,扫地机器人,智能家居,无人驾驶等等。人工智能日渐在我们生活当中普及。

标志性事件:AlphaGo

世纪之战,人工智能在围棋领域战胜人类

围棋是古代中国人发明的一种棋类游戏,三千多年来的实践表明,这是世界上最复杂的运算游戏,比国际象棋的难度要出N个级别。因此,计算机行业的科学家们一直把计算机围棋运算打败人类高手作为顶级目标,现在这个目标已经实现了。

纵横十九道 迷煞多少人

C语言 - 概述_第1张图片

AlphaGo是由谷歌旗下DeepMind团队的戴密斯·哈萨比斯、大卫·席尔瓦、黄士杰等开发的一款人工智能程序。2016年3月,AlphaGo曾以4:1战胜韩国棋手李世石,成为第一个击败人类职业围棋选手的电脑程序。2016年12月底,AlphaGo身披“Master”马甲,5天内横扫中日韩棋坛,最终以60场连胜纪录宣布战胜人类。

AlphaGo和李世石对弈之前,围棋的国手们称呼它为阿尔法狗,在此之后,则称呼它为 “阿老师”。从狗到老师,仅仅隔了几个月。

在高看机器智能的同时,人们开始对人工智能感到恐慌,就连霍金这样的大科学家也不例外。

霍金警告人类:人工智能可能毁灭人类。

C语言 - 概述_第2张图片

斯蒂芬·威廉·霍金(Stephen William Hawking,1942年1月8日至2018年3月14日),男,出生于英国牛津,英国剑桥大学著名物理学家,现代最伟大的物理学家之一、20世纪享有国际盛誉的伟人之一。

1979至2009年任卢卡斯数学教授,主要研究领域是宇宙论和黑洞,证明了广义相对论的奇性定理和黑洞面积定理,提出了黑洞蒸发理论和无边界的霍金宇宙模型,在统一20世纪物理学的两大基础理论——爱因斯坦创立的相对论和普朗克创立的量子力学方面走出了重要一步。获得CH(英国荣誉勋爵)、CBE(大英帝国司令勋章)、FRS(英国皇家学会会员)、FRSA(英国皇家艺术协会会员)等荣誉。 - 《百度百科》

人工智能将快速爆发,十年后50%的人类工作将被AI取代 - 李开复

C语言 - 概述_第3张图片

李开复曾就读于卡内基梅隆大学,获计算机学博士学位,后担任副教授。他是一位信息产业的经理人、创业者和电脑科学的研究者。曾在苹果、SGI、微软和Google等多家IT公司担当要职。2009年9月从谷歌离职后创办创新工场,并任董事长兼首席执行官。

未来的时候,属于人工智能的时代。所有人都面临这思维方式的升级

在过去的十年里,传统行业在和经过IT改造后的行业竞争时,无一例外的败北。08年金融危机前,全世界市值前十的公司只有微软一家是IT企业。仅仅过去了十年,市值前十的公司钟已经有六家是IT企业了。

C语言 - 概述_第4张图片

而与此同时,世界上又有一些受益于这个时代的人:比如马云。

C语言 - 概述_第5张图片

他们和普通人有什么不同呢?

思维方式不同,什么思维方式呢 - 计算机思维方式
具体的讲呢,是一种适应计算机的思维方式,和人本能的思维方式不同。

例子:

支付宝的被欺诈比例很低,比一般的银行交易,低两个数量级。
这并非是传统银行没有资源,而在于他们的思维方式落后 - 传统银行把每一个交易,每一个案子孤立的看待,虽然符合常人的本能,但是效果有限
而支付宝,从一开始就是网状的,并有意无意地在网络基础上变得聪明。

我们需要用更好的思维方式来指导我们,来适应今后的智能时代。

计算机思维

计算机思维并不是说计算机本身是有思维的,而是因为这种思维是伴随着计算机出现的。简单讲就是和常人思维完全不同的方式。比如说

大 和 小。

生活中的我们对于大数字的认知是无感的。

先定一个小目标,比如说一个亿 - 王健林

C语言 - 概述_第6张图片

被全社会吐槽,因为很少有人能一辈子挣到一亿人民币。

换个角度来说,人们对于“大”和“小”这两个概念的理解,受限于具体的生活环境。当你习惯了某一个环境的度量,很难去理解在量级上大得多的世界。对于大部分人来说,一亿等于财富自由,等于无穷大。

但是,计算机不一样,因为,计算机从诞生开始就是针对大数字设计的。

1946年,人类的第一台电子计算机诞生时,每秒钟能进行5000次运算。虽然这个速度只有一台iphone计算速度的一百万分之一,但是已经比人快得不得了了。

C语言 - 概述_第7张图片

1946年2月14日,世界上第一台电脑ENIAC在美国宾夕法尼亚大学诞生。第二次世界大战期间,美国军方要求宾州大学莫奇来(Mauchly)博士和他的学生爱克特(Eckert)设计以真空管取代继电器的"电子化"电脑——ENIAC(Electronic Numerical Integrator and Calculator), 电子数字积分器与计算 器),目的是用来计算炮弹弹道。

这部机器使用了18800个真空管,长50英尺,宽30英尺,占地1500平方英尺,重达30吨(大约是一间半的教室大,六只大象重)。它的计算速度快,每秒可从事5000次的加法运算,运作了九年之久。吃电很凶,据传ENIAC每次一开机,整个费城西区的电灯都为之黯然失色。

另外,真空管的损耗率相当高,几乎每15分钟就可能烧掉一支真空管,操作人员须花15分钟以上的时间才能找出坏掉的管子,使用上极不方便。曾有人调侃道:“只要那部机器可以连续运转五天,而没有一只真空管烧掉,发明人就要额手称庆了”。

由于一开始就是针对于海量的数字设计的,因此计算机思维和人的思维是不同的。比如说:我们认为围棋的变化数量是数不清的。因为数量太大,以至于很多下围棋的人也说不清楚到底有多大。

我们用数学分析的方法算一下,围棋有多少变化。

棋盘上每一个点 有有黑子,白子和空位三种下法,而棋盘一共有361个交叉点。因此围棋最多可以有 3^361 大概为 2 * 10^172钟情况。大约是 2的后面跟了172个0。

这个数字到底有多大呢。

整个宇宙中,有10^ 80 ~ 10 ^82 个基本粒子(质子,中字或者电子等等)

这么多的变化对于人类来说,基本上就是无穷无尽的。于是人类不把下围棋当做一种计算问题,而当成一种文化,更具体的来说是:棋道。

C语言 - 概述_第8张图片

对于计算机而言,围棋再复杂,也是一个有限的问题。我们认为他不可计算,是因为人类脑子的计算能力是有极限的,缺乏计算复杂问题的思路。但是在计算机看来,这个问题是可以计算的。

可以讲

认知决定了思维方式,当我们数不清的时候,我们就发明了“围棋文化”这种思维方式。

相比于计算机,人类对数字的认知也受限于我们作为作为生物进化的速度,这是人的思维和计算机的思维的另一个不同之处

举例:

世界上最早的农业始于一万年前,人类大约那个时代开始识数,人类最早的计数工具也开始于那个年代。可以讲从认识 一,到认识一个亿,经历了大约10000年的时间。平均每十年进步千分之八。

那么计算机的进步速度有多快呢。

摩尔定律:计算机每18个月性能翻一番

大约是每五年涨10倍,或者说每十年进步100倍。

我们看一下计算机处理大数据的一个小案例。

例子:斐波那契数列

斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。

// 代码待定

工程思维

// 待定

计算机发展历史

说到计算机,我们不能不提计算机之父:图灵。

艾伦·麦席森·图灵(Alan Mathison Turing,1912年6月23日-1954年6月7日),英国数学家、逻辑学家,被称为计算机科学之父,人工智能之父。

C语言 - 概述_第9张图片

图灵博士被认为是神一样的人。在20世纪,全世界智力上可以和爱因斯坦平起平坐的人恐怕只有图灵 和 冯 . 诺依曼了。

图灵三个问题

第一个问题,世界上是否所有数学问题都有明确的答案?

第二个问题,如果有明确的答案,是否可以通过有限步骤的计算得到答案?

第三个问题才是,对于那些有可能在有限步骤计算出来的数学问题,能否有一种假象的机械,让它不断的运动,最后,当机器停下来的时候,那个数学问题就解决了?

而图灵设计的这种方法,是一个数学模型,后人称它为图灵机。今天所有的计算机,包括全世界正在设计的新的计算机,从解决问题的能力来讲,都没有超出图灵机的范畴。

C语言 - 概述_第10张图片

卡片时期

19世纪的雅卡尔提花织布机
1725年,法国纺织工人鲁修为便于转织图样,在织布机套上穿孔纸带,他的合作伙伴则在1726年着手改良设计,将纸带换成相互串连的穿孔卡片,以此达到仅需手工进料的半自动化生产。1801年,法国人雅卡尔发明提花织布机,利用打孔卡控制织花图样,与前者不同的是,这部织布机变更连串的卡片时,无需更动机械设计,此乃可编程化机器的里程碑。

C语言 - 概述_第11张图片

程式化时期

可编程化是通用计算机的重要定义,意即只要变更指令的储存序列,通用计算机就能模拟其它形式的计算机。

1823年,英国数学家巴贝奇在政府的支持下,开始建造以蒸汽引擎驱动的差分机,用来比较数字间的差异,经历10年未能竟功,巴贝奇遂转而研究设计得更为完整,直接利用打孔卡输入和储存资料的分析机,可惜最后巴贝奇穷其毕生精力都未能造出任一完整的差分机或分析机。

C语言 - 概述_第12张图片

桌上型时期

1900年代初期,机械式计算器、收银机、记账机等都被重新设计,改用电动马达,配合变档齿轮使其更加灵活。1930年代,四则运算已经是桌上型机械计算器的基本功能,当时电脑的英文单字“Computer”指的是一群以操作数学计算器为业的“计算师”。在曼哈顿计划时期,许多精通微分方程式的女性数学家都挤在房间里当起计算师报效祖国,后来的诺贝尔奖得主物理学家费曼先生还当过计算师主管。即使是名闻遐迩的波兰数学家乌拉姆,在战后也曾被利用来求取氢弹的数学似近值。

C语言 - 概述_第13张图片

模拟时期编辑

1930年,现代电脑之父万尼瓦尔·布希发明微分分析器,模拟计算机科技至此达到顶峰,大部分的零件都已经被制造出来,终于,宾夕法尼亚大学的摩尔电机工程研究所打造出最具影响力的数字电子计算机──电子数值积分计算器(埃尼阿克)。埃尼阿克的诞生终结了大部分模拟计算机的生路,不过从1950年代到1960年代,由数字电子学控制的混合型模拟计算机依然活跃,之后模拟计算机就应用在部分专业用途上。

C语言 - 概述_第14张图片

早期数字电脑

1930年代后期到1940年代,受到二次大战影响,此一时期被认为是计算机发展史中的混乱时期,战争开启了现代电脑的时代,电子电路、继电器、电容及真空管相继登场,取代机械器件,就连类比计算器也被数字计算器所代替。阿塔那索夫贝理电脑(ABC)、Z3电脑、巨像电脑和埃尼阿克也在手工精心打造下诞生,使用包含继电器或真空管的电路,以打孔卡或打孔带作为输入和主要(非短期)储存媒介。
代表是 : 图灵机

why C

对于大部分程序员,C语言是学习编程的第一门语言,很少有不了解C的程序员。

C语言除了能让你了解编程的相关概念,带你走进编程的大门,还能让你明白程序的运行原理,比如,计算机的各个部件是如何交互的,程序在内存中是一种怎样的状态,操作系统和用户程序之间有着怎样的“爱恨情仇”,这些底层知识决定了你的发展高度,也决定了你的职业生涯。

如果你希望成为出类拔萃的人才,而不仅仅是码农,这么这些知识就是不可逾越的。也只有学习C语言,才能更好地了解它们。有了足够的基础,以后学习其他语言,会触类旁通,很快上手,7 天了解一门新语言不是神话。

C语言概念少,词汇少,包含了基本的编程元素,后来的很多语言(C++、Java等)都参考了C语言,说C语言是现代编程语言的开山鼻祖毫不夸张,它改变了编程世界。

计算机常识

在学习C语言之前,先要了解一些计算机常识。

计算机只能识别0 和 1

  • 大家都知道,计算机要通电才能工作,说白了,它跟电视、洗衣机一样,都是电器。电器都有个共同的能力:懂得判断通电还是断电,通电就能工作,断电就停止工作。因此,从根本上讲,计算机只能识别电信号:高电平信号(通电)、低电平信号(断电),它只知道某个开关是通电还是断电。我们用1代表高电平,0代表低电平。
  • 也就说,计算机只能识别0和1。

二进制

因为计算机只能识别0和1,因此计算机所能识别的指令和数据都是用二进制数(0和1)来表示的。所谓二进制,就是用0和1来表示所有的数。不过我们日常生活中最常用的是十进制,用0~9来表示所有的数。

二进制指令

给计算机输入一些指令,它就能执行相应的操作,而计算机只能识别由0和1组成的指令。在计算机发展初期,计算机的指令长度为16,即以16个二进制数(0或1)组成一条指令,例如,用1011011000000000这条指令,是让计算机进行一次加法运算。因此,如果要想计算机执行一系列的操作,就必须编写许多条由0和1组成的指令,可以想象的到,这个工作量是如此巨大。

二进制数据

平时我们在计算机中存储的一些数据,比如文档、照片、视频等,都是以0和1的形式存储的。只不过计算机解析了这一大堆的0和1,以图形界面的形式将数据展示在我们眼前。

程序设计语言发展史

我们可以利用程序设计语言来编写程序,再将编好的程序运行到计算机上,计算机就能够按照程序中所说的去做。从计算机诞生至今,程序设计语言大致经历了3个发展阶段:机器语言、汇编语言、高级语言。其中,C语言属于高级语言。

机器语言

什么是机器语言

在计算器诞生初期, 所有的计算机程序都是直接用计算机能识别的二进制指令来编写的,也就是说所有的代码里面只有0和1。这种程序设计语言就是“机器语言”。这些由0和1组成的二进制指令,又叫做“机器指令”

优点

  • 由于机器语言编写出来的代码是能被计算机直接识别的,因此机器语言是直接对硬件产生作用的,程序的执行效率非常高。
  • 机器语言能直接访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。

缺点

  • 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令和指令的涵义,指令又多又难记

  • 编出的程序全是些0和1的指令代码,可读性差,还容易出错。

  • 由于机器语言是直接对硬件产生作用的,对硬件的依赖性很强,因此不同型号计算机的机器语言又不一样。也就是说,如果2台不同型号的机器想实现一样的功能,需要编写2套完全不同的代码。

可以看出,机器语言很难掌握和推广,现在除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。

汇编语言

什么是汇编语言

  • 由于机器语言的种种弊端,严重影响开发效率,后面就出现了汇编语言。汇编语言其实就是符号化的机器语言,它用一个符号(英文单词、数字)来代表一条机器指令。比如,在机器语言中,用1011011000000000这条指令,是让计算机进行一次加法运算;而在汇编语言中,用英文单词“ADD”就可以表示加法运算。一个有意义的英文单词,很明显比一串又臭又长的二进制指令,直观好记多了。
  • 由于计算机只能识别0和1,用汇编语言编写的代码是不能被计算机所识别的,像刚才的“ADD”,计算机肯定不知道是什么意思。因此,用汇编语言编写的代码需要翻译成二进制指令后,才能被计算机识别。这个翻译的工作交给“编译器”去做。

优点

  • 对比机器语言,汇编语言的代码可读性好
  • 汇编语言能像机器语言一样,可以直接访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。
  • 目标代码简短(目标代码就是经编译器翻译过后的二进制代码),占用内存少,执行速度快。

缺点

  • 汇编语言是面向机器的,通常是为特定的计算机或系列计算机专门设计的。因此,不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性,也就是说,一个程序只能在一种机器上运行,换到其他机器上就不能运行
  • 汇编语言的符号非常多、难记,即使是完成简单的功能也需要大量的汇编语言代码,很容易产生BUG,难于调试
  • 使用汇编语言必须对硬件非常了解,开发效率很低,周期长且单调

高级语言

由于汇编语言依赖于硬件,代码可移植性差,符号又多又难记,于是人类就发明了非常接近自然语言的高级语言。后面要学习的C语言就是高级语言。

优点

  • 简单、易用、易于理解,语法和结构类似于普通英文,且远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用太熟悉硬件知识
  • 写出来的程序更加简洁。比如要计算2个数的和,在高级语言中可以写得非常简洁:d = a + b;。但是在机器语言和汇编语言中,就需要几条甚至几十条指令,而且不同机器还要编写不同的指令代码
  • 用高级语言编写的同一个程序还可以在不同的机器上运行,具有可移植性

C语言简史

  • C语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前主要是用汇编语言写的,它奠定了操作系统的基础)
  • 随着UNIX操作系统的成功,C语言也得到了大幅度地推广,被先后使用到大、中、小、微型主机上,至今还是世界上最流行、使用最广泛的高级程序设计语言之一
  • C语言是一门面向过程的语言,非面向对象的语言。(究竟什么是面向过程、面向对象,暂时不用去理解,只需要知道C语言是面向过程就Ok了)

C语言特点

丰富的运算符

计算机的基本功能就是计算,因此一门程序设计语言的计算能力是非常重要的。C语言提供了34种运算符,计算类型极其丰富,其中包括了最基本的加减乘除运算。

丰富的数据类型

  • C语言的生命力之所以如何强大,很大一部分是因为它拥有丰富的数据类型。
  • 正因为C语言数据类型丰富,运算能力极强,因此很多数据库都是用C语言编写的,比如DB2、Oracle等。

直接操作硬件

跟汇编语言一样,C语言可以直接操作硬件,允许直接对位、字节、地址进行操作(位、字节、地址是计算机最基本的工作单元),可以说几乎没有C语言做不了的事情。

高效率的目标代码

目标代码,就是经编译器翻译后的二进制代码。C语言的目标代码执行效率非常高。

可移植性好

在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。

你可能感兴趣的:(C语言 - 概述)