c语言数据类型解析课件.ppt

上传人:小飞机 文档编号:3874257 上传时间:2023-03-25 格式:PPT 页数:60 大小:659KB
返回 下载 相关 举报
c语言数据类型解析课件.ppt_第1页
第1页 / 共60页
c语言数据类型解析课件.ppt_第2页
第2页 / 共60页
c语言数据类型解析课件.ppt_第3页
第3页 / 共60页
c语言数据类型解析课件.ppt_第4页
第4页 / 共60页
c语言数据类型解析课件.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

《c语言数据类型解析课件.ppt》由会员分享,可在线阅读,更多相关《c语言数据类型解析课件.ppt(60页珍藏版)》请在三一办公上搜索。

1、C 语言基础,C/C+程序设计,2,C程序的基本结构(复习),【例】计算并输出一个数a的平方。#include main()float a,b;a=5.2;b=a*a;printf(b=%fn,b);,执行程序的输出结果为:b=27.039997,3,数据类型(复习),【例】计算圆的面积,半径为 5 cm。程序如下:,main()float r,area;r=5;area=3.14*r*r;printf(%fn,area);,运算结果是输出圆的面积:78.500000,程序中用到的数据:r、area、5、3.14对数据进行的运算:*、=,4,C语言的数据类型,C数据类型,5,2.2.1 整型数

2、据,1整型数据的类型基本整型数据 int,分配 2 Byte短整型数据 short int,分配 2 Byte长整型数据 long int,分配 4 Byte无符号型,存储单元中全部二进位(bit)用作存放数本身,而不包括符号。整型数据均以二进制补码形式存储,6,2.2.2 实型数据,2实型数据的类型,C实型变量分为单精度(float型)和双精度(double型)两类,对每一个实型变量都应在使用前加以定义。如:float x,y;(指定x,y为单精度实数)doublez;(指定z为双精度实数)在一般系统中,一个float型数据在内存中占4个字节(32位)一个double型数据占8个字节。单精度

3、实数提供7位有效数字,双精度实数提供16位有效数字。,7,2.2.3 字符型数据,字符型数据char,分配 1 Byte 字符型数据是指字母、数字、各种符号等用ASCII值表示的字符例如 a 是一个char类型数据,称作字符常量,2.2.4 空类型,空类型void通常与指针或函数结合使用,8,2.3 常量、变量与标准函数,主要内容:常量变量标准库函数,9,2.3.1 常量,在运行程序的过程中值保持不变的量1整型常量 十进制:09八进制:07,以 0开头十六进制:09,AF/af,以 0 x或 0X 开头,main()int a=0123;b=0 x123;printf(“a=%d,b=%d”,

4、a,b);,10,1.整型常量,整型常量的类型:根据值大小默认类型。整型常量后面加l或L,则认为是long int型 例如:123L、0L、432l、0 x100l,注意:十六进制常量中可以使用大写字母AF,也可以使用小写字母af。八进制常量中不能出现数字 8 或 9例如:018、0921非法,11,2.实型常量,十进制形式 1.0 1.+12.0-12.0 0.0指数形式 1e3 1.8e-3-123E-6-.1E-3,12,3.字符型常量,可视字符常量 单引号括起来的单个可视字符例如:a、A、+、3、等 转义字符常量单引号括起来的 与可视字符组合,例如:,13,void main()pri

5、ntf(“ab ct derftgn”);printf(htibbj k);程序运行时在打印机上得到以下结果:f ab c gde h ji k 注意在显示屏上最后看到的结果与上述打印结果不同,是:f gde h j k,14,字符变量的定义形式如下:char c1,c2;它表示c1和c2为字符型变量,各可以放一个字符,因此可以用下面语句对c1、c2赋值:c1=a;c2=b;一般以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。例如字符a的ASCII代码为

6、97,b为98,c1 c2 97 98 01100001 01100010,15,【例】void main()char c1,c2;c1=97;c2=98;printf(%c%c,c1,c2);c1、c2被指定为字符变量。但在第3行中,将整数97和98分别赋给c1和c2,它的作用相当于以下两个赋值语句:c1=a;c2=b 程序输出:a b,16,4.字符串常量,用双引号括起的一个字符序列例如:ABC、123、a、nt nGood morning字符串常量的长度:所包含的字符个数 字符串常量的存储方式:,所占存储单元数:串长度1例如:,字符串结束标记,17,2.3.2 变量,1.变量的有关概念在

7、程序运行过程中,其值改变的数据,称为变量,变量用标识符表示,称为变量名。变量必须“先定义后使用”系统为变量分配存储单元,存储变量的值。编写程序时通过变量名来存、取变量值。,例如:有变量a它的值是510,18,2.变量定义,变量定义的一般格式:数据类型说明符 变量列表;例如:int i,j;long k,m;float x,y;char ch1,ch2;,必须使用合法的标识符作变量名不能使用关键字为变量命名,19,3.变量的初始化:,允许在说明变量的时候对变量赋初值。例如:int a=5,b=10+2;double x=23.568,y;char ch1=a,ch2=66,ch3=142;表示定

8、义变量并对变量存储单元赋值。错误的初始化:int a=3+b,b=5;float m=n=23.16;,20,main()int a,b,c,d;*指定a,b,c,d为整型变量*unsigned u;*指定为无符号整型变量*/a=12;b=-24;u=10;c=a+u;d=b+u;printf(a+u=%d b+u=%d,c,d);运行结果为 a+u b+u=-14 可以看到不同种类的整型数据可以进行算术运算。在本例中是int型数据与unsigned int型数据进行相加相减运算。,21,2.3.3 标准库函数,由C编译系统定义的一种函数,存放在系统函数库中,用户可以根据需要随时调用常用函数如

9、:printf、scanf、fabs、sqrt、sin、(常用数学函数参见教材)函数调用形式:函数名(参数表)例如:putchar(a)sqrt(x),数据类型和运算规则,23,2.4 运算符,一、运算符简介,按运算类型分类 1.算术运算符 2.关系运算符 3.逻辑运算符 4.位运算符 5.赋值与赋值组合运算符 6.自增自减运算符 7.条件运算 8.指针运算 9.其它运算符按运算对象的数目分类 单目运算 双目运算 三目运算,24,运算符-算术运算,一、算术运算符,运算符(双目运算符/单目运算符)+加法运算-减法运算*乘法运算/除法运算%求余运算优先级:*/%同级(高),+-同级(低)结合性:相

10、同优先级运算符进行运算时的次序 自左向右(标记为),25,运算符-算术运算实例,1.参加运算的对象都是int型,结果截取为int型 10/311/310.0/3 11/3.1/21./210/5*310/(5*3),2.求余运算的对象必须是整型 9%31%310%310%-3-10%3-10%-3,=3,=3,=3.3333,=3.66667,=0,=0.5,=6,=0,=0,=1,=1,=1,=-1,=-1,注意:运算对象的数据类型对运算结果的影响,26,运算符-关系运算,二、关系运算符,运算符(双目运算符)大于=大于等于 小于=小于等于=等于!=不等于,优先级:=同级(高),!=同级(低)

11、关系运算的结果应该为逻辑型“真”或“假”C语言中没有逻辑型,将逻辑型数值化处理,用整型1表示“真”,用整型0表示“假”。,27,运算符-关系运算实例,实例 关系表达式 75 的值是 1,57 的值是 0。已知:int a=13,b=2,c=1;abab)=cab=ca-b=c,成立,结果为 1不成立,结果为 0成立,结果为 1不成立,结果为 0结果为 1与上面等价,结果为 1等价于(a-b)=1,结果为 0,?,如何判断数学中的逻辑关系:0a9?0=a=9,等价于(0=a)=9,结果恒为1,28,运算符-逻辑运算,三、逻辑运算符,运算符&逻辑与(双目)()逻辑或(双目)()!逻辑非(单目)()

12、,逻辑运算真值表,逻辑运算关系,29,运算符-逻辑运算,式2(y b)&(y a),1 结果,2 结果,例:要判断 0 x 9 是否成立:(0=x)&(x=9)如果没有括号:0=x&x=9 等价,结果 结果,实例:比较下列两个逻辑表达式的执行过程 式1 y b&y a,30,运算符-位运算,四、位运算符,运算符 按位右移(双目)()按位左移(双目)()&按位与(双目)()按位异或(双目)()按位或(双目)()按位反(单目)(),31,实例:已知:int x=7,y=10,z=1;设字长为8位 x&y=x&z=x y=y z=x y=x=x=x2=x2=,2(0000 0111&0000 101

13、0=0010)1(0000 0111&0000 0001=0001)15(0000 0111 0000 1010=1111)11(0000 1010 0000 0001=1011)13(0000 0111 0000 1010=1101)8(0000 0111)=1111 1000 7 28(0000 0111 2=0000 0010)1(0000 0111 2=0000 0001),运算符-位运算,32,说明 关于:右移一位=缩小 1/2 关于:左移一位=扩大 2 倍 关于:因为:x=按位求反=求反运算 求负=求补=求反+1 所以:求反=求负 1 x=-x-1 7=8(8)=7注意:1.位运算

14、是对二进制的位进行运算 2.只能对int型、char型和long型进行位运算,运算符-位运算,33,运算符-自增自减运算,五、自增自减运算符,运算符(单目)+自增 自减+和 为单目运算,只能作用于变量只能对int、char、long和指针变量进行运算功能:+x x=x+1 x x=x1(前缀)x+x=x+1 x x=x1(后缀),34,运算符-自增自减运算,自增(自减)有前缀和后缀之分。前缀形式:先自增(自减)再引用 后缀形式:先引用再自增(自减)前缀与后缀的区别:y=+x;x=x+1;y=x;x先加1再赋值 y=x+;y=x;x=x+1;x先赋值再加1,35,运算符-自增自减运算实例,实例(

15、1)+i;i+;因为在表达式中没有其它运算,结果一样。(2)x=1;y=+x;结果:x=2,y=2 y=+x;x=x+1;y=x;在做赋值运算之前,x先加1,然后将x赋给y(3)x=1;y=x+;结果:x=2,y=1 y=x+;y=x;x=x+1;先将 x 赋值给 y,然后 x 再加1,36,1.+和 运算法只能用于变量,不得用于常量和表达式.,如:5+,(a+b)+均为不合法.,几点注意:,37,2.+,的结合性为从右至左,而一般算术运算符为从左至右。,如:i+和+为同一优先级.,i+相当于(i+),例:#includemain()int i=3,j;j=-i+;printf(i=%d,j=

16、%dn,i,j);,运行结果:i=4,j=-3,38,1.要慎用+、运算符。,有关表达式使用中的问题说明,对于表达式(i+)+(i+)+(i+);我们可能会认为应从左至右:3+4+5=12,例:#include main()int i=3,j;j=(i+)+(i+)+(i+);printf(i=%d,j=%dn,i,j);,实际运行结果:i=6,j=9,39,先对i进行3次自加,结果i的值为6,然后三个i值相加为18。,3+3+3=9 然后再把6赋给i值,如果表达式j=(i+)+(i+)+(i+);改为:j=(+i)+(+i)+(+i);,则运行结果:i=6,j=18,这是因为运算时是先取i的

17、原值:3,40,2.在表达式中,有的运算符为一个字符,有的为两个字符。,一般地:自左至右尽可能多地将若干字符组成一个运算符。,如:i+j,究竟理解为(i+)+j还是i+(+j)?,41,例:#includemain()int i=3,j=3,m;m=i+j;printf(i=%d,j=%d,m=%dn,i,j,m);,运行结果:i=4,j=3,m=6,对语句m=i+j;系统理解为m=(i+)+j;,42,3.在函数调用时要注意参数的计算顺序,printf(i=%d,i=%d,i,i+);,如:int i=3;,int j=3;,printf(j=%d,j=%d,j+,j);,输出结果:i=4,

18、i=3;,j=3,j=3;,原因:参数的计算顺序从右到左。,43,运算符-赋值与赋值组合运算,六、赋值与赋值组合运算符,运算符(双目)赋值运算:=赋值组合运算:e1 op=e2 等于于:e1=e1 op(e2)其中:op为下列10个运算符之一+*/%|,44,例:a+=a=aa(设a12),又:a=5+(c=6)c=6,a=11 a=(b=4)+(c=6)b=4,c=6,a=10 a=(b=10)/(c=2)b=10,c=2,a=5,还可用复合赋值运算符作下列运算:,步骤:aa144.a=a a a=a a a=12 144=132 a+=132 a=a+(132)=264,45,46,运算符

19、-条件运算,七、条件运算符,运算符(三目)e1?e2:e3功能:如果表达式e1成立(e1值为非0),则执行表达式e2;否则(表达式e1不成立),执行表达式e3,例:max=(ab)?a:b;求变量a与b的最大值 min=(ab)?a:b;求变量a与b的最小值,47,运算符-指针运算,八、指针运算符,运算符(单目)&取变量的地址*取指针变量(所指向)的内容注意:运算符&和“位与”运算是同一符号;运算符*和“乘”运算是同一符号。只能从程序的上下文来区分运算符&和运算符*的实际意义。,48,运算符-其它运算,九、其它运算符,运算符.取结构/联合的成员 通过指针取结构/联合的成员()改变表达式中的优先

20、级关系 数组下标,逗号,表达式从左向右顺序计算(type)e 将e的数据类型强制转换为type sizeof(opr)求opr所占用的内存的字节数,49,运算符-其它运算实例,实例:已知:int x,y,z;y=(x=10,x+1);答案:先执行x=10,然后再执行y=x+1 y=11,x=10 z=sizeof(int);答案:z=2 求int型数据占用的内存字节数量 z=sizeof(x);答案:z=2 求变量x占用的内存字节数量,50,例:in a,b;a=35,a 4;b=(3*5,a*4);,结果:a=15 b=60,若:b=(a=35,a 4),a+5);,a+5b 即 20b.,

21、3 5=15a,a 4=60(此时a值仍未变),51,x=(a=3,63)赋值表达式,x的值18;,x=a=3,6 a 逗号表达式,x的值3.,逗号表达式主要用于某些语句中需一次计算多个表达式值的情况。如在循环语句中。,思考:,若有:int a;,a=(3*5,a*4);,则:a的值为多少?,答案:不确定,注意:,52,运算符的优先级与结合性,按运算符的优先级分为15级按运算符的结合性分为2种自左向右结合 自右向左结合优先级不同时:运算符优先级的高低决定了进行运算的先后次序。优先级相同时:同优先级运算符的运算次序由结合性决定。例如:四则运算中的“先乘除,后加减”反映了运算符的优先级;“同级运算

22、从左至右”反映了乘/除(加/减运算)的结合性。,53,运算符的优先级与结合性,运算符优先级表,54,数据类型转换,不同数据类型的数据/变量进行混合运算时,需要进行数据类型转换转换方式有两种:“显式的”类型转换“隐式的”类型转换“显式的”类型转换采用强制类型转换运算符(type)“隐式的”类型转换是语言按照一定的类型转换规则自动进行的转换,55,例如:(double)a 将a转换为double,(int)(x+y)将x+y转换为int,(float)(5%3)将5%3转换为float,注:括号不能省略。,另:(int)(x+y),否则:intx 会理解为变量intx.,若写:(int)x+y,则

23、只会将x转成整型.,56,数据类型转换,“隐式的”类型转换规则 1、运算中将所有char型数据都转换成int型,float型转换成double型。2、低级类型服从高级类型,并进行相应的转换double floatlongunsignedint char,3、赋值运算以赋值运算符左边变量的类型为准,即赋值运算符右端值的类型向左边变量的类型看齐,并进行相应的转换。,57,C语言允许双精度、单精度、整型及字符数据之间混合运算 10+a+1.58765.1234 b是允许的。但有一个规则:先转换成同一类型,再计算。,58,59,10+a:转为int,结果为int,if:转为double,结果为double,+:转为double,d/e:转为double,转为double,则运算时:,60,例:#include,main(),int a=15,b=20,c;,float x=16.82,y=2.74,z;,z=(float)(a+b);,c=(int)(x+y);,printf(z=%f,c=%d,z,c);,运行结果:z=35.000000,c=19,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号