C语言的基本数据类型与表达式



《C语言的基本数据类型与表达式》由会员分享,可在线阅读,更多相关《C语言的基本数据类型与表达式(48页珍藏版)》请在装配图网上搜索。
1、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、类型,数据类型,2.1 C语言的基本数据类型,一、数据类型概述,第2章 C语言的基本数据类型与表达式,2,类型名,字宽(字节),Char,1,Signed char,1,Unsigned char,1,Short [int],2,Signed short [int],2,Unsigned short[int],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
3、,,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(十进制),,,,*,八进制的数码范围为0~7; 018,,,,,*,十六进制的,数码除了数字,0,~,9外,,,还使用英
4、文字母,a~ f (,或,A~ F)表示10~15。,,如: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
5、 16(2B),-32768~32767,,unsigned short 16(2B),0~65535,,int 16(2B),-32768~32767,,unsigned 16(2B),0~65535,,long 32(4B) -2147483648,~2147483647,,unsigned long 32(4B),0~4294967295,第2章 C语言的基本数据类型与表达式,5,1、,常量:,,(1),十进制小数形式:,由数字和小数点组成;,,例如
6、: 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,
7、308,15,,缺省值类型为double。,注意,第2章 C语言的基本数据类型与表达式,三、实型,6,1、,常量:,,,(1) 用单引号括起来的一个字符;如:‘,A,’、,‘1‘、’?’等,。,,,(2) 用单引号括起来的由反斜杠(,\,)引导的转义字符。,,,字符形式 功能,,\n 换行,,\t 横向跳格,,\b 退格,,\r 回车,,\\
8、 反斜杠字符,,\,’,单引号字符,,\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、
9、,字符串:,,是用一对双引号括起来的字符序列。,,如:“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,;,,长整型常量,
10、,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、,符号常量,,是,用标,识符来表示一个数据;,在程序不能给它赋
11、值。,,,,定义形式:,,#,define,,标识符,,常量数据,,例如,:,#,define P,I,3.14159,,在程序预处理时,凡是出现标识符PI的地方都将用,,数据3.14159来替换。,,如: 2*2.3*,P,I,,就,等价于 2*2.3*3.14159。,第2章 C语言的基本数据类型与表达式,二、 变量,,,变量是指,以标识符为名字,其值可以改变的量。,,,,,变量代表计算机内存中的某一存储空间,该存储空间,,中存放,的数据就是变量的值。,,,在同一程序块中,,变量,不能被重复定义。,,,,使用变量时必须“先定义,后使用”。,11,1、,定义形式:,类型标识符:
12、,,变量名,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为整型变
13、量*/,,unsigned int k; /*定义k为无符号整型变量*/,,x=10;y=-20;k=30;,,z=x+k;w=y+k;,,printf(“x+k=%d,y+k=%d\n”,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,
14、d=%d\n”, a,b,c,d); },,第2章 C语言的基本数据类型与表达式,14,按操作功能运算符大致可分为,算术运算符、关系运算符、逻辑运算符、按位运算符以及其它运算符如赋值运算符、,条件运算符、逗号运算符等。,,,单目、双目、三目运算符,,表达式是由操作数和运算符组成的序列。,,第2章 C语言的基本数据类型与表达式,2.3,运算符与表达式,算术运算符 + - * / %,,关系运算符 > < == >= <= !=,,逻辑运算符 ! && ‖,,位运算符 《 》 ~ | ∧ &,,赋值运算符 =,,条件运算符 ?:,,逗号运算符 ,,,指针运算符 * 和 &,,求字
15、节数运算符 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;,,两个操作数如果符号不同,结果以左操作数为准,,,两
16、个操作数只能为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
17、/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、,关系表达式:,用关系运算符将表达式连
18、接起来的式子,,,,优先级: (= >),>,( == != ),,,,结合性:自左至右;,,,,表达式的值: 若为真,则结果为,1,;,,若为假,则结果为,0,。,3>5 的值为 0; 32 的值为 0;,,3+(4<3)*4的值为 3;,3+4,<3*4 的值为 1;,,算术运算符优先级高于关系运算符,,设int a=3;b=2,c=1;求表达式的值:,,a>b a>b==c,,b+cb>c,例如,第2章 C语言的基本数据类型与表达式,二、关系运算符和关系表达式,19,,1、,3种逻辑运算符:双目:,&& || 单目:!,,
19、逻辑量:可以是整型、实型、字符型和指针类型,,,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,) !
20、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 < b),¦¦,(a > 0) (,1,),例如,第2章 C语言的基本数据类型与表达式,21,,,,,,,,,,,,,,,,,,,! 高,,算术运算符,,关系运算符,,&&和||
21、,,赋值运算符 低,4 - 0,1 && 2,8 < 4,1,0,1,5 > 3 && 2 || 8 < 4 - !5,第2章 C语言的基本数据类型与表达式,22,注意:,,,在逻辑表达式的求解中,并不是所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,,,表达式的结果一旦得知,运算马上停止。,,例如:设a=5,b=0,c=7,,!a&&b&&,’,a,’,&&,’,d,’,&&(c+7)>a,,!b||a>7&&(,‘,a,’,+,’,b,’,+,’,c,’,||,’,d,’,+,’,e,’,+,’,f,’,),,,!i等价于
22、i==0,,当i=1,(i==0)=0,!i=0,,当i=0,(i==0)=1,!i=1,,第2章 C语言的基本数据类型与表达式,23,逻辑表达式一般用于控制语句中的条件:,,例如:,,(1) n是小于m的偶数:,,n 23、tf(“%d%d\n”,a,b);,,},第2章 C语言的基本数据类型与表达式,25,四、,自增与自减运算符,,,单目:++,-- 有两种形式:,,,,,++i,--i:使用之前使i的值增1(或减1);,,,i++,i--:使用之后使i的值增1(或减1);,,,它们的不同在于:前者先用i值后再加1或减1。后者先加1或减1后再用i值。,,,等价于 i=i+1;,j=i;i++; 所以i的值为4,j的值为3。,i++;j=i; 所以i的值为4,j的值为4。,例如:,(1) i++;,,++i;,,(2) i=3;,,j=i++;,,(3) i=3;,,j=++i;,第2章 C语言的 24、基本数据类型与表达式,26,例如:,,设int i=3,x;,,,①,x=i++;,,x=? i=?,,x=++i;,,x=? i=?,,②,,(i++)+(i++)+(i++);,,表达式的值为: i=?,,③,,(++i)+(++i)+(++i);,,表达式的值为: i=?,,,,注意必须是左值表达式。(i+j)++是错误的,。,,第2章 C语言的基本数据类型与表达式,27,,,结合性:自右至左。,,,如: i = 2;,,j = -i++;,,等价于:j=-(i++);,,即: j=-i 25、;i++;,,,“,++,”,与,”,-,“,是同优先级,,所以i的值为3,j的值为-2。,第2章 C语言的基本数据类型与表达式,例如:设i=3,j=4,k=i+++j,k=?,,,,注意 “++”或“--”自增与自减运算符的使用。,28,,序列点:在i++中,引起变量自加的计算点。,,①&& ②|| ③?: ④, ⑤表达式完成后,,例如:int x=0,y=1;,,y-x++ =>1&&1 =>1,,x*y--||y; =>0||0 =>0,,,,自增自减与逻辑运算符的使用,,,例如:,,(1)a = 0; b = 1;,,c = a++ ,,结果: a为 26、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=(++a>b--);,,? 27、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 28、=(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、,复合赋值运算符(双目),,*=、/=、 %=、 +=、 -=, >=, &=、 Λ=、 ¦=,,,注意:,,复合运算 29、符是一个运算符,但功能上,是两个运算符功能的组合。,,,例如:,,,(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; 30、,,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=a>b?a:b max,及赋值表达式的值均为5;,,a
31、据类型与表达式,四、其它运算符,36,,又如:,,--a == b++ ? a++ : b++,,,(a=a-1;),4,==,3,(b=b+1;)?a++:,b++,,a,为4 b为4,,0,4,(b=b+1;),,表达式值为4,,b,为5,,,∴,a值为4,b值为5,条件表达式的值为4。,,,,,,,优先级: 逻辑,>,条件,>,赋值,,,第2章 C语言的基本数据类型与表达式,37,,,结合性:自右至左;,,y = x>10 ? x/10 : x>0 ? x: -x;,,等价于:,,y = x>10 ? x/10 :(x<0? x: -x);,,∴,当x的值为 32、15时,表达式的结果为:1,,当x的值为5时,表达式的结果为:-5,,第2章 C语言的基本数据类型与表达式,38,,综合举例:,,①,,int x=1,y=2,z=3,a;,,x+=y+=z;,,a=x 33、,,{ int i=16,j,x=6,y,z;,,j=i+++1; printf(“1:%d\n”,j);,,x*=i=j; printf(“2:%d\n”,x);,,x=1;y=2;z=3;,,x+=y+=z;,,printf(“3:%d\n”,z+=x>y?x++:y++);,,x=y=z=-1;,,++x||++y,,printf(“5:%d,%d,%d\n”,x,y,z);,,},第2章 C语言的基本数据类型与表达式,40,2、,逗号运算符:,单目:,,,,,,形式: 逗号表达式1,逗号表达式2,…,逗号表达式n,,,,求值规则: 从左至右依次计算各表达式的值,;, 34、,,,,优先级: 最低;,,,,结合性:自左至右;,,,,表达式的值:最后一个表达式的值。,,,如,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 35、 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(“% 36、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(“%d\n”,(a+2,c+2));,,printf(“%d\n”,(a=c));,,printf(“%d\n”,(!(a==0),f!=0,,printf(“%d\n”,((a>0 37、?0:1),(a<0?1:2)));,,printf(“%d\n”,(f+2.5,a-10));,,printf(“%d\n”,(a,c,f,5));,,},第2章 C语言的基本数据类型与表达式,44,◆,C语言允许整型、实型、字符型数据进行混合运算。,,◆,有3种转换方式:自动转换、赋值转换和强制转换。,,,一、类型自动转换,,,,double float,,long,,unsigned,,int char,short,第2章 C语言的基本数据类型与表达式,2.4 数据类型转换,,45,,,,,,int x=2;float y=1.6;char c= 38、‘A’;,,则:c+x*y = c + x * y,,65(int)+ 2(int) * 1.6(double),,= 68.2(double),,,二、 赋值转换,,,◆,在赋值时将赋值符右边值的类型转换成与其左边变量类型一致的类型。,,,◆,有下列几种情况:,,,(1) 实型 整型(字符型):去掉小数部分;,例如,char c=68.5;,,printf(“%c”,c);,第2章 C语言的基本数据类型与表达式,46,,(2) 整型(字符型) 实型: 补足有效位;,,,,(3)对char、int、short、long、unsigned型 39、数据:,,赋值符右边数据(a位) 赋值符左边的变量(b位),,若 a=b 原样照赋;,,a>b 截断高a-b位,送低b 位;,,有符号数据 有符号变量:符号扩展;,,其他情况:高a-b位全补0。,,符号扩展:,符号位为0,剩余的高位补0;,,符号位为1,剩余的高位补1。,a
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。