资源描述
C语言程序设计教程,26-Nov-24,*,第 2 章 C语言的基本数据类型与表达式,2.1 C语言的基本数据类型,2.2 常量和变量,2.3 运算符与表达式,2.4 数据类型转换,C语言程序设计教程,1,字符型(,char,),整型(,short,int,long,unsigned,),单精度型(,float,),实型,双精度型(,double,),枚举类型(,enum,),数组类型(, ,),构造类型 结构体类型(,struct,),共用体类型(,union,),指针类型(,*,),空类型(,void,),基本类型,数据类型,2.1 C语言的基本数据类型,一、数据类型概述,第2章 C语言的基本数据类型与表达式,2,类型名,字宽(字节),Char,1,Signed char,1,Unsigned char,1,Short int,2,Signed short int,2,Unsigned shortint,2,int,2或4,Signed int,2或4,Unsigned int,2或4,Long int,4,Signed long int,4,Unsigned long int,4,Float,4,Double,8,Long double,16,int,0000,0002,0004,0006,0008,0010,float,double,第2章 C语言的基本数据类型与表达式,3,1、,常量:,(1),十进制形式:,与数学上的整数表示相同;,例如: 12, -100, 0,(2),八进制形式:,在数码前加数字0;,例如: 012=1*8,1,+2*8,0,=10(十进制),(3),十六进制形式:,在数码前加0X(,数字,0,和字母,X,)。,例如: 0x12=1*16,1,+2*16,0,=18(十进制),*,八进制的数码范围为07; 018,*,十六进制的,数码除了数字,0,9外,还使用英文字母,a f (,或,A F)表示1015。,如:0x1e,注意!,二、整型,第2章 C语言的基本数据类型与表达式,4,2、,分类:,根据数据所占的二进制位数分为:,int、short、long;,同样存储长度的数据又分unsigned、signed;,故可组合出六种类型。缺省值为short。,如:25(short),25l(长整型),25u(无符号),25ul(无符号长),3,、,值域:,由机器中数据的存储长度决定。,如,Turbo C中,有,short(2字节,)int(2字节) long(4字节),关键字,所占位数,取值范围,short 16(2B),-3276832767,unsigned short 16(2B),065535,int 16(2B),-3276832767,unsigned 16(2B),065535,long 32(4B) -2147483648,2147483647,unsigned long 32(4B),04294967295,第2章 C语言的基本数据类型与表达式,5,1、,常量:,(1),十进制小数形式:,由数字和小数点组成;,例如: 3.4, 4., .3。,(2),指数形式:,“十进制小数”+“ e(或E)”+“十进制数整数”。,例如: 12.5e-6,表示12.5,10,-6,。,小数点不能单独出现; 0.,.0,.,e或E的两边必须有数,且其后面必须为整数;,如: 6E0.2,e5,2、,分类:,关键字 字节数 取值范围 精度(位),float 4 3.4,10,-38,3.4,10,38,7,double 8 1.7,10,-308,1.7,10,308,15,缺省值类型为double。,注意,第2章 C语言的基本数据类型与表达式,三、实型,6,1、,常量:,(1) 用单引号括起来的一个字符;如:,A,、,1、?等,。,(2) 用单引号括起来的由反斜杠(,)引导的转义字符。,字符形式 功能,n 换行,t 横向跳格,b 退格,r 回车, 反斜杠字符,单引号字符,ddd 8进制数表示的ASCII码对应的字符,xhh 16进制数表示的ASCII码对应的字符,第2章 C语言的基本数据类型与表达式,四、字符类型,7,例如:字符A的ASCII码为:,65D(十进制)=41H(十六进制)=101Q(八进制),字符A可以表示为A、x41、101。,2、,分类:,char,和,unsigned char,;,3、,值域:,每个字符型数据在内存中占,一,个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。,4、,字符串:,是用一对双引号括起来的字符序列。,如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。,注意,第2章 C语言的基本数据类型与表达式,a与“a”的区别。,8,一、常量与符号常量,常量是指在程序运行中,其数值不能被改变的量。,常量又可分为直接常量和符号常量。,第2章 C语言的基本数据类型与表达式,2.2 常量与变量,9,120 、 -100、 0;,0120、 072;,0xFFFF、 0x1e、0X28AF,0XED4 ;,120,L, 200L,;,长整型常量,3.14、 -3.1、 5.12,E-6,;,a,、,#,、,n,、,101,;,099、12f、 0xg 、48EA ;,019.5 、1e-08; 实型常量只能用十进制形式表示,2.1,E10.2,、,E-6,、6.4E+4.8、E9,;,changsha,、,+?ab,;,、,p,、,、,ab,;,第2章 C语言的基本数据类型与表达式,1、,直接常量:,是在程序中直接引用的数据。,请判断这些常量正确与否:,10,2、,符号常量,是,用标,识符来表示一个数据;,在程序不能给它赋值。,定义形式:,#,define,标识符,常量数据,例如,:,#,define P,I,3.14159,在程序预处理时,凡是出现标识符PI的地方都将用,数据3.14159来替换。,如: 2*2.3*,P,I,就,等价于 2*2.3*3.14159。,第2章 C语言的基本数据类型与表达式,二、 变量,变量是指,以标识符为名字,其值可以改变的量。,变量代表计算机内存中的某一存储空间,该存储空间,中存放,的数据就是变量的值。,在同一程序块中,,变量,不能被重复定义。,使用变量时必须“先定义,后使用”。,11,1、,定义形式:,类型标识符:,变量名,1 ,变量名2,变量名3.,;,例如:,int a,b,c ;,float x,y;,char c1,c2;,或 int c1,c2;,自己设定,满足标识符的规定。,如:int,float,char,;不可省,第2章 C语言的基本数据类型与表达式,2、,变量初始化,在说明变量的同时给变量一个初始值。,例如,int a=5, b=3;,int a=b=c=3;,int a,b,c; a=b=c=3;,变量名,a,变量地址,5,变量值,12,main( ), int x,y,z,w; /*定义x,y,z,w为整型变量*/,unsigned int k; /*定义k为无符号整型变量*/,x=10;y=-20;k=30;,z=x+k;w=y+k;,printf(“x+k=%d,y+k=%dn”,z,w);,第2章 C语言的基本数据类型与表达式,例2-1:,程序运行结果为:,x+k=40,y+k=10,13,例,完善程序(s1-3.c),程序功能:下面的程序是求整数a/b 的商和余数,请用正确的表达式填空。,main(), int a,b,c,d;,a=100;,b=30;,_,_,printf(“a=%d, b=%d, c=%d, d=%dn”, a,b,c,d); ,第2章 C语言的基本数据类型与表达式,14,按操作功能运算符大致可分为,算术运算符、关系运算符、逻辑运算符、按位运算符以及其它运算符如赋值运算符、,条件运算符、逗号运算符等。,单目、双目、三目运算符,表达式是由操作数和运算符组成的序列。,第2章 C语言的基本数据类型与表达式,2.3,运算符与表达式,算术运算符 + - * / %,关系运算符 = = = !=,逻辑运算符 ! & ,位运算符 | &,赋值运算符 =,条件运算符 ?:,逗号运算符 ,,指针运算符 * 和 &,求字节数运算符 sizeof,强制类型转换运算符,分量运算符 ,下标运算符 ,15,一、 算术运算符和算术表达式,1、,运算符,+(加):3+4、 +3 -(减):3-5、 -5 *(乘):3*5,/(除):5/2的值为2;5.0/2的值为2.5;,如果两个操作数均为int,则结果也是int,小数部分将去掉。如果两个数中有浮点型,则结果也是float。,例如:,3.0+1/2*(98%100),%(取余):5%3的值为2;-5%3的值为-2;,5%(-3)的值为2; -5%(-3)的值为-2;,两个操作数如果符号不同,结果以左操作数为准,两个操作数只能为int或char,若a能被b整除,则有:a%b=0。,整数除与求余运算存在如下关系:a%b=a-a/b*b 。,例如:25+,b,+,a,%12.3-(-8)/,c,*100,第2章 C语言的基本数据类型与表达式,16,2、,算术表达式,用算术运算符和括符将操作数连接起来的式子。,优先级:() *、/、% +、-,结合性:从左至右;,表达式的值:,数值型(int、long、unsigned、double);,例如:,已知: float a=2.0;,int b=6,c=3;,求解: a*b/c-1.5+a+fabs(-5)=,?,第2章 C语言的基本数据类型与表达式,17,double float,long,unsigned,int char,short,float a=2.0; int b =6,c =3;,a*b/c -1.5 +a +fabs(-5),12.0,/3,5,4.0,- 1.5,2.5,+ 97(int),99.5,+ 5,104.5,(double),第2章 C语言的基本数据类型与表达式,18,1、,6种关系运算符:双目:,= = !=,2、,关系表达式:,用关系运算符将表达式连接起来的式子,优先级: (= ),( = != ),结合性:自左至右;,表达式的值: 若为真,则结果为,1,;,若为假,则结果为,0,。,35 的值为 0; 32 的值为 0;,3+(43)*4的值为 3;,3+4,b ab=c,b+cbc,例如,第2章 C语言的基本数据类型与表达式,二、关系运算符和关系表达式,19,1、,3种逻辑运算符:双目:,& | 单目:!,逻辑量:可以是整型、实型、字符型和指针类型,,0假 非0真;,如:0,0.0,0,NULL,都代表,假,。,2、,逻辑表达式:,用逻辑运算符将表达式连接起来的式子,优先级: !,&,|,结合性:自左至右;,表达式的值: 若为真,则结果为,1,;,若为假,则结果为,0,。,第2章 C语言的基本数据类型与表达式,三、逻辑运算符和逻辑表达式,20,int a=5; float b=3.5;,!a (,0,) !(a b) (,1,),a & b (,1,) !a&b (,0,),!a&!b (,0,) !(a&b) (,0,),&,:只要有一个为假,结果则为假;,a,b (,1,) !a|b (,1,),!a|!b (,0,) !(a|b) (,0,),|,:只要有一个为真,结果则为真;,(a 0) (,0,),(a 0) (,1,),例如,第2章 C语言的基本数据类型与表达式,21,! 高,算术运算符,关系运算符,&和|,赋值运算符 低,4 - 0,1 & 2,8 3 & 2 | 8 a,!b|a7&(,a,+,b,+,c,|,d,+,e,+,f,),!i等价于i=0,当i=1,(i=0)=0,!i=0,当i=0,(i=0)=1,!i=1,第2章 C语言的基本数据类型与表达式,23,逻辑表达式一般用于控制语句中的条件:,例如:,(1) n是小于m的偶数:,n1&1 =1,x*y-|y; =0|0 =0,自增自减与逻辑运算符的使用,例如:,(1)a = 0; b = 1;,c = a+ ,结果: a为1,b为1,c为0。,(2)a = 1; b = 1; c=0;,d = -a,b-,(c = b+3 );,结果: a为0,b为0,c为0,d为1。,第2章 C语言的基本数据类型与表达式,29,综合举例:,1、,设int a=1,b=2,c,d,e;,c=(-a+)+(+b);,d=(b-)+(+a)-a;,e=(a/(+b)-(b/(-a);,?a,b,c,d,e,2、设int a=2,b=3;,c,d,e,f;,c=(a+=-b);,d=(a=+b);,e=(a-!=b);,f=(+ab-);,?a,b,c,d,e,f,第2章 C语言的基本数据类型与表达式,30,3、 设int x=4;y=25;z=2;,z=(-y/+x)*z,?z,4、设int x=y=z=0;,+x|+y,+x,+x,第2章 C语言的基本数据类型与表达式,31,1、,赋值运算符,单目:=,2、,赋值表达式:,用赋值运算符将变量和表达式连接起来,形式: =,求值规则:,将“=”右边表达式的值赋给左边的变量。,优先级: !,算术,关系,&和|,赋值,结合性:自右至左;,表达式的值:被赋值变量的值。,例如,:(1) x=(y=12)/4,y值为12,x值为3,表达式的值为3,(2) x=y=12/4,y值为3,x值为3,表达式的值为3,(3) x=(y=12/4),y值为3,x值为3,表达式的值为3,(4) (x=y)=12/4,两个操作数类型可以不同,但执行赋值前右操作数被自动转化为左操作数的类型。右操作数可以是一个表达式。如果表达式是一个赋值表达式,则形成多重表达式。如,i=j=x=y=5;,第2章 C语言的基本数据类型与表达式,五、赋值运算符和赋值表达式,32,3、,复合赋值运算符(双目),*=、/=、 %=、 +=、 -=, =, &=、 =、 =,注意:,复合运算符是一个运算符,但功能上,是两个运算符功能的组合。,例如:,(1) a+=b 相当于 a=a+b,a*=b 相当于 a=a*b,a*=b+c 相当于 a=a*(b+c) 而不是,a=a*b+c,(2) 设a=12,计算表达式a+=a-=a*12和a+=a-=a*=12,的值,第2章 C语言的基本数据类型与表达式,33,例,分析以下程序的运行结果。(s1-4.c),main(), int a,b,c,d;,a=b=c=5;,c+=a+b;,d=c%a;,第2章 C语言的基本数据类型与表达式,34,综合练习:,设int a=12,n=5;,a+=a-=a*=a;,a%=(n%=2);,设int x3,y;,x*=y=x+;,第2章 C语言的基本数据类型与表达式,35,1、,条件运算符,?,和,:,它们与三个操作数组组成三元运算。,形式为: ? :,求值规则和表达式的值:,真(非0),求解表达式2,求解表达式1 条件表达式的值,假(0),求解表达式3,例如:,int max,a=5;b=3;,max=ab?a:b max,及赋值表达式的值均为5;,a,条件,赋值,第2章 C语言的基本数据类型与表达式,37,结合性:自右至左;,y = x10 ? x/10 : x0 ? x: -x;,等价于:,y = x10 ? x/10 :(x0? x: -x);,当x的值为15时,表达式的结果为:1,当x的值为5时,表达式的结果为:-5,第2章 C语言的基本数据类型与表达式,38,综合举例:,int x=1,y=2,z=3,a;,x+=y+=z;,a=xy?y:x;,a=xy?x+:y+;,思考:z+=xy+?x+:y+;,int x=3;y=4,z=4;,(z=yx)?1:0;, int a=5,c=4;,(-a=c+)?,a?+c;,第2章 C语言的基本数据类型与表达式,39,分析以下程序的执行结果(s2-2.c),#include,main(), int i=16,j,x=6,y,z;,j=i+1; printf(“1:%dn”,j);,x*=i=j; printf(“2:%dn”,x);,x=1;y=2;z=3;,x+=y+=z;,printf(“3:%dn”,z+=xy?x+:y+);,x=y=z=-1;,+x|+y,printf(“5:%d,%d,%dn”,x,y,z);,第2章 C语言的基本数据类型与表达式,40,2、,逗号运算符:,单目:,,,形式: 逗号表达式1,逗号表达式2,逗号表达式n,求值规则: 从左至右依次计算各表达式的值,;,优先级: 最低;,结合性:自左至右;,表达式的值:最后一个表达式的值。,如,a=3,6*a; 结果为18,但a的值为3,一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式。,如,(a=3*5,a*4),a+5; 值为20,第2章 C语言的基本数据类型与表达式,41,例如:,a b y 表达式,y=a=4,b=5,a+b; 4 5 4 9,y=(a=4,b=5,a+b); 4 5 9 9,y=(a=4,b=5),a+b; 4 5 5 9,y=a=(4,b=5),a+b; 5 5 5 10,注意,:,C,语言常用逗号作为分隔符,例如,:,int a=3,b=4,c=5;,printf(“%d,%d,%d”,(a,b,c);,printf(“%d,%d,%d”,a,(a,b,c),c); 结果为3,5,5,第2章 C语言的基本数据类型与表达式,42,形式有两种:,sizeof 变量名,sizeof (类型名),结果为整型数。,int a;,float x;,printf(“%d,%d”,sizeof a,sizeof x);,printf(“%d,%d”,sizeof(int),sizeof(float);,以上两个printf语句结果均为2,4。,例如,第2章 C语言的基本数据类型与表达式,3、,求,字节运算符:,sizeof,作用:求得变量或某种数据类型所需的字节数。,43,分析程序执行结果(s2-3.c),#include,main(), int a=1; char c=a; float f=2.0;,printf(“%dn”,(a+2,c+2);,printf(“%dn”,(a=c);,printf(“%dn”,(!(a=0),f!=0,printf(“%dn”,(a0?0:1),(ab 截断高a-b位,送低b 位;,有符号数据 有符号变量:符号扩展;,其他情况:高a-b位全补0。,符号扩展:,符号位为0,剩余的高位补0;,符号位为1,剩余的高位补1。,ab,float f=23; 23.00000 f (7位),double f=A; 23.0000000000000 f(15位),第2章 C语言的基本数据类型与表达式,47,三、强制类型转换,形式: (类型名)表达式,强制类型转换时,得到所需类型的中间变量,原来变,量的类型不会改变。,例如:,int a=2,b=5;,float x=4.4;,则有: 表达式 结果,b/a 2,(float)b/a 2.5,(float)(b/a) 2.0,(int)x%a+x 4.4,(int)x%(a+x) ,第2章 C语言的基本数据类型与表达式,48,
展开阅读全文