C教材配套幻灯片第2章_第1页
C教材配套幻灯片第2章_第2页
C教材配套幻灯片第2章_第3页
C教材配套幻灯片第2章_第4页
C教材配套幻灯片第2章_第5页
已阅读5页,还剩128页未读 继续免费阅读

下载本文档

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

文档简介

第2章

数据类型、运算符与表达式《C语言程序设计》

2学习目标与要求1、掌握C语言中基本的数据类型2、理解并掌握程序中常量和变量的概念、定义及应用3、掌握各类运算符及其优先级和结合性,能正确书写和计算各类表达式的值4、掌握常用库函数的使用方法,会使用TC的帮助文件《C语言程序设计》

3本章要点C语言的数据类型常量与变量整型数据实型数据字符型数据运算符和表达式常用库函数的使用TC帮助文件的使用《C语言程序设计》

4C语言的数据类型所谓数据类型是按被说明量的性质、表示形式、占据存储空间的多少、构造特点来划分的。C语言具有丰富的数据类型,各种数据类型可分为:基本数据类型、构造数据类型、指针类型、空类型四大类,如表2-1所示。《C语言程序设计》

5表2-1C语言的数据类型《C语言程序设计》

6基本类型又称为简单类型,其值不可以再分解为其它类型;构造类型又称为复杂类型,是根据已定义的一个或多个数据类型用构造的方法来定义的;指针类型是C语言特有的,具有重要作用的数据类型,其值用来表示某个量在内存储器中的地址;空类型也属于简单类型,用于处理函数调用后不需要向调用者返回函数值的情况。在本章中,我们先介绍基本数据类型中的整型、浮点型和字符型。其余类型在以后各章中陆续介绍。《C语言程序设计》

7常量与变量标识符命名在C语言中,标识符是用来标识变量名、符号常量名、函数名、数组名、类型名、文件名的有效字符序列。C语言中规定标识符只能由字母、数字、下划线三种字符组成,且第一个字符必须为字母或下划线。例如:ch1、ch2、add、_sum、Student_name、a_2_b、PI等都是合法的,而3a、a!、¥168、M.D.Tom、higha等都是非法的。《C语言程序设计》

8标识符的长度可以是一个或多个字符,大部分系统,只取前8个字符,如下所示的四个标识符Student_name、Student_number、Student_sex、Student_age将被看成同名。C语言中大写字母与小写字母是有区别的,如SUM、Sum、和sum是三个不同的标识符。程序中的标识符不能和C语言中的关键字相同,也不能和用户自己编制的函数或库函数同名。关键字又称保留字,是一种C语言预先定义的、具有特殊意义的标识符。所有关键词中的字符都必须小写,诸如if、else、int、float等。《C语言程序设计》

9常量变量与常量是程序中所要处理的两种基本数据对象。在程序执行过程中,其值不发生改变的量称为常量。常量分为直接常量和符号常量。直接常量一般从其字面形式即可判别,如12、0、-3为整型常量,4.6、-1.23为实型常量,‘a’、‘d’为字符常量。符号常量是用一个标识符代表一个常量,符号常量在使用之前必须先定义。《C语言程序设计》

10其一般形式为:#define标识符常量其功能是把该标识符定义为其后的常量值。如#definePI3.14159以后程序中凡是出现PI的地方都用3.14159代替。习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。常量可与数据类型结合起来分类。例如,可分为整型常量、浮点常量、字符常量、枚举常量。《C语言程序设计》

11变量在程序执行过程中,取值可变的量称为变量。变量名的命名必须遵循标识符规则,在选择变量名时采用见名知义的原则。如用sum表示和,average表示平均值,s表示圆面积。变量被区分为不同的类型,内存中占用不同的存储单元,如整型变量、浮点变量、字符变量、枚举变量等,以便用来存放相应变量的值。变量定义的一般格式为:存储类型符数据类型符变量名表;《C语言程序设计》

12整型数据

整型常量整型常量就是整数。在C语言中,整数可用十进制、八进制和十六进制三种来表示(1)十进制整数:十进制整数没有前缀。其中每个数字位必须为0~9。以下各数是合法的十进制整常数:235、-123、65535、1627;以下各数不是合法的十进制整常数:023(不能有前导0)、23D(含有非十进制数码)。《C语言程序设计》

13(2)八进制整数:八进制整数必须以数字0开头(注意不是字母O),后面跟数字0~7表示。以下各数是合法的八进制数:017(十进制为15)、0101(十进制为65)、0177777(十进制为65535);以下各数不是合法的八进制数:256(无前缀0)、03A2(包含了非八进制数码)。《C语言程序设计》

14(3)十六进制整数:十六进制整常数的前缀为0X或0x。其数码取值为0~9,A~F或a~f。以下各数是合法的十六进制整常数:0X2A(十进制为42)、0XA0(十进制为160)、0XFFFF(十进制为65535);以下各数不是合法的十六进制整常数:5A(无前缀0X)、0X3H(含有非十六进制数码)。《C语言程序设计》

15(4)整型常数的后缀:长整型数是用后缀“L”或“l”来表示的。例如十进制长整数:158L、358000L;八进制长整数:012L、077L、0200000L;十六进制长整数:0X15L、0XA5L、0X10000L。长整数158L和基本整常数158在数值上并无区别。但对158L,因为是长整型量,系统将为它分配4个字节存储空间。而对158,因为是基本整型,只分配2个字节的存储空间。《C语言程序设计》

16无符号数也可用后缀表示,整型常数的无符号数的后缀为“U”或“u”。如358u、0x38Au、235Lu均为无符号数。前缀,后缀可同时使用以表示各种类型的数。如0XA5Lu表示十六进制无符号长整数A5,其十进制为165。《C语言程序设计》

17整数在内存中的存放形式(补码)数在计算机中是以二进制的形式存放的。最高位为符号位,(0表示正,1表示负)。(1)该数为正整数时,补码与原码相同,如十进制数15,对于16位的内存单元来说,《C语言程序设计》

18(15)补=(15)原=0000000000001111,最前面的0为符号位,表示正数。(2)该数为负整数时,求补码口诀为“求反加一”。先求出该负数的二进制表示,将其按位取反(符号位除外),再在最低位加1。如十进制数-15,对于16位的内存单元来说,(-15)原=1000000000001111,然后按位求反(符号位除外)得到1111111111110000,末位加1得(-15)补=1111111111110001,最前面的1为符号位,表示负数。《C语言程序设计》

20

整型变量整型变量的定义基本格式:int变量名1[,变量名2,…,变量名n];如:intx,y,z;整型变量的分类在基本类型符(int)前面增加两类修饰符,一类用于控制变量的符号,包括signed(有符号)和unsigned(无符号);另一类用于控制变量的取值范围,包括short(短)和long(长),形成了六种。《C语言程序设计》

21(1)有符号基本型(int)在TC下这种变量占用2个字节(16位)的内存单元,表示的数值范围为(-32768~32767),《C语言程序设计》

22(2)无符号基本型(unsignedint)在TC下这种变量占用2个字节(16位)的内存单元,因为最高位是数据位,不是符号位,此类型的值是非负的,表示的数值范围为(0~65535)《C语言程序设计》

23【例2-1】无符号数输出的两种形式。voidmain(){unsignedintm;m=65448;printf("\nm=%d\n",m);printf("m=%u\n",m);}程序运行情况:m=-88m=65448《C语言程序设计》

24程序说明:程序中定义m为无符号数,并赋初值65448,对应的二进制编码为1111111110101000。printf函数中的“%d”是输出有符号整型数时指定的格式符,作为有符号数使用时,最高为符号位,1表示负数,存放数据1000000001011000(-88)的补码。printf函数中的“%u”是输出无符号整型数时指定的格式符,作为无符号数使用时,最高为数据位,存放无符号的数,值就是65448。《C语言程序设计》

25(3)有符号短整型(shortint或short)在TC中,该类型与int型等价。(4)无符号短整型(unsignedshortint或unsignedshort)在TC中,该类型与unsignedint型等价。(5)有符号长整型(longint或long)在TC下这种变量占用4个字节(32位)的内存单元,表示的数值范围为-2147483648~2147483647(-231~231-1)。《C语言程序设计》

26“%ld”是输出有符号长整型数时指定的格式符。(6)符号长整型(unsignedlongint或unsignedlong)。在TC下这种变量占用4个字节(32位)的内存单元,因为最高位是数据位,不是符号位,此类型的值是非负的,表示的数值范围为(0~4294967295)。《C语言程序设计》

27《C语言程序设计》

28实型数据1实型常量实型也称为浮点型。实型常量又称为实数或浮点数,采用十进制,有小数和指数两种形式。(1)十进制数形式:由数码0~9和小数点组成。例如:0.0、25.0、5.678、0.12、5.0、300.、-123.4567等均为合法的实数。注意,必须有小数点或加后缀为“f”或“F”来表示该数为浮点数。如356f和356.是等价的。《C语言程序设计》

29(2)指数形式:由十进制数,加阶码标志“e”或“E”以及阶码组成。其一般形式为:aEn表示a×10n。如:1.2E5(等于1.2×105)、3.8E-2(等于3.8×10-2)、0.5E5(等于0.5×105)、-4.1E-2(等于-4.1×10-2)以下不是合法的实数:345(无小数点)、E7(阶码标志E之前无数字)、-5(无阶码标志)、53.-E3(负号位置不对)、2.7E(无阶码)《C语言程序设计》

30实数在内存中的存放形式计算机中的实数是按整数部分为0的指数形式存放的,一般一个实数需要4个字节(32位)的内存,最高位是符号位,存放该实数的符号,后面31位,一部分存放实数的尾数部分,另一部分存放实数的阶码部分。尾数表示全为小数点右边部分,没有整数部分;具体的位数由各自的编译器来决定。常用的浮点数的格式如表2-3所示。《C语言程序设计》

31注意:对于浮点数来讲,小数部分占的位数越多,它所能表示的精度越高,阶码部分占的位数越多,它所能表示的值越大。以浮点数562.5为例来看看它的的存放形式。562.5=0.5625×103则尾数a=(0.5625)10=(0.1001)2,阶码n=(3)10=(11)2《C语言程序设计》

322实型变量实型变量分为三类:单精度型(float)、双精度型(double)和长双精度型(longdouble)单精度型占4个字节(32位)内存空间,其数值范围为-3.4E-38~3.4E+38,有七位有效数字。双精度型占8个字节(64位)内存空间,其数值范围为-1.7E-308~1.7E+308,有16位有效数字。长双精度型占10个字节(80位)内存空间,其数值范围为-1.2E-4932~1.2E+4932,可提供18位有效数字。《C语言程序设计》

33例如:floatx,y;(x,y为单精度实型量)doublea,b,c;(a,b,c为双精度实型量)注意:实型常数在运算时都按双精度处理。【例2-2】实型变量的精度。voidmain(){floata;doubleb;a=66666.66666;b=66666.1000000000066666;printf("%f\n%f\n",a,b);}《C语言程序设计》

34程序运行情况:66666.66406266666.666667程序说明:程序内printf函数中的“%f”是输出浮点数时指定的格式符。从本例可以看出,由于a是单精度浮点型,有效位数只有七位。而整数已占五位,故小数点后二位数字有效,后面四位数字是随机的,没有意义。b是双精度型,有效位为十六位。但TurboC规定小数后最多保留六位,其余部分四舍五入。《C语言程序设计》

35字符型数据字符型数据用来在计算机中表示英文字母、符号、和汉字等数据。1字符常量字符常量是用单引号括起来的一个字符。如‘a’,‘b’,‘=’,‘7’,‘?’都是合法字符常量。字符型数据占用一个字节(8位)的内存单元,用于存放该字符号所对应的ASCII码的值(参见附录1),从0~255,对应256个字符。存放时与整型数据差别不大,只是数据表示的范围小一些而已。《C语言程序设计》

36注意:字符常量只能用单引号括起来,不能用双引号或其它括号。字符可以是字符集中任意字符,但数字被定义为字符型之后存放的是该字符的ASCII码。如'7'和7是不同的。2字符串常量字符串常量是由一对双引号括起的字符序列。例如:“hello”,“Cprogram”,“$12.5”等都是合法的字符串常量。《C语言程序设计》

37字符串常量和字符常量是不同的量。它们之间主要有以下区别:字符常量由单引号括起来,字符串常量由双引号括起来。字符常量只能是单个字符,字符串常量则可以含一个或多个字符。可以把一个字符常量赋予一个字符变量,但不能把一个字符串常量赋予一个字符变量。在C语言中没有相应的字符串变量。但是可以用一个字符数组来存放一个字符串常量。《C语言程序设计》

38字符常量占一个字节的内存空间。字符串常量占的内存字节数等于字符串中字节数加1。增加的一个字节中存放字符'\0'(ASCII码为0)。这是字符串结束的标志,在输出时从第一个字符开始逐个输出字符,遇到'\0'字符就停止输出,注意'\0'是不可以显示的字符,不能输出。《C语言程序设计》

39例如:字符串"hello"在内存中存放形式如图2-6所示:《C语言程序设计》

40字符常量'a'和字符串常量"a"虽然都只有一个字符,但在内存中的情况是不同的。'a'在内存中占一个字节,可表示为:"a"在内存中占二个字节,可表示为:

aa\0《C语言程序设计》

413转义字符转义字符是一种特殊的字符常量。转义字符以反斜杠'\'开头,后跟一个或几个特定的字符。转义字符不同于字符原有的意义,故称“转义”字符。例如,在前面各例题printf函数的格式串中用到的“\n”就是一个转义字符,其意义不是“字母n”而是“回车换行”。转义字符主要用来表示那些用一般字符不便于表示的控制代码。《C语言程序设计》

43表中的ddd和hh分别为八进制和十六进制的ASCII代码。如果‘\’后面紧跟的三位数字字符是在000~377之间的,把他们当做八进制数来看待,如‘\101’表示字母‘A’,‘\134’表示反斜杠。注意:这三位字符的ASCII码值应该在0~255之间,超过255就出错。如'\1234'与'\411'均出错。《C语言程序设计》

442、如果'\'后面跟的字符是8,9则不能表示八进制。如"\81"表示'8'和'1'这2个字符。"\789"表示3个字符,其中'\7'表示蜂鸣声,不作显示。3、如果'\'后面紧跟的字符是x00~xFF之间的,则把他们当做十六进制数来看待;如'\x41'表示字符ASCII码为65对应的字符'A'。注意:x后最多只能跟两位,超过就出错。如'\x41a'出错。《C语言程序设计》

45【例2-3】转义字符的使用。voidmain(){printf("\101\t\102\t\134\n");printf("\x41\\a3\b4\n");printf("\"Howdoyoudo!\'\n");printf("\789\n");printf("china\rC\n");}程序运行情况:AB\A\a4"Howdoyoudo!'89China《C语言程序设计》

46程序说明:程序的第一行输出“A”之后就是“\t”,于是跳到下一制表位置(设制表位置间隔为8),在第9列显示“B”,下面又遇到“\t”,又跳到下一制表位置,在第17列显示“\t”,下面遇到“\n”,故回车换行;光标移到下一行的开头。第二行输出“A”之后就遇到是“\\”,输出一个“\”,接着输出“a3”后又遇到“\b”,使光标从当前位置后退一格。输出的“4”将取代原来屏幕上该位置上显示的字符“3”。《C语言程序设计》

47第三行“\"”输出的是“"”之后输出“Howdoyoudo!”,接着又遇到“\'”,输出的是“'”。第四行先输出“china”,之后就遇到是“\r”,使光标从当前位置回到本行开头,接着输出的字符“C”就取代原来屏幕上显示的“c”,如后面还有字符就会继续取代。就像黑板擦把原来的粉笔字擦掉一样,不会留下痕迹。《C语言程序设计》

48【例2-4】符号常量的使用。#definePI3.14159voidmain(){floats,r;r=5;s=PI*r*r;printf("s=%f\n",s);}程序运行情况:s=78.539749《C语言程序设计》

495字符变量字符变量是用来存放一个字符常量的,字符变量的类型说明符是char。例如:chara,b;每个字符变量被分配一个字节的内存空间,字符值是以ASCII码的形式存放在变量的内存单元之中的。如x的十进制ASCII码是120,

y的十进制ASCII码是121。《C语言程序设计》

50对字符变量a,b赋予'x'和'y'值:a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码:a:

01111000b:

01111001所以也可以把它们看成是整型量。C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时,允许把字符变量按整型量输出,也允许把整型量按字符量输出。整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时,只有低八位字节参与处理。《C语言程序设计》

51【例2-5】字符变量的使用。voidmain(){chara,b;a=120;b=121;printf("%c,%c\n%d,%d\n",a,b,a,b);}程序运行情况:x,y120,121《C语言程序设计》

52【例2-6】大写字母换成小写字母。voidmain(){chara,b;a='X';b='Y';a=a+32;b=b+32;printf("%c,%c\n%d,%d\n",a,b,a,b);}程序运行情况:x,y120,121《C语言程序设计》

53运算符和表达式运算符可分为以下几类:1、算术运算符用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(--)共七种。2、关系运算符用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)六种。《C语言程序设计》

543、逻辑运算符用于逻辑运算。包括与(&&)、或(||)、非(!)三种。4、位操作运算符参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。《C语言程序设计》

555、赋值运算符用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。6、条件运算符这是一个三目运算符,用于条件求值(?:)。7、逗号运算符用于把若干表达式组合成一个表达式(,)。《C语言程序设计》

568、指针运算符用于取内容(*)和取地址(&)二种运算。9、求字节数运算符用于计算数据类型所占的字节数(sizeof)。10、特殊运算符有括号(),下标[],成员(→,.)等几种。《C语言程序设计》

57如果根据运算符所带的运算对象的个数进行分类,可以分为以下三类。1、单目运算符:只需用一个运算对象,例如:正(+)、负(-)运算符,求字节运算符等都是单目运算符。2、双目运算符:需用两个运算对象,C语言的运算符绝大部分都是双目运算符,例如:加(+)、减(-)、乘(*)、除(/)等都是双目运算符。3、三目运算符:需用三个运算对象,条件运算符是C语言中唯一的三目运算符。《C语言程序设计》

58学习运算符和表达式要抓住两点:优先级和结合性。C语言中,运算符的运算优先级共分为15级。1级最高,15级最低。运算符优先级相同时,则按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左),例如算术运算符的结合性是自左至右,而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。《C语言程序设计》

59算术运算符与算术表达式1、算术运算符:(1)加法运算符(“+”)双目运算符,如a+b,4+8等具有左结合性。(2)减法运算符(“-”)双目运算符。但“-”也可作负值运算符,此时为单目运算,如-x,-5等具有右结合性。(3)乘法运算符(“*”)双目运算,具有左结合性。(4)除法运算符(“/”)双目运算具有左结合性。《C语言程序设计》

60参与运算量均为整型时,结果也为整型,舍去小数。如果运算量中有一个是实型,则结果为双精度实型。【例2-7】除法运算符的使用。voidmain(){printf("\n%d,%d\n",23/6,-23/6);printf("%f,%f\n",23.0/6,-23.0/6);}程序运行情况:3,-33.833333,-3.833333《C语言程序设计》

61(5)求余运算符(模运算符“%”)双目运算,具有左结合性。要求参与运算的量均为整型。余数的符号与被除数的符号相同。【例2-8】求余运算符的使用。voidmain(){printf("%d,%d\n",100%3,-100%3);printf("%d,%d\n",100%(-3),-100%(-3));}程序运行情况:1,-11,-1《C语言程序设计》

62(6)自增运算符(“++”)其功能是使变量的值自增1,为单目运算,具有右结合性。有以下两种形式:++ii自增1后再参与其它运算。i++i参与运算后,i的值再自增1。注意,它们都能使变量增加1,但当它们参与其他运算时作用不同。《C语言程序设计》

63如果当a=5时①++a表达式的值为6,且a=6②a++表达式的值为5,且a=6③b=++a等价于a=a+1;b=a表达式的值为6,且a=6,b=6④b=a++等价于b=a;a=a+1表达式的值为5,且a=6,b=5⑤b=-a++等价于b=-a;a=a+1表达式的值为-5,且a=6,b=-5《C语言程序设计》

64(7)自减1运算符(“--”)其功能是使变量值自减1,为单目运算,具有右结合性。与自增运算符类似,自减运算符也有以下两种形式:--aa自减1后再参与其它运算。a--a参与运算后,a的值再自减1。注意,它们都能使变量减小1,但当它们参与其他运算时作用不同。特别是当它们出现在较复杂的表达式或语句中时,常常难于弄清,因此应仔细分析。《C语言程序设计》

65【例2-9】自增自减运算符的混合使用。voidmain(){inta=8;printf("%d",++a);printf("%d",--a);printf("%d",a++);printf("%d",a--);printf("%d",-a++);printf("%d\n",-a--);}程序运行情况:9889-8-9《C语言程序设计》

662、算术表达式算术表达式是由常量、变量、函数和运算符组合起来的式子。一个表达式有一个值及其类型。以下是算术表达式的例子:a+b、(a*2)/c、(x+r)*8-(a+b)/7、++i、sin(x)+sin(y)、(++i)-(j++)+(k--)算术表达中要注意多个运算符的处理。如:a+++b在处理时自左至右的将若干个字符组成一个运算符。即理解为(a++)+b,而不是a+(++b),为避免二义性,写时最好加上括号,让大家都能理解你的程序。《C语言程序设计》

67在多数系统中,函数调用时的求值顺序是自右至左的。如给a赋初值为8;则执行语句printf("%d,%d",a,++a);后的输出结果为9,9。执行语句printf("%d,%d,%d,%d\n",a,++a,a++,--a);后的输出结果为9,9,7,7。但这种写法不宜提倡,为了不至于让别人难于理解,最好改写成:b=++a;c=a++;d=--a;printf("%d,%d,%d,%d\n",a,b,c,d);《C语言程序设计》

68【例2-10】分析程序的输出结果,注意其中的算术表达式。voidmain(){inti=5,j=5,p,q;p=(i++)+(i++)+(i++);q=(++j)+(++j)+(++j);printf("%d,%d,%d,%d",p,q,i,j);}程序运行情况:15,24,8,8《C语言程序设计》

69【例2-11】上例程序的改写。voidmain(){inti=5,j=5,a,b,c,p,q;a=i++;b=i++;c=i++;p=a+b+c;a=++j;b=++j;c=++j;q=a+b+c;printf("%d,%d,%d,%d",p,q,i,j);}程序运行情况:18,21,8,8《C语言程序设计》

703赋值运算符与赋值表达式1、简单赋值运算符及表达式简单赋值运算符记为“=”。由“=”连接的式子称为赋值表达式。其一般形式为:变量=表达式例如:x=3、x=a+b赋值运算符具有右结合性。因此a=b=c=5可理解为a=(b=(c=5))。《C语言程序设计》

71凡是表达式可以出现的地方均可出现赋值表达式。例如,式子x=(a=5)+(b=8)是合法的。它的意义是把5赋予a,8赋予b,再把a,b相加,和赋予x,故x应等于13。按照C语言规定,任何表达式在其未尾加上分号就构成为语句。因此如x=8;a=b=c=5;都是赋值语句,在前面各例中我们已大量使用过了。《C语言程序设计》

722、复合赋值符及表达式在赋值符“=”之前加上其它二目运算符可构成复合赋值符。可以使用10种复合运算符:即+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=。构成复合赋值表达式的一般形式为:变量运算符=表达式它等效于变量=变量运算符表达式例如:a+=5等价于a=a+5;

x*=y+7等价于x=x*(y+7)

r%=p等价于r=r%p《C语言程序设计》

73【例2-12】赋值表达式的使用。voidmain(){inta=8,b=10;printf("%d\t",a+=a%=a%3);printf("%d\n",b*=b+=b/=b);}程序运行情况:04《C语言程序设计》

74注意:1、赋值语句“=”左边必须是变量名,不能是常量或表达式。例如:30=x和y+2=9;都是错误的。2、赋值语句中的“=”表示赋值,不是数学中的相等的意思,表示相等要用到关系运算符“==”表示。二者不要混淆。《C语言程序设计》

754数据的类型转换C语言变量的数据类型可以相互转换,转换的方法有两种,一种是自动转换,一种是强制转换。自动转换如果赋值运算符两边的数据类型不相同,系统将自动进行类型转换,即把赋值号右边的类型换成左边的类型。具体规定如下:(1)实型与整型相互转换:①实型赋予整型,舍去小数部分。《C语言程序设计》

76②整型赋予实型,数值不变,但将以浮点形式存放,即增加小数部分(小数部分的值为0)。(2)double型与float型相互转换:①double型赋予float型,截取前面7位有效数字,因为double型表示的范围大,转换成float时应注意只有在float型表示的范围(-3.4E-38~3.4E+38)内才能转换,否则出现数值溢出错误。②float型赋予double型,数值不变,有效位数扩展到16位,在内存中以8个字节存放。《C语言程序设计》

77(3)字符型与整型相互转换①字符型赋予整型,将字符的ASCII码值放到整型量的低八位中,高八位分两种情况。如果系统将字符处理为无符号的字符类型,整型变量高八位全补0;如果系统将字符处理为带符号的字符类型,此时若字符的最高位为0,则高八位全补0;此时若字符的最高位为1,则高八位全补1。《C语言程序设计》

78也就是说:字符作为无符号数时,整型变量的值与该字符的ASCII码相同;作为有符号数时,字符的ASCII码在0~127之间时,整型变量与该字符的ASCII码相同;字符的ASCII码在128~255之间时,整型变量的值为该字符的ASCII码减去256,范围在-128~-1之间。【例2-13】字符变量的使用。程序示例《C语言程序设计》

79②整型赋予字符型,高八位截去,只把低八位赋予字符量。【例2-14】大于255的整数赋予字符变量。voidmain(){chara,b;a=376;b=889;printf("%c,%c\n%d,%d\n",a,b,a,b);}程序运行情况:x,y120,121《C语言程序设计》

80【例2-15】小于0的整数赋予字符变量。(4)无符号整型与有符号整型的相互转换①无符号整型赋予有符号整型,原样赋值,将数值中的高位当做符号位处理。②有符号整型赋予无符号整型,原样赋值,把原来的符号位也作为数值一起传送。【例2-16】无符号整型与有符号整型的相互转换。程序示例程序示例《C语言程序设计》

81(5)int型和long型的相互转换①int型赋予long型,在内存中以4个字节存放,数值低16位不变,正数高16位补0,负数高16位补1,以保持数值不变。②long型赋予int型,只把低16位送到int型变量中。【例2-17】自动类型转换的综合使用。程序示例《C语言程序设计》

82【例2-18】例2-17的改写。voidmain(){inta,b=322;floatx,y=8.88;charc1='k',c2;printf("%d,%f,%d,%c",a=y,x=b,a=c1,c2=b);}程序运行情况:107,322.000000,107,B《C语言程序设计》

832、强制转换其一般形式为:(类型说明符)(表达式)其功能是把表达式的运算结果强制转换成类型说明符所表示的类型。例如:(float)a把a转换为实型(int)(x+y)把x+y的结果转换为整型注意:(1)类型说明符和表达式都必须加括号(单个变量可以不加括号),如把(int)(x+y)写成(int)x+y则成了把x转换成int型之后再与y相加了。《C语言程序设计》

84(2)无论是强制转换或是自动转换,都只是对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。【例2-19】强制转换的使用。voidmain(){floatf=5.75;printf("f=%f,(int)f=%d,(int)f%%2=%d\n",f,(int)f,(int)f%2);}程序运行情况:f=5.750000,(int)f=5,(int)f%2=1《C语言程序设计》

85各类数值型数据之间的混合运算各类型数据进行混合运算时,先转换成同一类型,然后进行运算。转换时遵循以下规则:按数据长度增加的方向进行,以保证精度不降低。如int型和long型运算时,先把int量转成long型后再进行运算。所有的浮点运算都是以双精度进行的,即使仅含float单精度量运算的表达式,也要先转换成double型,再作运算。《C语言程序设计》

86char型和short型参与运算时,必须先转换成int型。在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。《C语言程序设计》

87《C语言程序设计》

88【例2-20】不同类型数据之间的混合运算。voidmain(){charch='a';inti=4;floatf=3.567;doubled=1.2345;printf("%f\n",ch/i+f*d-(f+i));}程序运行情况:20.836461《C语言程序设计》

89

关系运算符和表达式1、关系运算符在程序中经常需要比较两个量的大小关系,以决定程序下一步的工作。比较两个量的运算符称为关系运算符。在C语言提供的关系运算符都是双目运算符,其结合性均为自左至右。《C语言程序设计》

90表2-5C语言的关系运算符《C语言程序设计》

91在六个关系运算符中,<=,>=,==和!=都由两个字符组成,之间不能有空格。<,<=,>,>=的优先级相同,高于==和!=,==和!=的优先级相同。关系运算符的优先级低于算术运算符,高于赋值运算符。要注意区别“==”和“=”《C语言程序设计》

922、关系表达式用关系运算符将两个运算对象连接起来的式子称为关系表达式。其中运算对象可以是常量、变量或表达式。关系表达式的一般形式为:表达式关系运算符表达式关系表达式的运算结果有两种:“真”和“假”,分别用“1”和“0”表示。如:5>0的值为“真”(1)。(a=3)>(b=5)由于3>5不成立,故其值为假(0)。《C语言程序设计》

93【例2-21】若有如下定义:charc='d';inta=2,b=5;floatx=3.1415,y=0.00001;求下列各表达式的值。(1)a+3>=b-2(2)'a'+1<c(3)a=b>c(4)a==2<x(5)b>a>110001《C语言程序设计》

94

逻辑运算符和表达式1、逻辑运算符C语言中提供了三种逻辑运算符:(1)&&与运算(2)||或运算(3)!非运算“&&”和“||”均为双目运算符。具有左结合性。“!”为单目运算符,具有右结合性。《C语言程序设计》

95逻辑运算符按“!(非)→&&(与)→||(或)”的优先次序,其中“!”的优先级为三者最高,并且“!”高于算术运算符,“&&”和“||”低于关系运算符。《C语言程序设计》

96按照运算符的优先顺序可以得出:a>b&&c>d等价于(a>b)&&(c>d)!b==c||d<a等价于((!b)==c)||(d<a)a+b>c&&x+y<b等价于((a+b)>c)&&((x+y)<b)2、逻辑运算的值逻辑运算的值也为“真”和“假”两种,用“1”和“0”来表示。其求值规则如下:《C语言程序设计》

97(1)与运算&&:参与运算的两个量都为真时,结果才为真,否则为假。例如:5>0&&4>2结果为真。(2)或运算||:参与运算的两个量只要有一个为真,结果就为真。两个量都为假时,结果为假。例如:5>0||5>8结果也为真。(3)非运算!:参与运算量为真时,结果为假;参与运算量为假时,结果为真。例如:!(5>0)的结果为假。《C语言程序设计》

98C语言规定,以“0”代表“假”,以非“0”的数值作为“真”。例如:5&&3的值为"真",即为1。又如:5||0的值为“真”,即为1。3、逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。逻辑表达式的一般形式为:表达式逻辑运算符表达式《C语言程序设计》

99其中的表达式可以又是逻辑表达式,从而组成了嵌套的情形。例如:(a&&b)&&c根据逻辑运算符的左结合性,该式也可写为:a&&b&&c逻辑表达式的值是式中各种逻辑运算的最后值,以“1”和“0”分别代表“真”和“假”。《C语言程序设计》

100【例2-22】求逻辑表达式的值。voidmain(){charc='k';inti=1,j=2,k=3;floatx=3e+5,y=0.85;printf("%d,%d\n",!x*!y,!!!x);printf("%d,%d\n",x||i&&j-3,i<j&&x<y);printf("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);}程序运行情况:0,01,00,1《C语言程序设计》

101注意:在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行。例如:(1)a&&b&&c,当a为假(0)时,表达式的值已确定为假,此时就不必判断b和c。当a为真(非0)时,才需用判断b的值,如果b为假(0)时,表达式的值已确定为假,此时就不必判断c;如果b为真(非0)时,才需用判断C。(2)a||b||c,当a为真(非0)时,就不必判断b和c。当a为假(0)时,才判断b,a和b为假才判断c。《C语言程序设计》

102也就是说,对运算符&&来说,只有第一项非0,才继续后面的运算;对运算符||来说,只有第一项为0,才继续后面的运算。因此如果有下面的逻辑表达式:++a||++b&&++c;已知a=b=c=1且均为int类型变量,因为a的值为1,++a的值为非0,此时后面运算不被执行,变量b的值仍为1。《C语言程序设计》

103条件运算符与条件表达式条件运算符是由字符“?”和“:”组成,要求有三个参与运算的量,是C语言里唯一一个三目运算符。由条件运算符组成条件表达式的一般形式为:表达式1?表达式2:表达式3其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。《C语言程序设计》

104【例2-23】输入两个数,输出较大的一个。voidmain(){inta,b,max;printf("\ninputtwonumbers:");scanf("%d%d",&a,&b);printf("max=%d",a>b?a:b);}程序运行情况:inputtwonumbers:

6,9↙max=9《C语言程序设计》

105使用条件表达式时,还应注意以下几点:1、条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值运算符。因此max=(a>b)?a:b可以去掉括号而写为max=a>b?a:b2、条件运算符?和:是一对运算符,不能分开单独使用。3、条件运算符的结合方向是自右至左。如:a>b?a:c>d?c:d理解为:a>b?a:(c>d?c:d)这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。《C语言程序设计》

106【例2-24】输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。voidmain(){charch;printf("\ninputchar:");scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?(ch+32):ch;printf("\noutputchar:%c\n",ch);}}程序运行情况:inputchar:Woutputchar:w《C语言程序设计》

107逗号运算符其一般形式为:表达式1,表达式2,……表达式n逗号运算符的优先级是最低的,并且具有左结合性。表达式的求值顺序是从左向右依次计算用逗号分隔的各表达式的值,以最后一个表达式的值作为整个逗号表达式的值。例如:(1)a=4,b=a++,b++的值为4;(2)a=4,b=a++,++b的值为5;(3)(a=4,a*4),a++的值为4;(4)a=(a=4,a*4),++a的值为17;《C语言程序设计》

108对于逗号表达式还要说明两点:1、程序中使用逗号表达式,通常是要分别求逗号表达式内各表达式的值,并不一定要求整个逗号表达式的值,此种情况最常用于循环语句中。2、并不是在所有出现逗号的地方都组成逗号表达式,如在变量说明中,函数参数表中逗号只是用作各变量之间的间隔符。例如:printf("%d,%d,%d",a,b,c);中"a,b,c"是函数的参数,不是逗号表达式。《C语言程序设计》

109求字节数运算符C语言提供了一个能获取变量和数据类型所占内存大小(字节数)的运算符sizeof。其使用格式为:sizeof表达式或sizeof(数据类型名或表达式)例如:sizeof(int)的值为2;sizeof(float)的值为4;sizeof1.0的值为8;表明浮点型常量当做双精度处理。注意:sizeof运算的优先级较高,与++,--运算同级,且sizeof之间没有空格。《C语言程序设计》

110位运算符C语言提供了六种位运算符:包括按位与(&)、按位或(|)、按位取反(~)、按位异或(^)、左移(<<)、右移(>>)。1、按位与运算按位与运算符“&”是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。如:9&5=1。《C语言程序设计》

1112、按位或运算按位或运算符“|"是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。例如:可见9|5=13。3、按位异或运算按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5=12。《C语言程序设计》

1124、求反运算求反运算符“~”为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。例如:~9的运算为:~(1000000000001001)结果为:

1000000000010110(十进制65526)《C语言程序设计》

1135、左移运算左移运算符“<<”是双目运算符。其功能把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。《C语言程序设计》

114如:a<<4指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。6、右移运算右移运算符“>>”是双目运算符。其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。例如:设a=15,则a>>2表示把000001111右移为00000011(十进制3)。《C语言程序设计》

1157、位运算赋值运算符位运算符与赋值运算符可以组成复合赋值运算符,有<<=,>>=,&=,^=,|=5种。例如:a&=b相当于a=a&b;a>>=2相当于a=a>>2。《C语言程序设计》

116【例2-25】位运算综合实例。voidmain(){charb='b',c='a';intx,y,d;x=12;y=(x<<4)|b;c&=y;d=(~c&0xff00)>>8;printf("x=%dy=%dc=%dd=%d\n",x,y,c,d);}程序运行情况:x=12y=226c=96d=255《C语言程序设计》

117注意:1、移位运算符“>>”和“<<”两边必须都是整型数,否则非法;每左移一位相当于“>>”左边的值乘以2,每右移一位相当于“<<”左边的值除以2。2、位运算是C语言的一种特殊运算功能,它是以二进制位为单位进行运算的。位运算符只有逻辑运算和移位运算两类。位运算符可以与赋值符一起组成复合赋值符。如&=,|=,^=,>>=,<<=等。3、利用位运算可以完成汇编语言的某些功能,如置位,位清零,移位等。还可进行数据的压缩存储和并行运算。《C语言程序设计》

118运算符的优先级和结合性在计算表达式的值时,先操作优先级高的运算符,当优先级相同时,还要根据运算符的结合性确定计算的先后顺序。表2-6列出了本章所介绍的运算符的优先级及其结合性。有了优先级的知识,就可以准确地判断表达式0XF0F0&0X1020+0X0B0B<<5/2的值。该表达式等价于(0XF0F0&((0X1020+0X0B0B)<<(5/2))),《C语言程序设计》

120常用库函数的使用库是函数的一个集合。一个库文件中存放着每个函数的名称、参数、该函数的目标代码,以及连接过程所必需的重新定位信息。1、文件包含方法:在程序开头用以下预编译命令:#include

"头文件名"或#include<头文件名>。例如:#include"stdio.h"或#include"math.h"文件包含命令的功能是把指定的文件插入该命令行位置取代该命令行,从而把指定的文件和当前的源程序文件连成一个源文件。《C语言程序设计》

121说明包含命令中的文件名可以用双引号括起来,也可以用尖括号括起来。#include"s

温馨提示

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

评论

0/150

提交评论