第1章 踏上征程前的思想动员.docx

上传人:b****5 文档编号:5025532 上传时间:2022-12-12 格式:DOCX 页数:28 大小:58.02KB
下载 相关 举报
第1章 踏上征程前的思想动员.docx_第1页
第1页 / 共28页
第1章 踏上征程前的思想动员.docx_第2页
第2页 / 共28页
第1章 踏上征程前的思想动员.docx_第3页
第3页 / 共28页
第1章 踏上征程前的思想动员.docx_第4页
第4页 / 共28页
第1章 踏上征程前的思想动员.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

第1章 踏上征程前的思想动员.docx

《第1章 踏上征程前的思想动员.docx》由会员分享,可在线阅读,更多相关《第1章 踏上征程前的思想动员.docx(28页珍藏版)》请在冰豆网上搜索。

第1章 踏上征程前的思想动员.docx

第1章踏上征程前的思想动员

第1章踏上征程前的思想动员

首先要恭喜读者,无论出于什么样的原因,读者选择了自学C语言,这是一门强大而灵活的语言,同时也代表着学习上会遇到很多困难;但同样要恭喜读者选择了本书,因为笔者是十几年前自学的C语言,知道学习C语言的酸甜苦辣,因此笔者有信心带领读者轻松的学好C语言,用好C语言。

本书面向的是纯C的初学者,初次接触C语言或者头一次接触编程领域。

如果读者有过其他语言的编程经历,当然能帮助理解C语言。

1.1为什么选择C语言

为什么要选择C语言?

这个问题是每个读者要问自己的问题,如果掌握了C语言之后,还是不能满足读者的需求,那么学习C语言就是一件浪费时间的事情。

笔者尝试回答这个问题,如果笔者的回答不能令读者满意,也许读者该选择另外一门语言。

1.1.1在计算机领域,C语言大小通吃

C语言的应用极其广泛,从网站后台,到底层操作系统,从多媒体应用到大型网络游戏,均可使用C语言来开发。

?

(1)C语言可以写网站后台程序。

?

(2)C语言可以写出绚丽的GUI界面。

?

(3)C语言可以专门针对某个主题写出功能强大的程序库,然后供其他程序方便使用,从而让其他程序节省开发时间。

?

(4)C语言可以写出大型游戏的引擎。

?

(5)C语言可以写出另一个语言来。

?

(6)C语言可以写操作系统和驱动程序,并且只能用C语言编写,Linux操作系统的全部源代码都可以从网上得到,要深入了解操作系统的运行秘密,懂C语言,就能看懂。

?

(7)任何设备只要配置了微处理器,就都支持C语言。

从微波炉到手机,都是由C语言技术来推动的。

1.1.2掌握了C语言,其他类似语言不学自通

当掌握了C语言后,再去学习其他面向过程的语言,最多一个星期就能学会。

因为万变不离其宗,只是语法上有些许更改,而思想却没有更改。

有些语言,甚至1个小时就明白如何使用。

1.1.3C语言久经考验,有现成的大量优秀代码和资料

因为C语言已经存在很多年了,它有广泛的使用团体并且有大量的现成代码可以利用。

这就使读者能在过去程序的基础上,快速和高效的编写新的算法和函数。

C语言是一个开源组织的语言。

全球著名的开源组织网站“”,能找到任何想要的开源代码。

C语言使用者众多,讨论者也就众多,有数不尽的资料可以学习。

1.1.4

简洁、紧凑,使用方便、灵活,功能强大,执行效率高

所有的优点都是基于C语言的简洁、紧凑,使用方便、灵活,功能强大,执行效率高。

C语言仅有32个关键字,9种控制语句,却能完成无数的功能。

某些方面C语言可能确实不如其他语言优秀,比如字符串处理方面,就不如Perl语言;比如数值计算方面,就不如Fortran语言;比如人工智能方面,就不如Lisp语言。

可是这些语言在其他方面却远远不及C语言。

而且C语言有其他诸如表达力强,移植性好的特点,现在也许读者还无法理解,随着时间的推移,将会慢慢了解到。

?

如果上面的回答还是不能满足读者的需求,那么最后一条,一定可以满足:

精通了C语言,工作不用愁!

1.2如何学好C语言

无论出于什么目的,一旦下定决心准备学习C语言,就要端正思想,因为听说C语言难,所以觉得学不好,是不可取的。

只要读者掌握一些方法,克服心理上畏难、不轻言放弃,是完全可以学好的。

(1)多动手少求人!

所有的问题都可以通过自己编写代码观察结果解决。

凡是可以通过编写代码观察到结果的问题,都不应该成为一个问题。

(2)多学习优秀代码。

C语言灵活简洁,即使编写出不好的代码,也可以编译出可以运行的程序来,但是却有更优秀的编程技巧,可以让程序更好的工作,这就要求读者多学习其他人优秀的代码。

(3)多以人类的思考方法来类比计算机。

计算机非常简单,需要什么数据,如何获取这些数据,得到后如何存放,如何处理,处理后如何表现,多问些为什么,如果人类来处理,需要什么东西,一旦理解了计算机的处理过程,编程,就是一件非常轻松的事情了。

(4)C语言只是一个基础设施,要想编写强大的软件,必须学习相关操作系统的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语言语法规则的文本。

比如下列片段就是一段源代码:

?

voidmain(void)?

{?

printf(“\nHelloWorld!

”);?

}

1.4.2编译C源代码

编译是把C语言源代码翻译成用二进制指令表示的目标文件。

注意这里的目标文件与机器语言还有一段距离,并不是真正的机器语言,所以不能被计算机直接运行。

编译着重于“译”,就是翻译。

?

声明:

读者要注意区分编辑和编译的概念。

虽然一字之差,意义却大不相同。

编辑,是指对文本的修改,插入,删除。

而编译却是将编辑好的源代码翻译成目标文件。

?

编译过程由C编译系统提供的编译程序完成。

编译程序简称为编译器。

编译程序运行后,自动对源程序进行句法和语法检查,当发现错误时,就将错误的类型和所在的位置显示出来,提供给用户,以帮助用户修改源程序中的错误。

用户可以继续利用编辑器来方便的修改程序。

修改好后,重新进行编译直到编译通过。

如果未发现句法和语法错误,就自动形成目标代码并对目标代码进行优化后生成目标文件。

?

目标程序文件的扩展名".obj"是目标程序的文件类型标识。

不同的编译系统,或者不同版本的编译程序,它们的启动命令不同,生成的目标文件也不相同。

扩展名有时候也不一定相同。

当然格式也不相同。

但是其作用相同。

?

1.4.3链接目标文件

目标文件计算机还是不能执行的。

多个源代码对应了多个目标文件,此时还没有将其组合装配成一个可以运行的整体。

链接过程是用链接程序将目标文件、第三方目标文件、C语言提供的运行时库文件链接装配成一个完整的可执行的目标程序。

链接程序简称链接器。

可执行程序文件的扩展名“.exe”,是可执行程序的文件类型标识。

绝大部分系统生成的可执行文件的扩展名是“.exe”,但UNIX系统中,生成的可执行文件自动确定为“a.out”,除非在编译时用户特别规定自己的文件名。

有的C编译系统把编译和连接放在一个命令文件中,用一条命令即可完成编译和连接任务,减少了操作过程。

开发程序,除了程序员编写的自己的代码外,有时候会使用其他人提供的库文件。

比如读者要编写一个mp3播放器软件,对于mp3解码部分,因为已经有现成的第三方代码库做好了这件事情,读者可以直接拿这个第三方库文件来使用。

这个库提供的功能可供读者的播放器软件调用。

为了方便开发,C语言也提供了一批库函数,一般编译厂商都会提供给开发人员使用。

1.4.4编译链接过程示例

有时候为了叙述简便,将编译链接两个步骤,统一用编译一个词语代替,读者应该清楚实际是经历过了两步。

在VC.net2003编程环境里,当用户下达“build”(构建)命令后,编程环境就开始编译链接工作。

本节的示例,没有列出源文件,源文件是main.c,内容可以暂时不考虑,读者请关注编译、链接的步骤即可。

1.4.5运行程序

运行程序是指将可执行的目标程序投入运行。

以获取程序处理的结果。

如果程序运行结果不正确,可重新回到第一步,重新对程序进行编辑修改、编译和运行。

与编译、连接不同的是,运行程序可以脱离语言处理环境。

因为它是对一个可执行程序进行操作,与C语言本身已经没有联系,所以可以在语言开发环境下运行,也可直接在操作系统下运行。

1.5VC++,C++,C,TC:

跳出这团浆糊——认识开发环境和语言的区别

?

?

?

?

?

?

这几个单词都带有C,可以说和C都有联系。

(1)C就是指C语言了。

(2)VC++VC++,一般是指微软公司的VisualStudio6开发套件中的VisualC++开发环境。

VisualStudio6套件,包含了VisualC++,VisualBasic,VisualFoxPro等开发环境。

所谓开发环境,是集成了源代码编辑,编译,链接,调试等功能的一个综合程序。

(3)C++C++,是另外一门有些类似C语言语法的面向对象的高级语言。

虽然C语言不加修改就可以被C++编译器编译,但C和C++是完全不同思想的两门语言,不应将C++看作是C的超集。

(4)TCTC是Borland公司早年在16位机器上开发的C编程环境,是TrobeC的简称。

最后版本是2.0,一般简称TC2。

一般学习C语言,都使用该编程环境,只是这已经算是老古董了,对于现在的操作系统,使用TC2来编写程序,已经很不合时宜了。

(5)其他编译器及环境Linux下面开发软件,主要是使用GCC(theGNUCompilerCollection),GNU编译器集合,免费。

1.6小结

本章带领读者囫囵吞枣式的学习了C语言的一些特征,这些特征其他书籍一般不特别强调。

还了解了编程相关的一些背景知识。

读者应该对什么是计算机语言有了一个大概的了解。

要深入的精通一门语言,还需要更深入的学习。

通过本章的学习,读者还应该了解一个可运行的程序如何被产生出来,了解了编程的步骤,也了解了开发环境和语言的区别。

这些知识看似与语言学习关联不大,但是却对学习语言大有帮助。

第2章跟我写HelloWorld——由您创建的第一个程序

可能有读者已经等不及了,跃跃欲试想一展身手创建一个自己的程序出来。

在本章,笔者将带领读者一起,一步一步的来创建一个没有实际意义,但是却极具教学意义的程序——HelloWorld.exe。

在初学一门编程语言的时候,写一个“Helloworld!

”程序是最常见的入门方法。

通过写一个成功的“Helloworld!

”,可以实践这门语言最基本的语法特性,还可以带给自己成就感,可谓一举两得。

2.1目标:

自己动手创建一个可以运行的程序

就像小学生解应用题一样,在答题之前,必须先了解题目给出的条件,然后明确题目的问题,最后才是解题。

开发软件也需要这么样的过程,必须先清楚用户的需求,根据需求来进行设计和开发,不遗漏需求,也不能有超出需求的功能。

本章的目标就是创建一个可以运行的程序,并输出一句话:

“HelloWorld!

”。

如果读者看见了这个要求后就卷起袖子光着膀子准备开工写代码,则犯了软件开发的大忌。

这个需求其实很不明确,并没有规定如何输出这句话。

在实际的软件开发工作中,类似不明确的需求比比皆是,所以动手写代码前,一定要非常明确软件的需求。

很多曾经有过语言学习经历的读者看见上面的需求后,第一印象,认为就是在控制台中打印出这句话来,然后就开始思索如何设计开发了。

但是假设用户的需求是用人声读出这句话呢?

发声也是输出啊!

或者用户的需求是在一个窗口界面上输出这句话呢?

更有甚者,要求这句话的字体、颜色、大小符合规定。

那么只是在控制台中打印一句“HelloWorld”的程序,显然是不符合需求的。

所以,在开发软件前,进行大量时间的实际需求调研是非常有必要的。

否则可能花费大量时间开发出来的东西没有任何价值。

2.2认识LCC-Win32开发环境

笔者猜想大多数读者的操作系统都是Windows平台,很少有使用DOS平台的了。

基本上Windows98操作系统都不再使用,大多数都是使用WindowsXP。

至于使用Linux操作系统的读者,笔者猜想其编程能力已经不需要笔者去建议使用何种编程环境了。

所以为了照顾大多数读者,采用什么编程环境作为教学示例,笔者作了很久的思考。

最终笔者选择了LCC-Win32。

2.2.1为什么选择LCC-Win32

基于以下几个方面,笔者推荐使用LCC-Win32作为读者学习C语言的编程环境:

?

(1)TC2是16位机器上的开发环境,与现在的平台格格不入,除了学习之外,很少有人拿它开发程序。

并且在XP平台上,其界面比较简单丑陋,更重要的是调试运行有些问题。

在Vista操作系统上,干脆就不能允许。

如果读者的操作系统是Win98或者古老的DOS系统,则可以使用TC2。

?

(2)VC6或者VC.net2003都比较庞大,并且价格不菲,为了学习C语言购买,代价太大。

虽然微软免费提供命令行的Toolkit,但是设置又比较麻烦。

?

(3)Dev-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新建HelloWorld工程

单击“文件/新建/工程”菜单,在弹出的“请输入工程名称”对话框里输入工程名:

“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.1debug的由来

Bug的英文意思是臭虫,被引入到计算机领域,需要追溯到第一代计算机时代。

当时的计算机是由许多真空管构成,需要利用大量的电力使真空管发光。

某天,一只虫子爬进了其中的某只真空管中,计算机于是停止工作了。

研究人员耗费很长时间,找来找去,一处地方一处地方排查,最后终于发现了这个虫子,取出虫子后,计算机就恢复了正常。

于是bug这个词语就在计算机领域中代表了隐藏的错误、缺陷、漏洞或者问题。

把排除错误的过程称为debug。

2.4.2设置断点

断点是为了方便程序员在调试过程中观察程序内部各状态而专门设置的一种调试手段。

也就是在调试模式下运行程序过程中,当程序语句运行到设置的断点后,暂停程序运行,但是程序当时的内存、寄存器、上下文环境等数据都被保持,并且在源代码编辑器中指示出当前停留在代码的哪一行。

然后程序员就可以不慌不忙利用调试器查看程序内部状态。

?

注意:

要想调试程序,必须设置断点后,程序才能被中断回到调试器中,才能对程序进行各状态查询。

?

在LCC中设置断点,首先将光标移到需要设置断点的代码行上,然后按键“F2”,或者单击菜单“编译/设置断点”。

断点设置后,可以在源代码编辑器中发现些变化。

在LCC编程环境中,就是代码行全部高亮。

如中矩形框住的那行就是一个断点。

再次按键“F2”或者单击菜单“编译/设置断点”,即可取消断点。

2.4.3调试运行

设置完断点后,可以通过按键“F5”在调试器中启动读者编写的程序。

程序启动后,当运行到断点代码行后,程序暂停,如所示

2.5小结

本章带领读者简单认识了LCC编程环境,主要是新建工程时的步骤及其设置,带领着读者一步一步从新建工程开始,每步的设置及设置项的意义,到编译链接及运行调试,经历了编程开发的大部分过程。

LCC编译器的使用请自行参考相关文章,本书不做更多说明。

程序员的工作场地或者工具就是自己的编程环境了。

如果能更快更有效率的使用这个工具,就能更快的生产出产品来。

请读者花些时间来熟悉了解LCC——工欲善其事,必先利其器。

第3章分解HelloWorld——最简单C程序组成

在第2章读者随着笔者照葫芦画瓢,创建了第一个可运行的程序。

相信读者对着源代码一头雾水不知所以,所以本章解释第2章的HelloWorld源代码,先回顾第2章的源代码,如所示。

3.1C程序概貌

很短,简单几行文字,就创建了一个可以运行的程序,非常神奇。

代码虽小,但五脏俱全,综观整个代码,可以总结如下特点:

?

(1)由单词,符号,空白组成。

单词以英语单词为主,有的单词就是纯正的英语单词,如main、void、include;有的不是,如getchar、pringf。

单词一般都

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1