【C语言】MOOC翁恺老师-入门-C的介绍与发展史-2

一、程序设计与语言

1. 计算机和编程语言


  • 请求人和计算机做事的区别

    • 请求人:What to do ,人会思考一件事的处理步骤
    • 请求计算机:How to do ,计算机只能一步步告知如何做
  • 编程语言

    • 编程语言不是用来和计算机交谈,而是描述要求它如何做事情的步骤
  • 算法

    • 要让计算机做计算,就需要找出计算的步骤,然后用编程语言写出来
    • 计算机做的所有事情都叫做计算,计算的步骤就是算法
  • 计算机的计算思维

    • 计算机的计算往往是最笨的,只能通过枚举和循环一个个试错,最终得到正确答案,所以当正确答案是以万,百万级别的,得出正确结果的效率便会很慢,尽管计算机的处理十分快。
    • 因此,经过数几十年的研究和总结,我们针对各种问题都有合适的算法来进行解决。这些合适的算法有一个共同点,就是尽量缩小计算机试错的范围
  • 程序的执行

    • 解释:会将代码一句一句直接执行,在执行期,动态将代码逐句解释为机器代码
    • 编译:像翻译一样,先将代码编译为机器代码,再加以执行。
  • 问题:

    1. 计算机里的CPU可以直接运行人类编写的程序吗?为什么说编程语言不是和计算机交谈的语言?

      答:计算机能运行的是机器语言,但是编写程序用的是高级语言,不能直接运行。编程语言不是用来和计算机交谈,而是描述要求它如何做事情的步骤。

    2. 有的编程语言,源代码经过编译后形成目标代码,但是这样的目标代码不能直接在CPU上执行,而是需要由一个仿真器程序来解释执行。这样的执行方式是编译的还是解释的?

      答:仿真器可以使一台计算机系统在行为上类似于另一台计算机系统,问题中仿真器进行解释执行,即将代码一句句执行,并非编译为机器代码再执行,所以这种执行方式应该为解释执行



2. C语言


  • C语言的发展史

    • C语言是从B语言发展而来的,B语言是从BCPL发展而来
    • BCPL和B语言都支持指针间接方式,所以C语言也支持,指针是C的灵魂
  • C语言的应用

    • 操作系统、嵌入式系统、驱动程序、底层驱动
    • 因为C语言的执行速度和汇编语言差不多,很快。因此可以发现有些程序员虽然在企业开发的时候用Python,Java等面向对象语言,但在处理某个需要反映及时的模块时候会用C编写,就是因为其执行速度快。
  • C编译的发展史

    • Unix操作系统是与C一起成长起来的,本身就包含着C的编译器cc,像现在的MacOS操作系统其核心就是Unix,可以直接运行.c文件。但我们现在也有Window的操作系统,那后面是怎么处理的?微软开发了编译器mscc

    • 后面有一家机构GUN出了一个编译器gcc跑在Unix和Linux等操作系统上,打败了各个产家做的cc,包括mscc。但是在个人电脑的领域上,Window是占据市场最多的,怎么办呢?有人就像把gcc搬到Window上面,所以就造成现在是以gcc编译器为准的。

    • 要把gcc移植到Window操作系统上,那么就需要WindowOS提供API(应用程序接口)给gcc,这是第一个需求问题。第二个需求问题就是.c文件变成可执行文件.exe,其不是仅依赖cc编译就可以的,还要有库文件lib里面的库函数一起作用才可以。所以lib也需要WindowOS提供API才行。

    • 在做上面两个需求的时候分化了两个做法,一个做法叫cygwin,它给了WindowOS一个Unixlib的接口,.c文件经过gccUnixlib的共同作用下就变成了可以在WindowOS上执行的Unix应用。另一种做法叫minGW,它仅仅把Unixlib换成Winlib而已,其它都一样的,但是现在已经很久没有更新了。

    • 到了现在又有很多种选择,但是本质上还是上面两种做法,只是不同的机构开发而已。现在我们选择TDM-GCC,其安装简单,属于minGW做法。



3. 第一个程序


  • hello world

    # include <stdio.h>
    
    int main()
    {
        printf("hello world\n");
        
        return 0;
    }
    

    所有的程序都要有这一段

  • 做点计算

    # include <stdio.h>
    
    int main()
    {
        printf("%d\n", 23+43);
        printf("23+43=%d\n", 23+43);
        
        return 0;
    }
    

    %d说明后面有一个整数要输出在这个位置上,%d是一个格式占位符

  • C编译器的缺点:无法很好的定位错误在哪

  • 问题:

    1. 常听到有人说他学的是Visual C,有人学的是Turbo C,不是我们学的什么Dev C,是他们的比我们的高级吗?还有GCC到底是什么?

      答:Visual C、Turbo C和DEV-C++都是C语言的IDE,即集成开发环境,没什么实质上的区别,只是开发商不一样,UI界面不一样。GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。)

    2. 为什么看到有的书上的main()是void main(),而我们课件上是int main()?还有main()里面那句return 0;是必须的吗?

      答:void main int main的区别就是有无返回值。在int main 可以出现非 int 类型的东西。在写代码时,一个函数要么有返回值。要么没有返回值,没有返回值就用void来表示。main函数同样的,在没有返回值时加个void 。有的编译器必须main要有返回值 int,那就写成int main。void代表不需要返回值,也就是不需要使用return。

posted @ 2022-05-08 15:13  陈景中  阅读(358)  评论(0编辑  收藏  举报