内容简介

1、课程大纲

2、第一部分第一课:什么是编程?

3、第一部分第二课预告:工欲善其事,必先利其器

课程大纲

不知道为什么,一直对C语言有一种很深厚的“情怀”(类似老罗对锤子手机的那种),说不出来。

也许因为C语言是很多前辈谆谆教诲说一定要学一下的一门编程语言;也许因为C语言是自己学习的专业“嵌入式系统”的首要语言;也许因为C语言自1972年诞生以来历经43年依然独领风骚,位列编程语言排行榜首位;也许因为“C语言之难,难于上青天”,自己以前入门着实困难;也许因为需要5-10年的时间,你才能说比较好地掌握了C语言;也许因为学好了C语言,一般就能轻松入门其他语言。

有太多也许,但是可以肯定的是:C语言是一门充满魅力的编程语言。

它的发明人,“C语言之父” Dennis Ritchie在2011年去世。很低调,甚至没有太多新闻报道。同年乔布斯去世,各界报道铺天盖地。

我想说:应该多纪念那些低调付出的人。

Dennis Ritchie除了C语言这项伟大发明(Windows操作系统,Linux操作系统,苹果操作系统底层几乎全是C语言实现),还与Ken Tompson一起研发了Unix操作系统(虽然大部分工作是Ken起步的,后来Dennis用自己发明的C语言重写了Unix操作系统)。要知道,Unix操作系统成为了后来举世闻名的Linux操作系统的参考对象,Android手机底层就是用的修改过的Linux系统,Mac操作系统底层也是类Unix系统,我们用的iPhone和iPad等的操作系统,底层大部分也是C语言编写的。

不为了提高编程水平,光为了感受大师的风采,光为了探寻一下我们每天都在接触的这门语言,也要学一下这位了不起的犹太人的传世杰作:C语言。

在这个系统课程中,小编和大家一起学习,共同进步,探索C语言的奇妙世界。

我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案。还会带大家用C语言编写三个游戏。

C语言编程基础知识

  • 什么是程序员?

  • 工欲善其事,必先利其器

  • 你的第一个程序

  • 变量的世界

  • 运算符

  • 条件表达式

  • 循环语句

  • 实战:第一个C语言小游戏

  • 函数

  • 练习题

  • 习作:完善第一个C语言小游戏

C语言高级技术

  • 模块化编程

  • 进击的指针,C语言王牌

  • 数组

  • 字符串

  • 预处理

  • 创建你自己的变量类型

  • 文件读写

  • 动态分配

  • 实战:“悬挂小人”游戏

  • 安全的文本输入

  • 练习题

  • 习作:用自己的语言解释指针

用基于C语言的SDL库开发2D游戏

  • 安装SDL

  • 创建窗口和画布

  • 显示图像

  • 事件处理

  • 实战:“超级玛丽推箱子”游戏

  • 掌握时间的使用

  • 用SDL_ttf编辑文字

  • 用FMOD控制声音

  • 实战:可视化的声音谱线

  • 练习题

数据结构

  • 链表

  • 堆,栈和队列

  • 哈希表

  • 练习题

第一部分第一课:什么是编程?

你也许听说过编程,也许你想要真正明白编程到底是怎么一回事。

用C语言编程,是怎么样的呢?用C语言作为入门编程的第一门语言真的好吗?我们能用C语言做任何事吗?

这一课就是为了回答上述可能显得有点愚蠢但实际上很重要的问题。而且借着这些问题,你在学完这一课后会找到你真正想要的答案。

在学一样技术前先了解一下用它能做什么,不是很好么?

我们从最简单的问题开始:

什么是编程?

编程意味着“编写计算机程序”,这些程序能让你的机器(一般来说是电脑)做你要它做的事情。

实际上,你的电脑里充满了各样的程序:

  • 计算器是一个程序

  • 文本编辑器也是一个程序

  • 你的聊天软件(QQ,微信,Skype等)也是程序

  • 你玩的游戏也是程序

上图大家可能不陌生,我那一辈的人很喜欢玩的经典游戏Metal Slug《合金弹头》或称《越南战争》,就是一个程序。

简单来说,在今天的日常生活中,程序随处可见。大到航空母舰、空间站,小到智能手表、iPhone,里面都有各种大大小小的程序。

程序几乎可以让你用电脑做任何事情。你可以自己编写一个革命性的加密软件,也可以编写一个3D格斗游戏。你的电脑可以为你做任何事(除了泡咖啡之类,不过未来应该可以)。

注意了,我可不是让大家现在就去写一个3D格斗游戏,因为那太复杂了,会让你手指抽筋的。我们的课程会循序渐进,一开始是最简单的,可能只是实现在窗口里显示一段文字。

这个系列课程的目的是让读者最终能够自己用C语言实现你想实现的几乎任何程序。

说来说去,C语言是什么呀?

编程,用什么语言呢?


你的计算机(电脑)真的是一个奇怪的家伙,这样说已经算很给它面子了。我们给它传递命令,只能输送给它0或1(因为电脑里面有大大小小的数不胜数的晶体管,而他们被用来做“开关”,0和1正好可以用来表示开启或关闭的两个状态,所以电脑最底层其实都是0和1这样的二进制码)。打个比方,我要让电脑做加法:“计算1+2等于多少”。我实际上输给电脑的是(是我随便写的,我并不记得怎么转换这句话到二进制码):

01010011101100110011110101

正如你看到的,这就是你的电脑所会的语言,被称为“二进制语言”。它也只会这门语言,可以看到这门语言完全不容易理解。

所以,我们的第一个真正的问题来了:

怎么才能够用更简单的语言来和电脑对话呢,难道只能用0和1吗?

你的电脑既不讲中文也不讲英语。然而,即使最疯狂的专家也不会真的要去用二进制码来编写程序,那简直令人难以忍受。

所以,我们的计算机学者们就想到:先用其他简单一些、便于理解的语言编写程序,之后再把它翻译成电脑的二进制语言。

最不容易的,就是要编写这样一个“翻译”程序。幸亏计算机学者们已经把这样的翻译程序写好了,我们也没必要重新做了(着实松了一口气)。所以我们要做的就是告诉电脑:“我要做加法:1+2等于多少”,这句话会被翻译成电脑的二进制码:

01010011101100110011110101

一些术语

上面我在解释时都是用的简单的词语,但要知道在计算机领域,每样事情都有特定的术语。这个系列课程中我们都将使用合适的术语。

这样有好处,不仅可以显得你比较“高大上”,而且当你有一天要跟另一个程序员解释一些原理,用专业术语才好。虽然周围的人可能会把你当火星人看,但大可不必理会。

上面我们说过,我们不可能用0和1来编写程序,所以我们使用“简化的语言”,按专业术语应该被称为“高级语言”。

编程语言有几个等级,等级越高就越接近于我们人类的语言(比如英语)。高级语言使用方便,但是也有一些缺陷,之后我们会看到。

下面列举一些高级语言:

C

C++

Java

Swift

Python

Visual Basic

Delphi

当然这里只是列举几种,要把所有高级语言列出来那得花不少时间。

除了刚才的高级语言,另一个我们要记得的术语是:源代码。所谓源代码,就是你用高级语言写出来的代码。所以是你写源代码,然后再把源代码转化成机器能理解的二进制码。

接下来再来学两个术语:编译器。指的是把源代码转为电脑能理解的二进制码的工具。这个转换的过程,称为 编译。

重要:对于每一种高级语言,都有对应的不同编译器。当然,也不难理解,因为每种高级语言本身是不同的么,我们不可能用C语言的编译器去编译Java的源代码。

之后我们还会看到,即使对于一种高级语言(例如C语言),也存在好几种不同的编译器,有Microsoft(微软)的编译器,GNU的编译器,等等。这些我们会在下一课学到。

由编译器编译出来的二进制程序被称为 可执行程序。所以对于微软下的可执行程序,都有一个后缀名:.exe (就是EXEcutable “可执行的”这个英语单词的前三个字母)。

为什么选择学习C语言

之前说过,高级语言有很多种。我们应该在它们之中特别选择一门来作为入门编程的语言么?

这是大问题。

我们有如下选择:

  • 很高级的语言

非常容易使用,可以说适合普罗大众。其中,有Python,Ruby,Visual Basic等。通常来说,用这些语言写程序会比较快捷。然而它们常需要一些额外的文件(比如 解释器)才能执行。

  • 没有那么高级的语言

这类的高级语言(C语言是一种),诚然不容易编写。但是学习这样的语言你可以更深刻地理解编程的原理和电脑运作的原理。之后你再要学一门新语言会很容易,你完全可以自学。

此外,C语言非常流行。大量我们日常使用的软件都是用C语言编写的。计算机学科也经常用C语言作为教授编程的语言。

你可能会问,有一个问题我不明白:C语言和C++语言有什么区别呢?

可以说,C语言和C++比较类似,都是使用非常广的语言。为了更好地说明它们分别是如何诞生的,我们来说点历史好了:

  • 在电脑重达几吨,大小像一大间屋子那样的时代,计算机领域的前辈们开始发明一门编程语言:Algol

  • 技术不断进步,他们又发明了一门新的语言:CPL,之后发展成为 BCPL,后来被称为 B语言

  • 后来,终于发展成了C语言

  • 又过了一段时间,人们想要在C语言上加一些东西。一些改进,如果你要这么说的话。这门新语言诞生了,就是C++,是基于C语言发明的。C++在C语言基础上加了不少新的东西,使我们可以用不同的方式编程

注意:这并不是说C++比C更优秀,只是可以让我们用不同的方式编程。也不是说C语言相比就是一门老旧的语言,不,C语言今天仍然很常用,它是我们所用的WIndows,Mac OS,Linux,Unix等操作系统的基础。

编程艰辛么?


这个问题可能困扰很多人。是否需要成为有几年研究经验的数学家才能学编程呢?

答案是:绝不。学编程并不需要在数学方面有多大造诣,当然数学好对学编程也是有好处(比如编写3D游戏,就需要有一些空间几何知识)。其实最常用的也就是四则运算了:加,减,乘,除。

那编程有什么难的呢?

诚然,不是那么可怕。但是可能需要知道电脑工作的机制,为了更好的理解我们用C语言做的事。

一个程序员一般有以下特质:

  • 耐心:很多时候,你的程序不是第一次就能顺利运行的,要坚持不懈

  • 逻辑意识:不需要有很多数学知识,但是要会思考。对于认为编程轻而易举的人,对不起了

  • 冷静:急躁起来也不能拿榔头敲电脑啊。要让程序运行不能这样

简单说来,学习编程没有特别需要的技能。一个对数学一窍不通的人也可以成为很好的程序员,关键是要有耐心思考问题。很多人后来都发现自己爱上编程了,变得喜爱思考。


总结一下:

  • 为了实现计算机程序,我们需要用电脑懂得的语言来编写程序

  • 有很多种编程语言,我们可以按等级来分。一般越高级的语言,越容易掌握。但是在最终的程序效能上可能会差一些

  • 我们要一起来学习的C语言被认为是高级语言里偏低级的。它是全世界最著名和最常用的语言

  • 源代码是一系列指令,用编程语言编写

  • 编译器是一个把我们的源代码转换成二进制码(0和1)的程序,转换之后的二进制程序可以被我们的电脑执行。我们一般遇到的 .exe 文件就是二进制文件,里面可没有源代码

  • 编程并不需要很高深的数学知识,除非你的程序要调用一些数学公式,比如加密程序。但是,需要你有逻辑意识,并且有条不紊

第一部分第二课预告:工欲善其事,必先利其器

今天的课就到这里,一起加油吧。下一课一起来看看我们用C语言编程可以用到哪些“利器”。


程序员联盟
微信公众号*您若觉得本文不错,请点击“分享”

*新朋友请关注「程序员联盟」微信搜公众号
 ProgrammerLeague

“程序员联盟”公众号专为程序员,App设计师,各位喜爱编程和热爱分享的小伙伴们推送各样编程相关知识,优秀软件推荐,业界动态等。搜索

ProgrammerLeague 加关注~

持续关注 程序员联盟 微信公众号,更多有趣,有料,有亮点的内容等着你哦!

点击下方“阅读原文”查看 经典教程《C编程语言
第二版 英文》↓↓↓

【C语言探索之旅】 开宗明义及第一课:什么是编程?的更多相关文章

  1. 【C语言探索之旅】 第三课:你的第一个程序

    内容简介 1.课程大纲 2.第一部分第三课:你的第一个程序 3.第一部分第四课预告:变量的世界 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个 ...

  2. 【C语言探索之旅】 第一部分第九课:函数

    内容简介 1.课程大纲 2.第一部分第九课:函数 3.第一部分第十课预告: 练习题+习作 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. ...

  3. 【C语言探索之旅】 第二部分第一课:模块化编程

    内容简介 1.课程大纲 2.第二部分第一课: 模块化编程 3.第二部分第二课预告: 进击的指针,C语言王牌 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...

  4. 【C语言探索之旅】 第三部分第二课:SDL开发游戏之创建窗口和画布

    内容简介 1.第三部分第二课: SDL开发游戏之创建窗口和画布 2.第三部分第三课预告: SDL开发游戏之显示图像 第三部分第二课:SDL开发游戏之创建窗口和画布 在上一课中,我们对SDL这个开源库做 ...

  5. 【C语言探索之旅】 第二部分第二课:进击的指针,C语言的王牌!

    内容简介 1.课程大纲 2.第二部分第二课: 进击的指针,C语言的王牌 3.第二部分第三课预告: 数组 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...

  6. 【C语言探索之旅】 第一部分第十课:练习题+习作

    内容简介 1.课程大纲 2.第一部分第十课: 练习题+习作 3.第二部分第一课预告: 模块化编程 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三 ...

  7. 【C语言探索之旅】 第三部分第一课:SDL开发游戏之安装SDL

    内容简介 1.课程大纲 2.第三部分第一课: SDL开发游戏之安装SDL 3.第三部分第二课预告: SDL开发游戏之创建窗口和画布 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会 ...

  8. 【C语言探索之旅】 第二部分第十课:练习题和习作

    内容简介 1.课程大纲 2.第二部分第十一课:  练习题和习作 3.第三部分第一课预告:  安装SDL 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言 ...

  9. 【C语言探索之旅】 第二部分第六课:创建你自己的变量类型

    内容简介 1.课程大纲 2.第二部分第六课: 创建你自己的变量类型 3.第二部分第七课预告:   文件读写 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...

随机推荐

  1. mysql-merge合并表

    merge表 注意: 1 每个子表的结构必须一致,主表和子表的结构需要一致, 2 每个子表的索引在merge表中都会存在,所以在merge表中不能根据该索引进行唯一性检索. 3 子表需要是MyISAM ...

  2. HTML5之画布的拖拽/拖放

    <!DOCTYPE HTML> <html> <head> <script type="text/javascript"> func ...

  3. SE 2014年4月22日(二)

    如图配置: 网络中存在三个公有AS 其中AS200使用了 BGP联盟技术(如图配置) 在AS 100 中R1上起源了四条BGP路由,(1)要求全网BGP设备均能够正常学习 (2)要求:(使用BGP团体 ...

  4. java单例模式(线程安全,效率高,双重推断)

    这样的方法,在获取单利的时候,避免了线程锁,导致訪问该方法速度非常慢, 同是,防止了多线程同事房屋该方法就会产生多个实例的问题. 效率高.线程安全. public class TestInstance ...

  5. __iomem解析

    以下是在学习电池驱动中遇到的知识点之_iomem A new I/O memory access mechanism Most reasonably current cards for the PCI ...

  6. deinstall oracle 11g on linux

    deinstall oracle 11g on linux   From 11gR2, oracle provide us an deinstall tool. With that now we ca ...

  7. java api例子网站

    http://www.programcreek.com/java-api-examples/ http://www.apihome.cn/api/list/ http://www.docjar.com ...

  8. WPF换肤之八:创建3D浏览效果

    原文:WPF换肤之八:创建3D浏览效果 上节中,我们展示了WPF中的异步以及界面线程交互的方式,使得应用程序的显示更加的流畅.这节我们主要讲解如何设计一个具有3D浏览效果的天气信息浏览器. 效果显示 ...

  9. Windows phone 8 学习笔记(9) 集成

    原文:Windows phone 8 学习笔记(9) 集成 本节整理了之前并没有提到的Windows phone 8 系统相关集成支持,包括选择器.锁定屏幕的.联系人的访问等.选择器列举了若干内置应用 ...

  10. Redhat 6.3中syslog信息丢失

    我们採用Linux的syslog来记录产品的debug log. 调用当中的一个可运行文件.运行完命令之后,查看debug log的信息,竟然从某一条log之后的log都丢失了.多次尝试后,发现每次都 ...