《C语言第2章第3章.ppt》由会员分享,可在线阅读,更多相关《C语言第2章第3章.ppt(92页珍藏版)》请在三一办公上搜索。
1、高级语言程序设计(C语言),参考书,1C语言程序设计谭浩强 著 清华大学出版社2C语言大全(第二版)Herbert Schildt 著 戴健鹏 译 电子工业出版社3Turbo C实用大全徐金梧 等编著 机械工业版社4C语言程序设计教程、实验与练习杨开城 张志坤 编著 人民邮电出版社,第二章 C语言概述,2.1 C语言概述2.2 C语言的基本结构2.3 C语言的基本组成2.4 C程序上机执行过程,2.1 C语言概述,2.1.1 C语言的发展2.1.2 C语言的特点,2.1.1 C语言的发展,C语言是很有发展前途的计算机高级语言。它适合于作为系统描述语言,既可用来写系统软件,也可用来写应用软件。,
2、2.1.2 C语言的特点,C语言的特点是多方面的:1适应性强。2应用范围广。3语言简洁,使用灵活,便于学习和应用。4运算符丰富,语言的表达能力强。5数据结构丰富,具有现代化语言的各种数据结构。6具有结构化的控制语句,控制流程结构化。7生成目标代码质量高,程序执行效率高。8可移植性好。9C语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。,2.2 C程序的基本结构,简单的C程序介绍 C程序的基本组成,2.2.1 简单的C程序介绍,例1(P24例2-1)/*文件名:A1.C*/*This is a hello C program.*/main()print
3、f(*n);printf(Happy New Year!n);printf(*n);说明:双引号内的字符串按原样输出,“n”是换行符。,2.2.1 简单的C程序介绍,例2/*文件名:A2.C*/*求两数之和*/main()int a,b,sum;/*定义变量*/a=123;b=456;/*给变量赋值*/sum=a+b;/*求和*/printf(sum=%dn,sum);/*输出结果*/说明:“%d”表示输入输出的格式字符串,用来指定输入输出时数据类型和格式。“%d”表示十进制整数类型。,2.2.2 C程序的基本组成,C程序的一般组成形式如下:Main()/*主函数说明*/变量定义/*主函数体*
4、/执行语句组 子函数名1(参数)/*子函数说明*/变量定义/*子函数体*/执行语句组 子函数名2(参数)/*子函数说明*/变量定义/*子函数体*/执行语句组 子函数名N(参数)/*子函数说明*/变量定义/*子函数体*/执行语句组,2.3 C语言的基本组成,基本字符集2.3.2 标识符2.3.3 关键字2.3.4 语句2.3.5 标准库函数,2.4 C程序上机执行过程,C程序上机执行过程 Turbo C使用初步,2.4.1 C程序上机执行过程,C源程序(.C文件),目标程序(.OBJ文件),编译,2.4.1 C程序上机执行过程,目标程序(.OBJ文件),可执行程序(.EXE文件),链接,第三章
5、数据类型与运算规则,3.1 数据与数据类型3.2 C语言的基本数据类型及其表示3.3 算术运算与赋值运算3.4 关系运算与逻辑运算3.5 位运算3.6 其他运算 3.7 混合运算及数据类型转换,3.2 C语言的基本数据类型及其表示,3.1.1 什么是数据和数据类型 数据是程序加工、处理的对象,也是加工的结果。把程序语言中具有这样相同性质的数据集合称为数据类型。,3.1 数据与数据类型,3.1.2 C语言中的数据类型 整数型 int 单精度型 float 基本类型 实数型(浮点型)双精度型 double 字符型 char 指针类型 数据类型 数组型 结构型 struct 构造类型 联合型 uni
6、on 枚举型 enum 无值类型(空类型)void,3.2 C语言的基本数据类型及其表示,3.2.1 常量与变量 1常量 常量是指在程序运行时其值不能改变的量。C语言提供的常量有:整型常量 数值常量 常量 实型常量 字符常量 字符常量 字符串常量例如,123,3.14,-3000等都是常量。,3.2 C语言的基本数据类型及其表示,3.2.1 常量与变量 2符号常量 在C语言中,常量还可以用标识符来表示。C语言中用宏定义命令对符号常量进行定义,其定义形式如下:#define,3.2 C语言的基本数据类型及其表示,3.2.1 常量与变量 3变量 变量是在程序运行过程中可以改变的量。C语言提供的基本
7、变量类型有:整型变量 数值变量 变量 实型变量 字符变量 指针变量 C语言要求:程序中使用的每个变量都必须先定义后使用。,3.2 C语言的基本数据类型及其表示,3.2.1 常量与变量 4变量的定义定义格式:类型说明符;,3.2 C语言的基本数据类型及其表示,3.2.2 整型数据及其表示 1整型类型 C语言提供了多种整数类型,用以适应不同情况的需要。常用的整数类型有:整型、长整型、无符号整型和无符号长整型等4种基本类型。不同类型的差别在于采用不同位数的二进制编码方式,所以就要站用不同的存储空间,就会有不同的数值表示范围。,3.2 C语言的基本数据类型及其表示,3.2.2 整型数据及其表示 2整型
8、常量 在C语言中,所有的数值型常量都带有符号,所以整型常量只区别整型和长整型两种形式。整型和长整型常量均可用十进制、八进制和十六进制三种形式表示。,3.2 C语言的基本数据类型及其表示,3.2.2 整型数据及其表示 3整型变量 在C语言中,整型变量有上述整型数据所具有的4种类型:整型、长整型、无符号整型和无符号长整型。整型变量一关键字int作为基本类型说明符,另外配合4个类型修饰符,用来改变和扩充基本类型的含义,一适应灵活的应用。可作用于基本型int德个类型修饰符有:long 长 short 短 signed 有符号 unsigned 无符号,3.2 C语言的基本数据类型及其表示,3.2.2
9、整型数据及其表示 4整型数据应用中的几个问题 整型数据在使用中应注意以下几个问题:(1)变量要先定义后使用(2)数据溢出(3)常量与变量的类型要匹配,3.2 C语言的基本数据类型及其表示,3.2.3 实型数据及其表示1实型类型 C语言中提供了3种用于表示实数的类型:单精度型、双精度型和长双精度型。,3.2 C语言的基本数据类型及其表示,3.2.3 实型数据及其表示2实型常量 实型常量也被称为实型数或浮点数。C语言中,实型常量一般都作为双精度来处理,并且只用十进制数表示。实型常量有2种书写格式:小数形式和指数形式。,3.2 C语言的基本数据类型及其表示,3.2.3 实型数据及其表示3实型变量 在
10、C语言中实型变量分为单精度、双精度和长双精度3中类型。ANSI C标准允许的定义3种实型变量的关键字如下:float 单精度double 双精度long double 长双精度,3.2 C语言的基本数据类型及其表示,3.2.3 实型数据及其表示4整型数据应用中的误差问题 例3(P45例3-3)输出实型数据a和b。/*文件名:A6.C*/*输出实型数据a,b*/main()float a;double b;a=12345.6789;printf(a=%f,b=%fn,a,b);理想结果应该是按照原样输出,即:a=12345.6789,但实际运行输出的结果为a=12345.678711,,3.2
11、C语言的基本数据类型及其表示,3.2.4 字符型数据及其表示1字符型类型 文字处理是计算机的一个重要应用领域,这个应用领域的程序必须能够使用和处理字符形式的数据。在C语言中,字符型数据包括字符和字符串两种,例如a是字符,而”Windows”是字符串。,3.2 C语言的基本数据类型及其表示,3.2.4 字符型数据及其表示2字符型常量 字符常量也被称为字符常数。C语言中字符常量是括在一对单引号内的一个字符。例如:x、B、b、$、?、(表示空字副)、3都是字符常量。注意其中B和b是不同的字符常量。除了以上形式的字符常量,对于常用的但却难以用一般形式表示的不可显示字符,C语言提供了一种特殊的字符常量,
12、即用一个转义标识符“”开头,后续需要转义字符来表示常用的转义字符序列的字符常量。,3.2 C语言的基本数据类型及其表示,3.2.4 字符型数据及其表示2字符型常量转义字符是一种特殊形式的字符常量,其意思是将转义符“”后的字符原来的含义进行转换,变成某种另外特殊约定的含义。例如,n 换行 015 015是八进制字符串,它表示了ASCII码表中编码为十进制13的字符,也就是回车。x1f 1f是十六进制字符串,它表示了ASCII码表中编码为十进制31的字符,也就是。,3.2 C语言的基本数据类型及其表示,3.2.4 字符型数据及其表示3字符型变量 字符型变量用于存放字符常量,即一个字符型变量可以存放
13、一个字符,所以一个字符型变量占用1个字节的内存容量。说明字符型变量的关键字是char,使用时只需在说明语句指明字符型数据类型和相应的变量名即可。例如:char s1,s2;/*说明s1,s2为字符型变量*/s1=A;/*A s1*/s2=a;/*a s2*/,3.2 C语言的基本数据类型及其表示,3.2.4 字符型数据及其表示4字符串常量字符串常量是用一对双引号括起来的字符序列。双引号是字符串的边界符。例如:“I am a studebt.n”,”ABC”,”,”a”,3.2 C语言的基本数据类型及其表示,3.2.4 字符型数据及其表示4字符串常量注意:(1)不要把字符串常量和字符常量混淆,如
14、”a”和a是根本不同的数据,前者是字符串常量,后者是字符常量。(2)如果字符串常量中出现双引号,则要用反斜线”将其转意,取消原有的边界符的功能,使之仅作为双引号字符起作用。例如,要输出字符串:He says:”How do you do.”应写成:printf(“He says:”How do you do.”);,3.2 C语言的基本数据类型及其表示,3.2.4 字符型数据及其表示4字符串常量说明:C语言对字符串常量的长度不加限制,编译程序总是自动地在字符串的结尾加上一个转意字符0(即ASCII码是0,所对应的字符是空),作为字符串常量的结束标志。对字符串操作时,这个结束标志是非常重要的。,
15、3.2 C语言的基本数据类型及其表示,3.2.4 字符型数据及其表示5字符数据应用举例例3(P47例3-4)计算字符A与整型数据25的和。/*文件名:A7.C*/*求字符与整型数据之和*/main()char a;int b;a=A;b=a+25;printf(%c,%d,%c,%dn,a,a,b,b);/*分别以字符型和整型两种格式输出a,b*/运行结果:A,65,Z,90,3.2 C语言的基本数据类型及其表示,3.2.5 指针型数据及其表示,3.2 C语言的基本数据类型及其表示,3.2.6 变量的初始化 通常一个变量是先说明,然后再赋值,在C语言中,也可以对变量进行初始化,即允许在说明变量
16、的同时对变量赋初值。因此,变量赋值有两种方法,一种方法是先说明后赋值,另一种是在说明变量的同时对变量赋初值,这就是变量的初始化。所有类型的变量都可以初始化。,3.3 算术运算与赋值运算,3.3.1 C语言中的运算规则 3.3.2 算术运算符与算术表达式 3.3.3 自加、自减运算 3.3.4 赋值运算符与赋值表达式 3.3.5 组合赋值运算符与组合赋值表达式,3.3.1 C语言中的运算规则,1运算符 按其在表达式与运算对象的关系即连接运算对象的个数来分,可以将C语言的运算符分为:单目运算:一个运算符连接一个运算对象双目运算:一个运算符连接两个运算对象三目运算:一个运算符连接三个运算对象,3.3
17、.1 C语言中的运算规则,1运算符 按其在表达式中所起的作用来分,可以将C语言的运算符分为:算术运算符 自增自减运算符 赋值与赋值组合运算符 关系运算符 逻辑运算符 位运算符 条件运算符 逗号运算符 其他,3.3.1 C语言中的运算规则,2表达式 表达式是用运算符将运算对象连接起来的符合C语言规则的有意义的式子。,3.3.1 C语言中的运算规则,3优先级和结合性 C语言中的运算具有一般数学运算的概念,即有优先级和结合性。优先级:指同一表达式中不同运算符进行计算时的先后次序。结合性:结合性是针对同一优先级的多个运算符而言的,它是指同一个表达式中相同优先级的多个运算应遵循的运算顺序。通常所有的单目
18、运算的优先级高于多目运算。C语言规定,单目运算符是自右向左结合,双目运算符是自左向右结合。(见附录A),3.3.2 算术运算符与算术表达式,1算术运算符+-*/%,3.3.2 算术运算符与算术表达式,2算术表达式 算术表达式是用算术运算符将数值型常量、变量或函数连接起来的有意义的式子。,3.3.3 自加、自减运算,2算术表达式 自加运算+自减运算-自加、自减运算都是单目运算,其作用是使变量的值1或减1。其优先级高于双目运算。+i;-i;运算符在变量前面称为前缀形式,表示变量在使用前自动加1或减1;i+;i-;运算符在变量后面称为后缀形式,表示变量在使用后自动加1或减1;,3.3.4 赋值运算符
19、与赋值表达式,1赋值运算符赋值运算符=注意:赋值运算符与数学中的等号的含义不同。,3.3.4 赋值运算符与赋值表达式,2赋值表达式 赋值表达式是用赋值运算符将一个变量和一个表达式连接起来的有意义的式子。一般形式:=求解过程:计算的值,然后将计算结果赋值给。,3.3.4 赋值运算符与赋值表达式,3类型转换 在对赋值表达式求解过程中,如果赋值运算符两边的数据类型不一致,赋值时要进行类型转换。其转换工作由C编译自动实现,转换原则是以赋值号左边的变量类型为准。即将赋值号左边的值转换为赋值号左边的变量类型一致。,3.3.5 组合赋值运算符与组合赋值表达式,1组合赋值运算符一般形式:=为:+、*、/、%、
20、|、&、所构成的组合运算符有:+=、*=、/=、%=、=、|=、&=、=,3.3.5 组合赋值运算符与组合赋值表达式,2组合赋值表达式 用组合赋值运算符将一个变量和一个表达式连接起来的有意义的式子称为组合赋值表达式。一般形式:功能:对和进行组合赋值运算符所规定的运算,并将运算结果赋值给所规定的变量。,3.3.5 组合赋值运算符与组合赋值表达式,一般形式:组合赋值运算的作用等价于:=,3.4 关系运算与逻辑运算,3.4.1 关系运算符与关系表达式 逻辑运算符与逻辑表达式 条件运算符与条件表达式,3.4.1 关系运算符与关系表达式,1关系运算符运算符含义运算对象个数结合方向简例大于 双目运算自左至
21、右ab=大于等于”a=b小于”ab=小于等于”a=b!=不等于”a!=b=恒等于”a=b,3.4.1 关系运算符与关系表达式,1关系运算符关系运算符都是双目运算符,其结合性是从左到右结合。优先级分为2级:高级:、=低级:=、!=关系运算符的优先级低于算术运算符。,3.4.1 关系运算符与关系表达式,2关系表达式用关系运算符将两个表达式连接起来的有意义的式子成为关系表达式。一般形式:其中:和可以是算术表达式、关系表达式、逻辑表达式、赋值表达式和字符表达式。但一般关系运算要求关系运算符连接的两个运算对象为同类型的数据。,3.4.1 关系运算符与关系表达式,2关系表达式 关系表达式的运算结果是逻辑真
22、值或逻辑假值。真True:用1表示 假False:用0表示,3.4.2 逻辑运算符与逻辑表达式,1逻辑运算符运算符含义运算对象个数结合方向简例&逻辑与 双目运算自左至右a&b|逻辑或”A|b!逻辑非 单目运算自右至左!a,!a=b,3.4.2 逻辑运算符与逻辑表达式,1逻辑运算符逻辑运算真值表aba&ba|b!a!b0000110非00110非000101非0非01100,3.4.2 逻辑运算符与逻辑表达式,2逻辑表达式 用逻辑运算符将多个关系表达式连接起来的有意义的式子称为逻辑表达式。当在一个逻辑表达式中,含有多个逻辑运算符时,其优先级是:!&|逻辑运算优先级低于所以关系运算,而!优先级高于
23、所有算术运算符。,3.4.3 条件运算符与条件表达式,条件运算符是C语言中唯一具有的三目运算符。运算符?:由?:运算符构成的表达式称为条件表达式。一般形式:?:,3.4.3 条件运算符与条件表达式,一般形式:?:功能:先计算的值,若值为非0,则计算的值,并将的值作为整个条件表达式的结果;若的值为0,则计算的值,并将的值作为整个条件表达式的结果。说明:?和:总是成对出现的。,3.4.3 条件运算符与条件表达式,例如,有以下条件表达式:(ab)?a+b:a-b 当a=8,b=4时,求解过程为:先计算ab,关系表达式的结果为真1,则条件表达式的结果为a+b,即12。,3.5 位运算,位运算符 按位逻
24、辑运算 移位运算 位运算赋值运算符,3.5.1 位运算符,运算符 含义 运算对象个数结合方向 优先级 按位求反 单目运算符自右至左1 按位右移”2&按位与”3 按位异或”4|按位或”5说明:(1)位运算的优先级是:&|(2)位运算的运算对象只能是整型(int)或字符型(char)数据。(3)位运算是对运算两的每个二进制位分别进行操作。,3.5.2 按位逻辑运算,按位逻辑运算包括:位与、位或、位异或和位否定。设:a和b是16位2进制整数,已知a1010,1001,0101,0111b0110,0000,1111,1011,3.5.2 按位逻辑运算,1按位与运算(&)c=a&b a1010,100
25、1,0101,0111&b0110,0000,1111,1011 c0010,0000,0101,0011,3.5.2 按位逻辑运算,2按位或运算(|)c=a|b a1010,1001,0101,0111|b0110,0000,1111,1011 c1110,1001,1111,1111,3.5.2 按位逻辑运算,3按位异或运算()c=ab a1010,1001,0101,0111 b0110,0000,1111,1011 c1100,2001,1010,1100,3.5.2 按位逻辑运算,4按位求反运算()c=a a1010,1001,0101,0111 c0101,0110,1010,10
26、00,3.5.2 按位逻辑运算,5按位逻辑运算的应用例10(P61例3-10)设int x=7,y=xy=x=7=(0000,0000,0000,0111)=1111,1111,1111,1000=-8可见,对x的值7按位求反的结果为-8的补码表示,其原因是计算机中有:整数求负=整数求补=按位求反+1则 按位求反=整数求负-1。注意求反运算与单目减和逻辑非运算的区别:y=-x 结果为:y=-7y=!x 结果为:y=0,3.5.2 按位逻辑运算,例11(P61例3-11)用按位与运算屏蔽特定位,即将指定位清0。要屏蔽特定位,只需要将要屏蔽的位与0作逻辑与即可。设n=051652(八进制数),m=
27、n&0177,则m=052。n0,101,001,110,101,010&01770,000,000,001,111,111 m0,000,000,000,101,010经过位与运算,将n前的9位屏蔽掉,即截取n后的7位。,3.5.2 按位逻辑运算,例12(P62例3-12)用按位与运算保留特定位。要保留特定位,只需要将要保留的位与1作逻辑与即可。设n=011050,要n右起第2、4、6、8、10位的原值保留下来,其余位变为0,只要n=n&01252,则有:n0,001,001,000,101,000&012520,000,001,010,101,010 n0,000,001,000,101,
28、000,3.5.2 按位逻辑运算,例13(P62例3-13)用按位或运算将指定的位置1。要将特定位置1,只需要将要置1的位与1作逻辑或即可。设x=061,y=016,则z=a|b为:x0000,0000,0011,0001|y0000,0000,0000,1110 z0000,0000,0011,1111,3.5.2 按位逻辑运算,例14(P62例3-14)用按位异或运算将特定位翻转。要将特定位翻转,只需要将要翻转的位与1作逻辑异或即可。设a=015,将后4位翻转,则:a0000,0000,0011,1101 0170000,0000,0011,1111 a0000,0000,0000,001
29、0,3.5.3 移位运算,C语言提供了2个移位运算:左移和右移。它们是把整数作为二进制位序列,求出把这个序列左移若干位或者右移若干位。左移运算表达式的一般形式:xn功能:将x右移n位,将右边移出的低位舍弃,左边高位空出要根据原来量符号位的情况进行补充,对无符号数,若为正则补0,若为负数则补1。,3.5.3 移位运算,例如,设a=7,则b=2 即b=0000,01112=0000,0001=1说明:左移的一个特殊用途是将整数值乘以2的幂。例如,左移运算表达式14的计算结果是16,右移可以用语将整数除以2的幂。,3.5.4 位运算赋值运算符,位运算符与赋值运算符可以组成以下5种运算赋值运算符:&=
30、、|=、=、=3 相当于 x=x3 x=5 相当于 x=x5,3.6 其他运算,3.6.1 逗号运算符逗号运算符,逗号运算符的作用是将多个表达式连在一起构成逗号表达式。一般形式:,功能:将逗号表达式中各表达式按从左到右的顺序依次求值,并将最右面的表达式结果作为整个逗号表达式的最后结果。,3.6 其他运算,例如:y=(x=123,x+,x+=100-x)执行过程:将123赋值给x,然后执行x+得124,最后执行x+=100-x得100,这就是逗号表达式的结果,因此y=100。,3.6 其他运算,3.6.2“.”和“-”运算符“.”和“-”运算符的作用是引用构造数据类型的结构和联合中的分量,即表示
31、结构或联合中的成员变量。一般形式:.或者.,3.6 其他运算,3.6.3“()”和“”运算符 在C语言中“()”和“”也作为运算符使用。“()”运算符常使用于表达式中,其作用是改变表达式的运算次序;也可在强制类型转换运算或sizeof运算中使用。“()”还可用于函数的参数表。“”被称为下标运算符,用于数组的说明及数组元素的下标表示。“()”和“”运算符的优先级与“.”和“-”运算符同级,也就是说,在C语言的所有运算符中,“()”、“”、“.”和“-”运算符的优先级别最高,其结合性是自左向右结合。,3.6 其他运算,3.6.4“*”和“&”运算符*指针运算符,其含义是访问指针所指向的内容。&地址
32、运算符,其含义是取指定变量的地址。*运算符使用的一般形式:*.&运算符使用的一般形式:&.,3.6 其他运算,3.6.5(type)运算符(type)强制类型转换运算符,其作用是进行数据类型的强制转换。(type)是单目运算符,其中(type)泛指某一数据类型名。(type)使用的一般形式:(type)功能:将的值强制转换成括号中指定的数据类型。说明:这是一种数据类型转换的显式方式。例如,(double)n 将n强制转换成double型。(int)(a*b)将a*b的结果强制转换成整型。(int)a*b 将a强制转换成整型后再与b相乘求出结果。,3.6 其他运算,3.6.6 sizef运算符应
33、用的一般形式:sizeof(opr)其中opr表示sizeof运算符所要运算的对象,opr可以是表达式或数据类型名,当opr是表达式时括号可省略。即:sizeof sizeof()功能:求出运算对象在计算机的内存中所占用的字节数量。说明:sizeof是单目运算符。,3.6 其他运算,例如:sizeof(char)求字符型在内存中所占用的字节数,结果为1。sizeof(int)(a*b)求整型数据在内存中所占用的字节数,结果为2。,3.7 混合运算及数据类型转换,3.7.1 混合运算3.7.2 数据类型转换,3.7.1 混合运算,混合运算是指在一个表达式中参与运算的对象不是相同的数据类型。,3.
34、7.2 数据类型转换,C语言允许进行整型、实型、字符型数据的混合运算,但在实际运算时,要先将不同类型的数据转换成同一类型再进行运算。这种类型转换的一般规则是:(1)运算中将所有的char型数据都转换成int型,float型转换成double型。(2)低级类型服从高级类型,并进行相应的转换。(3)赋值运算中最终结果的类型,以赋值运算左边变脸的类型为准,即赋值运算符右边的值类型向左边变量的类型看齐,并进行相应的转换。,3.7.2 数据类型转换,例如,设有如下变量说明:int a,j,y;float b;long d;double c;则对赋值语句:y=j+a+a*b-c/d;,3.7.2 数据类型转换,其运算次序和隐含类型转换如下:计算a*b,由于b为float型,所以将a和b都转换成double型后再进行运算,运算结果为double型。计算c/d,由于c为double型,所以将d转换成double型,再计算,结果为double型。计算j+a,先将 a转换成int型再进行计算,结果为int型。将和的结果相加,先将的结果int型转换成double型再进行运算,结果为double型。用的结果减的结果,结果为double型。给y赋值,先将的结果double型转换为int型,即将double型数据的小数部分截去,压缩成int型,然后再赋值。,