《C语言数据类型与运算规则.ppt》由会员分享,可在线阅读,更多相关《C语言数据类型与运算规则.ppt(50页珍藏版)》请在三一办公上搜索。
1、数据类型与运算规则,一、数据与数据类型二、C语言的基本数据类型及其表示三、C语言中的运算规则四、算术运算与赋值运算五、关系运算与逻辑运算六、其他运算,数据与数据类型,什么是数据?在程序中,数据是程序加工、处理的对象,也是加工的结果。什么是数据类型?在程序中,程序所能处理的基本数据对象被划分成具有同样性质的数据的集合,这样的数据集合称为数据类型。在C语言中,任何数据呈现的形式有两种:常量或变量。无论常量还是变量都必须属于各种不同的数据类型。,C语言规定的主要数据类型如下:整数型 int 单精度型 float 实数型(浮点型)基本类型 双精度型 double 字符型 char数据类型 指针类型 数
2、组型 构造类型 结构型 struct 联合型 union 枚举型 enum 无值类型(空类型)void,数据与数据类型,什么是类型名?C语言为每种类型定义了一个标识符,它通常被称为类型名。类型名由一个或几个关键字组成。什么是构造类型?构造类型一般是由其他的数据类型按照一定的规律构造而成,结构比较复杂。,数据与数据类型,C语言的基本数据类型及其表示,什么是常量?常量是指程序在运行时不能改变的量。(一般以自身的存在形式直接表示)注:常量并不占内存,在程序运行时它作为操作对象直接出现在运算器的各寄存器中,C语言的基本数据类型及其表示,十进制 整型常量 八进制 以数字“0”开头 数值常量 十六进制 以
3、数字“0 x”或“0X”开头 实型常量 小数形式 如:-1.2,0.指数形式 如:-12.2e-5常量 字符常量 字符常量 字符串常量注:长整型也可以用十进制、八进制和十六进制形式表示。其表示形式是在常量之后加上字母“l”或者“L”。例如:123L,123l,常量应用:整型常量:123,-123,123L,123l八进制(以0开头):0123,-038,0123l,0123L十六进制(以0 x开头):0 x123,-0 x1f实型常量:-1.23,2E+4,-2.3E-4字符常量:a,A,b,1,0字符串常量:“Computer”,C语言的基本数据类型及其表示,什么是符号常量?用标识符表示的常
4、量称为符号常量。C语言中用宏定义命令对符号常量进行定义,其定义形式为:#define 标识符 常量(宏定义的功能是:在编译预处理时,将程序中宏定义命令之后出现的所有符号常量用宏定义命令中对应的常量一一替代。)#define PR 30main()int num,total;num=3;total=num*PR;printf(“total=%dn”,total);,C语言的基本数据类型及其表示,1、符号PR代替常量30,称为符号常量2、符号常量的定义是在编译预处理语句里 进行的,称为宏定义3、符号常量一般用大写,什么是变量?变量是指在程序运行时可以改变的量。在程序里的一个变量可以看成是一个存储数
5、据的容器或存储单元,在该单元中存放变量的值.变量的定义形式:类型说明符 变量名表;变量名表的形式是:变量名1,变量名2,变量名n,C语言的基本数据类型及其表示,C语言提供的基本变量类型有:整型变量 数值变量变量 实型变量 字符变量 指针变量 例如:int a,b,c;/*说明a,b,c为整型变量*/char cc;/*说明cc为字符变量*/double x,y;/*说明x,y为双精度实型变量*/注意:变量要先定义,后使用,每一个变量被指定为一确定类型。关键字和预定义标识符不要另作它用。,C语言的基本数据类型及其表示,整型数据及其表示整型的类型:整型、长整型、无符号整型和无符号长整型。(计算机中
6、的整型实际上是数学中的整型的一个子集,)(C语言中,所有的数据型常量都带有符号,所以整型常量只区别整型和长整型两种形式,而没有无符号整型常量。)整型常量C的整常数可用以下三种形式表示:1:十进制整数:123,-456,02:八进制整数:以0开头的数是八进制数:0123=八进制123,十进制83(1*8*8+2*8+3)011=十进制93:十六进制整数:以0 x或0X开头的数是十六进制数,C语言的基本数据类型及其表示,整型常量 C的整常数可用以下三种形式表示:1:十进制整数:123,-456,02:八进制整数:以0开头的数是八进制数:0123=八进制123,十进制83(1*8*8+2*8+3)0
7、11=十进制93:十六进制整数:以0 x或0X开头的数是十六进制数 0 x123=16进制123,十进制291(1*16*16+2*16+3)-0 x11=十进制-17注:一个整常量后加一个字母l或L,则认为是long型常量.例如:123L,017l,0Xf3acL整型变量以关键字int作为基本类型说明符,另外配合4个类型修饰符,用来改变和扩充基本类型的含义,以适应更灵活的应用。,C语言的基本数据类型及其表示,ANSI标准规定的整型变量属性表,例:已知,整数a,b,正数u。求:a+u,b+u的值main()int a,b,c,d;unsigned u;a=12;b=-24;u=32767;c=
8、a+u;d=b+u;printf(”a+u=%d,b+u=%dn”,c,d);注:数据的溢出,常量与变量的类型要匹配,C语言的基本数据类型及其表示,实型数据及其表示,C语言的基本数据类型及其表示,实型常量C语言中的实数有两种表示形式:1:十进制形式:由符号,数字和小数点组成,如:0.123,0.0,-54.02:指数形式:十进制小数 e 指数 或十进制小数 E 指数如123e3-1.23E-2,e或E的前面必须有数字,后面必须为整数。如不合法的指数形式:e3,2.1e3.5.e3,e注:1、实型常量一般都作为双精度实数来处理,并只用十进制表示。2、如果要表示单精度实型常量和长双精度实型常量,只
9、要在上述书写形式后面分别加上后缀f(F)或l(L)即可。例如:2.3f,-21.23e3L,C语言的基本数据类型及其表示,实型变量 在C语言中,实型变量分为单精度、双精度和长双精度三种类型。所用关键字如下:float 单精度double 双精度long double 长双精度例如:float a,b;double c,d;long double e,fmain()float a;double b;a=12345.6789;printf(“a=%f,b=%fn”,a,b);,C语言的基本数据类型及其表示,实际输出结果:,字符型数据及其表示什么是字符型数据?字符型数据包括字符和字符串两种,字符型数
10、据在计算机中存储的是字符的ASCII码,而不是字符本身,一个字符占一个字节。(在C语言中字符型数据和整型数据可以通用。即:它可以与整型数据进行算术运算、相互赋值等,也可采用字符或整型数据两种输出)什么是字符型常量?C语言中字符常量是用单引号括起来的一个字符.如 a,A,?,#”等都是字符常量,但注意a,A是不同的两个字符常量。(字符常量占8位,一个字节。按ASCII码存储。)什么是转义字符?转义字符是一种特殊形式的字符常量,其意义是将转义符“”后的字符原来的含义进行转变,变成某种另外特殊约定的含义。,C语言的基本数据类型及其表示,什么是字符型变量?字符型变量就是用来存放字符的变量。例:char
11、 c1,c2;c1=a;c2=b;什么是字符串常量?字符串常量就是用一对双引号括起来的字符序列。注:C语言没有专门的字符串变量,如需要处理字符串,一般用字符型数组来实现。例:char c;c=”a”是错的.注意:不能将一个字符串赋给一个字符变量。需要字符数组来存放字符串常量,字符常量与字符串常量的区别有两个方面:1)字符串常量是用一对双引号括起来的一串字符,字符常量是用一对单引号括起来的单个字符。2)字符常量在内存中占一个字符,而字符串常量除了每个字符占一个字节外,其字符串结束符0也要占一个字节。如:字符常量a占一个字节,而字符串常量”a”占2个字节。,C语言的基本数据类型及其表示,指针型数据
12、及其表示 指针是一种数据类型,它是一个变量在内存中所对应存储单元的地址。指针的说明形式:类型说明符*变量名 main()float a,*pa;int x,y,*px;pa=,C语言的基本数据类型及其表示,变量的初始化 变量的初始化是指在变量说明的时候同时对变量赋初值。float x=123.2;int a,b,c=10;int x,*pa=,C语言的基本数据类型及其表示,C语言中的运算规则,运算的操作规则包括:运算符、表达式和运算过程。运算符是C语言里用于描述对数据进行运算的特殊符号。C语言的运算符按其在表达式中与运算对象的关系可分为:单目运算:一个运算符连接一个运算对象,如:+、-双目运算
13、:一个运算符连接二个运算对象,如:+、-三目运算:一个运算符连接三个运算对象,C语言中只有唯一一个“?:”,C语言的运算符按其在表达式中所起作用可分为:(P54)算术运算符:+、-、*、/、自增自减运算符:+、-赋值与赋值组合运算符:、+、-=、*=、/=关系运算符:、条件运算符:?:逗号运算符:,其他:*、&、()、-、sizeof、(type),C语言中的运算规则,表达式就是用运算符将运算对象连接而成的符合C语言规则的算式。(表达式中的运算对象可为变量、常量、函数调用等。)按运算符在表达式中与运算对象的关系可分为:单目表达式:一个运算符连接一个运算对象,如:+、-双目表达式:一个运算符连接
14、二个运算对象,如:+、-三目表达式:一个运算符连接三个运算对象,C语言中只有唯一一个“?:”,C语言中的运算规则,C语言中的运算规则,按运算符在表达式中所起作用可分为:(P54)算术表达式:a+b自增自减表达式:+i赋值与赋值组合表达式:a4、a+2、a=b=6关系表达式:a!=b、(a+b)(a-b)逻辑表达式:a&(b=c)字位表达式:a2逗号表达式:(a+b,a-b),C语言中的运算规则,优先级是指同一个表达式中不同运算符进行计算时的先后次序。结合性是指同一个表达式中相同优先级的多个运算应遵循的运算顺序。(类比:数学中的四则运算),算术运算与赋值运算,算术运算符与算术表达式算术运算符,注
15、意:p561)除法运算“/”在使用时要特别注意数据类型。因为两个整数(或字符)相除,其结果是整数。如果不能整除时,只取结果的整数部分,小数部分全部舍去。例如:1/30 13/43若两个实数相除时,所得的商也是实数。例如:1.0/3.00.333332)运算符+、-(单目求正、求负)-*、/、%-+、-优先级 高-低结合级 自右至左 自左至右 自左至右,算术运算与赋值运算,算术表达式算术表达式由算术表运算符、常数、变量、函数和圆括号组成,其基本形式与数学上的算术表达式类似。例:将下列数学表达式:p57 写成C语言表达式如下:(a+b+c)/(sqrt(a)+b*(sin(x)+sin(y)+si
16、n(z)其中sqrt(a)和sin(x)、sin(y)、sin(z)都是数学函数的引用。,算术运算与赋值运算,自增、自减运算 自增“+”、自减“”运算是单目运算,其作用是使变量的值增1或减1。其优先级高于所有双目运算。+i;-i;运算符在变量前面,称为前缀式,表示变量在使用前自动加1或减1;i+;i-;运算符在变量后面,称为后缀式,表示变量在使用后自动加1或减1;注:+、-运算只能用于变量(并且变量只能是整数、字符型和指针),不能用于表达式或常量。因为自增、自减运算是对变量进行加1或减1操作后再对变量赋新的值,而表达式或常量都不能进行赋值操作。,算术运算与赋值运算,例:设x=5 y=+x;等价
17、于:先计算x=x+1(结果x=6),再执行y=x,结果y=6 y=x+;等价于:先执行y=x,再计算x=x+1,结果y=5,x=6 y=x+*x+;y=25 x=7 y=+x*+x;y=49 x=7,算术运算与赋值运算,赋值运算符和赋值表达式赋值运算符“=”功能是计算赋值运算符“”右边表达式的值,并将计算结果赋给“”左边的变量。赋值运算符的优先级只高于逗号,比其他的都低。结合性自右至左赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子变量名表达式 如:b=x*y+5 等价于b=(x*y+5),算术运算与赋值运算,类型转换 在对赋值表达式求解过程中,如果赋值运算符 两边的数据类型不一致
18、,赋值时要进行类型转换。其转 换工作由C编译系统自动完成,转换原则是以“”左边的 变量的类型为准。即将“”右边的值转换为与“”左边 的变量类型相一致。类型转换方式:1、整型=实型:舍弃实数的小数部分2、实数=整数:数值不变,但以实数形式表示数3、整型=字符型:将字符数据的低8位放入整数的低8位中,算术运算与赋值运算,main()P59 int i=5;float a=3.5,a1;double b=123456789.123456789;char c=A;print(“i=%d,a=%f,b=%f,c=%cn”,i,a,b,c);a1=i;i=a;a=b;c=i;print(“i=%d,a=%
19、f,a1=%f,c=%cn”,i,a,a1,c);运行结果如下:i=5,a=3.500000,b=123456789.123457,c=Ai=3,a=123456792.000000,a1=5.000000,c=,算术运算与赋值运算,组合赋值运算符组合赋值表达式1)组合赋值运算符在赋值运算符“”之前加上其他运算符可以构成组合运算符,用于完成赋值组合运算操作。表示形式:运算符其中的运算符可以是:+、-、*、/、|、&、所构成的组合赋值运算有:+、-、*、/、|、&、2)组合赋值表达式由组合赋值运算符将一个变量和一个表达式连接起来的式子称为组合赋值表达式。其形式为:变量名 组合赋值运算符 表达式其
20、功能是对“变量名”和“表达式”进行组合赋值运算符所规定的运算,并将运算结果赋值给组合赋值运算符左边的“变量名”组合赋值运算的作用等价于:变量名=变量名 运算符 表达式a*=3 等价于 a=a*3a*=b+5 等价于 a=a*(b+5)a-=1 等价于 a=a-1或-a,算术运算与赋值运算,思考题:int a=12,n=15;(1)a+=a(2)a-=a(3)a*=2+3(4)a/=a+a(5)a%=(n%=2)(6)a+=a-=a*=a,算术运算与赋值运算,关系运算与逻辑运算,关系运算与逻辑运算,用来构造C程序控制中的条件,实现程序的选择结构和循环结构控制。对于关系运算和逻辑运算的结果,将逻辑
21、“真”记录为整数1,将逻辑“假”记录为整数0。C语言中“真”和“假”的表示C语言没有逻辑类型数据,是用数值来表示:非0值表示“真”,0表示“假”。任意一个表达式,如果值为0时,就代表一个“假”值;值是非0,无论是正数还是负数,都代表一个“真”值。使用逻辑或关系表达式返回0作“假”值,返回1作“真”值。,关系运算符 p61优先级:=和!=的优先级低于前四种;关系运算符的优先级低于算术运算符,高于赋值运算符。如:A+BC+D结果只有两种:真(1)、假(0)。注意:由于计算机处理浮点数是有误差的,所以不要拿浮点数来做相等的比较。如:x=100.0;y=(x=100);,关系运算与逻辑运算,关系运算与
22、逻辑运算,关系表达式 用关系运算符将两个表达式连接起来的式子称为关系表达式。(表达式可以是算术表达式、关系表达式、逻辑表达式、赋值表达式和字符表达式。但一般关系运算要求关系运算符连接的两个运算对象为同类型数据。进行关系运算时,先计算表达式的值,然后再进行关系比较运算。)例:设a=2,b=3,c=4 a+b3*c 两个算术表达式(a+b)c)两个关系表达式 A!=a 两个字符表达式,逻辑运算符与逻辑表达式逻辑运算符(逻辑运算要求运算对象为“真”或“假”(0)。),关系运算与逻辑运算,逻辑运算真值表(或运算规则)优先级从高到低有:!,&,|前述四种运算符的优先级从高到低的顺序为:!*,/,%+,-
23、,=,=,!=&,|赋值符(=),关系运算与逻辑运算,例:int a=3,b=1,x=2,y=0;(ab)&(xy)值为1 ab&xy 值为1(y|b)&(y|a)值为1!a|ab 值为1若:a=4,b=5,x=b,y=a 则!a 值为 0 a&b 值为 1a|b 值为 1 4&0|2 值为 1c&d 值为 1如:105&!(10=4 等价为(105)&(!(10=4)(1&1)|0 1|01结果该表达式的值为1注意:逻辑表达式中的运算并不一定都要执行如:a&b&c,如果a为0,则该表达式的值必然为0,b和c的值不需要再计算 如:(a=5+3)|+b由于a=8,该表达式的结果必然为1,+b的操
24、作不会执行,b的值不变结论:在逻辑表达式中,最好不要改变变量的值 p64,关系运算与逻辑运算,条件运算符与条件表达式条件运算符“?:”,由它构成的表达式,其形式为:表达式1?表达式2:表达式3条件表达式的值:当表达式1的值非0,计算表达式2,其值为整个条件表达式的值。当表达式1的值为0,计算表达式3,其值为整个条件表达式的值。例:a=6,b=9,求两数的最大值z=(ab)?a:b z=9例:求a,b,c三数中的最小值z=ab?bc?c:b:ac?c:a,关系运算与逻辑运算,其他运算,逗号运算符作用:用逗号连接几个表达式。表达式1,表达式2,表达式n 求解过程:从左到右求表达式的值,表达式的值为
25、最右边表达式的值。假设y=10,则x=(y-=5,25/y)相当于y=y-5;x=25/y;“.”和“-”运算符作用是引用构造数据类型的结构和联合中的分量,即表示结构或联合中的成员。其形式为:结构变量名.结构成员名 或 结构指针变量名.结构成员名,“()”和“”运算符园括号改变优先级别,方括号用于标识数组元素的下标。“*”和“b=*x表示访问变量a的值。,其他运算,(type)运算符(type)强制类型转换符,是单目运算符,其作用是进行数据类型的强制转换,将右边表达式的值转换成括号中指定的数据类型。(类型名)表达式例:float a;int b;(int)(a*b)将a*b结果强制类型转换(i
26、nt)a*b 将a强制类型转换思考:华氏温度转换成摄氏温度 公式为:c=(5/9)(f-32)注:强制数据类型转换只暂时的改变使用数据的类型,不改变变量的数据类型。,其他运算,sizeof运算符 应用形式:sizeof(opr)其中opr可以是表达式或数据类型名 目的:得到操作数所占存储空间的字节数。如:sizeof(int);/*结果为2*/sizeof(5+6.3)/*结果为8,所有实数按double处理*/,其他运算,混合运算及数据类型转换,混合运算混合运算是指在一个表达式中参与运算的对象不是相同的数据类型,如:2*3.14*r数据类型转换在C语言中,对于混合运算,要先将不同的类型的数据
27、转换成同一类型再进行运算。类型转换的一般规则是:1)同类型数据之间运算时,结果仍为同类型。如:int x=3,y=5;float z=10.0,a;a=x/y*z;结果为02)不同类型数据之间运算时,C编译器将所有操作数“向上”转换成数据最长的数据类型。char-int-unsigned int-long-unsigned long-float-double,3)赋值时自动向变量的数据类型看齐例:int i=5;float f=2.1,c;c=10+a+i*f;1:10+a:a转换为97,结果为1072:i为整型,f为单精度数,将他们转换为双精度,然后相乘,结果为双精度数10.53:107转换为双精度,结果为双精度数117.54:赋值后c为单精度数117.5提示:为了进一步优化代码,目前流行的大多数C编译程序常常会改变表达式的求值顺序。我们在书写表达式时最好用括号明确地指定运算符的优先级。,混合运算及数据类型转换,再见,
链接地址:https://www.31ppt.com/p-6503895.html