//前言

"凡是能够说的,都可以说清楚;凡是不能说的,就应该保持沉默."

维特根斯坦的这一教诲,令人深思--教育乃至生活,人生中的许多问题,都坏在这一点上--本来能够说清楚的,结果愣是搞得不清不楚.

计算机的事情是绝对可以说清楚的.很多同学想入门编程,但苦于没有人教,或苦于教不得法;而许多选择自学的同学,又苦于找不到一本"好书",当然并非真的没有好书--譬如C语言之父Dennis Ritchie就曾亲自写了一本

,没有人否认其价值--而是感觉书中太多"黑话",读不进去,他们更想听到白话,听到"人话".

因此,本专题致力于解决那种"不讲人话"的问题,尽量以直白的语言,用初学者听得懂的话,来讲述编程,讲述C语言;帮助初学者 在 已有的经验/日常的语言 与 新知识/术语/行话 之间 建立一座理解的桥梁,此之谓入门.

关于专题的几点说明:

1知子莫若父,没有人比Ritchie本人更懂得C语言,因此本专题并不打算重新组织C语言的知识与内容,而是以

作为蓝本;我提供的,主要是一种新的讲述方式.

2编程需要实践,编程环境的搭建/工具的选择方面,各自趁手便好,这些基本上可以通过搜索引擎解决,也不多说.

3读者朋友有任何疑问,都可以在公众号主页留言(文章展示页暂时无法留言),后台收到之后会作整理并以"答疑"作为标题发在下一期;一来解惑,二是作为对正文的补充.

//第一讲 Hello World程序

#include

int main()

{

printf("Hello World!");

return 0;

}

这个程序(以上6行代码)的功能非常简单,就是在屏幕上输出(也称为打印出)这么几个字:

Hello World!

想象你是一个包工头,承包了一所学校的日常建筑修理工作,有一天校长跟你说,要在一面墙上写上一条宣传标语--好好学习,天天向上.

你手下有一个油漆工,但是这个油漆工脑子不太灵光,每次派他干活都要把要求,操作工序说得清清楚楚,于是,你编辑一条信息:

1带着工具箱(油漆桶,刷子);

2去南墙上写"好好学习,天天向上"这么几个字;

3写好了打个电话报告我;

发给了他.

程序员就像这个故事里的包工头,而计算机就像那个脑子不太灵光的油漆工.

包工头用3条命令告诉油漆工怎么干;程序员用6行代码告诉计算机怎么干.

油漆工在南墙上刷好了"好好学习,天天向上"这几个字;计算机在屏幕上打印出来"Hello World!"这几个字.

所谓编程,就是你有一个任务,为了完成这个任务,你要清清楚楚地告诉计算机,一步一步该怎么做.

这种告诉,必须用计算机能听得懂的语言,这种语言就是编程语言.什么是语言?语言一般指人类语言,是人类沟通的机制,譬如汉语,英语.什么是编程语言?编程语言是人和计算机的沟通机制.编程语言和人类语言最大的差别在哪里呢?正如上面你对油漆工说的那三句话,其性质是一种命令,而不是像"我爱你"这种表达情感的话,C语言也是这样,它的性质很单纯,不像人类情情爱爱那么复杂,你敲下的每一行代码,本质上都是对计算机下命令,你和计算机,是纯粹的主人/奴隶关系.再重复一遍,你用编程语言写下的每一行代码,都是在对计算机下命令.

一步一步,步骤的区分,是因为每个步骤自有其连续性与一致性,对于油漆工,走路,写字,打电话,是不同的动作,有一种天然的区分;对于计算机,算一次加法,在屏幕上打印一个字符,也都是不一样的动作.不管是人类还是计算机,其行为都是有粒度的,每一个任务,都是通过一连串的简单动作完成的.

剖析一下Hello World程序.

第一行 #include

既是语言,就有一定的格式与规则.

#include

是一个固定格式, 表示本程序需要使用xxx工具箱;用一个#打头,然后敲下include命令,再用<>指定工具箱的名称;

这一句就是告诉计算机,我要使用某某工具箱(让油漆工带上家伙),命令它准备好;

记住,每一行代码都是一条命令!

.h是文件后缀名,h是header的首字母,所以这种.h文件又称为头文件;你可以这样理解--一个.h文件(头文件)就是一种工具箱;

stdio是 standard input output 的缩写,中文叫标准输入输出,因为在屏幕上输出

Hello World!

需要用到这个工具箱,所以要引用stdio.h这个头文件.

第二行 int main()

顾名思义--main,中译为主要,主干,主体--就知道它是个很重要的东西;

计算机执行一个程序,会首先找main,main是程序的入口标志.

每个程序都有入口,且必须叫main这个名字;至于其内容,则由程序员自定义,后面那一对{}里面括起来的东西就是main的内容,即一系列命令;

那么main是个什么东西呢?

一个单词main,拖着一对大括号{},前面还有一个int(之类)的字样;在C语言中,这样的结构叫做函数;

main当然也是函数,称为main函数;

说到函数,我们自然会想到y=f(x)这种数学式,对,函数就是f,英文为function,翻译成中文,叫功能,或者函数;

先说函数.x叫做自变量,通过f的作用,变成y.这就是数学函数f(x);

C语言函数具有同样的结构:输入->转换处理->输出;

用洋文说一遍:Input->Process->Output,我称之为IPO结构;

再说功能,C语言函数除了可以像数学函数那样完成某种数学上的运算转换之外,还能搞事--譬如发出声音,打印文字等等;

比较一下main()与f(x)这两种形式,有点像,但是main的括号里没有东西,这是什么意思呢?就是说没有输入,或者说不需要输入;不需要输入它也能搞事;

直观上,函数一词,在编程中,比在数学中具有更加丰富的内涵,但因为翻译的问题,仍旧称为函数,所以你也要解放一下思想,从原来的(数学)函数概念中解脱出来,不要把C语言函数和数学函数混为一谈;

对编程初学者而言,最大的门槛是思维定势,因为在C语言里,曾经熟悉的数字/单词/符号,忽然被赋予了全新的意义,一下子很难习惯,必须经历一个克服数学的过程,然后建立新的认知体系;

如何克服,如何建立,我这里有两把钥匙,慢慢道来;

回到main函数的结构:

int main()

{

...

}

main()已经解释了;{}也解释了,那么int是什么呢?刚才讲了IPO,输入,处理,输出;输入是没有的,那么输出呢?

这个int就和输出有关系;

数学中有整数与小数之区分,C语言中也有各种数据类型,这里出现的int,是integer(整数)的缩写,在程序中惯称为整型;

在函数名前面写一个int,表示这个函数输出一个int类型的数;

这个输出,对应的就是{}里面最后一句:

return 0;

return,中文为返回,形象地讲就是回弹,把结果甩回去,文明的说法就是返回,或者叫输出;这里返回一个整数--0;

分号呢?分号是{}里面每一行代码结束的标志,当然,所有的标点符号都得用半角(即英文标点符号);

看第四行:

printf("Hello World!");

print,打印的意思,f,function的意思,printf,就是打印函数的意思;注意,这里的打印不是用打印机,是打印(输出)在屏幕上的意思;

printf这个函数,之前讲过,它在 stdio.h这个工具箱中,属于计算机提供的基本工具;

从IPO的角度理解,I就是()里面的那一段,"Hello World!",告诉计算机,你要打印的是这么几个字;加引号,是约定的一种格式;

至于P,计算机是怎么处理,怎么实现的,暂时不用管,目前只需要知道printf的功能是打印,知道它怎么使用就可以了;

譬如你已经见识了printf "Hello World!",那么你就会printf "I love you!!!" 了;

在main函数中使用printf函数,这种行为称为函数调用,即在一个函数中,可以调用另外一个函数;

Hello World程序,剖析完毕.

这个简短的程序,两处涉及到函数概念,看起来好像挺重要的,那么函数在C语言中,函数是个什么地位,什么作用呢?

我们说,人的身体是由细胞构成的,不同的细胞有不同的机能;

整个社会又是由个人组成的,每个人有社会分工;

函数之于C语言程序,一如细胞之于人体,个人之于社会,都是一个系统里的行为主体,基本单元;

所谓行为主体,就是相对独立而又能互相合作,建立联系的基本单元;

A函数调用B函数,B函数又调用C函数......一个程序就是这样被组织起来的;

函数,function,或者译为功能,直白地说,就是"干活的东西",当然最终是计算机的各个部件去具体落实;

所以一个个函数,就像大大小小的监工一样,它们清清楚楚地告诉计算机,你需要为我做哪些事情:

1,

2,

3,

4,

...

//编程入门的两把钥匙

1你敲出的每一行代码,都是在给计算机下命令

随时提醒自己,你敲出的每一行代码,都是在给计算机下命令;代码不是陈述事实,更不是表达感情,计算机没有这类功能,它唯一能做的,就是服从代码,代码就是命令!

2建立IPO的观念

贯穿整个程序的,是大大小小的IPO结构,大到一个软件系统,中到一个函数,小到一行代码,都是IPO(这一点以后还会详细讨论).

在一个程序中,可以说到处都是IPO的结构;函数,就是贯彻IPO,体现IPO的最典型的具体形式.

//学习方法

编程是理论的,也是实践的,缺一不可,或者说,唯有通过实践,你才能懂得理论.

现代计算机之父冯诺依曼有言:

"年轻人,在数学中,你并不真的理解什么,你只是习惯它们".

这也是人类学习的通则,不管是哪一个专业,艺术,数学,物理,包括编程,都是如此.

所谓习惯成自然,当你习惯了,知识就化在你的大脑中,自然而然,不需要刻意,不需要强调.

经常泡在里面,习惯了,自然而然就会了.

c语言编程入门教程+网易,人话讲编程·C语言入门:第一讲,Hello World相关推荐

  1. c语言编程:vc++6.0入门教程及习题_百度文库,C语言编程:vc++6.0入门教程及习题.doc...

    C语言编程:vc++6.0入门教程及习题.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址 ...

  2. 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用

    [一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...

  3. 小程序入门教程之微信-03-脚本编程

    本篇的难度要大于前两篇,如果觉得不好理解,可以先跟着例子,动手做一遍,然后再读文字说明,可能就容易理解了. 所有示例的完整代码,都可以从 GitHub 的代码仓库下载. 一.数据绑定 前面的所有示例, ...

  4. python快速编程入门教程-终于懂得python快速编程入门教程

    为了提高模块加载的速度,每个模块都会在__pycache__文件夹中放置该模块的预编译模块,命名为module.version.pyc,version是模块的预编译版本编码,一般都包含Python的版 ...

  5. kuka机器人焊接编程入门教程_套装 官方正版 KUKA工业机器人从入门到精通 共3册 库卡 基础入门与应用案例精析 编程高级教程 编程与实操技巧...

    <KUKA工业机器人基础入门与应用案例精析> 本书基于作者多年与KUKA机器人相关的从业经验来编写,全书共7章,主要围绕KUKA机器人的机械.电气.操作.配置软件.编程软件以及应用等方面展 ...

  6. 世恒易语言百集教程在线观看.非常好的易语言入门教程哦

    世恒易语言百集教程.非常好的易语言教程.唯一在线可以看的地址是biliblili.一般都要下载的啊.并且是exe格式.不方便观看.这套可以在线看. 世恒易语言百集教程在线观看 点击在线观看 https ...

  7. linux下的c 编程入门教程,Linux下的C编程入门教程.ppt

    <Linux下的C编程入门教程.ppt>由会员分享,可在线阅读,更多相关<Linux下的C编程入门教程.ppt(14页珍藏版)>请在装配图网上搜索. 1.Linux下c+编程, ...

  8. c语言5基础教程,[简001]《极简C语言入门教程》共5章

    Saturday,May 18,2019 ---Andy ###目录: 前言 第一章 数据类型 1.1 数据类型 1.2 宏定义.常量.变量(一般和指针型) 第二章 格式化输入输出 2.1 输入 2. ...

  9. 网络安全工程师入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

    前言 想要成为网络安全工程师,却苦于没有方向,不知道从何学起的话,下面这篇 网络安全入门 教程可以帮你实现自己的网络安全工程师梦想,如果想学,可以继续看下去,文章有点长,希望你可以耐心看到最后! 1. ...

最新文章

  1. php帝国下载文件,帝国CMS如何支持弹出下载txt jpg等格式
  2. 《区块链开发指南》一一第1章 区块链基础
  3. exists子查询 mysql
  4. DataTable 类(一)表结果操作
  5. 03-04 元素定位工具
  6. 万以内的字符串整数变成汉子字符串
  7. hadoop 2.7.3 源码编译教程
  8. 网络协议篇之CWMP协议(一)—— CWMP(TR-069)基础
  9. 计算机视觉的一些测试数据集和源码站点
  10. 人工神经网络理论及应用第三章课后题答案
  11. 轻松搞懂均匀分布、高斯分布、瑞利分布、莱斯分布(含MATLAB代码)
  12. 华为员工魂丧非洲【转发】
  13. BUUCTF pwn rootersctf_2019_xsh
  14. openwrt路由表设置_OpenWrt路由器常用设置
  15. 品葡萄酒的11个常见问题
  16. Selenium(2): DOM元素定位、操作
  17. 中科大和华师大计算机,今天就是你最后的机会,2019华师软件工程跨考经验
  18. 相似度的几种常见计算方法
  19. 活动目录是什么?有什么用?
  20. 实现Python爬虫的思路、原理

热门文章

  1. C predefined macros __FILE__,__LINE__,__func__
  2. centos怎么把计算机调到桌面,CentOS下命令行和桌面模式的切换方法
  3. 服务器ae是什么位置,ae 渲染服务器
  4. 【周赛-简单】5495. 圆形赛道上经过次数最多的扇区
  5. react 或者 vue,如何做 SEO 优化?
  6. 凌晨 计算机博士,凌晨三点,被我的博士老婆喊起来写程序……
  7. 微信老外产品经理:《中国移动应用设计趋势》
  8. 微信小程序普通二维码解析
  9. wpsa4排版_如何用WPS快速排版
  10. springAop遇到的问题