C语言编程开发入门基础教程_第1页
C语言编程开发入门基础教程_第2页
C语言编程开发入门基础教程_第3页
C语言编程开发入门基础教程_第4页
C语言编程开发入门基础教程_第5页
已阅读5页,还剩161页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言编程开发入门基础教程

linux软件开发

C语言入门教程

(-)概述

一、C语言的产生与发展

C语言是1972年由美国的DennisRitchie设计发明的,并首次在UNIX操作系统的DECPDP-11

计算机上使用。它由早-期的编程语言BCPL(BasicCombindProgrammingLanguage)发展演变而

来。在1970年,AT&T贝尔实验室的Kenhompson根据BCPL语言设计出较先进的并取名为B

的语言,最后导致了C语言的问世。

随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语

言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制

定了一套ANSI标准,成为现行的C语言标准。

二、C语言的特点

C语言发展如此迅速,而且成为最受欢迎的语言之一,主要因为它具有强大的功能。许多著名

的系统软件,如PC-DOS,DBASEIV都是由C语言编写的。用C语言加上一些汇编语言子程序,

就更能显示C语言的优势了。归纳起来C语言具有下列特点:

1.C是中级语言

它把高级语言的基本结构和语句与低级语言的实用性结合起来。C语言可以象汇编语言一样

对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

2.C是结构式语言

结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼

此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C语言是以函数形

式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程

序完全结构化。

3.C语言功能齐全

C语言具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。另外C语言也具有

强大的图形功能,支持多种显示器和驱动器。而且计算功能、逻辑判断功能也比较强大,可以

实现决策目的。

4.C语言适用范围大

C语言还有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。

三、TurboC的产生与发展

我们平常用的大部分都是TurboCoTurboC是美国Borland公司的产品,Borland公司是一家

专门从事软件开发、研制的公司。该公司相继推出了一套Turbo系列软件,如TurboBASIC,Turbo

Pascal,TurboProlog,这些软件很受用户欢迎。该公司在1987年首次推出TurboC1.0产品,其中

使用了全然-新的集成开发环境,即使用了一系列下拉式菜单,将文本编辑、程序编译、连接

以及程序运行一体化,大大方便了程序的开发。1988年,Borland公司又推H;TurboC1.5版本,

增加了图形库和文本窗口函数库等,而TurboC2。则是该公司1989年出版的。TurboC2.0在

原来集成开发环境的基础上增加了查错功能,并可以在Tiny模式下直接生成.COM(数据、代

码、堆栈处在同一64K中)文件。还可对数学协处理器(支持808探028作0387等)进行仿真。

我们目前经常使用的集成环境就是TurboC2.0。

Borland公司后来又推出了面向对象的程序软件包TurboC++,它继承发展TurboC2.0的集成

开发环境,并包含了面向对象的基本思想和设计方法。习惯上我们也叫它TurboC3.0。

1991年为了适用Microsoft公司的Windows3.0版本,Borland公司又将TurboC++作了更新,

即TurboC的新一代产品BorlandcC++也已经问世了。

四、TurboC2.0集成开发环境的使用

下载完以后,解压缩,双击TC.EXE,进入TurboC2.0集成开发环境中后,屏幕上显示:

FileEditRunCompileProjectOptionsDebugBreak/watch

IEdit

Line1Col1InsertIndentTabFileUnindentc:NONAME.C

Message-

Fl-HelpF5-ZoomF6-SwitchF7-TraceF8-StepF9-MakeFlO-Menu

其中顶上一行为TurboC2.0主菜单,中间窗口为编辑区,接下来是信息窗口,最底下一行为

参考行。这四个窗口构成了TurboC2.0的主屏幕,以后的编程、编译、调试以及运行都将在

这个主屏幕中进行。

下面详细介绍主菜单的内容:

(―)>主菜单在TurboC2.0主屏幕顶上--行,显示下列内容:

FileEditRunCompileProjectOptionsDebugBreak/watch

除Edit外,其它各项均有子菜单,只要用Alt加上某项中第一个字母(即大写字母),就可进入

该项的子菜单中。

1、F在(文件)菜单

按Alt+F可进入File菜单,该菜单包括以下内容:

.Load(加载)

装入一个文件,可用类似DOS的通配符(如*.C)来进行列表选择。也可装入其它扩展名的文件,

只要给出文件名(或只给路径)即可。该项的热键为F3,即只要在主菜单中按F3即可进入该项,

而不需要先进入File菜单再选此项。

.Pick(选择)

将最近装入编辑窗口的8个文件列成一个表让用户选择,选择后将该程序装入编辑区,并将

光标置在上次修改过的地方。其热健为Alt+F3。

.New(新文件)

说明文件是新的,缺省文件名为NONAME.C,存盘时可改名。

.Save(存盘)

将编辑区中的文件存盘,若文件名是NONAME.C时,将询问是否更改文件名,其热键为F2。

,Writeto(存盘)

可由用户给H;文件名将编辑区中的文件存盘,若该文件已存在,则询问要不要覆盖。

.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+Fl如果光标所在处为TurboC2.0库函数,则获得有关该函数的帮助信息

Ctrl+Q(查找TurboC2Q双界符的后匹配符

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(单步执行)

执行当前函数的下一条语句,即使用户函数调用,执行长条也不会跟踪进函数内部,其热键为

F8o

,Userscreen(用户屏幕)

显示程序运行时在屏幕上显示的结果。其热键为Alt+F5。

4,Compile(编译)菜单

按Alt+C可进入Compile菜单,该菜单有以下几个内容:

.CompiletoOBJ(编译生成目标码)

将一个C源文件编译生成QBJ目标文件,同时显示生成的文件名。其热键为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的扩展名淇中包括将要编译、连接的文件名。例如有一个程序由filel.c,file2.c,

file3.c组成,要将这3个文件编译装配成一个file.exe的执行文件,可以先建立一个file.prj的项

目文件,其内容如下:

filel.c

file2.c

file3.c

此时将file.prj放入Projectname项中,以后进行编译时将自动对项目文件中规定的三个源文

件分别进行编译。然后连接成file.exe文件。如果其中有些文件已经编译成.OBJ文件,而又没

有修改过,可直接写上.OBJ扩展名。此时将不再编译而只进行连接。

例如:filel.obj

file2.c

file3.c

将不对filel.c进行编译,而直接连接。

说明:当项目文件中的每个文件无扩展名时,均按源文件对待,另外,其中的文件也可以是库文

件,但必须写上扩展名.LIB。

.Breakmakeon(中止编译)

由用户选择是否在有Warining(警告)、Errors(错误)、FatalErrors(致命错误)时或Link(连接)

之前退出Make编译。

.Autodependencies(自动依赖)

当开关置为on,编译时将检查源文件与对应的.OBJ文件日期和时间,否则不进行检查。

.Clearproject(清除项目文件)

清除Project/Projectname中的项目文件名。

.Removemessages(删除信息)

把错误信息从信息窗口中清除掉。

6、Options(选择菜单)

按Alt+O可进入Options菜单,该菜单对初学者来说要谨慎使用。

.Compiler(编译器)

本项选择又有许多子菜单,可以让用户选择硬件配置、存储模型、调试技术、代码优化、对

话信息控制和宏定义。这些子菜单如下:

Model

共有Tiny,small,medium,compact,large,huge六种不同模式可由同户选择。

Define

打开一个宏定义框,同户可输入宏定义。多重定义可同分号,赋值可用等号。

Codegeneration

它又有许多任选项,这些任选项告诉编译器产生什么样的目标代码。

Callingconvention可选择C或Pascal方式传递参数。

Instructionset可选择808监086或8018^80286指令系列。

Floatingpoint可选择仿真浮点、数学协处理器浮点或无浮点运算。

Defaultchartype规定char的类型。

Alignonent规定地址对准原则。

Mergeduplicatestrings作优化用,将重复的字符串合并在一起。

Standardstackframe产生一个标准的栈结构。

Teststackoverflow产生一•段程序运行时检测堆栈溢Hl的代码。

Linenumber在.OBJ文件中放进行号以供调试时用。

OBJdebuginformation在.OBJ文件中产生调试信息。

Optimization

Optimizefor选择是对程序小型化还是对程序速度进行优化处理。

Useregistervariable用来选择是否允许使用寄存器变量。

Registeroptimization尽可能使用寄存器变量以减少过多的取数操作。

Jumpoptimization通过去除多余的跳转和调整循环与开关语句的办法,压缩代码。

Source

Indentifierlength说明标识符有效字符的个数,默认为32个。

Nestedcomments是否允许嵌套注释。

ANSIkeywordsonly是只允许ANSI关键字还是也允许TurboC2.0关键字。

Error

Errorstopafter多少个错误时停止编译,默认为25个。

Warningstopafter多少个警告错误时停止编译,默认为100个。

Displaywarning

Portabilitywarning移植性警告错误。

ANSIViolations侵犯了ANSI关键字的警告错误。

Commonerror常见的警告错误。

Lesscommonerror少见的警告错误。

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进入编辑区。在编辑区的

最上面还显示光标所数在行和所在列数。

(三卜信息窗口在编译过程中显示程序的错误和警告;在单步调试过程中,显示所添加监

视表达式的值。

(四卜参考行包括以下内容

Fl-Help显示帮助信息

F5-Zoom让编辑区最大,即屏蔽信息窗口:再按一次,返回。

F6-Switch在编辑区和信息窗口之间切换。

F7-Trace单步运行程序,并跟踪到函数体内部

F8-Step单步运行程序,不跟踪到函数体内部

F9-Make编译链接

F10-Menu回到主菜单

(二)变量和常量

编译环境设置好以后,就可以正式学习C语言了。

一、变量

(一)、变量类型和表示方法

1.什么是变量?一句话,变量是存储数据的值的空间。由于数值的类型有多种,有整数、小

数(浮点数)、字符等等,那么对应的变量就有整型变量、浮点型变量、字符型变量。变量

还有其他的具体分类。整型变量还可具体分为无符号型、长整型和短整型。浮点型也可分为

单精度型、双精度型和长双精度型。此外还可以分为静态变量、外部变量、寄存器变量和自

动存储变量。这些数据类型我们在本节和后面的章节中都会陆陆续续介绍。

那么变量我们总要给它取个名字吧,这个名字我们叫做标识符。

标识符的命名有一定的规则:

⑴.标识符只能由字母、数字和卜一划线三类字符组成

(2).第一个字符必须是字母(第一个字符也可以是下划线,但被视作系统自定义的标识符)

(3).大写字母和小写字母被认为是两个不同的字符,如A和a是两个不同的标识符

⑷.标识符可以任意长,但只有前32位有效。有些旧的C版本对外部标识符的限制为6位。

这是由于链接程序的限制所总成的,而不是C语言本身的局限性

⑸.标识符不能是C的关键字

2.从上面的规则中,有个关键字的概念。那么什么叫关键字呢?

从表面字意上也可以看出,关键字是C语言本身某些特性的一个表示,是唯一的代表某一个

意思的。

下面列出ANSI标准定义的32个C语言的关键字,这些关键字在以后的学习中基本上都会用

到,到时再说它们的各自用法。

autobreakcasecharconstcontinuedefault

dodoubleelseenumexternfloatfor

gotoifintlongregisterreturnshort

signedsizeofstaticstructswitchtypedef

unionunsignedvoidvolatilewhile

C语言还包括•些不能用做标识符的扩展关键字。

asmcdecl_cs_ds_esfar

hugeinterruptnearpascal_ss

所以在以后的学习中,在给变量命名时要避开这些关键字.

3.TurboC2.0规定所有变量在使用前都必须加以说明。一条变量说明语句由数据类型和其后

的一个或多个变量名组成。变量说明的形式如下:

类型〈变量表〉;

这里类型是指TurboC2.0的有效数据类型。变量表是一个或多个标识符名,每个标识符之间

用,分隔。

(二卜整型变量

整型变量是用来存储整数的。

整型变量又可具体分为好几种,最基本的整型变量是用类型说明符int声明的符号整型,形

式如下:

intCounter;

这里int是类型说明符,Counter是变量的名字。

整型变量可以是有符号型、无符号型、长型、短型或象上面定义的普通符号整型。

整型是16位的,长整型是32位,短整型等价于整型。

以下是几种整型变量的声明示例:

longintAmount;/*长整型*/

longAmount;/*长整型,等价于上面*/

signedintTotal;/*有符号整型*/

signedTotal;/*有符号整型,等价于上面*/

unsignedintOffset;/*无符号整型*/

unsignedOffset;/*无符号整型,等价于上面*/

shortintSmallAmt;/*短整型*/

shortSmallAmt;/*短整型,等价于上面*/

unsignedshortintMonth;/*无符号短整型*/

unsignedshortMonth;/*无符号短整型,等价于上面*/

从上面的示例可以看出,当定义长整型、短整型、符号整型或无符号整型时,可以省略关键

字into

注明:

1.用signed对整型变量进行有符号指定是多余的,因为除非用unsigned指定为无符号型,

否则整型都是有符号的。

2.当一个变量有几重特性时,声明关键字的顺序可以任意。以下几种声明是等价的:

unsignedlongTl;

longunsignedT2;

unsignedlongintT3;

unsignedintlongT4;

longunsignedintT5;

longintunsignedT6;

intunsignedlongT7;

intlongunsignedT8;

(三卜浮点类型变量

顾名思义,浮点类型变量是用来存储带有小数的实数的。

C语言中有三种不同的浮点类型,以下是对这三种不同类型的声明示例:

floatAmount;/*单精度型*/

doubleBigAmount;/*双精度型*/

longdoubleReallyBigAmount;/*长双精度型*/

这里Amount,BigAmount,ReallyBigAmount都是变量名。

浮点型都是有符号的。

(四卜字符型变量

字符型变量中所存放的字符是计算机字符集中的字符。对于PC机上运行的C系统,字符型

数据用8位单字节的ASCII码表示。程序用类型说明符char来声明字符型变量:

charch;

这条声明语句声明了一个字符型变量,标识符为ch。当以这种形式声明变量之后,程序可

以在表达式中引用这个变量,关于语句和表达式的知识在后面将会介绍。

字符数据类型事实上是8位的整型数据类型,可以用于数值表达式中,与其他的整型数据同

样使用。在这种情况下,字符型变量可以是有符号的,也可以是无符号的。对于无符号的字

符型变量可以声明为:

unsignedcharch;

除非声明为无符号型,否则在算术运算和比较运算中,字符型变量一般作为8位有符号整型

变量处理。

还有其他的如指针型变量,void型变量,以后再介绍。

二、常量

常量的意思就是不可改变的量,是一个常数。同变量一样,常量也分为整型常量、浮点型常

量、字符型常量,还有字符串常量、转义字符常量和地址常量。

(一)、整型常量

整型常量可以是长整型、短整型、有符号型、无符号型。在Tubb。C2.0里有符号整型常量

的范围从-32768到32767,无符号整型的为。到65535;有符号长整型的范围为-2147483648

到2147483647。无符号长整型的范围为0到4294967295。短整型同字符型。

可以指定一个整型常量为二进制、八进制或十六进制,如以下语句:

-129,Oxl2fe,0177

常量的前面有符号Ox,这个符号表示该常量是十六进制表示。如果前面的符号只有一个字

母0,那么表示该常量是八进制。

有时我们在常量的后面加上符号L或者U,来表示该常量是长整型或者无符号整型:

22388L,0x4efb2L,40000U

后缀可以是大写,也可以是小写。

(二卜浮点型常量

一个浮点型常量由整数和小数两部分构成,中间用十进制的小数点隔开。有些浮点树非常大

或者非常小,用普通方法不容易表示,可以用科学计数法或者指数方法表示。下面是一个实

例:

3.1416,1.234E-30,2.47E201

注意在C语言中,数的大小也有一定的限制。对于float型浮点数,数的表示范围为

-3.402823E38到3.402823E38,其中-1.401298E-45到1.401298E-45不可见。double型浮点型

常数的表示范围为-1.79E308到1.79E308,其中-4.94E-324到4.94E-324不可见。

在浮点型常量里我们也可以加上后缀。

FloatNumber=1.6E10F;/*有符号浮点型*/

LongDoubleNumber=3.45L;/*长双精度型*/

后缀可大写也可小写。

说明:

1.浮点常数只有一种进制(十进制)。

2.所有浮点常数都被默认为double。

3.绝对值小于1的浮点数,其小数点前面的零可以省略。如022可写为.22,-0.001523可写

为-.0015E-3。

4.TurboC默认格式输出浮点数时;最多只保留小数点后六位

(三卜字符型常量

字符型常量所表示的值是字符型变量所能包含的值。我们可以用ASCII表达式来表示一个字

符型常量,或者用单引号内加反斜杠表示转义字符。

'A;'\x2f,'\013';

其中:\x表示后面的字符是十六进制数,\0表示后面的字符是八进制数。

注意:在TurboC2.0中,字符型常量表示数的范围是-128到127,除非你把它声明为unsigned,

这样就是。到255。

(四卜字符串常量

字符串常量就是一串字符,用双引号括起来表示。

Hello,World!

\nEnterselection:

\aError!!!

(五卜转义字符

上面我们见到的\x,\n,\a等等都是叫转义字符,它告诉编译器需要用特殊的方式进行处理。

下面给出所有的转义字符和所对应的意义:

转义字符描述

\,单引号

\双引号

\\反斜杠

\0空字符

\0nnn八进制数

\a声音符

\b退格符

\f换页符

\n换行符

\r回车符

\t水平制表符

\v垂直制表符

\x十六进制符

它们的具体用法我们到讲输出语句时再介绍。

(六)、地址常量

我们前面说的变量是存储数据的空间,它们在内存里都有对应的地址。在C语言里可以用地

址常量来引用这些地址,如下:

&Counter,∑

&是取地址符,作用是取出变量(或者函数)的地址。在后面的输入语句和指针里还会说明。

这一节所讲到的变量和常量知识可以说是在一切程序中都要用到,特别是变量的声明和命名

规则。

(三)运算符

无论是加减乘除还是大于小于,都需要用到运算符,在c语言中的运算符和我们平时用的基

本上都差不多。

运算符包括赋值运算符、算术运算符、逻辑运算符、位逻辑运算符、位移运算符、关系运算

符、自增自减运算符。大多数运算符都是二目运算符,即运算符位于两个表达式之间。单目

运算符的意思是运算符作用于单个表达式。(具体什么是表达式下一节再说)

一、赋值运算符

赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。符号为'="这里并不

是等于的意思,只是赋值,等于用'=='表示。

注意:赋值语句左边的变量在程序的其他地方必须要声明。

得已赋值的变量我们称为左值,因为它们出现在赋值语句的左边;产生值的表达式我们称为

右值,因为她它们出现在赋值语句的右边。常数只能作为右值。

例如:

count=5;

totall=total2=0;

第一个赋值语句大家都能理解。

第二个赋值语句的意思是把0同时赋值给两个变量。这是因为赋值语句是从右向左运算的,

也就是说从右端开始计算。这样它先total2=0;然后totall=total2;那么我们这样行不行呢?

(totall=total2)=0;

这样是不可以的,因为先要算括号里面的,这时totall=total2是一个表达式,而赋值语句的

左边是不允许表达式存在的。

二、算术运算符

在C语言中有两个单目和五个双目运算符。

符号功能

+单目正

-单目负

*乘法

/除法

%取模

+加法

-减法

下面是一些赋值语句的例子,在赋值运算符右侧的表达式中就使用了上面的算术运算符:

Area=Height*Width;

num=numl+num2/num3-num4;

运算符也有个运算顺序问题,先算乘除再算加减。单目正和单目负最先运算。

取模运算符(%)用于计算两个整数相除所得的余数。例如:

a=7%4;

最终a的结果是3,因为7%4的余数是3。

那么有人要问了,我要想求它们的商怎么办呢?

b=%;

这样b就是它们的商了,应该是1。

也许有人就不明白了,加应该是1.75,怎么会是1呢?这里需要说明的是,当两个整数相

除时,所得到的结果仍然是整数,没有小数部分。要想也得到小数部分,可以这样写7.04

或者秘.0,也即把其中一个数变为非整数。

那么怎样由一个实数得到它的整数部分呢?这就需要用强制类型转换了。例如:

a=(int)(7.0A);

因为7.04的值为1.75,如果在前面加上(int)就表示把结果强制转换成整型,这就得到了1。

那么思考一下a=(float)(%);最终a的结果是多少?

单目减运算符相当于取相反值,若是正值就变为负值,若是负数就变为正值。

单目加运算符没有意义,纯粹是和单目减构成一对用的。

三、逻辑运算符

逻辑运算符是根据表达式的值来返回真值或是假值。其实在C语言中没有所谓的真值和假

值,只是认为非0为真值,。为假值。

符号功能

&&逻辑与

||逻辑或

!逻辑非

例如:

5!3;

0|I-2&&5;

!4;

当表达式进行&&运算时,只要有一个为假,总的表达式就为假,只有当所有都为真时,总

的式子才为真。当表达式进行||运算时,只要有一个为真,总的值就为真,只有当所有的都

为假时,总的式子才为假。逻辑非⑴运算是把相应的变量数据转换为相应的真/假值。若原

先为假,则逻辑非以后为真,若原先为真,则逻辑非以后为假。

还有•点很重要,当一个逻辑表达式的后一部分的取值不会影响整个表达式的值时,后一部

分就不会进行运算了。例如:

a=2,b=l;

a||b-l;

因为a=2,为真值,所以不管b-1是不是真值,总的表达式一定为真值,这时后面的表达式

就不会再计算了。

四、关系运算符

关系运算符是对两个表达式进行比较,返回一个真/假值。

符号功能

>大于

<小于

>=大于等于

<=小于等于

==等于

!=不等于

这些运算符大家都能明白,主要问题就是等于==和赋值=的区别了。

一些刚开始学习C语言的人总是对这两个运算符弄不明白,经常在一些简单问题上出错,自

己检查时还找不出来。看下面的代码:

if(Amount=123)

很多新人都理解为如果Amount等于123,就怎么样。其实这行代码的意思是先赋值

Amount=123,然后判断这个表达式是不是真值,因为结果为123,是真值,那么就做后面

的。如果想让当Amount等于123才运行时,应该if(Amount==:123)

五、自增自减运算符

这是一类特殊的运算符,自增运算符++和自减运算符-对变量的操作结果是增加1和减少1。

例如:

-Couter;

Couter";

++Amount;

Amount++;

看这些例子里,运算符在前面还是在后面对本身的影响都是一样的,都是加1或者减1,但

是当把他们作为其他表达式的一部分,两者就有区别了。运算符放在变量前面,那么在运算

之前,变量先完成自增或自减运算;如果运算符放在后面,那么自增自减运算是在变量参加

表达式的运算后再运算。这样讲可能不太清楚,看下面的例子:

numl=4;

num2=8;

a=++numl;

b=num2++;

a=++numl;这总的来看是一个赋值,把++numl的值赋给a,因为自增运算符在变量的前面,

所以numl先自增加1变为5,然后赋值给a,最终a也为5。b=num2++;这是把num2++的

值赋给b,因为自增运算符在变量的后面,所以先把num2赋值给b,b应该为8,然后num2

自增加1变为9。

那么如果出现这样的情况我们怎么处理呢?

c=numl+++num2;

到底是c=(numl++)+num2;还是c=numl+(++num2);这要根据编译器来决定,不同的编译器可

能有不同的结果。所以我们在以后的编程当中,应该尽量避免出现上面复杂的情况。

六、复合赋值运算符

在赋值运算符当中,还有一类C/C++独有的复合赋值运算符。它们实际上是一种缩写形式,

使得对变量的改变更为简洁。

Total=Total+3;

乍一看这行代码,似乎有问题,这是不可能成立的。其实还是老样子,'='是赋值不是等于。

它的意思是本身的值加3,然后在赋值给本身。为了简化,上面的代码也可以写成:

Total+=3;

复合赋值运算符有卜一列这些:

符号功能

+=加法赋值

-=减法赋值

*=乘法赋值

/=除法赋值

%=模运算赋值

«=左移赋值

»=右移赋值

&=位逻辑与赋值

1=位逻辑或赋值

"=位逻辑异或赋值

上面的十个复合赋值运算符中,后面五个我们到以后位运算时再说明。

那么看了上面的复合赋值运算符,有人就会问,到底Total=Total+3;与Total+=3;有没有区别?

答案是有的,对于A=A+1,表达式A被计算了两次,对于复合运算符A+=l,表达式A仅计

算了一次。一般的来说,这种区别对于程序的运行没有多大影响,但是当表达式作为函数的

返回值时,函数就被调用了两次(以后再说明),而且如果使用普通的赋值运算符,也会加大

程序的开销,使效率降低。

七、条件运算符

条件运算符(?:)是C语言中唯一的•个三目运算符,它是对第一个表达式作真/假检测,然后

根据结果返回两外两个表达式中的一个。

〈表达式1〉?〈表达式2>:<表达式3>

在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2的值;如果为假,则

返回表达式3的值。

例如:

a=(b>O)?b:-b;

当b>0时,a=b;当b不大于0时,a=-b;这就是条件表达式。其实上面的意思就是把b的

绝对值赋值给a。

八、逗号运算符

在C语言中,多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个

表达式的值是最后一个表达式的值。

假设b=2,c=7,d=5,

al=(++b,c-,d+3);

a2=++b,c--,d+3;

对于第一行代码,有三个表达式,用逗号分开,所以最终的值应该是最后一个表达式的值,

也就是d+3,为8,所以a=8o对于第二行代码,那么也是有三个表达式,这时的三个表达

式为a2=++b、c--、d+3,(这是因为赋值运算符比逗号运算符优先级高)所以最终表达式的值虽

然也为8,但a2=3。

还有其他的如位逻辑运算符,位移运算符等等,我们等到讲位运算时再说明。

九、优先级和结合性

从上面的逗号运算符那个例子可以看出,这些运算符计算时都有一定的顺序,就好象先要算

乘除后算加减一样。优先级和结合性是运算符两个重要的特性,结合性又称为计算顺序,它

决定组成表达式的各个部分是否参与计算以及什么时候计算。

下面是C语言中所使用的运算符的优先级和结合性:

优先级运算符结合性

(最高)()[]->.自左向右

!-++-+-*&sizeof自右向左

*/%自左向右

+-自左向右

«»自左向右

<<=>>=自左向右

==!=自左向右

&自左向右

“自左向右

|自左向右

&&自左向右

II自左向右

?:自右向左

=+=-=*=/=%=&=八=1=«=»=自右向左

(最低),自左向右

在该表中,还有一些运算符我们没有介绍,如指针运算符、sizeof运算符、数组运算符口等

等,这些在以后的学习中会陆续说明的。

(四)表达式和语句

一、表达式

前面已经提到过表达式,相信大家对表达式也有了一个初步的认识,它是由常量、变量、运

算符组合(到以后讲函数时,函数也可以是组成表达式的元素),计算以后返回一个结果值。

表达式的结束标志是分号(;),C语言中所有的语句和声明都是用分号结束,在分号出现之前,

语句是不完整的。

例如:

1+2;

Counter/3+5;

Height*Width;

表达式本身什么事情都不做,只是返回结果值。在程序不对返回的结果值做任何操作的情况

下,返回的结果值不起任何作用,表达式的作用有两点,•个是放在赋值语句的右边,另一

个是作为函数的参数(以后再介绍)。

表达式返回的结果值是有类型的。表达式隐含的数据类型取决于组成表达式的变量和常量的

类型。因此,表达式的返回值有可能是某种大小的整型,或者是某精度的浮点型,或者是某

种指针类型。

这里面就有类型转化的问题了,在前面说整型运算的时候也提到过。类型转化的原则是从低

级向高级自动转化(除非人为的加以控制)。计算的转换顺序基本是这样的:

字符型->整型->长整型->浮点型->单精度型-〉双精度型

就是当字符型和整型在一起运算时,结果为整型,如果整型和浮点型在一起运算,所得的结

果就是浮点型,如果有双精度型参与运算,那么答案就是双精度型了。

强制转换是这样的,在类型说明符的两边加上括号,就把后面的变量转换成所要的类型了。

如:

(int)a;

(float)b;

第一个式子是把a转换成整型,如果原先有小数部分,则舍去。

第二个式子是把b转换成浮点型,如果原先是整数,则在后面补0。

每一个表达式的返回值都具有逻辑特性。如果返回值为非0,则该表达式返回值为真,否则

为假。这种逻辑特性可以用在程序流程控制语句中。

有时表达式也不参加运算,如:

if(a||b)

5>3?a++:b++;

当a为真时,b就不参加运算了,因为不管b如何,条件总是真。

二、语句

(一)、赋值语句

其实这个问题,在讲赋值运算符的时候已经讲了一些了。

Amount=l+2;

Total=Counter^+5;

Area=Height*Width;

也许你会发现,这些赋值语句很象代数方程,在某些情况下,我们的确可以这样理解,但有

时它们是不一样的。看下面:

Num=Num+l;

这显然不是一个等式。

(二卜用逗号分隔开的声明语句

C语言可大多数语言一样,允许用逗号分隔声明语句中的标识符列表,说明这些运算符是同

一变量类型。例如:

floatArea,Height,Width;

但有些程序员喜欢把标识符写在不同的行上。如:

floatArea,

Height,

Width;

这样写至少有一个好处,就是可以在每个标识符后边加上注释。

在声明变量的时候,也可以直接给变量赋值,这叫做变量的初始化。

如:inta;

a=3;

等价于:

inta=3;

我们也让某些变量初始化,某些不初始化,如:

inta=3,bzc=5;

在进行初始化时,初始化表达式可以是任意的(对全局变量和静态变量有区别),由于逗号运

算符是从左到右运算的,那么看看这样行不行?

inta=3,b=azc=5;

(三)、标准输入输出语句

TurboC2.0标准库提供了两个控制台格式化输入、输出函数scanf();和printf();这两个函数可

以在标准输入输出设备上以各种不同的格式读写数据。scanf()函数用来从标准输入设备(键

盘)上读数据,printf()函数用来向标准输出设备(屏幕)写数据。下面详细介绍这两个函数的用

法。

1.标准输入语句

scanf()函数是格式化输入函数,它从标准输入设备(键盘)读取输入的信息。其调用格式为:

scanf(〈格式化字符串〉,(地址表>);

格式化字符串包括以下三类不同的字符;

⑴.空白字符:空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。

(2).非空白字符:一个非空白字符会使scanf()函数在读入时剔除掉与这个非空白字符相同的字

符。

⑶.格式化说明符:以%开始,后跟一个或几个规定字符,用来确定输出内容格式。

TurboC2.0提供的输入格式化规定符如下:

符号作用

%d十进制有符号整数

%u十进制无符号整数

%f浮点数

%s字符串

%c单个字符

%p指针的值

%x,%X无符号以十六进制表示的整数

%o无符号以八进制表示的整数

地址表是需要读入的所有变量的地址,而不是变量本身,取地址符为,&。各个变量的地址之

间同,分开。

例如:

scanf(%d,%d,&i,&j);

上例中的scanf()函数先读一个整型数,然后把接着输入的逗号剔除掉,最后读入另一个整型

数。如果,这一特定字符没有找到,scanf()函数就终止。若参数之间的分隔符为空格,则参数之

间必须输入一个或多个空格。

说明:

(a).对于各个变量,类型说明符是什么,输入格式化说明符就应该用对应的类型。否则会出

现程序错误或输入数据和理想的不一样。

(b).对于字符串数组或字符串指针变量,由于数组名和指针变量名本身就是地址,因此使用

scanf()函数时,不需要在它们前面加上&操作符。

char*p,str[2O];

scanf(%s,p);

scanf(%s,str);

具体字符串,指针的知识以后再介绍。

(c).可以在格式化字符串中的%各格式化规定符之间加入一个整数,表示任何读操作中的最大

位数。

如上例中若规定只能输入10字符给字符串指针p,则第一条scanf()函数语句变为:

scanf(%10s,p);

程序运行时一旦输入字符个数大于10,p就不再继续读入。

实际使用scanf()函数时存在•个问题,下面举例进行说明:

当使用多个scanf()函数连续给多个字符变量输入时,例如:

charcl,c2;

scanf(%c,&cl);

scanf(%c,&c2);

运行该程序,输入一个字符A后回车(要完成输入必须回车),在执行scanf(%c,&cl)时,给变量cl

赋值A,但回车符仍然留在缓冲区内,执行输入语句scanf(%c,&c2)时,变量c2输出的是一空行,

如果输入AB后回车,那么实际存入变量里的结果为cl为A,c2为B。

要解决以上问题,可以在输入函数前加入清除函数fflush()乂这个函数的使用方法将在本节最

后讲述)。

(d).当在格式说明符之间加入⑻时,表示跳过输入,例如:

scanf(%3*d,&a);

当输入12345的时候,前面三个字符跳过去不考虑,最终变量a的值为45。

2.标准输出语句

printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序

时经常会用到此函数。printf()函数的调用格式为:

printf(〈格式化字符串〉,〈参量表>);

其中格式化字符串包括两部分内容:一部分是正常字符,

这些字符将按原样输出;另一部分是格式化规定字符,以%开始,后跟一个或几个规定字符,用

来确定输出内容格式。

参量表是需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数•样多,

各参数之间用,分开,且顺序一一对应,否则将会出现意想不到的错误。

对于输出语句,还有两个格式化说明符

符号作用

%e指数形式的浮点数

%g自动选择合适的表示法

说明:

(1).可以在%和字母之间插进数字表示最大场宽。

例如:%3d表示输出3位整型数,不够3位右对齐。

%9.2f表示输出场宽为9的浮点数,其中小数位为2,整数位为6,小数点占一位,不够9位右对

齐。

%8s表示输出8个字符的字符串,不够8个字符右对齐。

如果字符串的长度、或整型数位数超过说明的场宽,将按其实际长度输出。但对浮点数,若整

数部分位数超过了说明的整数位宽度,将按实际整数位输出;若小数部分位数超过了说明的小

数位宽度,则按说明的宽度以四舍五入输出。

另外,若想在输出值前加一些0,就应在场宽项前加个0。

例如:%04d表示在输出一个小于4位的数值时,将在前面补0使其总宽度为4位。

如果用浮点数表示字符或整型量的输出格式,小数点后的数字代表最大宽度,小数点前的数字

代表最小宽度。

例如:%6.9s表示显示一个长度不小于6且不大于9的字符串。若大于9,则第9个字符以后

的内容将被删除。

(2).可以在%和字母之间加小写字母I,表示输出的是长型数。

例如:%Id表示输出long整数

%lf表示输出double浮点数

(3).可以控制输出左对齐或右对齐,即在%和字母之间加入一个-号可说明输出为左对齐,否

则为右对齐。

例如:%-7d表示输出7位整数左对齐

%-10s表示输出10个字符左对齐

一些特殊规定字符(可以参照前面说的转义字符)

字符作用

\n换行

\f清屏并换页

\r回车

\tTab符

\xhh表示一个ASCII码用16进表示

由本节所学的printf()函数,并结合上一节学习的数据类型,看下面的语句,加深对TurboC2Q

数据类型的了解。

charc;

inta=1234;

floatf=3.141592653589;

doublex=0.12345678987654321;

c='\x41';

printf(a=%d\n,a);/*结果输出卜进制整数a=1234*/

printf(a=%6d\n,a);/*结果输出6位十进制数a=1234*/

结果输出位卜进制数

printf(a=%06d\nza);/*6a=001234*/

printf(a=%2d\n,a);/*a超过2位,按实际值输出a=1234*/

printf(f=%f\n,f);/*输出浮点数f=3.141593*/

printf(f=6.4f\n,f);/*输出6位其中小数点后4位的浮点数f=3.1416*/

printf(x=%lf\n,x);/*输出长浮点数x=0.123457*/

printf(x=%18.16lf\n,x);/*^j(±118位其中小数点后16位的长浮点数x=0.1234567898765432*/

printf(c=%c\n,c);/*输出字符c=A*/

printf(c=%x\n,c);/*输出字符的ASCII码值c=41*/

上面结果中的地址值在不同计算机上可能不同。

当然还有一些输入输出函数,这个以后用到时慢慢再介绍。

(五)编写第一个C语言程序

前面儿节介绍了常量和变量、运算符、表达式和语句的概念,对它们的使用有了•个大概的

了解。也许刚学程序的人会觉得有些枯燥,下面我们就来编写第一个C语言程序。

//definePI3.1416

main()

floatRadius,Area;

scanf(%f,&Radius);/*输入半径的值*/

Area=PI*Radius*Radius;

printf(%f\n,Area);/*输出圆的面积*/

1.一个C语言程序,通常由带有#号的编译预处理语句开始。关于预处理我们在以后介绍,

这里的#definePI3.1415926相当于PI代表3.1416,下面在程序中遇到PI,我们就用3.1416

替代一下。在以后的程序中,在学习预处理之前,我们都将不使用预处理语句。

2.main()任何一个完整的程序都需要main(),这是•个函数,具体什么是函数,以后再讲,

这儿你就要记住就行。后面有•对。把所有的语句都括在里面,表明那些语句都属于main()

里面。程序运行时从这个左大括号开始。

3.{}里面的4行语句大家应该都能明白,先定义两个变量,一个代表半径,一个代表面积,

然后输入半径的值,然后求面积,最后在屏幕上输出面积。程序到main()的那对{}的右大括

号结束。求面积的语句Area=PI*Radius*Radius;相当于Area=3.1416*Radius*Radius;(完全用

3.1416替代PI).

具体程序从编写到运行得到结果的步骤为:

1.双击tc.exe,进入TurboC2.0编译界面

2.ALT+E进入编辑模式

3.书写程序

4.F2存储程序(也可进入File菜单,选择save),第一次存储需要写上程序名称(*©,回车

5.ALT+F9编译,如果有错误和警告,光标停留在错误行,回车进行修改,修改后,回到4;

没有错,下一步

6.CTRL+F9连接和运行程序

7.用ALT+F5查看程序运行结果,任意键返回程序

如何打开一个已有的C文件:

1.双击tc.exe,进入TurboC2.0编译界面

2.F3进入load状态,找到所要打开文件的目录,找到文件,回车;后面都一样。

具体的有哪些快捷键及其它们的作用,请查看第节概述。

说明:

1.必须在程序的最开始部分定义所有用到的变量,例如这里的Area,Radius。

2.变量的命名要尽量有意义,如用代表该意思的英文单词、或者是汉语拼音,例如这里的

Radius,Area,绝对禁止用毫无干系的字母,如a,b,c。例如下面的程序,虽然意思和上面的一

样,但是看上去意思不明朗,时间长了,很可能忘记程序本身的意思。对于仅仅是控制程序

运行,不代表实际意思时,可以用一些简单字母。

main()

(

floata,b;

scanf(%f,&a);

b=3.1416*a*a;

printf(%f\n,b);

3,采用层次书写程序的格式,要有合理的缩进,必要的时候要有空行,一行只书写一个语句。

所有语句尽量不分行,除非太长(分行时变量、运算符,格式字符等等不能拆开),例如下面

两个程序看起来就不好看了,虽然它们的功能和前面是•样的。

main()

{floatRadius,Area;scanf(%f,&Radius);

Area=3.1416*Radius*Radius;printf(%f\n,Area);}

main()

(

floatRadius,Area;

scanf(%f,

%Radius);

Area=3.1416*Radius

*Radius;

printf(%f\n,

Area);

)

4.程序在适当的地方要用/**/注释,它的意思表示在/**/里面的所有字符都不参加编译。

因为一个较大的程序,经过一段时间,有些地方可能连编程者都忘记了,增加注释可以帮助

恢复

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论