C02数据类型及运算.ppt

上传人:tia****nde 文档编号:12705990 上传时间:2020-05-14 格式:PPT 页数:58 大小:765KB
返回 下载 相关 举报
C02数据类型及运算.ppt_第1页
第1页 / 共58页
C02数据类型及运算.ppt_第2页
第2页 / 共58页
C02数据类型及运算.ppt_第3页
第3页 / 共58页
点击查看更多>>
资源描述
刘杰liujie,第2章数据类型及运算,高级语言程序设计,本章提要,2.1C语言的数据类型2.2常量与变量2.3整型数据2.4浮点型数据2.5字符型数据2.6变量赋初值2.7各类数值型数据间的混合运算2.8算术运算符和算术表达式2.9赋值运算符和赋值表达式2.10逗号运算符和逗号表达式,学习要点数据的描述规则数据的操作规则,2.1C的数据类型,学习要点数据占内存字节数数据取值范围可进行的操作,2.2常量和变量,常量和符号常量变量标识符,常量,在程序运行过程中,其值不能被改变的量称为常量。常量区分为不同的类型一般从其字面形式即可判断的常量,称为字面常量或直接常量。,整型100,125,-100,0浮点型3.14,0.125,-3.789字符型a,b,2字符串a,ab,1232,符号常量,可以用一个标识符代表一个常量,称为符号常量。即以标识符形式出现的常量。定义格式:#define符号常量常量,运行结果:total=300,#definePRICE30#includevoidmain()intnum,total;num=10;total=num*PRICE;printf(total=%dn,total);,符号常量的值在其作用域(在本例中为主函数)内不能改变,也不能再被赋值。一般用大写字母是宏定义预处理命令,不是C语句。含义清楚,一改全改,变量,变量代表内存中具有特定属性的一个存储单元,它用来存放数据,这就是变量的值,在程序运行期间,这些值是可以改变的。变量名实际上是一个以一个名字对应代表一个地址,在对程序编译连接时由编译系统给每一个变量名分配对应的内存地址。从变量中取值,实际上是通过变量名找到相应的内存地址,从该存储单元中读取数据。,标识符,定义:用来对变量、符号常量、函数、数组等数据对象命名的有效字符序列。简单地说,标识符就是一个名字组成:只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线大小写敏感不能使用关键字长度:最长32个字符命名原则:见名知意:选有含意的英文单词(或其缩写)作标识符。不宜混淆:如1与I,o与0,例:判断下列标识符号合法性sumSumM.D.JohndayDate3daysstudent_name#33lotus_1_2_3charab_above$123,M.D.John,3days,#33,char,$123,ab,变量定义的格式及使用,变量定义的一般格式数据类型变量1,变量2,变量n;,变量初始化:定义时赋初值,例:inta,b,c;floatdata;,决定分配字节数和数的表示范围,合法标识符,变量的使用:先定义,后使用,例1intstudent;stadent=19;/Undefinedsymbolstatentinfunctionmain,例2floata,b,c;c=a%b;/Illegaluseoffloatingpointinfunctionmain,变量定义位置:一般放在函数开头,2.3整型数据,整型常量的表示方法整型变量整型常量的类型,整型常量的表示方法,整型常量即整常数。在C语言中,有3种形式表示:(1)十进制整数。123,-456。(2)八进制整数。以0头的数是八进制数。0123表示八进制数123,等于十进制数83。-011表示八进制数-11,即十进制数-9。(3)十六进制整数。以0 x开头的数是16进制数。0 x123,代表16进制数123,等于十进制数291。-0 x12等于十进制数-18。,整型变量,整型数据在内存中的存放形式整型变量的分类整型变量的定义整型数据的溢出,整型数据在内存中的存放形式,在内存中以二进制形式存放inti;i=10;,10,i在内存中的表示:,示意图,在内存中的实际存放情况,实际上,数值是以补码表示的。正整数的补码和该数的原码相同。负数的补码是将该数的绝对值的二进制按位取反再加一。,-10,最左面的一位表示符号,0表示正,1表示负。,整型变量的分类,整型变量的基本类型为int。根据数值范围可定义为:基本整型、短整型、长整型对以上三类可以加修饰符:signed或者unsigned,现在有几种整型变量了?,有符号基本整型:signedint无符号基本整型:unsignedint有符号短整型:signedshortint无符号短整型:unsignedshortint有符号长整型:signedlongint无符号长整型:unsignedlongint,所占内存,由各计算机系统自己决定,一般占一个机器字。shortintlong,有符号整型第1位是符号位,无符号整型第1位是数据位,32767,65535,整数类型的有关数据,类型类型说明符长度数的范围基本型signedint2字节-3276832767短整型shortint2字节-215215-1长整型longint4字节-231231-1无符号整型unsignedint2字节065535无符号短整型unsignedshort2字节065535无符号长整型unsignedlong4字节0(232-1),整型变量的定义,C规定在程序中所有用到的变量都必须在程序中定义,即“强制类型定义”。定义一般放在一个函数的开头部分。,#includevoidmain()inta,b,c,d;unsignedu;a=12;b=-24;u=10;c=a+u;d=b+u;printf(a+u=%d,b+u=%dn,c,d);,可以看到不同种类的整型数据可以进行算术运算,运行结果:a+u=22,b+u=-14,整型变量的溢出,一个int型变量的最大允许值为32767,加1后如何?,#includevoidmain()inta,b;a=32767;b=a+1;printf(%d,%d,a,b);,运行结果:32767,-32768,进一步若a=-32768,b=a-1;,则结果为-32768,32767,其原因在于:1.以补码表示2.有符号位,整型数据的类型,一个整数,如果其值在-32768+32767范围内,认为它是int型,它可以赋值给int型和longint型变量。一个整数,如果其值超过了上述范围,而在-2147483637+2147483647范围内,则认为它是为长整型。可以将它赋值给一个longint型变量。如果所用的C版本(如TurboC)分配给shortint与int型数据在内存中占据的长度相同,则它的表数范围与int型相同。因此一个int型的常量同时也是一个shortint型常量,可以赋给int型或shortint型变量。一个整常量后面加一个字母u或U,认为是unsignedint型,如12345u,在内存中按unsignedint规定的方式存放(存储单元中最高位不作为符号位,而用来存储数据)。如果写成-12345u,则先将-12345转换成其补码53191,然后按无符号数存储。在一个整常量后面加一个字母l或L,则认为是longint型常量。例如123l.432L.0L等。这往往用于函数调用中。如果函数的形参为longint型,则要求实参也为longint型。,2.4浮点型数据,浮点型常量的表示方法浮点型变量浮点型数据在内存中的存放形式浮点型变量的分类浮点型数据的舍入误差浮点型常量的类型,浮点型常量的表示方法,浮点数即实数,有两种表示方法:十进制小数形式。它由数字和小数点组成(注意必须有小数点)。如.123、123.、123.0、0.0等。指数形式。如123e3或123E3都代表123*103。但注意字母e或E之前必须有数字,且e后面的指数必须为整数。如e3、2.1e3.5、.e3、e等都是不合法的指数形式。,规范化的指数形式,在字母e(或E)之前的小数部分中,小数点左边应有一位(且只能有一位)非零的数字.例如:123.456可以表示为:123.456e0,12.3456e1,1.23456e2,0.123456e3,0.0123456e4,0.00123456e5其中的1.23456e2称为“规范化的指数形式”。,浮点型数据在内存中的存放形式,一个浮点型数据一般在内存中占4个字节(32位)。浮点型数据是按照指数形式存储的。系统把一个浮点型数据分成小数部分和指数部分,分别存放。指数部分采用规范化的指数形式。,例如:实数3.14159在内存中的存放形式,数符,小数部分,指数部分,浮点型变量的分类,单精度(float)双精度(double)长双精度型(longdouble),floatx,y;doublez;longdoublet;,浮点型变量的舍入误差,由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效数字以外的数字将被舍去。,#includevoidmain()floata,b;a=123456.789e5;b=a+20;printf(%f,b);,理论结果:12345678920运行结果:12345678848.000000修改:将float改为double,结果为12345678920.000000原因:一个实型变量只能保证的有效数字是7位,后面的数字是无意义的。,应该避免将一个很大的数和一个很小的数直接相加或相减,否则会丢失小的数。,浮点型常量的类型,默认double型在浮点型常量后加字母f或F,认为它是float型,例如:floatf;f=2.45678*4523.65(1)系统先把2.45678和4523.65作为双精度数,然后进行相乘的运算,得到的乘也是一个双精度数。最后取其前7位赋给浮点型变量f。(2)如果在数的后面加字母f或F(如1.65f,654.87F),这样编译系统就会把它们按单精度(32位)处理。,2.5字符型数据,字符常量字符变量字符数据在内存中的存储形式及其使用方法字符串常量,字符常量,定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如101-A012-n376-x61-a60-0,例:A-101-x41-65,如A65,a97,048,n10,如aA?n101,转义字符:反斜线后面跟一个字符或一个代码值表示,例转义字符举例main()printf(101x42Cn);printf(Isay:Howareyou?n);printf(CProgramn);printf(TurboC);,运行结果:(屏幕显示)ABCIsay:”Howareyou?”CProgramTurboC,例main()printf(“Yb=n”);,运行结果:屏幕显示:=打印机输出:,例转义字符的使用,#includevoidmain()printf(_ab_ct_derftgn);printf(htibbj_k);说明:假定制表位占8列,12345678901234567890_ab_c_def_gfab_c_gde(打印结果)f_gde(屏幕结果)h_ih_j_kh_jik(打印结果)h_j_k(屏幕结果),printf(1234567890123456n);,字符变量,定义形式:char变量名;只能存放一个字符例如charc1,c2;c1=a,c2=b;,在所有的编译系统中都规定了以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。,在内存中的存储形式及其使用方法,将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。例如a的ASCII代码为十进制数97,b的ASCII代码为十进制数98。,这样使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。,例向字符变量赋予整数,#includevoidmain()charc1,c2;c1=97;c2=98;printf(%c%cn,c1,c2);printf(%d%dn,c1,c2);,/*等价于c1=a*/*等价于c1=b*/*输出结果ab*/*输出结果9798*/,例大小写字母的转换,#includevoidmain()charc1,c2;c1=a;c2=b;c1=c1-32;c2=c2-32;printf(cc,c1,c2);,在内存中的存储形式及其使用方法,字符变量存放字符ASCII码char与int数据间可进行算术运算,a=D;/*a=68;*/x=A+5;/*x=65+5;*/s=!+G/*s=33+71;*/,没有字符串变量,用字符数组存放字符型数据和整型数据既可以用%c也可用%d字符数据占一个字节,只能存放0-255内的整数若将字符变量中的最高位作符号位,取值范围是-128127。如果使用ASCII码128255间的字符,用%d格式输出时,就会得到一个负整数。如果不想按有符号处理,可改为unsignedchar类型,这时其取值范围为0255。,字符串常量,定义:用双引号()括起来的字符序列符常量存储:每个字符串尾自动加一个0作为字符串结束标志,字符常量与字符串常量不同,例输出字符串printf(HelloWorld.n),字符串常量,0用来判断字符串是否结束。是一个ASCII码为0的字符,是“空操作字符”,它不引起任何控制动作,也不是一个可显示的字符。,从技术角度看,字符串常量就是字符数组。,基本数据类型小结,整型,字符型,实型,有,无,说明:数据类型所占字节数随机器硬件不同而不同,上表以IBMPC机为例:,2.6变量赋初值,先定义,后赋值,inta,b;a=3;,定义的同时赋值,inta=3;,被定义的一部分变量赋值,inta,b,c=5;,inta=3,charb=a;inta=b=c=3;这样书写格式正确否?为什么?,2.7各类数值型数据间的混合运算,2.8算术运算符和算术表达式,C语言运算符简介算术运算符和算术表达式,C运算符简介,C运算符简介,学习运算符应注意:,运算符功能与运算量关系要求运算量个数要求运算量类型运算符优先级别结合方向结果的类型,算术运算符和算术表达式,基本的算术运算符算术表达式和算术运算符的优先级与结合性强制类型转换运算符自增、自减运算符有关表达式中的问题说明,基本的算术运算符,求余运算符,两侧必须是整数两个整数相除的结果为整数,如5/3的值为1。如-5/3的结果可能为-2或-1。多数机器采用“向零取整”的方法,为-1,取整后向零靠拢+,-,*,/中有一个数是实数,结果为double型,+,-,*,/,%,例5/2=-5/2.0=,例5%2=-5%2=1%10=5%1=5.5%2,2-2.5,1-110(),算术表达式和运算符的优先级与结合性,算术表达式用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子。运算对象包括常量、变量、函数等。例如:a*b/c-1.5+a优先级:*/%+1算术运算符的结合方向为“自左向右”,即左结合性。赋值运算符的结合方向为“自右向左”,即右结合性。,强制类型转换符,利用强制转换符可以将一个表达式转换成所需类型。一般形式:,(类型名)(表达式),例(int)(x+y)(int)x+y(double)(3/2)(int)3.6说明:强制转换得到所需类型的中间变量,原变量类型不变,例#includevoidmain()floatx;inti;x=3.6;i=(int)x;printf(x=%f,i=%d,x,i);结果:x=3.600000,i=3,精度损失问题,自增、自减运算符:+,-,作用:使变量值加1或减1种类:前置+i,-i(先执行i+1或i-1,再使用i值)后置i+,i-(先使用i值,再执行i+1或i-1),说明:+-不能用于常量和表达式,如5+,(a+b)+-结合方向:自右向左优先级:-+-*/%+-,-i+;i=3;printf(%d,-i+),/-(i+)/-3,用于循环语句,使循环变量自动加1。用于指针变量,使指针指向下一个地址。,自增、自减运算符:+,-,j=3;k=+j;j=3;k=j+;j=3;printf(%d,+j);j=3;printf(%d,j+);a=3;b=5;c=(+a)*b;a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,j+k;(j+)+k?j+(+k)?,有关表达式中的问题说明,ANSIC没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自行安排。例:af1()+f2();(i+)+(i+)+(i+);应该尽量避免出现这种歧义性。C编译系统在处理运算顺序时,尽可能多地(自左向右)将若干字符组成一个运算符。例:i+j形如:i=3;printf(%d,%d,i,i+);最好改写成:i=3;j=i+;printf(%d,%d,i,j);,2.9赋值预算符和赋值表达式,赋值运算符,类型转换复合的赋值运算符赋值表达式,符号:=格式:变量标识符=表达式作用:将一个数据(常量或表达式)赋给一个变量举例:a=3;d=func()c=d+2,类型转换,如果赋值运算符两侧的类型不一致,但都是数值型或字符型,在赋值时要进行类型转换。原则:按存储单元中的存储形式直接传送。,1.float、double赋给int型变量时,舍弃实数的小数部分。,如i=3.56,则i为3。,如:23赋给float变量f,则f为23.00000,2.int型赋给float、double型变量,数值不变,以浮点数形式存储。,3.double型赋给float型变量时,截取其前面7位有效数字。但应注意数值不能溢出。,floatf;doubled=123.456789e100;f=d;溢出错误,将一个float型数据赋给double型变量时,数值不变,有效位扩大。,类型转换,4.char型赋给int型变量时,将字符数据(8位)放到整型变量低8位中,有两种情况:,(1)所用系统将字符处理为无符号的,则高8位补零。(2)所用系统将字符处理为有符号的,若字符最高位为0,则高8位补零;若为1,高8位补1。这称为符号扩展,,类型转换,5.int、short、long型赋给char型变量时,截取低8位。,inti=289;charc=a;c=i;c的值为33,类型转换,inta;longb=8;a=b;/*a为8*/,6.signedint型赋给long型变量时,将int的16位赋给long的低16位,同时要进行符号扩展。如果赋值数据为正值,则long型变量的高16位补0;否则高16位补1。反之,long型赋给int型变量,截取低16位。,7.unsignedint型赋给longint型变量时,将int的16位赋给long的低16位,将高16位补0。,unsignedinta=65535;intb;b=a;/*b为-1*/,inta;longb=65536;a=b;/*a为0*/,类型转换,8.非unsigned型数据赋给长度相同的unsigned型变量时,原样照赋。,#includevoidmain()unsigneda;intb=-1;a=b;printf(%u,a);/*65535*/,复合的赋值运算符,种类:+=,-=,*=,/=,%=,含义:exp1op=exp2exp1=exp1opexp2,a+=3x*=y+8x%=3,a=a+3x=x*(y+8)x=x%3,简化程序提高编译效率,赋值表达式,由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。求解过程:将赋值运算符右侧的“表达式”的值赋给左侧的变量。,a=(b=5),可以写成a=b=5,a=b=c=5,赋值表达式值为5,a、b、c均等于5,a=5+(c=6),表达式值为11,a等于11,c等于6,a=(b=4)+(c=6),表达式值为10,a等于10,b等于4,c等于6,a=(b=10)/(c=2),表达式值为5,a等于5,b等于10,c等于2,a+=a-=a*a,a的初值为12,1)先求a-=a*a,相当于a=a-a*a,为-132,2)求a+=-132,相当于a=a+(-132),结果为-264,printf(%d,a=b);,b的初值为3,则输出a的值3,2.10逗号运算符和逗号表达式,C语言提供一种特殊的运算符逗号运算符。用它来将多个表达式连接起来,又称顺序求值运算符。一般形式:表达式1,表达式2,表达式n求解过程:从左至右,依次求解各个表达式,其值为表达式n的值。,3+5,6+8a=3*5,a*4(a=3*5,a*4),a+5x=(a=3,6*3)x=a=3,6*aprintf(“%d,%d,%d”,a,b,c)printf(“%d,%d,%d”,(a,b,c),b,c),值=14值=60,a=15值=20,a=15值=18,x=18值=18,x=3逗号是用来分割函数的参数的。(a,b,c)是逗号表达式,值为c,本章小结,常量在程序执行过程中不能改变其值。变量必须先定义,后使用。标识符只能由字母、数字和下划线三种字符组成,并且第一个字符必须为字符或下划线。逗号表达式的求解过程是从左至右,依次求解各个表达式,其值为最后一个表达式的值。强制类型转转运算符:(类型名)(表达式).,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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