C语言入门经典教程.docx
《C语言入门经典教程.docx》由会员分享,可在线阅读,更多相关《C语言入门经典教程.docx(83页珍藏版)》请在冰豆网上搜索。
C语言入门经典教程
一、C语言的产生与发展
C语言是1972年由美国的DennisRitchie设计发明的,并首次在UNIX操作系统的DECPDP-11计算机上使用。
它由早期的编程语言BCPL(BasicbindProgrammingLanguage)发展演变而来。
在1970年,AT&T贝尔实验室的Kenhompson根据BCPL语言设计出较先进的并取名为B的语言,最后导致了C语言的问世。
随着微型计算机的日益普及,出现了许多C语言版本。
由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。
为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的C语言标准。
二、C语言的特点
C语言发展如此迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。
许多著名的系统软件,如PC-DOS,DBASEⅣ都是由C语言编写的。
用C语言加上一些汇编语言子程序,就更能显示C语言的优势了。
归纳起来C语言具有下列特点:
1.C是中级语言
它把高级语言的基本结构和语句与低级语言的实用性结合起来。
C语言可以象汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.C是结构式语言
结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。
这种结构化方式可使程序层次清晰,便于使用、维护以及调试。
C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
3.C语言功能齐全
C语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。
另外C语言也具有强大的图形功能,支持多种显示器和驱动器。
而且计算功能、逻辑判断功能也比较强大,可以实现决策目的。
4.C语言适用范围大
C语言还有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。
三、TurboC的产生与发展
我们平常用的大部分都是TurboC。
TurboC是美国Borland公司的产品,Borland公司是一家专门从事软件开发、研制的公司。
该公司相继推出了一套Turbo系列软件,如TurboBASIC,TurboPascal,TurboProlog,这些软件很受用户欢迎。
该公司在1987年首次推出TurboC1.0产品,其中使用了全然一新的集成开发环境,即使用了一系列下拉式菜单,将文本编辑、程序编译、连接以及程序运行一体化,大大方便了程序的开发。
1988年,Borland公司又推出TurboC1.5版本,增加了图形库和文本窗口函数库等,而TurboC2.0那么是该公司1989年出版的。
TurboC2.0在原来集成开发环境的基础上增加了查错功能,并可以在Tiny模式下直接生成(数据、代码、堆栈处在同一64K中)文件。
还可对数学协处理器(支持8087/80287/80387等)进行仿真。
我们目前经常使用的集成环境就是TurboC2.0。
Borland公司后来又推出了面向对象的程序软件包TurboC++,它继承发展TurboC2.0的集成开发环境,并包含了面向对象的基本思想和设计方法。
习惯上我们也叫它TurboC3.0。
1991年为了适用Microsoft公司的Windows3.0版本,Borland公司又将TurboC++作了更新,即TurboC的新一代产品BorlandcC++也已经问世了。
四、TurboC2.0集成开发环境的使用
下载完以后,解压缩,双击TC.EXE,进入TurboC2.0集成开发环境中后,屏幕上显示:
─────────────────────────────---
FileEditRunpileProjectOptionsDebugBreak/watch
┌────────────Edit──────────────┐
│Line1Col1InsertIndentTabFileUnindentc:
NONAME.C│
││
││
││
││
││
││
││
│─────────Message───────────────|
││
││
└──────────────────────────--─┘
F1-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeF10-Menu
───────────────────────────────
其中顶上一行为TurboC2.0主菜单,中间窗口为编辑区,接下来是信息窗口,最底下一行为参考行。
这四个窗口构成了TurboC2.0的主屏幕,以后的编程、编译、调试以及运行都将在这个主屏幕中进行。
下面详细介绍主菜单的内容:
(一)、主菜单在TurboC2.0主屏幕顶上一行,显示下列内容:
FileEditRunpileProjectOptionsDebugBreak/watch
除Edit外,其它各项均有子菜单,只要用Alt加上某项中第一个字母(即大写字母),就可进入该项的子菜单中。
1、File(文件)菜单
按Alt+F可进入File菜单,该菜单包括以下内容:
.Load(加载)
装入一个文件,可用类似DOS的通配符(如*.C)来进行列表选择。
也可装入其它扩展名的文件,只要给出文件名(或只给路径)即可。
该项的热键为F3,即只要在主菜单中按F3即可进入该项,而不需要先进入File菜单再选此项。
.Pick(选择)
将最近装入编辑窗口的8个文件列成一个表让用户选择,选择后将该程序装入编辑区,并将光标置在上次修改过的地方。
其热健为Alt+F3。
.New(新文件)
说明文件是新的,缺省文件名为NONAME.C,存盘时可改名。
.Save(存盘)
将编辑区中的文件存盘,若文件名是NONAME.C时,将询问是否更改文件名,其热键为F2。
.Writeto(存盘)
可由用户给出文件名将编辑区中的文件存盘,若该文件已存在,那么询问要不要覆盖。
.Directory(目录)
显示目录及目录中的文件,并可由用户选择。
.Changedir(改变目录)
显示当前目录,用户可以改变显示的目录。
.Osshell(暂时退出)
暂时退出TurboC2.0到DOS提示符下,此时可以运行DOS命令,若想回到TurboC2.0中,只要在DOS状态下键入EXIT即可。
.Quit(退出)
退出TurboC2.0,返回到DOS操作系统中,其热键为Alt+X。
说明:
以上各项可用光标键移动色棒进行选择,回车那么执行。
也可用每一项的第一个大写字母直接选择。
若要退到主菜单或从它的下一级菜单列表框退回均可用Esc键,TurboC2.0所有菜单均采用这种方法进行操作,以下不再说明。
2、Edit(编辑)菜单
按Alt+E可进入编辑菜单,若再回车,那么光标出现在编辑窗口,此时用户可以进行文本编辑。
编辑方法基本与wordstar相同,可用F1键获得有关编辑方法的帮助信息。
与编辑有关的功能键如下:
F1获得TurboC2.0编辑命令的帮助信息
F5扩大编辑窗口到整个屏幕
F6在编辑窗口与信息窗口之间进行切换
F10从编辑窗口转到主菜单
编辑命令简介:
PageUp向前翻页
PageDn向后翻页
Home将光标移到所在行的开始
End将光标移到所在行的结尾
Ctrl+Y删除光标所在的一行
Ctrl+T删除光标所在处的一个词
Ctrl+KB设置块开始
Ctrl+KK设置块结尾
Ctrl+KV块移动
Ctrl+KC块拷贝
Ctrl+KY块删除
Ctrl+KR读文件
Ctrl+KW存文件
Ctrl+KP块文件打印
Ctrl+F1如果光标所在处为TurboC2.0库函数,那么获得有关该函数的帮助信息
Ctrl+Q[查找TurboC2.0双界符的后匹配符
Ctrl+Q]查找TurboC2.0双界符的前匹配符
说明:
(1).TurboC2.0的双界符包括以下几种符号:
花括符{和}
尖括符<和>
圆括符(和)
方括符[和]
注释符/*和*/
双引号
单引号'
(2).TurboC
2.0在编辑文件时还有一种功能,就是能够自动缩进,即光标定位和上一个非空字符对齐。
在编辑窗口中,Ctrl+OL为自动缩进开关的控制键。
3、Run(运行)菜单
按Alt+R可进入Run菜单,该菜单有以下各项:
.Run(运行程序)
运行由Project/Projectname项指定的文件名或当前编辑区的文件。
如果对上次编译后的源代码未做过修改,那么直接运行到下一个断点(没有断点那么运行到结束)。
否那么先进行编译、连接后才运行,其热键为Ctrl+F9。
.Programreset(程序重启)
中止当前的调试,释放分给程序的空间,其热键为Ctrl+F2。
.Gotocursor(运行到光标处)
调试程序时使用,选择该项可使程序运行到光标所在行。
光标所在行必须为一条可执行语句,否那么提示错误。
其热键为F4。
.Traceinto(跟踪进入)
在执行一条调用其它用户定义的子函数时,若用Traceinto项,那么执行长条将跟踪到该子函数内部去执行,其热键为F7。
.Stepover(单步执行)
执行当前函数的下一条语句,即使用户函数调用,执行长条也不会跟踪进函数内部,其热键为F8。
.Userscreen(用户屏幕)
显示程序运行时在屏幕上显示的结果。
其热键为Alt+F5。
4、pile(编译)菜单
按Alt+C可进入pile菜单,该菜单有以下几个内容:
piletoOBJ(编译生成目标码)
将一个C源文件编译生成.OBJ目标文件,同时显示生成的文件名。
其热键为Alt+F9。
.MakeEXEfile(生成执行文件)
此命令生成一个.EXE的文件,并显示生成的.EXE文件名。
其中.EXE文件名是下面几项之一。
(1).由Project/Projectname说明的项目文件名。
(2).若没有项目文件名,那么由PrimaryCfile说明的源文件。
(3).若以上两项都没有文件名,那么为当前窗口的文件名。
.LinkEXEfile(连接生成执行文件)
把当前.OBJ文件及库文件连接在一起生成.EXE文件。
.Buildall(建立所有文件)
重新编译项目里的所有文件,并进行装配生成.EXE文件。
该命令不作过时检查(上面的几条命令要作过时检查,即如果目前项目里源文件的日期和时间与目标文件相同或更早,那么拒绝对源文件进行编译)。
.PrimaryCfile(主C文件)
当在该项中指定了主文件后,在以后的编译中,如没有项目文件名那么编译此项中规定的主C文件,如果编译中有错误,那么将此文件调入编辑窗口,不管目前窗口中是不是主C文件。
.Getinfo(获得有关当前路径、源文件名、源文件字节大小、编译中的错误数目、可用空间等信息。
5、Project(项目)菜单
按Alt+P可进入Project菜单,该菜单包括以下内容:
.Projectname(项目名)
项目名具有.PRJ的扩展名,其中包括将要编译、连接的文件名。
例如有一个程序由file1.c,file2.c,file3.c组成,要将这3个文件编译装配成一个file.exe的执行文件,可以先建立一个file.prj的项目文件,其内容如下:
file1.c
file2.c
file3.c
此时将file.prj放入Projectname项中,以后进行编译时将自动对项目文件中规定的三个源文件分别进行编译。
然后连接成file.exe文件。
如果其中有些文件已经编译成.OBJ文件,而又没有修改过,可直接写上.OBJ扩展名。
此时将不再编译而只进行连接。
例如:
file1.obj
file2.c
file3.c
将不对file1.c进行编译,而直接连接。
说明:
当项目文件中的每个文件无扩展名时,均按源文件对待,另外,其中的文件也可以是库文件,但必须写上扩展名.LIB。
.Breakmakeon(中止编译)
由用户选择是否在有Warining(警告)、Errors(错误)、FatalErrors(致命错误)时或Link(连接)之前退出Make编译。
.Autodependencies(自动依赖)
当开关置为on,编译时将检查源文件与对应的.OBJ文件日期和时间,否那么不进行检查。
.Clearproject(清除项目文件)
清除Project/Projectname中的项目文件名。
.Removemessages(删除信息)
把错误信息从信息窗口中清除掉。
6、Options(选择菜单)
按Alt+O可进入Options菜单,该菜单对初学者来说要谨慎使用。
piler(编译器)
本项选择又有许多子菜单,可以让用户选择硬件配置、存储模型、调试技术、代码优化、对话信息控制和宏定义。
这些子菜单如下:
Model
共有Tiny,small,medium,pact,large,huge六种不同模式可由同户选择。
Define
打开一个宏定义框,同户可输入宏定义。
多重定义可同分号,赋值可用等号。
Codegeneration
它又有许多任选项,这些任选项告诉编译器产生什么样的目标代码。
Callingconvention可选择C或Pascal方式传递参数。
Instructionset可选择8088/8086或80186/80286指令系列。
Floatingpoint可选择仿真浮点、数学协处理器浮点或无浮点运算。
Defaultchartype规定char的类型。
Alignonent规定地址对准原那么。
Mergeduplicatestrings作优化用,将重复的字符串合并在一起。
Standardstackframe产生一个标准的栈结构。
Teststackoverflow产生一段程序运行时检测堆栈溢出的代码。
Linenumber在.OBJ文件中放进行号以供调试时用。
OBJdebuginformation在.OBJ文件中产生调试信息。
Optimization
Optimizefor选择是对程序小型化还是对程序速度进行优化处理。
Useregistervariable用来选择是否允许使用寄存器变量。
Registeroptimization尽可能使用寄存器变量以减少过多的取数操作。
Jumpoptimization 通过去除多余的跳转和调整循环与开关语句的办法,压缩代码。
Source
Indentifierlength说明标识符有效字符的个数,默认为32个。
Nestedments是否允许嵌套注释。
ANSIkeywordsonly 是只允许ANSI关键字还是也允许TurboC2.0关键字。
Error
Errorstopafter多少个错误时停止编译,默认为25个。
Warningstopafter 多少个警告错误时停止编译,默认为100个。
Displaywarning
Portabilitywarning移植性警告错误。
ANSIViolations侵犯了ANSI关键字的警告错误。
monerror 常见的警告错误。
Lessmonerror少见的警告错误。
Names用于改变段(segment)、组(group)和类(class)的名字,默认值为CODE,DATA,BSS。
.Linker(连接器)
本菜单设置有关连接的选择项,它有以下内容:
Mapfilemenu选择是否产生.MAP文件。
Initializesegments 是否在连接时初始化没有初始化的段。
Devaultlibraries是否在连接其它编译程序产生的目标文件时去寻找其缺省库。
Graphicslibrary是否连接graphics库中的函数。
Warnduplicatesymbols当有重复符号时产生警告信息。
Stackwarinig是否让连接程序产生Nostack的警告信息。
Case-sensitivelink是否区分大、小写字。
.Environment(环境)
本菜单规定是否对某些文件自动存盘及制表键和屏幕大小的设置
Messagetracking
Currentfile跟踪在编辑窗口中的文件错误。
Allfiles跟踪所有文件错误。
Off不跟踪。
Keepmessage编译前是否清除Message窗口中的信息。
Configautosave选on时,在Run,Shell或退出集成开发环境之前,如果TurboC
2.0的配置被改过,那么所做的改动将存入配置文件中。
选off时不存。
Editautosave是否在Run或Shell之前,自动存储编辑的源文件。
Backupfile是否在源文件存盘时产生后备文件(.BAK文件)。
Tabsize设置制表键大小,默认为8。
Zoomedwindows将现行活动窗口放大到整个屏幕,其热键为F5。
Screensize设置屏幕文本大小。
.Directories(路径)
规定编译、连接所需文件的路径,有下列各项:
Includedirectories包含文件的路径,多个子目录用;分开。
Librarydirectories库文件路径,多个子目录用;分开。
Outputdirectoried输出文件(.OBJ,.EXE,.MAP文件)的目录。
TurboCdirectoriedTurboC所在的目录。
Pickfilename定义加载的pick文件名,如不定义那么从currentpickfile中取。
.Arguments(命令行参数)
允许用户使用命令行参数。
.Saveoptions(存储配置)
保存所有选择的编译、连接、调试和项目到配置文件中,缺省的配置文件为TCCONFIG.TC。
.Retriveoptions
装入一个配置文件到TC中,TC将使用该文件的选择项。
7、Debug(调试)菜单
按Alt+D可选择Debug菜单,该菜单主要用于查错,它包括以下内容:
.Evaluate(Ctrl+F4)
Expression要计算结果的表达式。
Result显示表达式的计算结果。
Newvalue赋给新值。
.Callstack(Ctrl+F3)该项不可接触。
而在TurboCdebuger时用于检查堆栈情况。
.Findfunction在运行TurboCdebugger时用于显示规定的函数。
.Refreshdisplay如果编辑窗口偶然被用户窗口重写了可用此恢复编辑窗口的内容。
8、Break/watch(断点及监视表达式)
按Alt+B可进入Break/watch菜单,该菜单有以下内容:
.Addwatch(Ctrl+F7)向监视窗口插入一监视表达式。
.Deletewatch从监视窗口中删除当前的监视表达式。
.Editwatch在监视窗口中编辑一个监视表达式。
.Removeallwatches从监视窗口中删除所有的监视表达式。
.Togglebreakpoint(Ctrl+F8)对光标所在的行设置或清除断点。
.Clearallbreakpoints清除所有断点。
.Viewnextbreakpoint将光标移动到下一个断点处。
(二)、编辑区所有的程序代码都在这个区域编写,修改。
用ALT+E进入编辑区。
在编辑区的最上面还显示光标所数在行和所在列数。
(三)、信息窗口在编译过程中显示程序的错误和警告;在单步调试过程中,显示所添加监视表达式的值。
(四)、参考行包括以下内容
F1-Help显示帮助信息
F5-Zoom让编辑区最大,即屏蔽信息窗口;再按一次,返回。
F6-Switch在编辑区和信息窗口之间切换。
F7-Trace单步运行程序,并跟踪到函数体内部
F8-Step单步运行程序,不跟踪到函数体内部
F9-Make编译
F10-Menu回到主菜单
编译环境设置好以后,就可以正式学习C语言了。
一、变量
(一)、变量类型和表示方法
1.什么是变量?
一句话,变量是存储数据的值的空间。
由于数值的类型有多种,有整数、小数(浮点数)、字符等等,那么对应的变量就有整型变量、浮点型变量、字符型变量。
变量还有其他的具体分类。
整型变量还可具体分为无符号型、长整型和短整型。
浮点型也可分为单精度型、双精度型和长双精度型。
此外还可以分为静态变量、外部变量、寄存器变量和自动存储变量。
这些数据类型我们在本节和后面的章节中都会陆陆续续介绍。
那么变量我们总要给它取个名字吧,这个名字我们叫做标识符。
标识符的命名有一定的规那么:
(1).标识符只能由字母、数字和下划线三类字符组成
(2).第一个字符必须是字母(第一个字符也可以是下划线,但被视作系统自定义的标识符)
(3).大写字母和小写字母被认为是两个不同的字符,如A和a是两个不同的标识符
(4).标识符可以任意长,但只有前32位有效。
有些旧的C版本对外部标识符的限制为6位。
这是由于程序的限制所总成的,而不是C语言本身的局限性
(5).标识符不能是C的关键字
2.从上面的规那么中,有个关键字的概念。
那么什么叫关键字呢?
从表面字意上也可以看出,关键字是C语言本身某些特性的一个表示,是唯一的代表某一个意思的。
下面列出ANSI标准定义的32个C语言的关键字,这些关键字在以后的学习中基本上都会用到,到时再说它们的各自用法。
autobreakcasecharconstcontinuedefault
dodoubleelseenumexternfloatfor
gotoifintlongregisterreturnshort
signedsizeofstaticstructswitchtypedef
unionunsignedvoidvolatilewhile
C语言还包括一些不能用做标识符的扩展关键字。
asmcdecl_cs_ds_esfar
hugeinterruptnearpascal_ss
所以在以后的学习中,在给变量命名时要避开这些关键字。
3.TurboC2.0规定所有变量在使用前都必须加以说明。
一条变量说明语句由数据类型和其后的一个或多个变量名组成。
变量说明的形式如下:
类型<变量表>;
这里类型是指TurboC2.0的有效数据类型。
变量表是一个或多个标识符名,每个标识符之间用,分隔。
(二)、整型变