1第一章C语言的特点及上机指导1.1C语言的特点①简洁、紧凑,使用方便、灵活,易于学习和应用。②C语言是面向结构化程序设计的语言。③允许直接对位、字节、和地址进行操作。④运算符及数据类型(结构)丰富。⑤C语言生成的目标代码质量高,可移植性好。1.2C程序的上机步骤(1)在UNIX操作系统下运行C程序的步骤:①用编辑程序(如UNIX系统的广西行编辑程序ed,或屏幕编辑程序vi)将源程序输入计算机,经修改后存入文件系统(C源程序的后辍一般为“.c”)。②编译。调用C编译程序cc对源文件进行编译:ccf.c↙(f.c为要编译的文件)③连接。将目标程序的库函数或其它目标程序连接成可执行的目标程序。在UNIX系统下,连接是由cc自动完成的。最后得到的可执行目标文件名由系统自动确定为a.out。若想指定文件名在编译时可打入命令:cc–of.outf.c↙④执行程序。输入可执行目标文件名后回车即可。以上过程可用下图表示:2开始编辑源程序f.c编译目标程序有错?f.c无连接库函数可执行和其它目目标程序标程序a.out执行结果正确?结束(2)、在DOS下用MSC4.0编译程序运行C程序的步骤:①编辑C源程序。可用行编辑程序EDLIN或WORDSTAR。②编译。要经过4道编译,或称4次扫描。假设文件名为f.c则编译命令为:cc1f.c↙(第一次,作用为预处理)cc2f.c↙(第二次,语法分析)cc3f.c↙(第三次,编译)cc4f.c↙(第四次,优化编译)③连接。将编译好的目标文件同库函数连接起来。最简单命令为:3Linkf,,,cslib↙注:cslib是C系统库(csystemlibrary)的缩写。链接成功后得到的可执行文件名自动定为f.exe(文件名与源文件名相同,后缀改为:.exe)。④执行程序。只需输入目标文件名:f↙(3)用TurboC运行C程序的步骤:先将装入磁盘。①调用TurboC程序:tc↙屏幕顶部出现一排“命令”行菜单:FILEEDITRUNCOMPILEPROJECTOPTIONSDEBUG用光标键来选择各菜单项进行相应操作。②编辑源文件。根据需要输入或修改源程序。③编译源程序。按“F9”键即可进行编译、连接,并在屏幕上显示有无错误和有几个错误。根据此信息修改源程序,然后再重复此项操作。④执行程序。按“F10”键,屏幕又出现上述菜单,选中RUN即可执行程序。⑤可用“Alt”和“X”键脱离TurboC,回到操作命令状态,此时可用系统命令显示源程序和运行程序:c>TYPEf.c↙(列出源程序清单)c>f↙(执行目标程序f.exe)第二章数据类型2.1C语言的基本符号41、基本符号:①26个英文字母(大小写表示分别表示两个不同的字符)②10个阿拉伯数字(0~9)③其它特殊符号,以运算符为主(+、-、*、/、=、!等)2、标识符(1)基本概念:在C语言中变量名、数组名、函数名和其它由用户自定义的数据类型名,被统称为标识符。(2)标识符的书写规则:①只能由英文字母、数字和下划线构成;②必须以字母或下划线开头;③不能以保留字作为标识符。3、函数C语言的源程序由一个或多个函数组成,每个函数完成一种指定的操作,所以有人又把C语言称为函数式语言。构成C语言的函数必须有一个主函数(即main函数),在C语言的源程序结构中不可缺少的语句是“;”。2.2C语言的数据类型1、概述一个程序应包括两个方面的主要内容:(1)数据的描述;(2)操作步骤,即动作的描述。可以这样表示:程序=算法+数据结构+程序设计方法+语言工具2、数据类型5整型字符型单精度型实型(浮点型)枚举类型双精度型数组类型数据类型构造类型结构体类型共用体类型指针类型空类型2.3常量和符号常量1、基本概念:在程序运行过程中,其值不能被改变的量称为常量。可以用一个标识符代表一个常量,这种用一个标识符代表一个常量的,称为符号常量。即标识符形式的常量。2、符号常量的特点:一是符号常量的实际值易于修改;二是符号常量的意义比较明确。3、关于符号常量的说明:①符号常量在程序中用#define命令行定义,常量名后跟它代表的常量;②符号常量的值在其作用域内不能改变,也不能再被赋值;③习惯上符号常量名用大写,变量用小写,以示区别。2.4常量的类型常量的类型有:整型常量、实型常量、字符型常量和字符串常量四种。1、整型常量(1)概述整型常量即整常数。C整常数可用以下三种形式表示:①十进制整数。基本类型6②八进制整数。以0开头的数是八进制数。如011,代表八进制数11。③十六进制整数:以0x开头的数。如0x123,代表16进制数123。(2)整型常量的类型①int型:其值在-32767~+32768范围内。可赋给int型和longint型变量。②longint型:其值范围在-~2147483648+2147483647内。③shortint型:范围同int型。一个int型的常量同时也是一个shortint型常量。注意:①一个整型常量可以赋给一个长度不小于其长度的整型变量。②在一个整常量后面加一个字母l或L,则认为是longint型常量。这往往用于函数调用中。2、实型常量又叫浮点数。有两种表示形式:①十进制数形式。由数字和小数点组成。(-.424也是一个常量)②指数形式:如123e3或123E3都代表123×103。应注意:字母e(或E)之前必须有数字,且e后面指数必须为整数,如2.1e3.5、.e3e等都不是合法的指数形式。3、字符型常量(1)概述字符型常量是用单引号括起来的一个字符。如’A’、’a’、’?’等。注意:’A’和’a’是不同的常量。C还允许用一种特殊的字符常量,就是以一个“\”开头的字符序列。这些字符通常是一些转义字符,如:’\101’(’101’为ASCII码(八进制))代表字符’A’。’\012’代表“换行”。’\r’代表“回车”。字符常量一般用于替换操作。由预处理命令(#Define)定义,其命令行一般放在源程序中最前面部分。7表1:常用的特殊字符(“转义字符”)字符形式功能\n换行\t横向跳格(即跳到下一个输出区)\v竖向跳格\b退格\r回车\f走纸换页\\反斜杠字符“\”\’单引号(撇号)字符\ddd1到3位8进制数所代表的字符\xhh1到2位16进制数所代表的字符说明:“转义字符”以反斜杠打头,用来输出一些无法象一般字符那样明确写出来的字符。(2)字符型数据在内存中的存储形式及使用方法将一个字符常量放到一个字符变量中,实际上并不是把字符本身放到内存单元中,而是将该字符的相应的ASCII码放到存储单元中。它的存储形式与整数的存储形式相类似。所以字符型数据和整整数据之间可以通用。字符型数据既可以以字符形式输出,也可以以整数形式输出。也可以对字符型数据进行算术运算。字符数据与整型数据可以相互赋值。如:inti;charc;i=‘a’;c=97;8注意:有些系统(如PDP,VAX-1,TurboC)将字符变量所占用的字节的最高位当成符号位,即把字符处理成带符号的整数,这样输出结果与人们习惯不一致,容易出错。4、字符串常量字符串常量是用一对双引号括起来的字符序列。如:“Howdoyoudo.”,“CHINA”,“a”,“$123.45”。C规定在每一个字符串的结尾处加一个“字符串结束标志’\0’—‘\0’是一个ASCII码为0的字符,即“空操作字符”,它不引起任何控制动作,也不是一个可显示的字符。字符串的长度比它实际字符的个数多一(有一个结束标志’\0’,该字符在字符串输出时并不输出)。需要用字符数组来存放。2.5变量一、基本概念C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。对变量的定义,一般是放在一个函数的开头部分。变量定义的一般形式为:变量类型变量名变量可以一次性定义一个也可以一次性定义多个,但定义多个变量时,只能同时定义同种类型的变量,变量间用豆号隔开。如:定义两个整型变量:intabj,Abj;说明:变量名的命名规则与标识符的一样。习惯上变量名用小写字母。二、变量的类型变量可分为整型、实型、字符型等。1、整型变量9(1)整型变量的分类①基本型:以int表示。②短整型:以shortint表示。或short表示。③长整型:以longint表示。或以long表示。④无符号型:存储单元中全部二进位用作存放数本身,而不包括符号。又分为无符号整型、无符号短整型、无符号长整型。(2)各种类型(整型)的数据范围见下表:表2类型所占位数数的范围Int16-32768~32767即-215~(215-1)short[int]16同上Long[int]32-2147483648~2147483647即-231~(231-1)unsigned[int]160~65535即0~(215-1)unsignedshort16同上即0~(215-1)unsignedlong320~42894967295即0~(231-1)2、实型变量实型变量分为单精度(float型)和双精度(double型)两类。在一般系统中,一个float型数据在内存中占4个字节,一个double型数据占8个字节。float型实数提供7位有效数字,double型提供15~16位有效数字,数值的范围随机器系统而异。在IBMPCMS-C中,单精度实数的数值范围约为10-38~10+38,双精度实数范围约为10-308~10308。3、字符变量字符型变量用来存放字符型常量,一个字符变量只能放一个字符。字符型变量用“char”来定义,一般以一个字节来存放一个字符变量,或者说一个字符变量在内存中占一个字节。10字符变量可以接收整型数据。三、变量赋初值程序中需要对一些变量预先设置初值。①定义变量时赋初值:intzjj=1,kd=2;②先定义然后再赋初值:intzjj;zjj=9;注意:定义变量时不能以连等的形式给多个变量赋同一值。也不能同时在定义一个变量后,接着给该变量赋值。如:intj,j=1;以及intak1=ak2=ak3=2;都是错误的。③初始化不是在编译阶段完成的(静态存储变量和外部变量的初始化除外),而是在程序运行时执行本函数时赋以初值的。相当于有一个赋值语句。例如:inta=3;相当于:inta;a=3;2.6各类数值型数据间的混合运算整型、单精度型、双精度型数据可以混合运算。整型、实型、字符型数据间也可以混合运算。如:10+’a’+1.5-8765.1234*’b’是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则如右图。转换过程是由系统自动进行的。第三章运算符与表达式C语言的运算符范围很宽,把除了控制语句和输入输出以外的几乎所有的基本操作都作为运算符处理。double←float高↑long↑unsigned低↑int←char,short113.1算术运算符及算术表达式1、基本的算术运算符(见下表)2、算术表达式用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称算术表达式。运算对象包括常量、变量、函数等。说明:①如果一个运算符的两侧的数据类型不同,则先自动进行类型转换,使二者具有同一种类型,然后进行运算。②可以利用强制类型转换运算符将一个表达式转换成所需类型。如:(int)(x+y)(将x+y的值转换成整型)在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。③在进行除法运算时如果两个整数中有一个为负值,则舍入的方向是不固定的。如:-5∕3在有的机器上得到的结果为-1,有的机器上则给出结果-2。④所有实数都按double型进行运算。3、自增、自减运算符作用是使变量的值增1或减1,如:++i,――i(在使用i之前,先使i的值加(减)1)i++,i――(在使用i之后,使i的值加(减)1)种类运算符含义备注结合性算术运算符的基本类型+加法运算或正值运算自左自右结合即左结合性-减法运算或负值运算*和/乘法运算符和除法运算符两个整数相除结果为整数%模运算或称求余运算要求其两侧均为整型量。12说明:①自增运算符和自减运算符,只能用于变量