chap03 数据类型与表达式

上传人:sx****84 文档编号:242967877 上传时间:2024-09-13 格式:PPT 页数:79 大小:1.24MB
返回 下载 相关 举报
chap03 数据类型与表达式_第1页
第1页 / 共79页
chap03 数据类型与表达式_第2页
第2页 / 共79页
chap03 数据类型与表达式_第3页
第3页 / 共79页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,本作品采用,知识共享署名,-,非商业性使用,2.5,中国大陆许可协议,进行许可。,专业交流,模板超市,设计服务,NordriDesign,中国专业,PowerPoint,媒体设计与开发,本作品的提供是以适用知识共享组织的公共许可( 简称“,CCPL”,或 “许可”) 条款为前提的。本作品受著作权法以及其他相关法律的保护。对本作品的使用不得超越本许可授权的范围。,如您行使本许可授予的使用本作品的权利,就表明您接受并同意遵守本许可的条款。在您接受这些条款和规定的前提下,许可人授予您本许可所包括的权利。,查看全部,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,C,语言程序设计,Chap,3,数据类型和表达式,Chap,3,数据类型和表达式,3.1,数据的存储和基本数据类型,3.2,常量和变量,3.3,数据的输入和输出,3.4,类型转换,3.5,表达式,2,本章要点,C,语言的基本数据类型有哪些?,各种基本数据类型的常量和变量是怎样定义的?,C,语言有哪些表达式?,各种表达式的求解规则是什么?,3,数据类型和表达式,数据类型,基本数据类型,整型,int,实型(浮点型),float double,字符型,char,构造数据类型,数组、结构、联合、枚举,指针类型,空类型,运算:对数据的操作,运算符数据,表达式,4,3.1,数,据的存储和基本数据类型,3.1.1,数据的存储,整型、实型、字符型数据的存储,3.1.2,基本数据类型,整型、实型、字符型,5,3.1.1,数据的存储整型数据,设整数在内存中用2个字节存储,1,000 0001 1000 0001,0,000 0001 1000 0001,符号位,1,:负数,0,:正数,6,数值的表示方法原码 反码 补码,正数,的原码、反码和补码相同,1,的补码,0,000 0000 0000 0001,32767,的补码,0,111 1111 1111 1111,(,2,15,-1,2,个字节的存储单元能表示的最大正数),负数,的原码、反码和补码不同,-1,原码,1,000 0000 0000 0001,反码,1,111 1111 1111 1110 原码取反,补码,1,111 1111 1111 111,1,反码1,7,原码 反码 补码,32767,补码,0,111 1111 1111 1111,-32767,原码,1,111 1111 1111 1111,反码,1,000 0000 0000 0000 原码取反,补码,1,000 0000 0000 000,1,反码1,-32768,= -32767-1,补码,1,000 0000 0000 0000,(2个字节的存储单元能表示的最小负数),8,-32768 -1 0 1 32767,32767,0111 1111 1111 1111,1,0000 0000 0000 0001,0,0000 0000 0000 0000,-1,1111 1111 1111 1111,-2,1111 1111 1111 1110,-32767,1000 0000 0000 0001,-32768,1000 0000 0000 0000,32767,+ 1,=,32768 ?,1000 0000 0000 000 =,-32768,-32768,- 1,=,-32769 ?,0111 1111 1111 1111 =,32767,9,实型和字符型数据的存储,实型数据的存储,-,1.2345,e,+,02,符号位,阶码,尾数,字符型数据的存储,一个字节存储,ASCII,码,10,3.1.2,基本,数据类型,整型,有符号整型 无符号整型 数据长度,int,unsigned,int 16,或32位,short,int,unsigned short,int 16,位,long,int,unsigned long,int 32,位,字符型,char,8,位,实型(浮点型),单精度浮点型,float,32,位,双精度浮点型,double,64,位,11,基本,数据类型,整型,扩展的整数类型:,short long unsigned,int,有符号整型 无符号整型 数据长度,int,unsigned,int 16,或32位,short,int,unsigned short,int 16,位,long,int,unsigned long,int 32,位,有符号,short,1,000 0000 0000 0000,-32768,-2,15,0,111 1111 1111 1111,32767,2,15,-1,无符号,unsigned short,0000 0000 0000 0000,0,1111 1111 1111 1111,65535,2,16,-1,12,整数类型的取值范围,int,32,位,-2147483648 2147483647,-2,31, 2,31,-1,short int,16,位,-32768 32767,-2,15, 2,15,-1,long int,32,位,-2147483648 2147483647,-2,31, 2,31,-1,unsigned int,32,位,0 4294967295,0, 2,32,-1,unsigned short int,16,位,0 65535,0, 2,16,-1,unsigned long int,32,位,0 4294967295,0, 2,32,-1,13,基本,数据类型,字符型,字符具有数值特征,A 65 0100 0001,整型变量和字符变量的定义和赋值可以互换,【,ASCII,码,范围】,char,c;,c = A;,或,c = 65;,int,i;,i = 65;,或,i = A;,14,基本,数据类型,实型,实型(浮点型)数据,单精度浮点型,float,双精度浮点型,double,存储,数据精度 取值范围,(有效数字),float,4,字节,七,/,八,位,(,10,-38,10,38,),double,8,字节,十六,位,(,10,-308, 10,308,),15,数据精度和取值范围,数据精度,与,取值范围,是两个不同的概念:,float x = 1234567.89;,虽在取值范围内,但无法精确表达。,float y = 1.2e55;,y,的精度要求不高,但超出取值范围。,并不是所有的实数都能在计算机中精确表示,实型常量的类型都是,double,1234567.80,16,3.2.1,常量,符号常量,整型常量、实型常量、字符型常量,3.2.2,变量,变量的定义和使用,3.2,常量和变量,17,3.2.1,常量,常量的类型通常由书写格式决定,123 (整型),4.56 (实型),A (,字符型,),符号常量,:用一个标识符代表一个常量,:,PI,:EPS,18,例,3-,1 求球的表面积和体积,#,include ,# define,PI,3.14,int,main(,v,oid,),double,r,s, v,;,printf(“Enter r: ,);,scanf(,%,l,f,s = 4.0,*,P,I,*,r,* r,;,v,=,4.0 / 3.0 *,P,I,*,r,*,r,* r,;,printf(s=%f, v=%fn, s, v);,return 0;,加分号?,通常用大写字母,19,符号常量的优点,#,include ,int,main(,v,oid,),double,r,s, v,;,scanf(,%,l,f,s = 4.0,*r,*,r,*,3.14,;,v,=,4.0/3.0,*r*r,*,r,*,3.14,;,.,return 0;,#,include ,# define,PI,3.14,int,main(,v,oid,),double,r,s, v,;,scanf(,%,l,f,s = 4.0,*,P,I,*r,*r,;,v,=,4.0/3.0*,P,I,*r*r,*r,;,.,return 0;,3.14159,3.14159,3.14159,20,整型常量(整数),整数的表示,三种表现形式:,十进制整数,:正、负号,09,首位不是0,例: 10,123,八进制整数,:正、负号,07,首位是0,例: 010,0123,16,进制整数,:正、负号,09,,a-f,,,A-F,,前缀是0,x,,,0X,例:0,x10,0x123,21,整数的表示,123 = 01111011 (,B),二进制,=173 (O),八进制,=7B (X),十六进制,123,0173 0x7b,16 020 0,x10,10 012 0XA,10 010 0x10,不能超出整型数据的取值范围,比长整型数还要大的数只能用实数来表示,22,整数的类型,判断整数的类型,整数后的字母后缀,123,L,long,123,U,unsigned,123,LU,unsigned,long,整数的值,23,实型常量(实数、浮点数),实数的表示,浮点表示法,0.123 123.4 12. .12,科学计数法,6.026E-27 1.2e+30 1E-5,实数的类型,实数常量都是,double,类型,24,字符型常量,字符常量,a A 9 + $,A,SCII,字符集,列出所有可用的字符(,256,个),每个字符:惟一的次序值( A,SCII,码),0-9 升序排列,A-Z,a-z,25,字符的数值特征,字符A,SCII,码,对字符进行运算 对字符的A,SCII,码进行运算,例如:,A,的,ASCII,码 65,则:,A+1=66,,对应字符 ,B,区分数字字符和数字,1,1,26,转义字符,反斜杠后跟一个字符或数字,字符常量,代表,一个,字符,n,101,x41,A,所有字符都可以用转义字符表示,27,3.2.2 变量,在程序运行过程中,其值可以被改变的量。,变量必须先定义,后使用,定义变量时要指定变量名和数据类型,变量应该先赋值,后引用,28,变量的定义,变量名:合法的标识符,小写字母;见名知义,变量的类型:在定义时指定,变量定义的一般形式,类型名 变量名表;,int,celsius, fahr;,float,x;,double,area, length;,变量名,代表内存中的一个存储单元,存放该变量的值,该存储单元的大小由变量的,数据类型,决定,29,变量的使用,必须先,定义,,后,使用,应该先赋值,后引用,变量的赋值方法,变量赋初值:在定义变量时对它赋值,int a = 5, b = 3;,赋值表达式,int a, b;,a = 5;,b = 3;,输入,int a, b;,scanf(%d%d, ,30,3.3.1,整型数据的输入和输出,3.3.2,实型,数据的输入和输出,3.3.3,字符型,数据的输入和输出,3.3,数,据的输入和输出,31,3.3.1,整型数据的输入输出,printf,(,格式控制, 输出参数1, . , 输出参数,n);,scanf,(,格式控制, 输入参数1, . , 输入参数,n);,格式控制说明,%,十进制 八进制 十六进制,int,%,d,%,o,%,x,long,%,l,d,%,lo,%,lx,unsigned,%,u,%,o,%,x,unsigned long,%,lu,%,lo,%,lx,32,例,3-2(1),输出整型数据,#,include ,int main(void),printf(%d, %o, %xn, 10, 10, 10);,printf(%d, %d, %dn, 10, 010, 0x10);,printf(%d, %xn, 012, 012);,return 0;,001010,10, 12,a,10, 8, 16,10, a,33,例,3-2(2),输入整型数据,#,include ,int main(void),int a, b;,printf(input a, b:);,scanf(%,o,%d, ,printf(%d%5dn, a, b);,printf(%x, %dn, a, b);,return 0;,input a, b:,17 17,15 17,f,17,%,x%d,34,3.3.2,实型数据的输入和输出,输入,scanf(),float:,%,f,或%,e,以小数或指数形式输入一个单精度浮点数,double:,%,l,f,或%,l,e,以小数或指数形式输入一个,双精度,浮点数,输出,printf(),float,和,double,使用相同的格式控制说明,%,f,以小数形式输出浮点数,保留6位小数,%,e,以指数形式输出,35,实型数据输出示例,# include ,int main(void),double d = 3.1415926;,printf(%f, %en, d, d);,printf(%5.3f, %5.2f, %.2fn, d, d, d);,return 0;,3.141593, 3.14159e+00,3.142, 3.14, 3.14,一共5位,小数3位,小数点一位,36,实型数据输入输出示例,假定,float,的精度为7位,,double,的精度为16位,# include ,int main(void),float f;,double d;,printf(input f, d:);,scanf(%f%,l,f, ,printf(f = %fn d = %f n, f, d);,d = 1234567890123.12;,printf(d = %f n, d);,return 0;,input f, d:,1234567890123.123456 1234567890123.123456,f = 1234567954432.000000,d = 1234567890123.123540,d = 1234567890123.120120,37,3.3.3 字符型数据输入输出,scanf(),和,printf(),%c,char ch;,scanf(%c, ,printf(%c, ch);,getchar(),和,putchar(),char ch;,ch = getchar( );,putchar(ch);,输入输出一个字符,38,例,3-3(1),输入输出字符示例,# include ,int main(void),char ch1, ch2;,ch1=getchar();,ch2=getchar();,putchar(ch1);,putchar(#);,putchar(ch2);,return 0;,Ab,A#b,39,例,3-3(2),输入输出字符示例,# include ,int main(void),char ch1, ch2, ch3;,scanf(%c%c%c, ,printf(%c%c%c%c%c, ch1, #, ch2, #, ch3);,return 0;,AbC,A#b#C,A bC,A# #b,40,例,3-4,输出字符型数据,b,的,ASCII,码98,# include ,int main(void),char ch = b;,printf(%c, %dn, b, b);,printf(%c, %dn, 98, 98);,printf(%c, %dn, 97, b-1);,printf(%c, %dn, ch - a + A,ch - a + A,);,return 0;,0110 0010,b,98,b,98,b, 98,b, 98,a, 97,B, 66,41,字符运算,大小写英文字母转换,b - a = B - A,z - a = Z - A,m,M,a-A,A-a,0,m - a + A = M,M - A + a = m,8 - 0 = 8,8 + 0 = 8,数字字符和数字,转换,9 - 0 = 9 - 0,9 = 9 + 0,8, 8,42,练习,3-1,输入一个十进制数,输出相应的八进制数和十六进制数。例如,输入,31,,输出,37,和,1F,。,练习,3-2,在例,3-2,源程序,2,中,如果程序中的“,scanf(“%o%d”,”,改为”,scanf(“%x%d”,”,输入不变,输出是多少?,练习,3-3,如果变量,ch,的值是大写字母,怎样的运算可以把它转换为小写字母?,作业,43,不同类型数据的混合运算,先转换为同一,类型,再运算。,3.4.1,自动类型转换,非赋值运算的类型转换,赋值运算的类型转换,3.4.2,强制类型转换,3.4,类型转换,44,3.4.1 自动类型转换(非赋值运算),水平方向:自动,垂直方向:低, 高,高,double,float,unsigned long,long,unsigned,unsigned short,低,int,char, short,45,自动类型转换(非赋值运算),A + 12 10.05,65,77,66.95,高,double,float,unsigned long,long,unsigned,unsigned short,低,int,char, short,46,自动类型转换(赋值运算),变量,=,表达式,计算赋值运算符右侧,表达式,的值,将赋值运算符右侧,表达式,的值赋给左侧的,变量,将赋值运算符右侧表达式的类型,自动转换成,赋值号左侧变量的类型,47,自动类型转换(赋值运算),double x;,x = 1;,x = ?,short a = 1000;,char b = A;,long c;,c = a + b;,c = ?,int ai;,ai = 2.56;,ai = ?,short bi;,bi = 0x12345678L,bi = ?,48,3.4.2 强制类型转换,强制类型转换运算符,(类型名),表达式,(double)3,(int)3.8,(double)(5/2),(double)5/2,3.0,3,2.0,2.5,49,强制类型转换示例,# include ,int main(void),int i;,double x;,x = 3.8;,i = (int) x;,printf(x = %f, i = %d n, x, i);,printf(double)(int)x=%fn, (double)(int)x);,printf( x mod 3 = %dn, (int)x % 3);,return 0;,x = 3.800000, i = 3,(double)(int)x = 3.000000,x mod 3 = 0,50,表达式:由运算符和运算对象(操作数)组成的,有意义的运算式子,它的值和类型由参,加运算的运算符和运算对象决定。,运算符:具有运算功能的符号,运算对象:常量、变量和函数等表达式,3.5,表达式,51,3.5 表达式,3.5.1,算术表达式,3.5.2,赋值表达式,3.5.3,关系表达式,3.5.4,逻辑表达式,3.5.5,条件表达式,3.5.6,逗号表达式,3.5.7,位运算,3.5.8,其他运算,3.5.9,程序解析,52,3.5.1 算术表达式算术运算符,单目,+ - + -,双目,+ - * / %,注意,/,整数除整数,得整数,1/4 = 0,10/3 = 3,%,模(求余):,针对整型数据,5%6 = 5,9%4 = 1,100%4 = 0,+,和,单目运算符,,+10,和,10,双目运算符,,x+10,和,y 10,双目运算符两侧操作数的类型要相同,否则,自动类型转换后,再运算。,53,自增运算符+和自减运算符-,int n;,n+ +n n- -n,(只适合变量运算),使变量的值增1或减1,+,n,n+,n = n + 1,-,n,n-,n = n - 1,取变量的值作为表达式的值,+,n,:n = n + 1;,取,n,值作为表达式 +,n,的值,n+,:,取,n,值作为表达式,n,+ 的值;,n = n + 1,54,自增运算和自减运算,int n, m;,n=2;,m=+n;,n=2;,m=n+;,n=3,n=3,m=3,m=2,m=n,m=n+1,n=n+1,m=n,55,算术运算符的优先级和结合性,单目,+ - + -,双目,* / %,双目,+ -,高,低,从右向左,-5 + 3%2 = (-5) + (3%2) = -4,3 * 5 % 3 = (3*5) % 3 = 0,-i+,-(i+),56,写出,C,表达式,数学式,C,算术表达式,s(s-a)(s-b)(s-c),(,x+2)e,2x,57,3.5.2,赋值,表达式,赋值运算符,=,x = 3*4,优先级较低,结合性从右向左,x = y = 3,x = (y = 3),58,赋值,表达式,变量,=,表达式,计算赋值运算符右侧,表达式,的值,将赋值运算符右侧,表达式,的值赋给左侧的,变量,将赋值运算符左侧的,变量,的值作为表达式的值,右侧表达式的类型自动转换成左侧变量的类型,int n;,double x, y;,n = 3.14 * 2;,x = 10 / 4;,x = (y = 3);,59,复合赋值运算符,赋值运算符,简单赋值运算符,=,复合赋值运算符,复合算术赋值运算符,+= -= *= /= %=,复合位赋值运算符,赋值表达式,变量,赋值运算符,表达式,x,+=,exp,等价于,x,=,x,+,exp,x,*=,y - 3,x,=,x,*,(,y-3,),60,3.5.3 关系表达式关系运算符,比较两个操作数,比较的结果:,真 假,x,y x,y x,=,y x,!=,y,优先级,算术运算符, =,= !=,赋值运算符,左结合,a b = c,d = a b,ch a + 1,d = a + b c,3 = x b)= c,d = (a b),ch (a + 1),d = (a + b) c),(3 = x) b = c,d = a b,ch a + 1,d = a + b c,b - 1 = a != c,3 = x = 3,&,x = a,&,ch = A,&,ch = 3,&,x = 3 & x = 3) & (x 0) ? x+2 : x*x;,int n;,(n0) ? 2.9 : 1,n = 10,n = -10,2.9,1.0,if ( x0 ),y=x+2;,else,y=x*x;,x+2 x0,y =,x,2,xb) ? a : b;,if ( ab ),z = a;,else,z = b;,68,3.5.6,逗号,表达式,表达式1,表达式2,表达式,n,先计算表达式,然后计算表达式,,最后计算,表达式,n,的值,并将表达式,n,的值作为逗号表达式的,值.,int a, b, c;,(a=2), (b=3), (c=a+b);,逗号运算符的优先级最低,左结合,a=2, b=3, c=a+b,69,sum = 0;,for(i = 0; i = 100; i+),sum = sum + i;,逗号,表达式的用途,for(,i = 0, sum = 0,; i = 100; i+),sum = sum + i;,for(,i = 0, sum = 0,; i = 100; i+),sum,+=,i;,70,3.5.7,位运算,位逻辑运算,按位取反,单目 右结合,&,按位与,按位异或:相同取0,不同取1,|,按位或,移位运算,对操作数右移给出的位数,复合位赋值运算,71,位逻辑运算,x=0 00000000 00000000,y=3 00000000 00000011,x,&,y 00000000 00000000,x,|,y 00000000 00000011,x,y 00000000 00000011,1010,0101 =1111,注意区分:,&,和,|,&,和,|,按位取反,&,按位与,按位异或:相同取0,不同取1,|,按位或,x & y,得 0,x | y,得 1,72,位移位运算, 对操作数右移给出的位数,x3,将,x,向,左移3位,空出的位用零填补,00111010 3,将,x,向右移3位,00111010 3,00000111,73,复合位赋值运算符,&=,|=,=,=,=,a &= b,相当于,a = a & b,a = 2,相当于,a = a =,= !=,&,|,? :,= += -= *= /= %=,76,3.5.9,程序解析大小写字母转换,#,include ,int main(void),char ch;,printf(input characters: );,ch = getchar();,while(ch != n),if(ch = A & ch = a & ch = z ),ch = ch - a + A;,putchar(ch);,ch = getchar(),;,rerurn 0;,input 10 characters:,Reold 123?,rEOLD 123?,while(ch = getchar() != n),(,ch = getchar(),),!= n,ch = getchar() != n,等价吗?,77,练习,3-4,证明下列等价关系:,a&(b|c),等价于,a&b|a&c,。,a|(b&c),等价于,(a|b)&(a|c),。,!(,a&b,)等价于,!a|!b,。,!(,a|b,)等价于!,a&!b,。,78,作业,输入一行字符,统计出其中的英文字母,空格,数字和其他,字符的个数。,输入一行字符,统计其中单词的个数。各单词之间用空格分,隔,空格数可以是多个。,程序模拟简单运算器的工作:输入一个算式(没有空格),,遇等号,=,说明输入结束,输出结果。假如计算器只能进,行加,减,乘,除运算,运算数和结果都是整数,,4,种运算,符的优先级相同,按从左到右的顺序计算。例如,输入,“,1+2*10-10/2=”,后,输出,10.,验证哥德巴赫猜想:任何一个大于,6,的偶数均可表示为两个,素数之和。例如,6=3+3,,,8=3+5,,,.,,,18=7+11,。将,6100,之间的偶数都表示成两个素树之和,打印时一行打印,5,组。,79,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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