收藏 分销(赏)

C--程序设计-谭浩强-第二章.ppt

上传人:仙人****88 文档编号:14758019 上传时间:2026-11-14 格式:PPT 页数:62 大小:2.31MB 下载积分:10 金币
下载 相关
C--程序设计-谭浩强-第二章.ppt_第1页
第1页 / 共62页
C--程序设计-谭浩强-第二章.ppt_第2页
第2页 / 共62页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第2章 数据类型与表达式,2.1 C+,的数据类型,2.2 常量与变量,2.3 基本数据类型,2.4 运算符与表达式,为什么要分数据类型?,不同的数据类型存储格式不同;,不同的类型所实施的操作不同,如数字可加减,字符串一般进行提取、连接等操作。,2.1,C+,的数据类型,数据类型基本类型整型短整型(,short int),整型(,int),长整型(,long int),字符型(,char),浮点型单精度型(,float),双精度型(,double),长双精度型(,long double),布尔型(,bool),构造类型枚举类型(,enum),数组类型,结构体类型(,struct),共用体类型(,union),类类型(,class),指针类型,引用类型,空类型(,void),C+,可以使用的数据类型如下:,CPU,中央处理单元,控制器,运算器,内存储器,输出设备,输入设备,计算机基本结构示意图,数据流,主机,外存储器,data,5,2000H,2001H,2002H,2003H,2004H,3,3+5=?,5,运算器,(2000H)+(2002H),用一个字节表示整数,范围为,-128127,;用两个字节表示整数,范围为,-32768 32767,。一般用四个字节表示整数。,(,举例,),内存,8,6,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0,有符号数,无符号数,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,32767,32767,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,32766,32766,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,(,补码,),65535,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-2,65534,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,-32767,32769,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-32768,32768,7,2.,2,常量与变量,常量:,在程序运行过程中,其值一直保持不变的量为常量。,常量也区分不同的类型:,30,,,40,为整型,,30.0,,,40.0,为实型,,编辑器只是根据其表面形式来判断其类型。,8,2.,2,常量与变量,变量:,在程序运行过程中,其值可以改变的量为变量。,变量在程序的执行中能够赋值,发生变化,。变量有一个名字,,并在使用之前要说明其类型,,一经说明,,就在内存中占据与其类型相应的存储单元。,2000H,2001H,2002H,2003H,2004H,3,C=A+B,5,运算器,(2000H)+(2002H),内存,8,A,B,7,12,19,C,#include,const int PRICE=30;,/,符号常量,在程序中保持不变,void main(),int num,total;,/,定义变量,在内存中开辟区间,num=10;,/,变量赋值,10,为常量,total=num*PRICE;,cout“total=“total;,/,输出结果,其中:,num=10 total=num*PRICE,是赋值号,不同于数学意义上的等号。,num,total,10,300,PRICE,30,10,C+,中有多种数据类型,均有常量与变量之分,各占不同的内存空间,正确定义与使用数据是编写程序的基本前提。,11,变量名、数组名、函数名,称为,标识符,。,标识符只能由,字母、数字、下划线,这三种字符组成,且第一个字符必须为字母或下划线,长度不大于,247,个字符,,大小写不通用,。(关键字不能作为标识符)。,关键字即是,VC+,的语法要求中使用的字,。,如,int if while,等。,正确的标识符:,INT,sum,de12,SUM,等。,变量必须使用前定义,以分配空间。,变量名的命名方法,12,abc,English 2xy x-y if Else b(3)def Chine,_bb b3y AbsFloat float,一般变量都是用匈牙利命名法命名的。,int nCount;,char chChoice;,*,良好的编程风格:,一行一般只写一条语句;,使用缩进编排;,尽可能多地使用注释;,变量名应具有明确的含义。,#include,void 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;,2.3,基本,数据类型,整型常量,short,unsigned short,2,字节,int,、,unsigned int,4,字节,long,unsigned long,4,字节,整型变量,整型变量声明,整型数据,14,整型数据,整型常量:,常量是根据其表面形式来判定,整型量即是没有小数点的整数,范围:,-2,31,(,2,31,-1,),有三种形式,:,1,)十进制(默认方式),43 1345 87654,2,)八进制 以,0,开头,043,,,056,,,011,3,)十六进制 以,0 x,开头,0 x12 0 xa3 0 x34 0 xdf,(举例说明),整型数据及取值范围,类型说明符 位数数值范围,短整,short,16-32768,32767,基本,int,32 -2,31,(2,31,-1),长整,long,32-2,31,(2,31,-1),无符号,unsigned short,160,65535,unsigned int,320,(2,32,-1),unsigned long,320,(2,32,-1),16,#include,void main(),int int10,int8,int16;,/,定义,3,个整型变量,int10=10;,/,默认为十进制,int8=010;,/,八进制,int16=0 x10;,/,十六进制,coutint10=int10endl;,coutint8=int8endl;,coutint16=int16endl;,输出,int10=10,int8=8,int16=16,17,#include,void main(),unsigned short a;,short int b=-1;,a=b;,couta=aendl;,结果:,65535,不同类型的整型数据间的赋值归根到底就是一条:,按存储单元中的存储形式直接传送。,a,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,b,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,unsigned short a;,#include,void main(),const int PRICE=30;,int num,total;,float v,r,h;,num=10;,total=num*PRICE;,couttotalendl;,r=2.5;,h=0.32e+2;,v=3.14159*r*r*h;,coutvendl;,实型常量,float,4,字节,3.4,10,38,7,位有效数字,double,8,字节,1.7,10,308,15,位有效数字,long double,8,字节,1.7,10,308,15,位有效数字,实型变量,缺省为,double,型,后缀,F,(或,f,)为,float,型,后缀,L,(或,l,)为,long double,型,实型,(,浮点型,),数据,19,如果为实数,则用浮点数的形式在内存存储,表示如下:,J,t,J,S,f,S,阶符,阶码,数符,尾数,实数是既有整数又有小数的数。,实数可以表示成:,N=,S,R,J,S,称为尾数,尾数决定有效数字,即数字的精度。,J,表示指数(阶码)。,R,是基数,可取,2,,,4,,,8,,,16,等,对具体机器而言,基数取好后,就不能再变了。,数有正有负,所以设置数符,;,阶码亦有正负,所以设置阶符,例如,一个浮点数,-0.1010110102,-00010,16,位机器表示这浮点数:,阶码的正负实际上指出了数的小数点的实际位置。,尾数的正负表示整个数的正负。,不同的机器,阶码和尾数各占多少位都有具体的规定。,溢出:,超出机器所能表示的数的范围,21,#include,void main(void),float a,b;,double c,d;,a=0.01;,b=3.45678e-2;,c=3.45678e-2;,d=9.7654e-5;,couta=atb=bendl;,coutc=ctd=dendl;,a=0.01 b=0.0345678,c=0.0345678 d=9.7654e-005,Press any key to continue,字符常量,单引号括起来的一个字符,如:,a,D,?,$,字符变量,用来存放字符常量例:,char c1,c2;c1=a;c2=A;,字符数据在内存中的存储形式,以,ASCII,码存储,占,1,字节,用,7,个二进制位,C+,定义的转义序列,:P24,页,例如,:cout“aHello”;,Page,22,字符型数据,表,2.2 C+,预定义的转义序列,字符形式,ASCII,码,(,十六进制,),功,能,n,0A,换行,t,09,横向跳格,(,即跳到下一个输出区,),v,0B,竖向跳格,b,08,退格,r,0D,回车,a,07,响铃,5C,反斜杠字符“,”,27,单引号,22,双引号,ddd,ddd(,八进制,),1,到,3,位八进制数所代表的字符,xhh,hh,1,到,2,位十六进制数所代表的字符,字符数据的使用方法,字符数据和整型数据之间可以运算。,字符数据与整型数据可以互相赋值。,字符串常量,:,每个字符占一个字节,末尾以,0,作结尾标志。,例,:CHINA a a,所以:,char c;c=a;,C H I N A 0,a,0,a,Page,24,占,2,个字节的存储空间,占,1,个字节的存储空间,25,#include,void main(void),char c1,c2,c3,c4;,char n1,n2;,c1=a;,/,字符常量,c2=97;,/,十进制,c3=x61;,/,转义字符,c4=0141;,/,八进制,coutc1=c1tc2=c2endl;,coutc3=c3tc4=c4endl;,n1=n;,/,转义字符:回车,n2=t;,/,转义字符:下一个输出区,(Tab),cout,使用转义字符,n;,coutc1=c1n2c2=c2n1;,coutc3=c3n2c4=c4n1;,输出:,c1=a c2=a,c3=a c4=a,使用转义字符,c1=a c2=a,c3=a c4=a,布尔型变量的说明:例:,bool flag;,布尔型数据的取值:只有,false,和,true,两个值,布尔型数据,基本数据类型小结,基本数据类型,整型,实型,字符型,整型,长整型,短整型,布尔型,单精度型,双精度型,长双精度型,符号常量,符号常量在使用之前一定要先声明,且在声明时赋初值。,语法:,const,数据类型说明符 常量名,=,常量值,;,或,数据类型说明符,const,常量名,=,常量值,;,例:,const float PI=3.14159;,变量的声明,声明语法格式,:,类型标识符变量名,1,,变量名,2,,变量名,3,变量名,n;,C+,允许在声明变量的同时给它赋以初值,例如:,int a,b=5,c(8);,char x=h;,double f=3.56;,基本算术运算符,+-*/%,(取余),(,若整数相除,结果取商的整数部分,小数部 分自动舍去,),优先级与结合性,先乘除,后加减,同级自左至右,Page,30,需要,2,个操作数的运算符称为双目运算符,2.,4 C+,的运算符与表达式,基本算术运算符,分析并运行以下程序:,#include,Void main(),int a=20,b=6,m,n;,float x;,m=a/b;,n=a%b;,cout“m=”m“n=”nendl;,x=float(a)/float(b);,cout“x=”xendl;,Page,31,运行结果:,m=3 n=2,x=3.33333,功能:将操作数的值加,1,(减,1,)后再写回该操作数原来的位置。,i+,等价于,i=i+1-j,等价于,j=j-1,“+”,或“,-”,作前缀时,先对操作数进行自增自减操作,然后再参加表达式的运算;,+”,或“,-”,作后缀时,先引用该操作数参加表达式的运算,然后再进行自增自减操作;,Page,32,只需要,1,个操作数的运算符称为单目运算符,+,-,(自增、自减),例:,i=1;,Cout+i;,输出结果为,2,,,i,的值也为,2,。,例:,i=1;,Couti+;,输出结果为,1,,而,i,的值为,2,。,例:,n=5;,m=n+;,Coutm;,输出结果为,5,例:,n=5;,m=+n;,Coutm;,输出结果为,6,简单的赋值运算符,=,举例:,n=n+5,类型:赋值号左边对象的类型,值:赋值号左边对象被赋值后的值,结合性:自右向左,Page,34,35,W=2002,=,左边,必须是变量名。,若“,=”,两边变量类型不同,在赋值时要进行,类型转换,。,转换原则:根据左边变量的类型转换。,36,赋值表达式,a=b=5,;,b=5 a=5,=,的结合性为,自右至左,复合的赋值运算符,+=,-=,*=,/=,%=,i+=j-,i=i+(j-),例,:,a+=3,a=a+3,x+=y x=x+y,x*=y+3,x=x*(y+3),x/=x-4,x=x/(x-4),37,a=12;,a+,=,a-=a*a;,12,a,a=a-(a*a)=12-(12*12)=-132,a=a+(-132)=-132-132=-264,-132,-264,算术运算符功能的理解与使用举例:,#include,void main(),int i=100,j,k;,char c1=E,c2;,double x=2.23,y=4.567,z;,cout“A+12=“A+12endl;,cout“a-A=”a-Aendl;,cout“2*A+B/5=”2*A+B/5endl;,cout“11/3=”11/3endl;,cout“11/3.0”11/3.0endl;,j=k=-i+c1+x;,cout“i=“i“j=“j“k=“kendl;,c2=c1+;,cout“c2=“c2;,cout“c1=“c1;,y+=i*2;,cout“y=“y;,z=x*=(k=100)+1;,cout“k=“k;,cout“x=“x;,cout“z=“z;,j=5;,cout-+jendl;,j=5;,cout-j+=,=!=,优先级相同(高)优先级相同(低),关系表达式是一种最简单的逻辑表达式,其结果类型为,bool,,值只能为,1(true),或,0(false),。,例如:,ab,,,c2,ab+c,a=2,a=a,aa,b=a=2,aA,b=a+1,c-a=a,0,0,1,0,0,1,1,0,1,逻辑运算与逻辑表达式,逻辑运算符:,!,(,非,),&,(,与,),|,(,或,),优先次序:高 低,逻辑表达式 例如:,(ab)&(xy),其结果类型为,bool,,值只能为,true,或,false,。,注意“短路操作”问题,如,n=3,m=6,则表达式,n5&m+,执行后,m,的值仍为,6,。,44,A B,结果,000,010,100,111,有,0,出,0,,全,1,出,1,A,B,同时成立,&,A B,结果,000,011,101,111,有,1,出,1,,全,0,出,0,A,或,B,有一个成立,|,A,结果,0 1,1 0,有,0,出,1,,,有,1,出,0,!,45,江苏籍的男生,江苏籍的学生和所有男生,非江苏籍的学生,江苏籍,&,男生,例如:两个条件:,江苏籍,男生,江苏籍,|,男生,!江苏籍,注意:,1.,优先级:,!,&|,!,算术,关系逻辑赋值逗号,46,3.,不可写为,1x10,应为:,1x&x3&2|8=1)&(c,后置,+,后置,-,左右,2,前置,+,前置,-,sizeof,*,+,(正号),-,(负号),!,右左,3,(强制转换类型),右左,4,*,-,*,左右,5,*,/%,左右,6,+,-,左右,7,左右,8,=,左右,9,=!=,左右,10,&,左右,11,左右,12,|,左右,13,&,左右,14,|,左右,运算符优先级,15,?:,右左,16,=,*,=/=%=+=,-,=&=|=,右左,17,,,左右,括号,+,,,-,,,sizeof,*,/,%,+,-,=,=,!=,位运算,&,|,?:,赋值运算,逗号运算,低,高,运算符优先级,混合运算时数据类型的转换,隐含转换,一些二元运算符(算术运算符、关系运算符、逻辑运算符、位运算符和赋值运算符)要求两个操作数的类型一致。,在算术运算和关系运算中如果参与运算的操作数类型不一致,编译系统会自动对数据进行转换(即隐含转换),基本原则是,将低类型数据转换为高类型数据,。,char short int unsigned long unsigned long float double,低 高,混合运算时数据类型的转换,隐含转换,逻辑运算要求参与运算的操作数必须是,bool,型,如果操作数是其它类型,编译系统会自动将,非,0,数据转换为,true,,,0,转换为,false,。,赋值运算要求左值与右值的类型相同,若类型不同,编译系统会自动一律将右值转换为左值的类型。,58,各类数值型数据间的混合运算,整型、实型、字符型数据间可以混合运算。,float,double,long,unsigned,int,char,10+a+1.5-87.65*b,在进行运算时,,不同类型的数据要先转换成同一类型的数据再进行运算。,转换规则如下:,混合运算时数据类型的转换,隐含转换,分析程序:,#include,void main(void),int a(5),b(3),c;,double x,y;,c=a/b;,x=a/b;,y=5.0/3;,coutc=cendl;,coutx=xendl;,couty=yendl;,运行结果:,c=1,x=1,y=1.66667,混合运算时数据类型的转换,强制类型转换,语法形式:,类型说明符,(,表达式,),或,(,类型说明符,),表达式,强制类型转换的作用是将表达式的结果类型转换为类型说明符所指定的类型。,例如:,float c;int a,b;c=float(a)/float(b);,或,c=(float)a/(float)b;,61,下列语句中表达式中,i,j,的值各为多少,1,、,int i=0,j=0;2,、,int i=0,j=1;,i=3,(j+)+i;i+=j*=3;,3,、,int i=1,j=0;4,、,int i=1,j=1;,j=i=(i=3)*2);i+=j+=2;,i=3,j=1,i=3,j=3,i=6,j=6,i=4,j=3,本章练习题,P41,页,3、4、5、6、7、8,要求:课后思考、完成,下次课堂抽查。,
展开阅读全文

开通  VIP、SVIP  下载更划算
下载10份以上建议开通 VIP 会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        关注我们

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服