C课件第3章数据类型和表达式.ppt

上传人:小飞机 文档编号:6504392 上传时间:2023-11-07 格式:PPT 页数:85 大小:539KB
返回 下载 相关 举报
C课件第3章数据类型和表达式.ppt_第1页
第1页 / 共85页
C课件第3章数据类型和表达式.ppt_第2页
第2页 / 共85页
C课件第3章数据类型和表达式.ppt_第3页
第3页 / 共85页
C课件第3章数据类型和表达式.ppt_第4页
第4页 / 共85页
C课件第3章数据类型和表达式.ppt_第5页
第5页 / 共85页
点击查看更多>>
资源描述

《C课件第3章数据类型和表达式.ppt》由会员分享,可在线阅读,更多相关《C课件第3章数据类型和表达式.ppt(85页珍藏版)》请在三一办公上搜索。

1、第三章 数据类型和表达式,本章主要内容,数据类型常量变量运算符和表达式函数,3.1 数据类型,数据:是程序命令操作的对象数据类型:是指将数据根据表达形式的不同而 划分的类别。,3,C+的数据类型一般分为如下几种:,基本数据类型,非基本数据类型(用户定义数据类型),整型字符型实型(浮点型)逻辑型(布尔型)数组指针空类型结构联合枚举类,数据类型,数据类型修饰符,4,short,long,unsigned,例:,无符号整型 unsigned int,无符号长整型 unsigned long,无符号短整型 unsigned short,signed,整型数据分类,整型数据值域,数据类型 常量与变量,7

2、,#includevoid main(void)const int PRICE=30;int num,total;float v,r,h;num=10;total=num*PRICE;couttotal endl;r=2.5;h=3.2;v=3.14159*r*r*h;coutv endl;,Page 7,3.2 常量,C+语言中的运算对象包括常量、变量、函数、表达式四种类别。常量分为:字面常量和标识符常量两种表示形式。字面常量的值就是字面本身,如25是一个字面整数常量,它的值就是25;标识符常量的值与字面本身不同,如标识符常量false,它的值为0,标识符常量true的值为1,标识符常量NU

3、LL的值也为0。,8,整型常量,不同数制的整形常量:12:十进制数 12;012:八进制数 12(等于十进制数10,带前导无效 0)0 x12:十六进制数 12(等于十进制数 18,带前导的 0X 或 0 x),整型常量.,有符号与无符号的整形常量:62231 有符号62231U 无符号62231u 无符号,整型常量,不同规格的整形常量:21:int 21L:long 02l:long 21ul(21LU):unsigned long(短整型没有特定的表示常量的方法),字符常量,字符常量,字符型数据就作为字符使用时,是有符号还是无符号一般无所谓;字符型数据作为单字节整数使用时,最好明确表示为:

4、.signed char 或 unsigned char,字符常量,单引号括起来的一个字符 例:A 每个字符常数占一个字节每个字符常数有一个编码数字值ASCII码表中的码值例如:A:41H B:42H a:61H b:62H字符常量可象数量一样进行运行、比较 例1:if(c=Ac=Z)c=c+a-A;将字符变量c从大写字母转为小写字母。例2:0-0=0 1-0=1 2-0=2,14,转义字符,非图形字符(如回车、制表符等)及“等字符,因它们有特殊作用,所以表示这些字符本身时。P55。如:n 表换行无论是不可显示字符还是一般字符,都可用8进制数、16进制数表示 ddd:一 至三位8进制数。xhh

5、:一 至二位16进制数。例如:001表示码值为(01)8 的ASCII字符。A也可用101表示 0为空白符,即NULL,码值为0,在C语言中是字符串的结束标志。(与0和空格符不同)例如:cout“x07operatingtsystemn”;输出:operating system,15,字符型与整型的关系,表达式求值过程中,所有字符被无条件地转换为与其代码等值的整数;如:A+2 的值为 67;可以用类型转换符 int 将一字符强制转换成整数;如:coutint(A);将显示 65可以用类型转换符 char 将一整数强制转换成字符;如:coutchar(67);将显示 C,字符型与整型的关系,17

6、,例:int a=b;char c=97;coutaendl;coutcendl;输出:98 a,字符数据的使用方法字符数据和整型数据之间可以运算。字符数据与整型数据可以互相赋值。,字符串常量,字符串型常量是用双引号括起来的一个或多个字符。C+规定以字符0作为字符串结束标志。如,一个字符串“HELLO”,在内存中以“0”为结尾。“0”在输出时不作显示,只用来表示字符串的结束。,18,字符串型常量,“HELLO”,H E L L O 0,注意“P”与P不同。前者为字符串,在机内存储形式为 P 0,而P就是一常数P。,字符串常量,汉字字符及其它全角字符的代码一般用两个字节表示,因此即使是一个汉字也

7、只能表示为字符串,如“汉”(而不能是汉)。注意区分 A 和 A。.,符号常量,20,define PI 3.14159main()int r;float L,S;r=10;L=2*PI*r;S=PI*r*r;printf(“周长=%fn”,L);printf(“面积=%fn”,S);,这是一个知道圆半径r,求圆周长L、圆面积S的简单C程序。其中的PI就是符号常量,它的值在一开始就被预处理命令“#define”定义为实数3.14159了,故程序在运行和编译时会自动用“3.14159”来替代PI。,符号常量比起一般常量来,不但使用方便,实际值容易修改,而且更形象化,便于记忆。,符号常量,*C+中:

8、const float pi=3.14159;*常量定义中初始化的值可以是一个常量表达式:const int size=100*sizeof(int);const int number=max(15,23);(错)注意:#define 与const的区别,21,逻辑常量,布尔型变量的说明:例:bool flag;布尔型数据的取值:只有 false(0)和 true(1)两个值由于逻辑值是整数0和1,所以可以像整数一样出现在表达式里,参与各种整数运算。,22,枚举型数据基本情况,C+并没有提供枚举类型,而只提供了定义枚据类型的手段;任何枚举类型都需要自己定义。格式:enum 如:enum col

9、orred,yellow,blue;enum DAY Sun,Mon,Tue,Wed,Thu,Fri,Sat;,一个枚举类型被定以后,可以像整型等预定义类型一样使用在允许出现数据类型的任何地方。enum color c1,c2,c3;enum day today,workday;c1=red;workday=wed,枚举型数据与整型的关系,枚举中的一个符号通常对应一个有符号整数,因此其存储空间也等同于一个有符号整数(通常4字节)。一个枚举类型的值域就是枚举符号(如 Sun,Mon 等)所代表的一个整数的子集;,0 1 2 3 4 5 6,枚举型数据与整型的关系,一般来说,枚举中的每个符号依次与

10、 0、1、2、3对应,如:enum DAYSun,Mon,Tue,Wed,Thu,Fri,Sat;,1 2 5 6 7,枚举型数据与整型的关系,也可以任意规定其对应关系,如:enum SomeDigits ONE=1,TWO,FIVE=5,SIX,SEVEN;,枚举型数据的功用,定义一个枚举类型就是定义了一组相互关联的符号常量,在程序中可用来区分不同的事物或不同的状态;枚举符号的使用可提高程序的可读性、一致性和可维护性。.,枚举型数据与整型的关系,表达式求值过程中,枚举型数据将被无条件转换成相应的整型数据,例如:SEVEN+2 的值为 9。,实型常量,实型常量,定点表示法和浮点表示法325.4

11、83.2548e2(3.2548102)不同规格的实型常量.325.48(double)325.48f 3.2548e2F(float)325.48L 3.2548e2L(long double),实型常量,32,(2)一个实型常数缺省说明为double,如表示float型,则 在实数后加 f或 F。例 34.5f 34.5,注:(1)指数形式的书写。E或e的前面必须要有数字,且E后面的指数必须为整数。例:e3.e3 e,3.3 变量,33,变量是什么,变量其值允许改变的量,在C+程序中用一个标识符表示,允许通过赋值操作来改变它的值。,变量:变量值 23,变量名 length,变量类型 int

12、,3.3 变量,C+规定必须以字母或下划线打头,后面跟字母、数字或下划线(如:a3,Z_5e,_D7d等),并且不能与保留字、函数名、类名等C+专用名相同(如 char,for,int 等)。注意:(a)长度:早期的C编译程序只认前8个字符。VC允许256个字符。但一般不要超过31个字符为宜,1、命名,3.3 变量,35,(b)约定:变量名、函数名、和数据类型名等用小写字母 自定义的类型名(如类)、符号常量名及宏 用大写字母;下划线开头的名字常为系统程序(库函数用),用户一般不用。(c)要有意义:如用Sum表示“求和变量”,不要用aaa,A1,B12之类名字。,3.3 变量,36,程序中的nu

13、m1,num2和sum都是变量。它们的值在程序的运行过程中都发生了变化。变量定义后,各变量的初值都是不确定的。num1的第一个确切值是10,当再次给num1赋值时,num1的值又变成-5。其他两个变量的变化情况类似。,#includevoid main()int num1,num2,sum;num1=10;num2=15;sum=2*num1+num2;cout“sum=“sumendl;num1=-5;num2=num1+3;sum=num1+num2;cout“sum=“sumendl;,3.3 变量,2、变量的定义,37,变量:需要定义,说明其存储属性和数据类型。,例:static in

14、t nward=0,nkayword;,同一语句中,不能混合定义不同类型的变量。,变量的存储类型,auto存储类(缺省时用)属于一时性存储,其存储空间可以被若干变量多次覆盖使用。register存储类存放在通用寄存器中。提高执行的速度。过多使用影响速率。extern存储类在所有函数和程序段中都可引用。static存储类在内存中是以固定地址存放的,在整个程序运行期间都有效。,38,变量赋值与初始化,(1)double area,radius=23;(2)double area,radius;radius=23;,39,3.4 运算符和表达式,表达式:一个常量或标识对象的标识符是一个最简单的表达式

15、,其值是常量或对象的值一个表达式的值可以用来参与其它操作,即用作其它运算符的操作数,这就形成了更复杂的表达式包含在括号中的表达式仍是一个表达式,其类型和值与未加括号时的表达式相同算术表达式:由算术运算符、操作数和括号构成的表达式称为算术表达式a+b+(c-b)/2+5,40,、双目算术运算符,加(+)、减(-)、乘(*)、除(/)和取余(%)优先级与结合性:先乘除,后加减,同级自左至右,41,、双目算术运算符,(1)/除法 5/2=2 5.0/2.0=2.5 若/的两操作数都为整数,则为整除:例 int i=15;float f;f=i/10;结果为:f=1 如果将第三条语句改为 f=(flo

16、at)i/10;或f=i/10.0;则结果为:f=1.5,42,、双目算术运算符,(2.)%取余(余的符号与被除数相同,不允许对浮点数操作)3%4=3 4%4=0 例#include void main()int n;n=40%5;cout 40%5:n endl;/(0)n=40%7;cout 40%7:n endl;/(5)n=40%-7;cout 40%-7:n endl;/(5)n=-40%7;cout-40%7:n endl;/(-5)n=-40%-7;cout-40%-7:n endl;/(-5),43,注意:当参加运算的两个操作数都是整数时,运算结果也为整数。当参加运算的两个操作

17、数中至少有一个是单精度型,并且另外一个不是双精度型时,运算结果为单精度型。当参加运算的两个操作数中至少有一个是双精度型,则运算结果为双精度型。,2.赋值运算符,赋值运算符用于将一个数据传给一个变量。例如:int x;x=5;注意:(1)双目运算符,从右到左 d=a=b(2)赋值操作是一个表达式,每个表达式在求值后都有一个确定的值,其值为赋值号左边表达式的值 例:cout(x=5)endl;(3)当赋值号两边类型不一至时,则在赋值前自动把右边表达式的值转换为与左边变量类型相同的值。,45,2.赋值运算符,int a=10;float x=70000.5;x=a;将 a 的值 10 赋给 x,x

18、的值为 10.0。int a=10;float x=70000.5;a=x;将 x 的值 70000.5 赋给 a,但 70000.5 超过了 int 的取值范围,于是将超过的部分扔掉了,a 是多少不知道了。特别注意,上面的赋值语句,编译时是可以通过的。,46,复合的赋值运算符,有10种复合运算符:+=,-=,*=,/=,%=,=,&=,=,|=例:a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*(y+8),47,赋值表达式举例,a=5表达式值为5a=b=c=5表达式值为5,a,b,c均为5a=5+(c=6)表达式值为11,a为11,c为6a=(b=4)+(c=6)表达式值为10,

19、a为10,b为4,c为6a=(b=10)/(c=2)表达式值为5,a为5,b为10,c为2a-=a+=a*a 相当于:a=a-(a=a+a*a),48,3.增1和减1运算符,取作为表达式的值,然后先;然后取作为表达式的值 取;,取,49,例:int a=3;int b=+a;couta“bendl;int c=a+;couta“cendl;,45 4,例题:x=6;x+=x-=x*x;若x为整型变量,则上述语句执行后 x 的值是()X+与X+1是否相等?+X与X+=1是否相等?,4.测类型长度运算符-sizeof 操作符,语法形式:sizeof(类型名)或 sizeof(表达式)结果值:“类型

20、名”所指定的类型或“表达式”的结果类型所占的字节数。例:sizeof(int)=4sizeof(double)=8sizeof(100)=4sizeof(a)=1sizeof(struct ABC)coutsizeof(double)endl;,5.位操作符,位操作符包括:(右移,如:k2)|(按位或,如:k1|k2)&(按位与,如:k1&k2)(按位异或,如:k1k2)(按位求反,如:k),左移1位相当于乘2,右移1位相当于除2,5.位操作符-左移、右移,左移、右移操作符()移出的被丢弃,移入的是0,如:00000000 00000101 5 00000000 00010100 51 2,有

21、 1 得 1,无 1 得 0,5.位操作符-按位或,按位或操作符(|)对应位中至少有一个1,其结果位就是1,否则结果位为0。例如:13|37 4500000000 00001101 1300000000 00100101 3700000000 00101101 45,有 0 得 0,无 0 得 1,5.位操作符-按位与,按位与操作符(&)对应位两个都是1,其结果位就是1,否则结果位为0。例如:13&37 500000000 00001101 1300000000 00100101 3700000000 00000101 5,相同得 0,不同得 1,5.位操作符-按位异或,按位异或操作符()对应

22、位中只有一个1,其结果位就是1,否则结果位为0。例如:13 37 4000000000 00001101 1300000000 00100101 3700000000 00101000 40,1 变 0,0 变 1,5.位操作符-按位求反,按位求反操作符(,一元操作符)对应于1,结果位为0;对应于0,结果位为1。例如:37 6549800000000 00100101 3711111111 11011010 65498(-38),例题,假定整数变量x=24(00011000),y=36(00100100).x3=4x=-25x&y=0 xy=60 x44=0001100000101100=00

23、110100=52x&x1=16(优先级别高于&),6.关系运算符,用关系运算符将两个表达式连接起来,就是关系表达式关系运算是比较简单的一种逻辑运算,优先次序为:=!=优先级相同(高)优先级相同(低)关系表达式是一种最简单的逻辑表达式其结果类型为 bool,值只能为 true 或 false。例如:x=20,y=3.25,ch是一个字符变量 x+=21;y+10y*10;ch!=0,59,7.逻辑运算符,逻辑操作符包括!(逻辑非,读做“非”或“not”)&(逻辑与,读做“与”或“and”)|(逻辑或,读做“或”或“or”),60,7.逻辑运算符-逻辑非,逻辑非操作符(!,一元操作符)操作数的值

24、为 true 时结果为false,操作数的值为 false 时结果为 true;例如,对于 bool ready=true;!ready 的值是 false。真变假,假变真,7.逻辑运算符-逻辑与,逻辑与操作符(&)两个操作数均为 true 时结果为 true,否则结果为 false;例如:53&53&510 的值为 false 5=10 的值为 false有假得假,无假得真,62,7.逻辑运算符-逻辑或,逻辑或操作符(|)两个操作数至少有一个 true 时,其结果为 true,否则结果为 false;例如:53|53|510 的值为 true 5=10 的值为 false有真得真,无真得假,

25、逻辑型数据的应用等价条件.,基于“否定之否定”!E E基于两种等效的构成相反条件的方法!(x=y)x!=y!(x=y,逻辑型数据的应用等价条件,基于&或|的交换律 E1&E2 E2&E1 E1|E2 E2|E1基于!对于&或|的分配律!(E1&E2)!E1|!E2!(E1|E2)!E1&!E2,逻辑表达式的相反式,一个逻辑表达式的逻辑非称为这个逻辑表达式的相反式。x=5xx=0&y1x1&xza=b|a=ca=x|b2*y+10,x20 x=key|flag!=truech=a&ch=za!=b&a!=cax&b=2*y+10,习题,p&Pdata!=xin&ai!=keych=(|ch=|c

26、h=x|in&i!=0,!p|Pdata=xi=n|ai=keych!=(&ch!=&ch!=!x&(i=n|i=0)/使用圆括号为必须,因为|的优先级别低于&,逻辑型数据的应用永真条件和永假条件,永真条件的例子 true、y0|y15 出现于程序中的这两种条件通常都是逻辑错误,应加以避免。永真条件偶尔用于构造循环结构。,注意:,(1)比较运算符与()“”;()“”;(2)不等于运算符(!)(!),69,()逻辑非(!()例!c若,(!c)()!()()若写成从左到右(衡为1),70,例题,ay|ay)|(a(b-(!c)若x,y,z的初值均为1,则执行表达式w=+x|+y&+z 后,x,y,

27、z的值分别为_。A)x=1,y=1,z=2 B)x=2,y=2,z=2 C)x=2,y=1,z=2 D)x=2,y=1,z=1(D),8.条件运算符,使用格式:条件?表达式1:表达式2 若条件为ture,表达式的值为 表达式1 的值,否则为 表达式2 的值。举例:执行 z=x y?1:0 后,若x大于y,z的值为1,否则为0。,72,注意:,注意:(1)条件运算符优于赋值运算符比关系运算符和算术运算符都低。例 max=(ab)?a:b+1(2)条件运算符的结合性为“自右向左”例ab?a:cd?c:d 即 ab?a:(cd?c:d)(3)条件表达式与一般if的语句的关系 coutb?a:b;(4

28、)表达式1、2的类型可以不同,条件表达式的最终类型为1和2中较高的类型。,73,9.逗号运算符,格式:表达式1,表达式2求解顺序及结果:先求解1,再求解2,最终结果为表达式2的值例 a=3*5,a*4 最终结果为60例2 int a,b,c;d=(a=1,b=a+2,c=b+3);coutdendl;,74,10.圆括号运算符,圆括号运算符()括号内运算优先进行,即先算括号内,后算括号外。如x/(y+2),75,优先级,76,混合运算时数据类型的转换 隐含转换,一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。在算术运算和关系运算中如果参与运算

29、的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是将低类型数据转换为高类型数据。char short int unsigned long float double低 高,77,混合运算时数据类型的转换隐含转换,逻辑运算要求参与运算的操作数必须是bool型,如果操作数是其它类型,编译系统会自动将非0数据转换为true,0转换为false。位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,也会自动进行类型转换,赋值运算要求左值与右值的类型相同,若类型不同,编译系统会自动律将右值转换为左值的类型。,混合运算时数据类型的转换强制类型转换,语法形式:类型说明符(表

30、达式)或(类型说明符)表达式强制类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。注:int a=16,b=5;float x=10;x=(float)a+a/b;,3.5 函数,函数分为系统函数和用户函数两类,这里主要介绍一些常用的系统函数。数学函数(math.h)绝对值abs(x)或fabs(x)、正弦sin(x)、余弦con(x)、正切tan(x)、平方根sqrt(x)、自然指数exp(x)ex e=2.718282、幂pow(x,y)xy、自然对数log(x)lnx、向下取整floor(x)等。如abs(-12)=12、fabs(-3.26)=3.26、sqrt(36)=

31、6、pow(2,5)=32等。,80,3.5 函数,随机函数(stdlib.h)rand()返回0-32767之间的一个整数;srand(s)让系统建立对应的随机数序列,当自变量s的值不同时,将使系统产生不同的随机数序列。如 rand()%100 得到0-99之间一个随机数for(int i=1;i10;i+)coutrand()%100;终止运行函数(stdlib.h)exit(1)执行时结束程序执行,返回C+主操作界面窗口,81,3.5 函数,函数调用或称函数调用表达式格式:(),实参表应与函数定义或函数原型中的参数表相对应。例:求指数函数原型 double pow(double x,do

32、uble y);调用格式:pow(实参1,实参2)pow(3,2),pow(3*2,3),pow(x,y+1)double a=3,b=4,c;c=pow(a,b)-15;,82,利用ceil函数或者floor函数按要求求取一个数的若干位小数。假定x=3.74265floor(x*100)/100=3.74/保留x的两位小数,x值不变floor(x*10000)/10000=3.7426/保留x的四位小数,x值不变floor(x*1000+0.5)/1000=3.743/保留三位小数,第四位四舍五入floor(x+0.5)=4/对x取整,小数点后1位四舍五入floor(x*10+0.5)/10

33、=3.7/保留x的一位小数,小数点后第2位四舍五入,利用随机函数能够产生出任何指定区间内的随机数rand()%100/返回099区间内的一个随机整数10+rand()%90/返回10,99区间内的一个随机整数a+rand()%b/返回a,a+b-1区间内的一个随机整数rand()%100/100.0/返回0.00,0.99区间内的一个随机整数rand()%90/10.0+1/返回1.0,9.9区间内的一个随机整数,注意,在数学算术中省略乘号的地方,在对应的算术表达式中要加上乘号*。在数学算术的分子中若出现加、减运算,或者在分母中若出现加、减、乘和除运算,则表示成算术表达式时应把分子和分母分别加圆括号括起来。对于在三角函数中使用的角度,应转换成弧度,对于使用的常量符号应写成常数3.14159。当算式中带有两个整数相除时,则转换后要使其一写成实数形式,否则将丢失商的小数部分。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号