C语言第2章基本数据类型与表达式.ppt

上传人:wuy****n92 文档编号:70102097 上传时间:2023-01-16 格式:PPT 页数:76 大小:526KB
返回 下载 相关 举报
C语言第2章基本数据类型与表达式.ppt_第1页
第1页 / 共76页
C语言第2章基本数据类型与表达式.ppt_第2页
第2页 / 共76页
点击查看更多>>
资源描述

《C语言第2章基本数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《C语言第2章基本数据类型与表达式.ppt(76页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、C语言第二章C语言的基本数据类型与表达式 2.1 C语言字符集、标识符与关键字2.1.1 C语言字符集 C语言和其他语言一样,它的基本字符集包括语言和其他语言一样,它的基本字符集包括有英文字母、阿拉伯数字以及其他一些符号。有英文字母、阿拉伯数字以及其他一些符号。具体归纳如下:英文字母:大小写各26个,共计52个 阿拉伯数字:0到9,共计10个 下划线:_;其他特殊符号:主要指运算符,运算符通常由一至两个特殊符号组成。特殊符号集如下:+_*/%+-=!=!&|&()?:.,;2.1.2 标识符用户为程序中的变量、常量、数组、函数、文件用户为程序中的变量、常量、数组、函数、文件和类型等数据所起的名

2、字称为标识符。标识符是和类型等数据所起的名字称为标识符。标识符是字母、下划线和数字的排列,但必须用字母或下字母、下划线和数字的排列,但必须用字母或下划线划线“_”“_”开头。开头。大小写字母含义不同。如大小写字母含义不同。如countcount,CountCount,COUNTCOUNT是是三个不同的标识符。标识符不能和三个不同的标识符。标识符不能和C C语言的关键字语言的关键字相同,也不能和用户编制的函数或相同,也不能和用户编制的函数或C C语言库函数同语言库函数同名。名。Turbo C 2.0Turbo C 2.0对于标识符的规定最长可允许对于标识符的规定最长可允许3232个字个字符。符。

3、合法标识符:合法标识符:_22A,lea_1,avg3,day,ABCde43xyw8_22A,lea_1,avg3,day,ABCde43xyw8 不合法标识符:不合法标识符:M.J.YORK,$_238,#xy,a*b,8Tea M.J.YORK,$_238,#xy,a*b,8Tea2.1.3 关键字 关键字(又称保留字)是一种语言中规定具有特定含义的标识符。关键字(又称保留字)是一种语言中规定具有特定含义的标识符。C语言可使用以下语言可使用以下32个关键字:个关键字:autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfl

4、oatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile注:注:C语言的关键字都是小写的。语言的关键字都是小写的。2.2 C语言的基本数据类型C数据类型丰富,分为:基本类型构造类型指针类型空类型整型字符型实型单精度双精度数组结构体共用体数据有常量、变量之分,均为其中一种类型。枚举数据类型通常将数组类型、结构体类型、共用体类通常将数组类型、结构体类型、共用体类型和指针类型又统称为复杂类型型和指针类型又统称为复杂类型(有的教有的教材将枚举类型也归

5、为复杂类型材将枚举类型也归为复杂类型)。基本类型是复杂类型的元素类型。其前面基本类型是复杂类型的元素类型。其前面可以加各种修饰符,用来修改基本类型的可以加各种修饰符,用来修改基本类型的含义,以便更准确地适应各种情况的需求。含义,以便更准确地适应各种情况的需求。修饰符修饰符signedsigned,shortshort,longlong和和unsignedunsigned适用于字符和整数两种基本类型,而适用于字符和整数两种基本类型,而longlong还可用于还可用于doubledouble类型。表类型。表2.12.1列出列出C C所支持所支持的数据类型,表的数据类型,表2.22.2列出基本类型的

6、修饰列出基本类型的修饰符。符。表2.1 Turbo C所支持的基本数据类型 关关键键字字所占位数所占位数取取值值范范围围精度(位)精度(位)char8-127127signed char8-127127unsigned char80255int16-3276832767unsigned int16065535signed int16同同intunsigned short int16同同intsigned short int16同同short intlong int 32-21474836482147483647unsigned long int3204294967295float32-3.41

7、0-38+3.410387double64-1.710-308+3.41030815long double80-3.410-4932+3.4104932表2.2 基本数据类型的修饰符 修修饰饰符符含含义义signed带带符号符号修修饰饰符符unsigned无符号无符号修修饰饰符符long长长型修型修饰饰符符short短型修短型修饰饰符符2.2.2 整型变量整型变量一、分类:一、分类:分为四种:基本型、短整型、长整型、无符号型 2.短整型:用“short int”或“short”表示 3.长整型:用“long”或“long int”表示 1.基本型:用“int”表示 4.无符号型:无符号型:(修

8、饰符:修饰符:unsigned)不存放符号,则不带符号数不存放符号,则不带符号数.又分无符号整型,无符号短整型,无符号长整型。分别以分别以unsigned intunsigned int、unsigned shortunsigned short和和unsigned longunsigned long表示表示。整型数据有:十进制整数、八进制整数和十六进制三种形式。整型数据有:十进制整数、八进制整数和十六进制三种形式。(1)十进制整数的表示与数学上的表示相同,如:十进制整数的表示与数学上的表示相同,如:256,-321,0(2)八进制整数的表示以数字八进制整数的表示以数字0开头,如:开头,如:02

9、34表示八进制整数表示八进制整数(234)8,所对应的十进制数,所对应的十进制数为为 282+381+480=156。(3)十六进制整数的表示以十六进制整数的表示以0 x开头,如:开头,如:0 x234表示十六进制整数表示十六进制整数(234)16 (注意:十六进制数前导字符注意:十六进制数前导字符0 x,x前面是数字前面是数字0)在一个整型数据后面加一个字母在一个整型数据后面加一个字母l或或L,则认,则认为是为是long int型量型量(长整型长整型)。如。如342L、0L、78L等。等。2.2.3 实数类型 实数类型的数据即实型数据,又称之为浮点型数据。实数类型的数据即实型数据,又称之为浮

10、点型数据。Turbo C的实型数据又分为单精度型的实型数据又分为单精度型(float)和双精和双精度型度型(double)两种,它们所占内存字节数及取值范两种,它们所占内存字节数及取值范围见表围见表2.1。在在C语言程序设计中,实型数据有两种表达形式:语言程序设计中,实型数据有两种表达形式:(1)十进制数形式。如:十进制数形式。如:5.734、0.273、8、224等。等。(2)指数形式。如:指数形式。如:546E+3或或546E3都代表都代表546103。在一般系统中,一个在一般系统中,一个float型数据在内存中占型数据在内存中占4个字个字节,一个节,一个double型数据占型数据占8个字

11、节。单精度实数提个字节。单精度实数提供了供了7位有效数字,双精度实数提供位有效数字,双精度实数提供15位有效数字。位有效数字。2.2.4 字符类型 字符类型的数据即指字符型数据,它可分为字符和字符串两种。C语言的字符表示是用单引号括起来的一个字符。如A、y、*、!、+等。注意,注意,e和和E是不同的字符量。是不同的字符量。用反斜杠开头()引导的一个字符或一个数字序列也可表示字符量。反斜杠引导的字符称转义字符,其意思是将反斜杠()后面的字符转变成另外的意义。常用的以开头的特殊字符如表2.3所示。字符形式字符形式功功 能能n换换行行t横向跳格(跳到下一个横向跳格(跳到下一个输输出区)出区)v竖竖向

12、跳格向跳格b退格退格r回回车车f走走纸换页纸换页反斜杠字符反斜杠字符单单引号字符引号字符双引号字符双引号字符a报报警警0空空值值ddd1到到3位位8进进制数所代表的字符制数所代表的字符xhh1到到2位位16进进制数所代表的字符制数所代表的字符在C语言中,字符串是用一对双引号括起来的字符序列。如:SHANGHAI,AbcdeFGHijk,How are you 注意注意:a和和a是不同的。一个是字是不同的。一个是字符量符量a,一个是字符串量,一个是字符串量a。字符型数据类型标识符为char,字符型数据在内存中占一个字节。2.3 常量与变量2.3.1 常量与符号常量常量与符号常量 C语言的数据有常

13、量和变量之分。语言的数据有常量和变量之分。常量 程序运行过程中不能被改变的量。一般的数据显式写法均表示常量。如程序中:20 整型常量 15.8 实型常量 a 字符常量例:#define PRICE 30 main()int num,total;num=10;total=num*PRICE;printf(total=%d,total);还可用一个符号表示一个常量 符号常量符号常量(一般用大写,以区分变量)再如:=3.1415629#define PAI 3.1415629#define PRICE 30字符型常量可分为字符常量和字符串常量。其表示归纳如下:整型常量实型常量字符常量字符串常量C语言

14、的 常量直 接 常量符号常量(标识符定义)字符型常量数 值常量1.整型常量 C语言整型常量可以写成十进制、八进制、十六语言整型常量可以写成十进制、八进制、十六进制三种形式。合法的整型常量举例如下:进制三种形式。合法的整型常量举例如下:256,75,0(十进制整型常量)(十进制整型常量)0237,045,0621(八进制整型常量,用数字(八进制整型常量,用数字0作作前导)前导)0 x28AF,0 xED4(十六进制整型常量,用数字(十六进制整型常量,用数字0与与x作前导)作前导)435L,350L不合法的整型常量举例如下:不合法的整型常量举例如下:096(9非八进制数码)非八进制数码)48EA(

15、十六进制数缺前导字符(十六进制数缺前导字符0 x)0 xK(K不是十六进制字符)不是十六进制字符)2.实型常量实型常量只能用十进制形式表示,不能用八进制和十六进制形式表示。实型常量有两种表示方法:十进制小数形式和指数形式。用指数形式表示小数时,字母E或e之前必须有数字,且E或e后面的指数必须为整数。如:28.76,564.03,123e3,2.34E+8,15.78E-2都是合法的实型常量,而6.4E+4.8,E9,E-7都是不合法的实型常量。3.字符常量C语言的字符常量是用单撇号括起来的一个字符。如语言的字符常量是用单撇号括起来的一个字符。如x,+,n,101都是合法的字符常量。都是合法的字

16、符常量。字符数据在内存中是以字符数据在内存中是以ASCII码存储,它的存储形式与整数的存储码存储,它的存储形式与整数的存储形式类似。因此可以通用。例如:形式类似。因此可以通用。例如:#include main()char c1,c2;c1=97;c2=98;printf(%c,%cnc1,c2);printf(%d,%dnc1,c2);在程序中我们将整数在程序中我们将整数97和和98分别赋给分别赋给c1和和c2,它的作用相当于以下,它的作用相当于以下两个赋值语句:两个赋值语句:c1=a;c2=b;运行时输出结果如下:运行时输出结果如下:a,b 97,98 4.字符串常量C语言没有专门的字符串类

17、型变量,但有字符串常量。字符串常量是由一对双撇号括起来的字符序列。如:changsha,central south university,?ab都是合法的字符串常量。不要将字符常量与字符串常量混淆。如:a是字符常量,a是字符串常量假设c被指定为字符常量:char c;c=a;是正确的,而c=a;是错误的。c=CHINA;也是错误的。5.符号常量在C语言中可以用标识符定义一个常量,其一般定义格式如下:#define标识符标识符常量数据常量数据例如:#define MAX 1000#define MIN 10#define PI 3.14159#define END$符号常量一般用大写字符表示。2

18、.3.2 变量与变量定义变量是以某标识符为名字,在程序运行过程中,其值是可以改变的量。在C语言程序中,所有的变量必须加以说明,没有任何隐含的变量。变量说明主要是指出变量的名称,确定变量的数据类型。在C语言程序中,变量必须“先定义、后使用”。1.变量定义语句变量定义语句的一般格式为:类型标识符类型标识符 变量名变量名1,变量名,变量名2变量可以在程序的三种地方定义:函数内部、所有函数的外部和函数的参数定义中。由此定义的变量对应地称为局部变量、全程变量和形式参数。例如:int i,j,k;/*定义三个整型变量*/float xl,yl;/*定义两个单精度型变量*/char profit,loss;

19、/*定义两个字符型变量*/为了方便使用,变量名在定义时可以赋初值。如:int a=5,b=8,c;float x1=6.27,x2,x3=5.94;注意:注意:(1)在同一程序中变量名不允许被重复定义,在同一程序中变量名不允许被重复定义,如:如:int x,y,z;float a,b,x;/*变量名x被重复定义,不允许*/(2)大写字母和小写字母被认为是两个不同的大写字母和小写字母被认为是两个不同的字符。如:字符。如:sum和和SUM是两个不同的变量名。是两个不同的变量名。(3)凡未被定义的标识符,不得作为变量名使凡未被定义的标识符,不得作为变量名使用。用。2.变量赋初值变量使用变量使用“=”

20、赋初值。赋初值。例如:例如:int x=3.2E5,a=15.6;例例:main()int x,y,z,w;/*定义定义x,y,z,w为整型变量为整型变量*/unsigned int k;/*定义定义k为无符号整型变量为无符号整型变量*/x=10;y=-20;k=30;z=x+k;w=y+k;/*不同类型的整型变量不同类型的整型变量x、y、k可运算可运算*/printf(x+k=%d,y+k=%dn,z,w);程序运行结果为:程序运行结果为:x+k=40,y+k=10例例:大小写字母的转换。大小写字母的转换。main()char c1,c2;/*定义字符型变量定义字符型变量c1,c2*/;c1

21、=a;c2=b;/*c1、c2赋初值赋初值*/c1=c1-32;c2=c2-32;printf(%c%c,c1,c2)运行结果为:运行结果为:A B两个小写字母两个小写字母a,b通过通过c1=c1-32以及以及c2=c2-32转换转换成了大写字母成了大写字母A和和B输出。输出。3.变量的作用域按作用域的不同,变量分为局部变量和全局变量。在函数内部说明的变量称为局部变量。局部变量仅由其被定义的模块内部的语句所访问。全局变量又称全程变量或外部变量。全局变量贯穿整个程序,并且可被任何一个模块使用。2.4 运算符与表达式C语言的运算符归纳如下:语言的运算符归纳如下:(1)算术运算符算术运算符+-*/%

22、(2)关系运算符关系运算符 =!=(3)逻辑运算符逻辑运算符!&(4)位运算符位运算符|&(5)赋值运算符赋值运算符 =及其扩展赋值运算符及其扩展赋值运算符(6)条件运算符条件运算符?:?:(7)逗号运算符逗号运算符,(8)指针运算符指针运算符*和和&(9)求字节数运算符求字节数运算符sizeof(10)强制类型转换运算符强制类型转换运算符(11)分量运算符分量运算符.和和-(12)下标运算符下标运算符(13)其他其他2.4.1 算术运算符与算术表达式1.运算符运算符 C语言基本的算术运算符共有语言基本的算术运算符共有5种:种:+、-、*、/、%它们都是双目运算符,即运算符要求有两个操作数。如

23、:它们都是双目运算符,即运算符要求有两个操作数。如:x+y、x-y、x*y、x/y、x%y都采用双目运算。都采用双目运算。注意:注意:(1)要求要求%运算左右两数必须为整型数据,如运算左右两数必须为整型数据,如7%4的值为的值为3。(2)两个整数相除,结果为整数,舍去小数部分。但是,如两个整数相除,结果为整数,舍去小数部分。但是,如果除数或被除数中有一个为负值,则舍入的方向是不固定果除数或被除数中有一个为负值,则舍入的方向是不固定的。如的。如5/3=1,但但-5/3在有的机器上得到的结果是在有的机器上得到的结果是-1,有的机器有的机器则是则是-2。多数机器采取。多数机器采取“向零取整向零取整”

24、的方法,即取整后向的方法,即取整后向零靠拢(即向实数轴的原点靠拢)。零靠拢(即向实数轴的原点靠拢)。(3)字符型数据可以和数值型数据混合运算。因为字符型数字符型数据可以和数值型数据混合运算。因为字符型数据在计算机内部是用一个字节的整型数表示的。据在计算机内部是用一个字节的整型数表示的。2.算术表达式(1)算术表达式定义算术表达式定义用算术运算符和括号将运算对象(也称操作数)连接起来,用算术运算符和括号将运算对象(也称操作数)连接起来,符合符合C语言规则的式子,称为算术表达式。运算对象包括常语言规则的式子,称为算术表达式。运算对象包括常量、变量、函数等。如:量、变量、函数等。如:a*b+c/d

25、46+2*PI*R a*sin(x)+b*cos(x)都是合法的算术表达式。都是合法的算术表达式。(2)运算符的的优先级与结合性运算符的的优先级与结合性运算符有优先级高低之分,遵循的原则是运算符有优先级高低之分,遵循的原则是“先乘除,后加减先乘除,后加减”。若一个运算对象两侧的运算符优先级别相同时,则按规定的若一个运算对象两侧的运算符优先级别相同时,则按规定的“结合方向结合方向”处理。算术运算符的结合方向为处理。算术运算符的结合方向为“自左至右自左至右”,即先左后右。,即先左后右。自左至右的结合方向又称为自左至右的结合方向又称为“左结合性左结合性”,但有的运算符结,但有的运算符结合方向为合方向

26、为“自右至左自右至左”,即为,即为“右结合性右结合性”,如赋值运算符,如赋值运算符“=”。(3)类型转换类型转换 C语言允许双精度、单精度、整型及字符数据之间混合运算 10+a+1.58765.1234 b是允许的。但有一个规则:先转换成同一类型,再计算。double float高低 图中“”表示必定转换。如a+b,先转换为int。结果为 int。转换方法:longunsignedint char,short即:既使是同一种类型也按 转换。图中“”:表示低,高型数据运算时,均先转换为高型。例:10+a+if d/e其中:i int f float d double e long 10+a:转为

27、int,结果为int if:转为double,结果为double+:转为double d/e:转为double 转为double则运算时则运算时:(4)取负值运算符取负值运算符C语言的取负值运算符为:语言的取负值运算符为:-(负号)。它是一元运算(负号)。它是一元运算符,如:符,如:-x,-b负值运算的优先级高于算术运算符的优先级。如:负值运算的优先级高于算术运算符的优先级。如:int a=8,b=6,c=5,y;y=-a-b*c+a/c运算顺序应为:运算顺序应为:y=-a-b*c+a/c (5)、自增、自增,自减运算符自减运算符设有int i=3;+自增1 自减1则:+i,i+都会使i变为4

28、,但有区别:+i:先使i值+1,再使用i值;i+:先使用i值,再使i值+1.j=+i;j=4,i=4.(i=i+1;j=i;)j=i+;j=3,i=4.(j=i;i=i+1)同理:i,i ,均使i值1,但:又如:printf(i=%dn,i+);结果:i=3若:printf(i=%dn,+i);结果:i=4 i:先使i值1,再使用i值;i :先使用i值,再使i值1i=3;几点注意:1.+和 运算法只能用于变量,不得用于常量和表达式.2.+,的结合性为从右至左,而一般算术运算符为从左至右。如:如 5+,(a+b)+均为不合法.i+和+为同一优先级.i+相当于(i+)若 i=3,则结果为3,i为4

29、.+,主要用于循环变量自增或自减。3、自增与自减运算符优先级高于算术运算符优先级,而与负值()运算符同级。如:i=2;j=-i+;“”“”是同级优先关系。按从右至左结合方向,表达式-i+相当于-(i+)。1.要慎用+、运算符。(6)、有关表达式使用中的问题说明、有关表达式使用中的问题说明则:先对i进行3次自加,为6,然后三个i相加为18,而i为6。如:表达式(i+)+(i+)+(i+)(i=3)一般认为:从左至右:3+4+5=12,i6.但Turbo C.MSC 都是先取三个原值相加:i+i+i=9 i6如果表达式数为:k=(+i)+(+i)+(+i)2.在表达式中,有的运算符为一个字符,有的

30、为两个字符。3.在函数调用时,如:一般地:自左至右尽可能多地将若干字符组成一个运算符。例:i+j,究竟理解为(i+)+j还是i+(+j)?printf(%d,%d,i,i+);若i=3,若参数计算从左至右,则输出 3,3若从右至左,则输出4,3上述问题看似复杂,最好上机实践.(6)运算符优先级关系和结合方向从运算符的优先级来看,可描述如下:高级+、sizeof、!*、/、%+、(左、右移位)、=、!&(按位与)(按位异或)|(按位或)&(逻辑与)(逻辑或)?、:(条件运算)、+、*、/、%、&、|低级 ,(逗号)几种主要运算符的结合方向如表2.4所示:表表2.4运算符运算符运算运算类别类别结结

31、合方向合方向()自左至右自左至右+、单单目运算目运算自右至左自右至左*、/、%双目运算双目运算自左至右自左至右+、双目运算双目运算自左至右自左至右、=、=、=、!、!=双目运算双目运算自左至右自左至右,顺顺序求序求值值自左至右自左至右2.4.2 赋值运算符与赋值表达式.赋值运算符赋值运算符 语言的赋值运算符为“=”,它的作用是将一个数据赋给一个变量。例如:x=10/*将10赋给变量x*/y=3*x+5*a/*将表达式之值赋给变量y*/2.赋值表达式赋值表达式(1)赋值表达式的构成赋值表达式的构成由赋值运算符将一个变量和一个表达式连接起来的式子称作由赋值运算符将一个变量和一个表达式连接起来的式子

32、称作“赋值表达式赋值表达式”。它的一般形式为:它的一般形式为:赋值表达式当中的赋值表达式当中的“表达式表达式”,又可以是一个赋值表达式。如:,又可以是一个赋值表达式。如:a=(b=10)b=10是一个赋值表达式,整个赋值表达式是一个赋值表达式,整个赋值表达式a的值也是的值也是10。a=(b=10)和和a=b=10等价。等价。x=y=z=8(赋值表达式之值为赋值表达式之值为8,x,y,z值均为值均为8)x=10+(y=5)(表达式值为表达式值为15,x值为值为15,y值为值为5)a=(b=10)/(c=2)(表达式值为表达式值为5,a值为值为5,b值为值为10,c值为值为2)(2)优先级 赋值运

33、算符优先级低于算术运算符、关系运算符和逻辑运算符,如:x=6y先求关系表达式6y的值0或1,再将其值赋给变量x。(3)结合律 赋值表达式按照自右至左的顺序结合。例如:x=y=3*z/w 运算顺序为:x=(y=3*z/w)又:a=b=20/4 运算时先计算20/4,结果为5,将5赋给b,再将5赋给a。自右至左运算。3.复合赋值运算符 在赋值符在赋值符“=”之前加上其他运算符,可以构成复合的运算符。之前加上其他运算符,可以构成复合的运算符。例如:例如:x+=5等价于等价于x=x+5x*=y+8等价于等价于x=x*(y+8)x%=3等价于等价于x=x%3a*=b等价于等价于a=a*b语言可使用的复合

34、赋值运算符有语言可使用的复合赋值运算符有10种。它们是:种。它们是:+=、=、*=、/=、%=(与算术运算符组合)(与算术运算符组合)=(与位移运算符组合)(与位移运算符组合)&=、=、=(与位逻辑运算符组合)(与位逻辑运算符组合)复合赋值表达式的格式为:复合赋值表达式的格式为:例如:例如:x+=a+y*3等价于等价于x=x+(a+y*3)若若a的初值为的初值为12,则则a+=a-=a*a的求解过程为:的求解过程为:(1)先进行先进行a-=a*a的运算,它相当于的运算,它相当于a=a-a*a=12-144=-132 (2)再进行再进行a+=-132的运算,它相当于的运算,它相当于a=a+(-1

35、32)=-132-132=-264 一般形式:表达式1,表达式2其计算规则:先计算表达式1,再计算表达式2,最后值为表达式2的值。例:a=35,a 4 则:先计算3 5,a15,a 4=60,结果为60。2.4.3 逗号运算符和求字节运算符又如:(a=35,a 4),a+5 扩展形式:表达式1,表达2,表达式n,结果为20(作为逗号表达式的值)a+5a 即 20a.3 5=15a a 4=60 (此时a值仍未变)结果为表达式n的值 注意:x=(a=3,63)赋值表达式,x18;x=a=3,6 a 逗号表达式,x3.逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。函数调

36、用中的实参之间虽然用的是逗号间隔,但不是逗号表达式。如:printf(%d,%d,%d,a,b,c);2.求字节运算符sizeof语言的sizeof是一个单目编译状态运算符,它返回变量或括号中的类型修饰符的字节长度。它的一般形式为:sizeof(变量名变量名)sizeof(类型名类型名)如:float f;printf(%f,sizeof(f);printf(%f,sizeof(int);其输出显示字节数为4和2。2.4.4 关系运算符和关系表达式1.关系运算符C语言有语言有6种关系运算符:种关系运算符:、=、=、!、!=关系成立:关系运算的值为关系成立:关系运算的值为1(表示逻辑真);(表示

37、逻辑真);关系不成立:关系运算的值为关系不成立:关系运算的值为0(表示逻辑假)。(表示逻辑假)。例如:例如:53 值为值为1 5=3值为值为0 5=3值为值为0 5!=3值为值为1注意:浮点数是用近似值表示的。注意:浮点数是用近似值表示的。“=”用于两个浮点数的用于两个浮点数的判断时,由于存储误差,会得出错误的结果。例如:判断时,由于存储误差,会得出错误的结果。例如:1.0/3.0*3.0=1.0 由于由于1.0/3.0得到的值用有限位保存,是近似值,所以得到的值用有限位保存,是近似值,所以1.0/3.0*3.01.0。判断两个浮点数是否相等,一般采用如下形。判断两个浮点数是否相等,一般采用如

38、下形式的运算:式的运算:fabs(1-1.0/3.0*3.0)b+c比较两个算术表达式的值 a=2*b比较变量的值和算术表达式的值 ab比较两个字符ASCII码值(2)关系运算符的优先级、和=为同一级,=和!=为同一级。前者优先级高于后者。关系运算符优先级低于算术运算符。例如:a+bb+c等效于(a+b)(b+c)。(2+a)=(b-a)等效于2+a=b-a。(3)关系运算符的结合律C语言规定关系表达式采取左结合律。表达式中出现优先级别为同一级别的运算符时,按从左到右结合方向处理。例如:int a=2,b=3,c=1 ab32先计算63,结果是1,再计算12,关系表达式的值为:12.4.5 逻

39、辑运算符与逻辑表达式C语言没有逻辑类型数据,进行逻辑判断时,数据的值为非0,则认作逻辑真,数据的值为0,则认作逻辑假;而逻辑表达式的值为真,则用整形数1表示,逻辑表达式的值为假,则用整形数0表示。1.逻辑运算符逻辑运算符有3个:!、&、|。分别表示逻辑非、逻辑与、逻辑或运算。由于C语言依据判断数据是否为非0或0来判断逻辑真和逻辑假,所以逻辑运算的操作数类型可以是字符型、整型或浮点型。(1)逻辑非!逻辑非是一元运算符(也就是说参加运算的操作数只有一个)。若操作数本身的值为0,则经过逻辑非运算后的结果为1(逻辑真);当操作数值为非0时,逻辑非运算的结果为0。例如:int a=5,b=3;!a结果为

40、0,即a为非0。!(ab)结果为1。因为ab的值为0,即取ab的非。(2)逻辑与&逻辑与是二目运算(也就是说参加运算的操作数有两个),当参加逻辑与运算的两个操作数值均为非0(逻辑真)时,结果才为真;否则为0(逻辑假)。例如:int a=5,b=3;a&b 结果为l,即a与b均不为0。(a0)结果为0,因为ab的值为0。(3)逻辑或|逻辑或也是二目运算,参加或运算的两个操作数中,只要有一个操作数值为非0(逻辑真),结果就为l(逻辑真);否则为0(逻辑假)。例如:int a=5,b=3;a|b结果为l。(a0)结果为l,因为a0的值为l。在谈到逻辑运算时,我们常用一个真值表来表示,如下:ab!a!

41、ba&ba|b真真假假真真真假假真假真假真真假假真假假真真假假为理解与、或、非的含义,引入三个电路,如图所示。在上图中,我们给出三个指示灯的控制电路,根据串、并联电路的工作原理,我们可以得出:在图(a)中,只有当两个常开按钮同时按下时,指示灯才会亮;在图(b)中,只要两个常开按钮中任何一个按下,指示灯都会亮;在图(c)中,没有按按钮时,电路是接通的,所以指示灯亮,按下按钮时,指示灯反而不亮。由图可知,按钮只有按下和没按下两种情况,指示灯只有亮由图可知,按钮只有按下和没按下两种情况,指示灯只有亮和灭两种状态。而二进制码的两个符号和灭两种状态。而二进制码的两个符号“1”和和“0”正好与逻正好与逻辑

42、命题的两个值辑命题的两个值“是是”和和“否否”或称或称“真真”和和“假假”相对应。相对应。为了表示这几种运算,引入三个变量:用为了表示这几种运算,引入三个变量:用A、B表示按钮的状表示按钮的状态态(即为逻辑变量即为逻辑变量),用,用Y表示指示灯的状态表示指示灯的状态(即为逻辑代数表达即为逻辑代数表达式的值式的值),这样通过分析,这样通过分析A、B两个按钮处于不同的状态,就可两个按钮处于不同的状态,就可以得到以得到Y相应的结果。相应的结果。在此以分析图在此以分析图(b)电路为例来进行说明,其分析结果如下:电路为例来进行说明,其分析结果如下:A按钮没按下按钮没按下(即即A=0),B按钮没按下按钮没

43、按下(即即B=0),Y指示灯不亮指示灯不亮(即即Y=0);A按钮按下按钮按下(即即A=1),B按钮没按下按钮没按下(即即B=0),Y指示灯亮指示灯亮(即即Y=1);A按钮没按下按钮没按下(即即A=0),B按钮按下按钮按下(即即B=1),Y指示灯亮指示灯亮(即即Y=1);A按钮按下按钮按下(即即A=1),B按钮按下按钮按下(即即B=1),Y指示灯亮指示灯亮(即即Y=1)。2.逻辑表达式(1)逻辑运算表达式的构成用逻辑运算符将表达式连接起来就构成了逻辑表达式。例如,!(ab)对关系表达式的值取非(ab)&(bc)对两个关系表达式进行逻辑与运算(ab)&(bc)|(b=0)(2)逻辑运算符优先级C语

44、言逻辑运算符的优先级规定如下:优先级顺序为!&|。!高于算术运算符,&,|低于关系运算符。(3)逻辑运算符的结合律 C语言逻辑运算符采用左结合律。表达式中出现优先级别为同一级别的运算符时,按从左到右的结合方向处理。例如:a&b&c计算顺序为从左自右,即:(a&b)&c。(4)C语言逻辑表达式的特性 在多个&运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为0(逻辑假),则停止运算。因为此时已经可以断定逻辑表达式结果为假。在多个|运算符相连的表达式中,计算从左至右进行时,若遇到运算符左边的操作数为l(逻辑真),则停止运算,因为已经可以断定逻辑表达式结果为真。2.4.6 条件运算

45、符和条件表达式 C语言提供了一个可以代替某些if-then-else语句的简便易用的操作符“?”和“:”,该操作符是三目的,其一般形式是:表达式1?表达式2:表达式3 操作符?的作用是这样的,在计算表达式1之后,如果数值为true(真),则计算表达式2,并将结果作为整个表达式的数值;如果表达式1的值为false(假),则计算表达式3的值,并以它的结果作为整个表达式的值,例:x=10;if(x9)y=100;else y=200;可以用下面的条件运算符来处理:x=10;y=(x9)?100:200;注意:条件运算符要求有3个操作对象。条件运算符的优先级别比关系运算符和算术运算符都低。因此 y=(

46、x9)?100:200 括号可以不要,可写成 y=x9?100:200 如果有 ab?a:b+1 相当于ab?a:(b+1),而不相当于(ab?a:b)+1条件运算符的结合方向为“自右向左”。如:ab?a:cd?c:d 相当于:ab?a:(cd?c:d)如果a=1,b=2,c=3,d=4,则条件表达式的值等于4。2.5 数据类型转换C语言中,整型、单精度型、双精度型和字符型数据可以进行混合运算。字符型数据可以与整型通用。例如:100+A+8.65-2456.75*a是一个合法的运算表达式。在进行运算时,不同类型的数据要先转换成同一类型,然后再进行运算。C语言数据类型转换可以归纳成3种转换方式:

47、自动转换、赋值转换和强制转换自动转换、赋值转换和强制转换。2.5.1 类型自动转换(1)float型数据自动转换成double型;(2)char与short型数据自动转换成int型;(3)int型与double型数据运算,直接将int型转换成double型;(4)int型与unsigned型数据,直接将int型转换成unsigned型;(5)int型与long型数据,直接将int型转换成long型。2.5.2 赋值转换转换的基本原则为:(1)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。(2)将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如x为整型变量

48、,执行“x=4.25”,取值为x=4。(3)字符型数据赋给整型变量,字符型数据只占一个字节,而整型变量占2个字节,因此将字符数据放入到整型变量低8位中,整型变量高8位视机器系统处理有符号量或无符号量两种不同情况,分别在高8位补上1或补上0。(4)带符号的整型数据(int)赋给long int型数据变量,要进行符号扩展。如果int型数据为正值,则long int型变量的高16位补0,反之,则补1。(5)unsigned int型数据赋给long int型数据变量时,不存在符号扩展,只需将高位补0即可。2.5.3 强制类型转换可以利用强制类型转换运算符将一个表达式转换成所需类型。如:(int)(a+b)(强制将a+b的值转换成整型)(double)x(将x转换成double型)(float)(10%3)(将10%3的值转换成float型)强制类型转换的一般形式为:(类型名)(表达式)(类型名)(表达式)例如:int a=7,b=2;float y1,y2;y1=a/b;/*y1的值a/b为3*/y2=(float)a/b;/*y2的值为3.5,对a进行强制转换为实型,b也随之自动转换为实型*/注意:(int)(x+y)和(int)x+y强制类型转换的对象不同的。(int)(x+y)是对x+y进行强制类型转换;而(int)x+y则只对x进行强制类型转换。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com