【VC++开源代码栏目提醒】:本文主要为网学会员提供“0基础学C语言 - 编程语言”,希望对需要0基础学C语言 - 编程语言网友有所帮助,学习一下!
本文由tsfh贡献 ppt文档可能在WAP端浏览体验不佳。
建议您优先选择TXT或下载源文件到本机查看。
第1章 踏上征程前的思想动员 首先要恭喜读者无论出于什么样的原因读者 选择了自学C语言这是一门强大而灵活的语言 同时也代表着学习上会遇到很多困难但同样要 恭喜读者选择了本书因为笔者是十几年前自学 的C语言知道学习C语言的酸甜苦辣因此笔者 有信心带领读者轻松的学好C语言用好C语言。
本书面向的是纯C的初学者初次接触C语言或者 头一次接触编程领域。
如果读者有过其他语言的 编程经历当然能帮助理解C语言。
1.1 为什么选择C语言 为什么要选择C语言这个问题是每个读者要问自 己的问题如果掌握了C语言之后还是不能满足 读者的需求那么学习C语言就是一件浪费时间的 事情。
笔者尝试回答这个问题如果笔者的回答 不能令读者满意也许读者该选择另外一门语言。
1.1.1 在计算机领域C语言大小通吃 C语言的应用极其广泛从网站后台到底层操作系统从 多媒体应用到大型网络游戏均可使用C语言来开发。
1C语言可以写网站后台程序。
2C语言可以写出绚丽的GUI界面。
3C语言可以专门针对某个主题写出功能强大的程序库 然后供其他程序方便使用从而让其他程序节省开发时间。
4C语言可以写出大型游戏的引擎。
5C语言可以写出另一个语言来。
6C语言可以写操作系统和驱动程序并且只能用C语言 编写Linux操作系统的全部源代码都可以从网上得到要 深入了解操作系统的运行秘密懂C语言就能看懂。
7任何设备只要配置了微处理器就都支持C语言。
从 微波炉到手机都是由C语言技术来推动的。
1.1.2 掌握了C语言其他类似语言不学自通 当掌握了C语言后再去学习其他面向过程的语言 最多一个星期就能学会。
因为万变不离其宗只 是语法上有些许更改而思想却没有更改。
有些 语言甚至1个小时就明白如何使用。
1.1.3 C语言久经考验有现成的大量优秀代码和资料 因为C语言已经存在很多年了它有广泛的使用团 体并且有大量的现成代码可以利用。
这就使读者 能在过去程序的基础上快速和高效的编写新的 算法和函数。
C语言是一个开源组织的语言。
全球 著名的开源组织网站“www.sourceforge.net” 能找到任何想要的
开源代码。
C语言使用者众多 讨论者也就众多有数不尽的资料可以学习。
1.1.4 简洁、紧凑使用方便、灵活功能强大执行效率高 所有的优点都是基于C语言的简洁、紧凑使用方 便、灵活功能强大执行效率高。
C语言仅有32 个关键字9种控制语句却能完成无数的功能。
某些方面C语言可能确实不如其他语言优秀比如 字符串处理方面就不如Perl语言比如数值计 算方面就不如Fortran语言比如人工智能方面 就不如Lisp语言。
可是这些语言在其他方面却远 远不及C语言。
而且C语言有其他诸如表达力强 移植性好的特点现在也许读者还无法理解随 着时间的推移将会慢慢了解到。
如果上面的回答还是不能满足读者的需求那么 最后一条一定可以满足精通了C语言工作不 用愁 1.2 如何学好C语言 无论出于什么目的一旦下定决心准备学习C语言就要端正思想 因为听说C语言难所以觉得学不好是不可取的。
只要读者掌握一 些方法克服心理上畏难、不轻言放弃是完全可以学好的。
1多动手少求人所有的问题都可以通过自己编写代码观察结果 解决。
凡是可以通过编写代码观察到结果的问题都不应该成为一个 问题。
2多学习优秀代码。
C语言灵活简洁即使编写出不好的代码也可以编译出可以运行的 程序来但是却有更优秀的编程技巧可以让程序更好的工作这就 要求读者多学习其他人优秀的代码。
3多以人类的思考方法来类比计算机。
计算机非常简单需要什么数据如何获取这些数据得到后如何存 放如何处理处理后如何表现多问些为什么如果人类来处理 需要什么东西一旦理解了计算机的处理过程编程就是一件非常 轻松的事情了。
4C语言只是一个基础设施要想编写强大的软件必须学习相关 操作系统的API应用程序编程接口熟悉其他类库的使用才能 开发出满足用户需求的软件来。
1.3 什么是语言什么是C语言 也许读者读到这里对于C语言到底是什么还很模 糊。
有必要做一个解释。
一提到语言这个词人 们自然想到的是像英语、汉语等这样的自然语言 因为它是人和人相互交流信息不可缺少的工具。
而今天计算机遍布了我们生活的每一个角落 除了人和人之间的相互交流之外我们必须和计 算机交流。
用什么样的方式和计算机做最直接的 交流呢人们自然想到的是最古老也最方便的方 式——语言。
1.3.1 什么是语言 类比人类的语言比如汉语言英语言法语言就可以总结些 共性的东西出来 1语言是用来交流沟通的。
有一方说有另一方听必须有两 方参与。
这是语言最重要的功能。
语言就是用来表达意思传递信 息的。
说的一方传递信息听的一方接受信息说的一方下达指 令听的一方遵从命令做事情。
没有语言双方就无法交流沟通 也就只能单兵作战独自发展也许人类就灭亡了。
甚至在远古 时代没有语言人类可以通过眼神通过动作通过叫唤来传 递信息而这些也可以看作是语言。
这引出了语言的另一特点 2语言有独特的语法规则。
交流双方都了解明白并遵守这些规 则。
一个只会说汉语的中国人和一个只会说法语的法国人如 果戴上面具只通过嘴巴发出声音互相交流结果一定是鸡同鸭 讲信息完全传递不出去。
为什么因为互相不知道对方的语法 规则当然听不懂了。
为什么要戴面具为什么只能通过嘴巴 因为人类的一些面部表情身体动作这些却是相通的不通过 声音而通过肢体语言也能多少表达出一些意思来。
1.3.2 什么是机器语言 计算机是一个忠实的仆人时刻等候着主人的命令。
如何 才能使计算机听话呢当然是用计算机听得懂的语言去命 令它了。
计算机的大脑或者说心脏就是CPU它控制着整个 计算机的运作。
每种CPU都有自己的指令系统。
这个指令 系统就是该CPU的机器语言。
机器语言是一组由0和1系列 组成的指令码这些指令码是CPU制作厂商规定出来的 然后发布出来请程序员遵守。
比如下面是某CPU指令系统 中的两条指令 1000000 加 1001000 减 要让计算机干活就得用这样的语言去命令它。
这样的命 令不是一条两条而是上百条。
由于不同型号的计算机 其机器语言是不相通的按着一种计算机的机器指令编制 的程序不能在另一种计算机上执行。
1.3.3 计算机如何执行指令 是一个非常简单的示意图表示个大概意思实 际上并不是这么简陋但其核心思想却正如图所 示。
1.3.4 什么是汇编语言 在倒下了一批用机器语言编程的程序员后一批顽强而聪 明的先行者终于发明了汇编语言。
一门人类可以比较轻松 认识的编程语言。
只是这门语言计算机并不认识所以人 类还不能用这门语言命令计算机做事情。
如同上文提到过 的中国人和法国人交流一样如何才能让中国人说的话法 国人明白呢 聪明的读者一定想到了翻译是一个既懂汉语又懂法 语的人不就可以将中文翻译给法国人听么二者不就又 可以继续交流了么 所以有一类专门的程序既认识机器语言又认识汇编 语言而且还很聪明知道怎么把汇编语言翻译成机器语 言。
于是人类和机器间的交流终于又畅通了而且人 类可以比较轻松的编写程序了。
1.3.5 面向过程的语言 汇编语言和机器语言都是面向机器的机器不同语言也 不同。
既然有办法让汇编语言翻译成机器语言难道就不 能把其他更人性化的语言翻译成机器语言1954年 Fortran语言出现了其后相继出现了其他的类似语言。
这 批语言使程序员摆脱了计算机硬件的桎梏把主要精力 放在了程序设计上不在关注低层的计算机硬件。
这类语 言称为高级语言。
同样的高级语言要被计算机执行 也需要一个翻译程序将其翻译成机器语言这就是编译程 序。
这类高级语言解决问题的方法是分析出解决问题所需要的 步骤把程序看作是数据被加工的过程。
基于这类方法的 程序设计语言成为面向过程的语言。
C语言就是这种面向过 程的程序设计语言。
1.3.6 什么是C语言 这本书就是告诉读者什么是C语言的书。
如果读 者对C语言的历史比较感兴趣可以参考其他相关 书籍。
本书不再罗列众人皆知的东西了。
一般来说C语言可以简称C注意C是大写的。
至 于什么是C语言请读者自学完本书后作一个定 义。
1.4 刻认识程序如何生产出来——程序开发周期 在Windows下利用“记事本”notepad.exe这个小软件我 们可以输入文字编辑文字然后保存到计算机硬盘上。
保存到 硬盘上的数据以文件的形式存在比如将文件保存到“d:”在 保存的时候“记事本”软件会提示用户输入文件名和保存的路 径我们以“C.txt”作为文件名以“d:”作为文件路径。
保 存后通过Windows的文件浏览器定位到“d:”就可以看到文件 “C.txt”。
同样的画图小软件可以信手涂鸦也能保存一个扩 展名为bmp的文件到硬盘上。
如图1-3。
1.4.1 编辑C源代码 编辑就是 1逐个输入字符如汉字、英文、标点符号或者其他可 以用键盘输入的字符 2通过插入、删除、移动、复制、粘贴等方法修改已经 输入的字符 3将输入修改完毕的所有字符保存到硬盘上。
一篇由汉字、英文、标点符号或者其他可以用键盘输入的 字符组合的内容被称作文本。
能够进行文字编辑的软件被 称作编辑器。
源代码通俗的讲就是程序员输入编写的符合C语言语法规则 的文本。
比如下列片段就是一段源代码 void mainvoid printf“nHello World” 1.4.2 编译C源代码 编译是把C语言源代码翻译成用二进制指令表示的目标文件。
注意 这里的目标文件与机器语言还有一段距离并不是真正的机器语 言所以不能被计算机直接运行。
编译着重于“译”就是翻译。
声明读者要注意区分编辑和编译的概念。
虽然一字之差意义 却大不相同。
编辑是指对文本的修改插入删除。
而编译却 是将编辑好的源代码翻译成目标文件。
编译过程由C编译系统提供的编译程序完成。
编译程序简称为编译 器。
编译程序运行后自动对源程序进行句法和语法检查当发 现错误时就将错误的类型和所在的位置显示出来提供给用户 以帮助用户修改源程序中的错误。
用户可以继续利用编辑器来方 便的修改程序。
修改好后重新进行编译直到编译通过。
如果未 发现句法和语法错误就自动形成目标代码并对目标代码进行优 化后生成目标文件。
目标程序文件的扩展名quot.objquot是目标程序的文件类型标识。
不同 的编译系统或者不同版本的编译程序它们的启动命令不同 生成的目标文件也不相同。
扩展名有时候也不一定相同。
当然格 式也不相同。
但是其作用相同。
1.4.3 链接目标文件 目标文件计算机还是不能执行的。
多个源代码对应了多个目标文 件此时还没有将其组合装配成一个可以运行的整体。
链接过程 是用链接程序将目标文件、第三方目标文件、C语言提供的运行时 库文件链接装配成一个完整的可执行的目标程序。
链接程序简称 链接器。
可执行程序文件的扩展名“.exe”是可执行程序的文件类型标 识。
绝大部分系统生成的可执行文件的扩展名是“.exe”但 UNIX系统中生成的可执行文件自动确定为“a.out”除非在编 译时用户特别规定自己的文件名。
有的C编译系统把编译和连接放 在一个命令文件中用一条命令即可完成编译和连接任务减少 了操作过程。
开发程序除了程序员编写的自己的代码外有时候会使用其他 人提供的库文件。
比如读者要编写一个mp3播放器软件对于mp3 解码部分因为已经有现成的第三方代码库做好了这件事情读 者可以直接拿这个第三方库文件来使用。
这个库提供的功能可供 读者的播放器软件调用。
为了方便开发C语言也提供了一批库函 数一般编译厂商都会提供给开发人员使用。
1.4.4 编译链接过程示例 有时候为了叙述简便将编译链接两个步骤统 一用编译一个词语代替读者应该清楚实际是经 历过了两步。
在
VC.net 2003编程环境里当用户 下达“build”构建命令后编程环境就开始 编译链接工作。
本节的示例没有列出源文件 源文件是main.c内容可以暂时不考虑读者请 关注编译、链接的步骤即可。
1.4.5 运行程序 运行程序是指将可执行的目标程序投入运行。
以 获取程序处理的结果。
如果程序运行结果不正确 可重新回到第一步重新对程序进行编辑修改、 编译和运行。
与编译、连接不同的是运行程序 可以脱离语言处理环境。
因为它是对一个可执行 程序进行操作与C语言本身已经没有联系所以 可以在语言开发环境下运行也可直接在操作系 统下运行。
1.5 VCCCTC跳出这团浆糊——认识开发环境和语言的区别 这几个单词都带有C可以说和C都有联系。
1C就是指C语言了。
2
VC VC一般是指微软公司的Visual Studio 6开发套件中的Visual C开发环境。
Visual Studio 6套件包含了Visual C Visual Basic Visual FoxPro等 开发环境。
所谓开发环境是集成了源代码编辑编译链接调试等功能的 一个综合程序。
3C C是另外一门有些类似C语言语法的面向对象的高级语言。
虽然C语言不加修 改就可以被C编译器编译但C和C是完全不同思想的两门语言不应将C 看作是C的超集。
4TC TC是Borland公司早年在16位机器上开发的C编程环境是Trobe C 的简称。
最 后版本是2.0一般简称TC2。
一般学习C语言都使用该编程环境只是这已经 算是老古董了对于现在的操作系统使用TC2来编写程序已经很不合时宜了。
5其他编译器及环境 Linux下面开发软件主要是使用GCCthe GNU Compiler CollectionGNU 编译器集合免费。
1.6 小结 本章带领读者囫囵吞枣式的学习了C语言的一些特 征这些特征其他书籍一般不特别强调。
还了解 了编程相关的一些背景知识。
读者应该对什么是 计算机语言有了一个大概的了解。
要深入的精通 一门语言还需要更深入的学习。
通过本章的学 习读者还应该了解一个可运行的程序如何被产 生出来了解了编程的步骤也了解了开发环境 和语言的区别。
这些知识看似与语言学习关联不 大但是却对学习语言大有帮助。
第2章 跟我写Hello World——由您创建的第一个程序 可能有读者已经等不及了跃跃欲试想一展身手 创建一个自己的程序出来。
在本章笔者将带领 读者一起一步一步的来创建一个没有实际意义 但是却极具教学意义的程序——HelloWorld.exe。
在初学一门编程语言的时候写一个“Hello world”程序是最常见的入门方法。
通过写一个 成功的“Hello world”可以实践这门语言最 基本的语法特性还可以带给自己成就感可谓 一举两得。
2.1 目标自己动手创建一个可以运行的程序 就像小学生解应用题一样在答题之前必须先了解题目给出的条件 然后明确题目的问题最后才是解题。
开发软件也需要这么样的过程 必须先清楚用户的需求根据需求来进行设计和开发不遗漏需求 也不能有超出需求的功能。
本章的目标就是创建一个可以运行的程序并输出一句话“Hello World”。
如果读者看见了这个要求后就卷起袖子光着膀子准备开 工写代码则犯了软件开发的大忌。
这个需求其实很不明确并没有 规定如何输出这句话。
在实际的软件开发工作中类似不明确的需求 比比皆是所以动手写代码前一定要非常明确软件的需求。
很多曾经有过语言学习经历的读者看见上面的需求后第一印象认 为就是在控制台中打印出这句话来然后就开始思索如何设计开发了。
但是假设用户的需求是用人声读出这句话呢发声也是输出啊或者 用户的需求是在一个窗口界面上输出这句话呢更有甚者要求这句 话的字体、颜色、大小符合规定。
那么只是在控制台中打印一句 “Hello World”的程序显然是不符合需求的。
所以在开发软件 前进行大量时间的实际需求调研是非常有必要的。
否则可能花费大 量时间开发出来的东西没有任何价值。
2.2 认识LCC-Win32开发环境 笔者猜想大多数读者的操作系统都是Windows平台 很少有使用DOS平台的了。
基本上Windows 98操作 系统都不再使用大多数都是使用Windows XP。
至于使用Linux操作系统的读者笔者猜想其编程 能力已经不需要笔者去建议使用何种编程环境了。
所以为了照顾大多数读者采用什么编程环境作 为教学示例笔者作了很久的思考。
最终笔者选 择了LCC-Win32。
2.2.1 为什么选择LCC-Win32 基于以下几个方面笔者推荐使用LCC-Win32作为读者学习C 语言的编程环境 1TC2是16位机器上的开发环境与现在的平台格格不 入除了学习之外很少有人拿它开发程序。
并且在XP平 台上其界面比较简单丑陋更重要的是调试运行有些问 题。
在Vista操作系统上干脆就不能允许。
如果读者的操 作系统是Win98或者古老的DOS系统则可以使用TC2。
2
VC6或者
VC.net 2003都比较庞大并且价格不菲为 了学习C语言购买代价太大。
虽然微软免费提供命令行的 Toolkit但是设置又比较麻烦。
3Dev-C也是一个比较不错的选择免费且开源。
但 是Dev-C主要还是开发C程序。
虽然C源代码也可以编译 但是C毕竟不同于C如果不小心使用了C的语法而又 和C的意义不一样将会迷惑读者。
4最终考虑使用LCC-Win32。
2.2.2 启动LCC-Win32 LCC-Win32安装后在“开始”菜单中就可以启动 LCC-Win32后面简称为LCC。
启动后的界面如。
可以发现界面简单功能也很多 2.2.3 新建Hello World工程 单击“文件/新建/工程”菜单在弹出的“请输 入工程名称”对话框里输入工程名 “HelloWorld”并单击“确定”按钮关闭对话框。
如所示。
2.2.4 定义新工程 关闭“请输入工程名称”对话框后接着就弹出 一个新的对话框“定义新工程”对话框如所示。
2.2.5 添加源代码到工程 单击“否”按钮关闭“信息”对话框后接着弹 出对话框“添加源代码到工程”截图省略这 是一个标准的打开文件对话框在文件名编辑框 中输入“2.1-HelloWorld.c”单击“打开”按 钮。
然后弹出“源文件 – 工程”对话框如 列出该工程所有已经添加的源代码文件。
本示例 只有一个源文件单击“确认”按钮。
2.2.6 编译器设置 关闭“源文件-工程”对话框后接着弹出“编译 器设置”对话框。
如所示。
2.2.7 链接器设置 关闭“编译器设置”对话框后接着弹出“链接 器设置”对话框如所示。
2.2.8 调试器设置 关闭“链接器设置”对话框后接着弹出“调试 器设置”对话框。
如所示。
调试器是方便调试源代码的程序。
能够一步一步 的按照源代码的顺序执行每一句代码。
并且可以 看见源程序中定义的变量的值。
软件工程师将会 耗费大半时间在调试器的跟踪调试上面。
2.2.9 开始编辑代码 设置完毕终于可以输入代码了。
注意编辑代码涉及到光标移动复制粘贴 块选择添加代码注释快速移动等等功能请 读者自行熟悉了解LCC提供的编辑器的功能。
当代码输入完后如所示。
2.3 编译运行——欣赏您的杰作 代码输入完毕后请单击“编译/构建”菜单。
LCC开始编译链接。
成功后如。
如果失败请对照 检查。
注意不要遗漏分号“”。
注程序中所有分号都是英文标点不是汉语中 的分号。
编译成功后单击“编译/执行”菜单。
程序开始 运行跳出一个控制台窗口如所示。
2.4 查看代码如何一步一步被执行——调试排错debug 程序员的主要工作一是编写代码。
编写代码从无 到有需要逐个字符输入工作量显然比较大。
但实际上编码容易调试难。
代码编写完毕后 程序员将会花费大量时间进行错误或者问题的排 查、修改。
在电脑系统程序中把隐藏着的一些 未被发现的缺陷、问题或者错误称为“bug”。
2.4.1 debug的由来 Bug的英文意思是臭虫被引入到计算机领域需 要追溯到第一代计算机时代。
当时的计算机是由 许多真空管构成需要利用大量的电力使真空管 发光。
某天一只虫子爬.
上一篇:
C 著名程序库的比较和学习经验 STL Boost
下一篇:
不规则零件优化排样的神经网络混合优化算法