c语言-第二章基本数据类型.ppt

上传人:小飞机 文档编号:6503711 上传时间:2023-11-07 格式:PPT 页数:80 大小:1.42MB
返回 下载 相关 举报
c语言-第二章基本数据类型.ppt_第1页
第1页 / 共80页
c语言-第二章基本数据类型.ppt_第2页
第2页 / 共80页
c语言-第二章基本数据类型.ppt_第3页
第3页 / 共80页
c语言-第二章基本数据类型.ppt_第4页
第4页 / 共80页
c语言-第二章基本数据类型.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《c语言-第二章基本数据类型.ppt》由会员分享,可在线阅读,更多相关《c语言-第二章基本数据类型.ppt(80页珍藏版)》请在三一办公上搜索。

1、第二章 基本数据类型,本章主要任务:1、了解C语言丰富的数据类型;常量、变量的概念。2、掌握变量定义原则和符号常量定义方法。3、掌握常用基本数据类型(整型、实型、字符型)数据的常量表示、机内存储、变量分类以及掌握正确选择数据类型。4、了解数值型数据混合运算及类型转换规律。5、了解:C语言的丰富运算符,丰富的运算符可以构成灵活的表达式。6、掌握算术、赋值、逗号运算符及它们构成的表达式。7、掌握运算符的优先级、结合性规律。,一、C的数据类型数据类型总表,数据类型决定:1.数据占内存字节数2.数据取值范围3.其上可进行的操作,基本数据类型,一、C的数据类型,说明(1)数据有类型。(2)不同的数据类型

2、有不同的取值范围。如有符号整数取值范围-3276832767,浮点数-3.4e-383.4e38。(3)不同的数据类型有不同的操作。如整型数可以取余操作,实型数据却不行;整型、实型数据可以有加法,字符数组不行。(4)不同的数据类型即使有相同的操作有时含义也不同,如指针数据自增1与整数自增1含义是不同的。,一、C的数据类型,(5)C语言的数据类型可以构造复杂的数据结构。如使用结构体数组可以构造线性表。使用指针类型、结构体类型可以构造线性链表(栈、队列)、树、图。(6)C语言中的数据有变量与常量,它们分别属于上述这些类型。,0、标识符定义:用来标识变量、常量、函数等的字符序列组成:只能由字母、数字

3、、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字长度:最长32个字符命名原则:见名知意不宜混淆 如l与I,o与0,例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name#33 lotus_1_2_3 char ab _above$123,3days,#33,char,$123,ab,二、常量与变量,1、常量(1)定义在程序的运行过程中,其值不能改变的量称为常量。,二、常量与变量,(2)常量类型如:12、0、-3为整型常量4.6、-1.23为实型常量a、d字符常量。常量可以从字面形式即可判断-字面常量或直接常量。,二

4、、常量与变量,(3)符号常量#define PI 3.1416使用符号常量的好处:含义清楚、见名知意。修改方便、一改全改。,二、常量与变量,2、变量(1)定义在程序的运行过程中,其值可以改变的量称为变量。,二、常量与变量,(2)变量名(用标识符表示)、变量在内存中占据的存储单元、变量值三者关系。变量名在程序运行过程中不会改变,变量的值可以改变。变量名遵守标识符准则。,二、常量与变量,(2)C语言中变量:“先定义,后使用”。C要求对所有用到的变量做强制定义。只有申明过的变量才可以在程序中使用,这使得变量名的拼写错误容易发现。申明的变量属于确定的类型,编译系统可方便地检查变量所进行运算的合法性。在

5、编译时根据变量类型可以为变量确定存储空间,“先定义后使用”使程序效率高。,三、整型数据,1、整型常数的表示方法1)十进制。123,-456,0。2)八进制。以0开头,后面跟几位的数字(0-7)。0123=(123)8=(83)10;-011=(-11)8=(-9)10。3)十六进制。以0 x开头,后面跟几位的数字(0-9,A-F)。0 x123=291,-0 x12=-18。,三、整型数据,2、整型变量(1)整型数据在内存中的存放形式 数据在内存中以二进制形式存放,事实上以补码形式存放。,三、整型数据,例如:定义一个整型变量i=10。其内存模型如下:,三、整型数据,(2)整型变量的分类1)根据

6、表达范围可以分为:基本整型(int)、短整型(short int)、长整型(long int)。用long型可以获得大范围的整数,但同时会降低运算速度。2)根据是否有符号可以分为:有符号(signed,默认),无符号(unsigned)-目的:扩大表示范围,有些情况只需要用正整数。,三、整型数据,6种整型变量:l 有符号基本整型:signedintl 有符号短整型:signedshortintl 有符号长整型:signedlongintl 无符号基本整型:unsigned intl 无符号短整型:unsigned short intl 无符号长整型:unsigned long int,三、整型

7、数据,例如:保存整数13的各种整型数据类型。,三、整型数据,三、整型数据,(3)整型变量的定义 格式:数据类型名 变量名表;例如:void main()int a,b,c,d;unsigned u;a=12;b=-24;u=10;c=a+u;d=b+u;printf(“%d,%dn”,c,d);,三、整型数据,说明:(1)变量定义时,可以说明多个相同类型的变量。各个变量用“,”分隔。类型说明与变量名之间至少有一个空格间隔。(2)最后一个变量名之后必须用“;”结尾。(3)变量说明必须在变量使用之前。(4)可以在定义变量的同时,对变量进行初始化。,三、整型数据,(4)整型数据的溢出 整型数最大允许

8、值+1,最小允许值-1,会出现什么情况?结论:超出范围就发生“溢出”,运行时不报错。,例2-2a:整型数据的溢出void main()int a,b;a=32767;b=a+1;printf(na=%d,a+1=%dn,a,b);a=-32768;b=a-1;printf(na=%d,a-1=%dn,a,b);getch();a=32767,a+1=-32768a=-32768,a-1=32767,四、实型数据,1、实型常量的表示方法(1)十进制小数形式。由数字,小数点组成(必须有小数点)。例如:.123、123.、123.0、0.0(2)指数形式。格式:aEn。例如:123e3、123E3都

9、是实数的合法表示。,四、实型数据,说明:1)字母e或E之前必须有数字,e后面的指数必须为整数。例如:e3、2.1e3.5、.e3、e都不是合法的指数形式。2)规范化的指数形式。在字母e或E之前的小数部分,小数点左边应当有且只能有一位非0数字。用指数形式输出时,是按规范化的指数形式输出的。例如:2.3478e2、3.0999E5、6.46832e12都属于规范化的指数形式。3)实型常量都是双精度,如果要指定它为单精度,可以加后缀f(实型数据类型参看实型变量部分说明)。,四、实型数据,2、实型变量(1)实型数据在内存中的存放形式 一个实型数据一般在内存中占4个字节(32位)。与整数存储方式不同,实

10、型数据是按照指数形式存储的。系统将实型数据分为小数部分和指数部分,分别存放。,四、实型数据,(2)实型变量的分类 单精度(float)、双精度(double)、长双精度(long double)。,四、实型数据,(3)实型数据的舍入误差实型变量是用有限的存储单元存储的,因此提供的有效数字是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。,例2-3a:实型数据的舍入误差(实型变量只能保证7位有效数字,后面的数字无意义)void main()float a,b;a=123456.789e5;b=a+20;printf(a=%f,b=%fn,a,b);printf(a=%e,b=%en,

11、a,b);a=1.23457e+10,b=1.23457e+10,四、实型数据,结论:由于实数存在舍入误差,使用时要注意:(1)不要试图用一个实数精确表示一个大整数,记住:浮点数是不精确的。(2)实数一般不判断“相等”,而是判断接近或近似。(3)避免直接将一个很大的实数与一个很小的实数相加、相减,否则会“丢失”小的数。(4)根据要求选择单精度、双精度。,五、字符型数据,1、字符常量(1)定义用单引号()括起来的一个字符。,五、字符型数据,(2)形式:1)可显示的字符常量直接用单引号括起来,如,a、D、?、$等都是字符常量。2)使用字符的转义表示法表示转义表示格式:ddd或xhh(其中ddd,h

12、h是字符的ASCII码,ddd八进制、hh十六进制)。注意:不可写成0 xhh或0ddd(整数)。,五、字符型数据,(3)预定义常用转义字符,五、字符型数据,2、字符变量(1)定义字符型变量是用来存放字符数据,同时只能存放一个字符。所有编译系统都规定以一个字节来存放一个字符,或者说,一个字符变量在内存中占一个字节。,五、字符型数据,3、字符数据在内存中的存储形式字符数据在内存中的存储形式:以字符的ASCII码,以二进制形式存放,占用1个字节。,五、字符型数据,说明:1)字符数据以ASCII码存储的形式与整数的存储形式类似,这使得字符型数据和整型数据之间可以通用(当作整型量)。2)可以将整型量赋

13、值给字符变量,也可以将字符量赋值给整型变量。3)可以对字符数据进行算术运算,相当于对它们的ASCII码进行算术运算。4)一个字符数据既可以以字符形式输出(ASCII码对应的字符),也可以以整数形式输出(直接输出ASCII码)。,五、字符型数据,例2-7a:给字符变量赋以整数(字符型、整型数据通用)void main()/*字符a的各种表达方法*/char c1=a;char c2=x61;/*note:x.,.*/char c3=141;char c4=97;char c5=0 x61;/*note:0 x.,0.*/char c6=0141;printf(nc1=%c,c2=%c,c3=%c

14、,c4=%c,c5=%c,c6=%cn,c1,c2,c3,c4,c5,c6);printf(c1=%d,c2=%d,c3=%d,c4=%d,c5=%d,c6=%dn,c1,c2,c3,c4,c5,c6);getch();c1=a,c2=a,c3=a,c4=a,c5=a,c6=ac1=97,c2=97,c3=97,c4=97,c5=97,c6=97过程:整型数=机内表示(两个字节)=取低8位赋值给字符变量,五、字符型数据,例2-8a:大小写字母的转换(ASCII码表:小写字母比对应的大写字母的ASCII码大32,本例还可以看出允许字符数据与整数直接进行算术运算,运算时字符数据用ASCII码值参与

15、运算)void main()char c1,c2,c3;c1=a;c2=b;c1=c1-32;c2=c2-32;c3=130;printf(n%c%c%cn,c1,c2,c3);printf(%d%d%dn,c1,c2,c3);getch();A B?65 66-126,五、字符型数据,4、字符串常量(1)定义是一对双引号(“”)括起来的字符序列。例如:“How dow you do?”,“CHINA”,“a”,“$123.45”.,五、字符型数据,(2)区分字符常量与字符串常量如“a”和a。C语言规定:在每个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定以0(A

16、SCII码为0的字符)作为字符串结束标志。,五、字符型数据,如:“CHINA”在内存中的存储应当是:(长度=6),五、字符型数据,(3)不能将字符串赋给字符变量。(4)C语言没有专门的字符串变量,如果想将一个字符串存放在变量中,可以使用字符数组。即用一个字符数组来存放一个字符串,数组中每一个元素存放一个字符。,六、各数值型数据的混合运算,整型(包括int,short,long)和实型(包括float,double)数据可以混合运算,另外字符型数据和整型数据可以通用,因此,整型、实型、字符型数据之间可以混合运算。例如:表达式10+a+1.5-8765.1234*b是合法的。在进行运算时,不同类型

17、的数据先转换成同一类型,然后进行计算,转换的方法有两种:自动转换(隐式转换);强制转换。,六、各数值型数据的混合运算,1、自动动转换(隐式转换)自动转换发生在不同类型数据进行混合运算时,由编译系统自动完成。,六、各数值型数据的混合运算,转换规则:,六、各数值型数据的混合运算,1)类型不同,先转换为同一类型,然后进行运算。2)图中纵向的箭头表示当运算对象为不同类型时转换的方向。可以看到箭头由低级别数据类型指向高级别数据类型,即数据总是由低级别向高级别转换。即按数据长度增加的方向进行,保证精度不降低。,六、各数值型数据的混合运算,3)图中横向向左的箭头表示必定的转换(不必考虑其它运算对象)。4)赋

18、值运算,如果赋值号“=”两边的数据类型不同,赋值号右边的类型转换为左边的类型。这种转换是截断型的转换,不会四舍五入。,六、各数值型数据的混合运算,强制转换是通过类型转换运算来实现。一般形式:(类型说明符)表达式功能:把表达式的结果强制转换为类型说明符所表示的类型。,六、各数值型数据的混合运算,例如:(int)a 将a的结果强制转换为整型量。(int)(x+y)将x+y的结果强制转换为整型量。(float)a+b 将a的内容强制转换为浮点数,再与b相加。,六、各数值型数据的混合运算,说明:1)类型说明和表达式都需要加括号(单个变量可以不加括号)2)无论隐式转换,强制转换都是临时转换,不改变数据本

19、身的类型和值。,六、各数值型数据的混合运算,void main()float f=5.75;printf(int)f=%dn,(int)f);/*将f的结果强制转换为整型,输出*/printf(f=%fn,f);/*输出f的值*/结果:(int)f=5f=5.750000,七、C运算符简介,运算符:狭义的运算符是表示各种运算的符号。表达式:使用运算符将常量、变量、函数连接起来,构成表达式。,七、C运算符简介,C的运算符有以下几类:,八、算术运算符和算术表达式,1、算术运算符+(加法运算符。如3+5)-(减法运算符或负值运算符。如5-2,-3)*(乘法运算符。如3*5)/(除法运算符。如5/3,

20、5.0/3)%(模运算符或求余运算符,%要求两侧均为整型数据。如7%4的值为3)。除了负值运算符-单目运算符外,其它都是双目运算符。,说明,(1)两个整数相除的结果为整数,如5/3的结果为1,舍去小数部分。但是如果除数或被除数中有一个为负值,则舍入的方向是不固定的,多数机器采用“向0取整”的方法(实际上就是舍去小数部分,注意:不是四舍五入)。,说明,说明,(2)如果参加+,-,*,/运算的两个数有一个为实数,则结果为double型,因为所有实数都按double型进行计算。(3)求余运算符%,要求两个操作数均为整型,结果为两数相除所得的余数。求余也称为求模。一般情况,余数的符号与被除数符号相同。

21、,2、算术表达式 用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为算术表达式。运算对象可以是常量、变量、函数等。例如:a*b/c-1.5+a,注意:(1)C语言算术表达式的乘号(*)不能省略。例如:数学式b2-4ac,相应的C表达式应该写成:b*b-4*a*c。(2)C语言表达式中只能出现字符集允许的字符。例如,数学r2相应的C表达式应该写成:PI*r*r。(其中PI是已经定义的符号常量),(3)C语言算术表达式不允许有分子分母的形式。例如,(a+b)/(c+d)。(4)C语言算术表达式只使用圆括号改变运算的优先顺序(不要指望用)。可以使用多层圆括号,此时左右括

22、号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。,3、(算术)运算符的优先级与结合性 C语言规定了进行表达式求值过程中,各运算符的“优先级”和“结合性”。,(1)C语言规定了运算符的“优先级”和“结合性”。在表达式求值时,先按运算符的“优先级别”高低次序执行。如表达式:a-b*c等价于a-(b*c)“*”运算符优先级高于“-”运算符。,(2)如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”处理。例如:a-b+c,到底是(a-b)+c还是a-(b+c)?(b先与a参与运算还是先于c参与运算?)+/-运算优先级别相同,结合性为“自左向右”,即就是说b先与左边的a结

23、合。所以a-b+c等价于(a-b)+c。,(3)在书写多个运算符的表达式时,应当注意各个运算符的优先级,确保表达式中的运算符能以正确的顺序参与运算。对于复杂表达式为了清晰起见可以加圆括号“()”强制规定计算顺序。,九、赋值运算符和赋值表达式,1、赋值运算符、赋值表达式 赋值运算符:赋值符号“=”就是赋值运算符。赋值表达式:由赋值运算符组成的表达式称为赋值表达式。一般形式:,变量赋值符表达式,赋值表达式的求解过程:将赋值运算符右侧的表达式的值赋给左侧的变量,同时整个赋值表达式的值就是刚才所赋的值。赋值的含义:将赋值运算符右边的表达式的值存放到左边变量名标识的存储单元中。例如:x=10+y;执行赋

24、值运算(操作),将10+y的值赋给变量x,同时整个表达式的值就是刚才所赋的值。,说明:(1)赋值运算符左边必须是变量,右边可以是常量、变量、函数调用或常量、变量、函数调用组成的表达式。例如:x=10 y=x+10 y=func()都是合法的赋值表达式。,(2)赋值符号“=”不同于数学的等号,它没有相等的含义。(“=”相等)例如:C语言中x=x+1是合法的(数学上不合法),它的含义是取出变量x的值加1,再存放到变量x中。,(3)赋值运算时,当赋值运算符两边数据类型不同时,将由系统自动进行类型转换。转换原则:先将赋值号右边表达式类型转换为左边变量的类型,然后赋值。,(4)C语言的赋值符号“=”除了

25、表示一个赋值操作外,还是一个运算符,也就是说赋值运算符完成赋值操作后,整个赋值表达式还会产生一个所赋的值,这个值还可以利用。赋值表达式的求解过程是:l 先计算赋值运算符右侧的“表达式”的值l将赋值运算符右侧“表达式”的值赋值给左侧的变量。整个赋值表达式的值就是被赋值变量的值。,应用举例,例如:分析x=y=z=3+5这个表达式。运算步骤:,2、复合赋值运算符+=,-=,*=,/=,%=,=,&=,|=,=例如:n+=1 等价于 n=n+1x*=y+1 等价于 x=x*(y+1)注意:赋值运算符、复合赋值运算符的优先级比算术运算符低。,3、自增、自减运算符单目运算符,使变量的值增1或减1。如:+i

26、,i+,-i,i,说明:(1)+i,-i(前置运算):先自增、减,再参与运算;(后置运算):先参与运算,再自增、减。例如:i=3时,分析 j=+i;j=i+;的区别。,(2)自增、减运算符只用于变量,而不能用于常量或表达式。例如:6+,(a+b)+,(-i)+都不合法。,(3)+,-的结合方向是“自右向左”(与一般算术运算符不同)。例如:-i+-(i+)合法。,(4)自增、自减运算符常用于循环语句中,使循环变量自动加1,也用于指针变量,使指针指向下一个地址。,十、逗号运算符和逗号表达式,1、逗号表达式的一般形式:表达式1,表达式2,表达式n例如:3+5,6+8,2、逗号表达式的求解过程:自左向右,求解表达式1,求解表达式2,求解表达式n。整个逗号表达式的值是表达式n的值。例如:逗号表达式3+5,6+8的值为14。,void main()int x,a;x=(a=3,6*3);/*a=3 x=18*/printf(%d,%dn,a,x);x=a=3,6*a;/*a=3 x=3*/printf(%d,%dn,a,x);输出:3,183,3,3、逗号表达式主要作用:将若干表达式“串联”起来,表示一个顺序的操作(计算),在许多情况下,使用逗号表达式的目的只是想分别得到各个表达式的值,而并非一定需要得到和使用整个逗号表达式的值。,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号