当前课程知识点:程序设计基础 >  第一章 编程初步 >  师生问答 >  师生问答二:语言选择

返回《程序设计基础》慕课在线视频课程列表

师生问答二:语言选择在线视频

师生问答二:语言选择

下一节:师生问答三:关于函数

返回《程序设计基础》慕课在线视频列表

师生问答二:语言选择课程教案、知识点、字幕

老师 您好

我在您课上听到过很多种计算机的语言

那为什么我们会有这么多种语言呢

关于这个问题呢 我觉得是这样

咱们自然语言当中其实产生这个什么英语啊 汉语啊

这个是由于这个文化的差异

但是 大家觉得 计算机嘛 都是这个一起发明的

就产生同一个语言就得了嘛

为什么还会产生这么多语言是吧

我觉得我们提到过一点啊

计算机语言实际上是为了与计算机沟通来设计出来的

那人们实际上遇到一类的问题

发现已有的这些计算机语言呢

并不适合于表达这一类的问题

不适于针对这一类的问题

跟计算机做沟通的时候

我们就会尝试设计新的语言

比如说 我们课上这个 给大家列了很多语言

其中有一个语言 不知道有没有注意

叫PHP的语言

这是一种呢

针对于方便这个网站的服务器程序设计来设计出的一种语言

那这种语言呢 它提供更多的

既然是为了方便网站设计嘛

它提供了更多的这种 网络访问啊 电子邮件相关的啊

数据库相关的 以及这个字符串处理等等这样地功能

使得这个网站的设计 更加的方便

其实很难想象 如果大家以后学的多了

就算把这个C语言学完了

也很难想象大家从头用C语言写一个网站 很困难

再比如呢 这个Mathematica语言

大家听这个名字 实际上就是英文的这个数学的这个词

所以听这个名字就知道

是为了数学而设计出的一种程序设计语言

那它提供了更多的这种数学函数

甚至于这个方程的求解 方程组的求解

求导 偏微分方程等等等等

非常高深的这种数学的工具都在里面

甚至于说呢 它还提供了一些这种绘制功能

可以让你们很快的画出一种这个函数的非常美妙的一些图像

比如说我这里给大家举一个例子

很炫的这种3D的这个函数图像

那我觉得还有一种另一个方面啊

有的时候是选择一个语言呢

是由于操作系统的这种限制或偏好

比如说呢 同学们应该都听说过的手机上的安卓系统

在这个安卓系统上的应用呢

就比较推荐用这个Java语言来书写

那反过来呢 另一个这个苹果手机的上面的应用

就比较推荐Objective-C那种语言来书写

这是这个关于操作系统的一些偏好

那么 如果从这个程序执行的角度

会有三种类型 我认为有三种类型

一种是C语言等等为代表的这种叫“编译方式”

他呢 就是像咱们之前演示过的

在程序执行之前 需要先做一个编译的过程

把这个程序呢

翻译成一个计算机能认识可执行的一个文件

然后再把这个文件交由操作系统来执行

那第二种呢 是像PHP 我们刚才提到的

这种是不将这个程序做一个这种事先的翻译

而直接将个程序呢交给一个解释器来解释执行

这个解释器拿到的就是一个咱们写出来的这种文本的程序

然后它会读这个文本当做字符串一样

然后做对应的处理

读到一个功能

然后就去执行对应的功能

所以这种情况呢

其实很适合来表达一个网页

那么网页的这种形式

其实就是要把一段文本

翻译成一个咱们看到的这个很炫的网页的图像啊

甚至动画啊这个效果

那第三类呢

我觉得是这个以Java为代表的这种混合式的

结合了两种特点

那么Java语言呢就会将这个程序先编译

成一种中间的语言

他认为比较方便表达的这个中间语言

这个中间语言呢

再交给解释器来解释执行

大概有这么三种

那么其实随着这个语言的发展啊

这个大家也觉得这个这三种方式就是各有利弊

所以 很多语言呢

开始支持编译混合解释的方式

两种方式都可以

你可以选择把这个程序编译成一个可执行的文件

也可以直接把这个程序交个解释器来执行

那在我们这么多的语言当中

哪一种语言是更好的呢

为什么我们要选择C++的这样一个语言呢

是因为它更有优势么

这个问题我可不敢这么说

我可不敢说C++语言是最好的

你可以尝试把这个问题发到一些这个程序员的网站上

相信会引起很长时间的争吵

甚至于有这个调侃程序员的一个笑话

就是说这个有一天 女神跟这个程序员说

你要是能发一个帖子把它这个顶上十大

我就跟你走 干什么都行

然后程序员就去发了

然后真的把这个帖子顶上十大了

然后女神就很好奇

说你发了一个什么帖子啊

程序员说 我发了一个帖子叫 我认为PHP是最好的语言

然后就吵开了

然后女神就说 好吧

我服了 我跟你走 你干什么都行

然后程序员说不行 今天不行

这个我还得去说服他们PHP就是最好的语言

就可能在每一个人的心中都会有一个这种答案

但是没有一个说哪一种语言是大家公认的最好的语言

但是呢 如果说这个使用的人数上

如果我们可以用百度来搜索一下这个计算机语言排名

大家可以发现一个TIOBE这样一个软件公司

他们通过搜索引擎呢做了一下统计

统计了一下这个各种语言的流行程度

就是这个用户的人数的排名

每个月更新一次啊 更新的挺勤的

大家可以看到这个月的排名呢

从最新这个排名中

我们可以看出 C和Java语言是排在前两位的

那C++呢其实也没有靠后多少

也是名列前茅的

但是这里呢 只是说这个语言使用人数

并不代表说就是排第一的是不是就是最好的

那我们为什么会选择C++语言呢

那它有哪些特点

好 那这个问题我觉得可以从我们的这个

C和C++语言的这个历史说起

最早呢 1970年

大家知道这个第一台计算机什么时候发明的

1970年的时候其实也没过二十几年

也是很早的一个时间

1970年 Ken这个人首先研制出了B语言

然后过了两年

1972年的时候

Dennis觉得这个B语言有很多的缺陷

在B语言的基础上呢

他为了研制这个UNIX的系统

在B语言的基础上完善了一下

发展出了C语言

所以呢 这个人被称为C语言之父

那到后来

1983年的时候 Ken和Dennis这两个人

就因为C语言和UNIX系统这个杰出的成就

获得了咱们计算机界的诺贝尔奖 我们叫图灵奖

咱们在上课的时候也说了

图灵这个人就是理论计算机的创始人对吧

那诺贝尔那个年代比较早

他那个时候还没有计算机

所以这个计算机界的诺贝尔奖

我们有一个图灵奖

那为什么就因为这两个事就给他一个最高奖呢

这个UNIX系统啊

在后来影响了几乎所有的现代的操作系统

包括大家的熟悉的Linux Windows

包括苹果上的MAC iOS等等

那么C语言呢也几乎影响了现代很多的这种现代的编程语言

包括咱们的C++ C# Objective-C Java JavaScript等等

所以呢我们选择这个C和C++

主要是因为它有一些这个历史渊源

它对很多后面的一些语言影响很大

大家学完这个C和C++之后呢

可能学习其他的语言

会觉得语法上就很像 很容易上手

那么刚才是C语言的

到1983年的时候

贝尔实验室的这个叫Bjarne这个人

在C语言的基础上发展出了C++这个语言

那么最初呢这个语言的名字不叫C++

叫C with Classes 带类的C

那么随后呢又不断的这个新特性被加到C++的语言当中

这些新特性总结起来

最后发展成了我们这个面向对象的编程的思想

我们这门课呢

其实不会涉及到太多的面向对象的编程思想的内容

这可以单独去上一门课了

有兴趣的同学可以继续学习

但是呢我们这门课当中

用到了一些只有C++才有的表达方式

所以我们说这个我们用的选择语言还是C++语言

那么这些表达方式呢

使得原来C语言当中不太容易理解的一些表达方式

被替换成了一些比较容易理解的表达方式

所以呢如果有兴趣的同学可以下去再找一些参考书

看看到底哪些表达方式是C没有的C++才有的

那说到这里 老师您能推荐一些参考书么

啊好的

我这里列了几本啊

这个第一本呢

是我们在清华大学上课的时候用做程序设计基础教材的一本

第二本呢是关于语言本身的《C++程序设计语言》

大家可以看到作者就是这个C++设计者

所以这本书应该是很权威的语言的详解

程序设计基础课程列表:

第一章 编程初步

-1.1 基础知识

--1.1.1 什么是程序?什么是语言?

--1.1.2 什么是程序设计?

--1.1.3 计算机发展史

-1.2 买菜问题

--1.2.1 问题描述

--1.2.2 程序的基本结构

-1.3 数学运算

--1.3.1 数学运算符

--1.3.2 数学函数

-1.4 补充说明

--1.4.1 编程环境的下载与安装

--1.4.2 程序基本结构中的含义

--1.4.3 格式与风格

-1.5 总结

--1.5 总结

-程设论道

--程设论道

-师生问答

--师生问答一:怎样学好程序设计

--师生问答二:语言选择

--师生问答三:关于函数

-第一章 编程初步--语法自测

第二章 变量与代数思维

-2.1 关于超级计算器的几点思考

--2.1.1 关于超级计算器的几点思考

-2.2 电子秤模拟 — 背景介绍及需求分析

--2.2.1 电子秤模拟 — 背景介绍及需求分析

-2.3 电子秤模拟 — 代码实现

--2.3.1 电子秤模拟 — 代码实现

-2.4 变量定义与变量类型

--2.4.1 变量定义与变量类型

-2.5 猜数游戏与数据表示

--2.5.1 猜数游戏与数据表示

-2.6 关于变量的讨论

--2.6.1 变量的初始值

--2.6.2 变量类型

--2.6.3 变量内存单元地址

--2.6.4 存“变量地址”的变量——指针

--2.6.5 指针的 读/写 操作

--2.6.6 指针的 加/减 操作

--公告

-2.7 变量体现的计算思维

--2.7.1 变量体现的计算思维

-程设论道

--程设论道

-师生问答

--师生问答

-第二章 变量与代数思维--语法自测

第三章 逻辑推理与枚举解题

-3.1 谁做的好事——语义表示

--3.1.1 谁做的好事——语义表示

-3.2 谁做的好事——真假检查

--3.2.1 谁做的好事——真假检查

-3.3 谁做的好事——循环枚举

--3.3.1 谁做的好事——循环枚举

-3.4 谁是嫌疑犯——多重循环枚举

--3.4.1 谁是嫌疑犯——多重循环枚举

-3.5 谁是嫌疑犯——破案线索表示

--3.5.1 谁是嫌疑犯——破案线索表示

-3.6 谁是嫌疑犯——用二进制枚举

--3.6.1 谁是嫌疑犯——用二进制枚举

-程设论道

--程设论道一

--程设论道二

--程设论道三

-师生问答

--师生问答一:字符与ASCII码表

--师生问答二:其他循环语句、运算符优先级与变量作用域

-第三章 逻辑推理与枚举解题--语法自测

第四章 筛法与查找

-4.1 插花游戏

--4.1.1 问题提出(求素数)

--4.1.2 函数初探

--4.1.3 运行演示

-4.2 筛法

--4.2.1 筛法思路

--4.2.2 数组的定义

--4.2.3 代码翻译

--4.2.4 运行演示

--4.2.5 小朋友数人数

--4.2.6 运行演示

--4.2.7 韩信点兵

-4.3 线性查找

--4.3.1 扑克查找问题

--4.3.2 扑克查找问题代码翻译

--4.3.3 最小值问题

--4.3.4 最小值问题代码翻译

-4.4 折半查找

--4.4.1 提问

--4.4.2 折半查找思路

--4.4.3 折半查找代码翻译

--4.4.4 折半查找运行演示

-4.5 排序问题

--4.5.1 插入排序

--4.5.2 选择排序

--4.5.3 函数写法

--4.5.4 运行演示

-4.6 总结

--4.6.1 总结

-程设论道

--程设论道一:数组与编码思维

--程设论道二:筛法

-师生问答

--师生问答一:函数与面向过程编程

--师生问答二:数组的下标越界

-第四章 筛法与查找--语法自测

第五章 分治思想与递归

-5.1 阶乘

--5.1.1 阶乘问题

--5.1.2 递归解法

--5.1.3 递归小结

-5.2 排序

--5.2.1 归并排序——总体思路

--5.2.2 归并排序——思路分解

--5.2.3 归并排序——代码解说

--5.2.4 快速排序——总体思路

--5.2.5 快速排序——代码解说

--5.2.6 排序总结

-5.3 矩阵填充

--5.3.1 矩阵填充问题

--5.3.2 代码解说

-5.4 分书与八皇后

--5.4.1 问题描述

--5.4.2 问题分析——共性

--5.4.3 问题分析——区别

--5.4.4 解题准备——二维数组

--5.4.5 解题准备——递归设计

--5.4.6 代码解说——分书问题

--5.4.7 代码解说——八皇后问题

-5.5 青蛙过河

--5.5.1 问题描述

--5.5.2 问题分析——简单情况

--5.5.3 问题分析——复杂情况

--5.5.4 问题分析——一般情况

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答一

--师生问答二

-第五章 分治思想与递归--语法自测

第六章 递推与动态规划

-6.1 兔子数列问题

--6.1.1 问题描述

--6.1.2 按大小兔子分别递推

--6.1.3 按总数递推

--6.1.4 不用数组递推

-6.2 分鱼问题

--6.2.1 问题描述

--6.2.2 从A到E递推

--6.2.3 从E到A递推

-6.3 橱窗的插花问题

--6.3.1 问题描述

--6.3.2 题意理解与分析

--6.3.3 用枚举思想解题

--6.3.4 采用递推的优化算法

--6.3.5.1 采用动态规划算法—优化分析

--6.3.5.2 采用动态规划算法—递推代码

--6.3.5.3 采用动态规划算法—计算过程

--6.3.5.4 采用动态规划算法—输出方案

--6.3.6 动态规划总结

-6.4 最长公共子序列问题

--6.4.1 问题描述与理解

--6.4.2 问题分析

--6.4.3.1 动态规划解题(1)

--6.4.3.2 动态规划解题(2)

--6.4.3.3 动态规划代码

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第六章 递推与动态规划--语法自测

第七章 文本数据处理

-7.1 统计记录总数

--7.1.1 问题分析

--7.1.2 读文件操作

-7.2 统计活跃用户数

--7.2.1 问题分析

--7.2.2 字符串

--7.2.3 程序翻译与演示

-7.3 统计在线时长

--7.3.1 问题分析

--7.3.2 结构

--7.3.3 程序翻译与演示

--7.3.4 写文件操作

-7.4 总结

--7.4.1 总结

-程设论道

--程设论道

-师生问答

--师生问答

-第七章 文本数据处理--语法自测

第八章 非文本数据处理

-8.1 将数据组织成链表

--8.1.1 链表的基本概念

--8.1.2 代码讲解

--8.1.3 链表遍历与释放

-8.2 提高链表访问效率 —— 哈希链表

--8.2.1 简单的哈希算法

--8.2.2 算法实现

-8.3 以二进制文件存储链表

--8.3.1 二进制文件的操作方法

--8.3.2 代码讲解

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第八章 非文本数据处理--语法自测

第九章 可配置的程序设计

-9.1 自动售卖程序

--9.1.1 提出问题与初步设计

--9.1.2 细化实现订单处理

--9.1.3 使程序更健壮

-9.2 配制水果信息

--9.2.1 提出问题与设计文件格式

--9.2.2 实现订单处理功能

-9.3 指定界面语言

--9.3.1 提出问题与命令行参数

--9.3.2 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

-第九章 可配置的程序设计--语法自测

师生问答二:语言选择笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。