C语言程序设计实用教程第2章.ppt
1,第2章 基本数据类型、运算符和表达式 2.1 C语言的数据类型 2.2 常量和变量 2.3 整型数据 2.4 实型数据 2.5 字符型数据 2.6 变量赋初值 2.7 各类数据之间的混合运算 2.8 C运算符简介,C语言程序设计教程,2,教学提示 本章介绍C语言提供的基本数据类型、运算符和表达式,这些知识是程序设计的基础,通过本章的学习,学生将对C语言的数据处理功能有更进一步的了解。教学目标 掌握C语言提供的三种基本数据类型的表示方法,掌握各种运算符和表达式,掌握数据类型转换、自增自减运算符的使用。,3,2.1 C语言的基本数据类型,一、数据类型概述,第2章 C语言的基本数据类型与表达式,4,2.2 常量,常量是指在程序运行中,其数值不能被改变的量。常量又可分为直接常量和符号常量。,5,2.2.1 常量(例21)1.整数常量:(1)十进制形式:与数学上的整数表示相同;例如:12,-100,0(2)八进制形式:在数码前加数字0;例如:012=1*81+2*80=10(十进制)(3)十六进制形式:在数码前加0X(数字0和字母X)。例如:0 x12=1*161+2*160=18(十进制)*八进制的数码范围为07;018*十六进制的数码除了数字09外,还使用英文字母a f(或A F)表示1015。如:0 x1e,注意!,第2章 C语言的基本数据类型与表达式,6,2、分类:根据数据所占的二进制位数分为:int、short、long;同样存储长度的数据又分unsigned、signed;故可组合出六种类型。3、值域:由机器中数据的存储长度决定。如Turbo C中,有short(2字节)int(2字节)long(4字节)关键字 所占位数 取值范围 short 16-3276832767 unsigned short 16 065535 int 16-3276832767 unsigned 16 065535 long 32-21474836482147483647 unsigned long 32 04294967295,第2章 C语言的基本数据类型与表达式,7,(1)十进制小数形式:由数字和小数点组成;例如:3.4,4.,.3。(2)指数形式:“十进制小数”+“e(或E)”+“十进制数整数”。例如:12.5e-6 表示12.510-6。小数点不能单独出现;0.0.e或E的两边必须有数,且其后面必须为整数;如:6E0.2 e5 2、分类:关键字 字节数 取值范围 精度(位)float 4 3.410-38 3.41038 7 double 8 1.710-308 1.710308 15,注意,第2章 C语言的基本数据类型与表达式,2、实型常量:,8,(1)用单引号括起来的一个字符;如:A、1、?等。(2)用单引号括起来的由反斜杠()引导的转义字符。字符形式 功能 n 换行 t 横向跳格 b 退格 r 回车 反斜杠字符 单引号字符 ddd 8进制数表示的ASCII码对应的字符 xhh 16进制数表示的ASCII码对应的字符,第2章 C语言的基本数据类型与表达式,3、字符常量,9,例如:字符A的ASCII码为:65D(十进制)=41H(十六进制)=101Q(八进制)字符A可以表示为A、x41、101。2、分类:char 和 unsigned char;3、值域:每个字符型数据在内存中占一个字节;包括ASCII字符表中的所有字符(可显示字符和非显示字符)。,第2章 C语言的基本数据类型与表达式,10,4、字符串常量:是用一对双引号括起来的字符序列。如:“SHANGHAI”,“AbcdeFGHijk”,“How are you”。,注意,a与“a”的区别。,11,120、-100、0;0120、072;0 xFFFF、0 x1e、0X28AF,0XED4;120L,200L;长整型常量 3.14、-3.1、5.12E-6;a、#、n、101;099、12f、0 xg、48EA;019.5、1e-08;实型常量只能用十进制形式表示 2.1E10.2、E-6、6.4E+4.8、E9;changsha、+?ab;、p、ab;,第2章 C语言的基本数据类型与表达式,请判断这些常量正确与否:,12,5、符号常量(例22)是用标识符来表示一个数据;在程序不能给它赋值。定义形式:#define 标识符 常量数据 例如:#define PI 3.14159 在程序预处理时,凡是出现标识符PI的地方都将用数据3.14159来替换。如:2*2.3*PI 就等价于 2*2.3*3.14159。,第2章 C语言的基本数据类型与表达式,注意:1、符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。2、使用符号常量的好处:(1)含义清楚、见名知意。(2)修改方便、一改全改,如现在想将符号常量PI的值修改成3.15的话,只需要将宏定义语句改为:#define PI 3.15 即可。,13,2.3变量,变量是指以标识符为名字,其值可以改变的量。变量代表计算机内存中的某一存储空间,该存储空间中存放的数据就是变量的值。在同一程序块中,变量不能被重复定义。使用变量时必须“先定义,后使用”。,14,第2章 C语言的基本数据类型与表达式,15,2.3.3 变量赋初值,又称为变量初始化 在说明变量的同时给变量一个初始值。在变量定义中赋初值的一般形式为:类型说明符 变量1=值1,变量2=值2,;,例如,int a=5,b=3;int a=b=c=3;int a,b,c;a=b=c=3;,16,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,17,C语言允许整型、实型、字符型数据进行混合运算。有3种转换方式:自动转换、赋值转换和强制转换。一、类型自动转换,double float long unsigned int char,short,第2章 C语言的基本数据类型与表达式,2.3.4 数据类型转换,18,int x=2;float y=1.6;char c=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语言的基本数据类型与表达式,19,(2)整型(字符型)实型:补足有效位;(3)对char、int、short、long、unsigned型数据:赋值符右边数据(a位)赋值符左边的变量(b位)若 a=b 原样照赋;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语言的基本数据类型与表达式,20,三、强制类型转换 形式:(类型名)表达式 强制类型转换时,得到所需类型的中间变量,原来变 量的类型不会改变。例如: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语言的基本数据类型与表达式,21,按操作功能运算符大致可分为算术运算符、关系运算符、逻辑运算符、按位运算符以及其它运算符如赋值运算符、条件运算符、逗号运算符等。表达式是由操作数和运算符组成的序列。,第2章 C语言的基本数据类型与表达式,2.4 算术运算符与算术运算表达式,算术运算符+-*/%关系运算符=!=逻辑运算符!&位运算符|&赋值运算符=条件运算符?:逗号运算符,指针运算符*和&求字节数运算符 sizeof强制类型转换运算符分量运算符 下标运算符,22,算术运算符和算术表达式 1、运算符+(加):3+4、+3-(减):3-5、-5*(乘):3*5/(除):5/2的值为2;5.0/2的值为2.5;%(取余):5%3的值为2;-5%3的值为-2;5%(-3)的值为2;-5%(-3)的值为-2;12.3%3 若a能被b整除,则有:a%b=0,第2章 C语言的基本数据类型与表达式,23,、算术运算表达式 用算术运算符和括符将操作数连接起来的式子。优先级:()*、/、%+、-结合性:从左至右;表达式的值:数值型(int、long、unsigned、double);,例如:已知:float a=2.0;int b=6,c=3;求解:a*b/c-1.5+a+fabs(-5)=?,第2章 C语言的基本数据类型与表达式,24,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语言的基本数据类型与表达式,25,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,第2章 C语言的基本数据类型与表达式,2.5 赋值运算符和赋值表达式,26,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语言的基本数据类型与表达式,27,2.6自加与自减运算符+i,-i:使用之前使i的值增1(或减1);i+,i-:使用之后使i的值增1(或减1);,等价于 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语言的基本数据类型与表达式,28,结合性:自右至左。如:i=2;j=-i+;等价于:j=-(i+);即:j=-i;i+;“+”与”-“是同优先级 所以i的值为3,j的值为-2。,第2章 C语言的基本数据类型与表达式,注意“+”或“-”自增与自减运算符的使用。如:设i=3,k=(i+)+(i+)+(i+),k=?如:设i=3,j=4,k=i+j,k=?,29,2.7位运算符,&|,位运算符的运算对象只能是整型数据或字符型数据,不能是实型数据运算对象一律按二进制补码参加运算,并按位进行运算位运算的结果是一个整型数据,低于单目、算术运算符,高于其他运算符,低于单目、算术和关系运算符,高于其他运算符,30,位逻辑运算符的运算规则,假设ai和bi均是一个二进制位(bit),例如:假设a=10,b=010 求a&b、a|b、ab、a,31,程序如下:,main()int a=10,b=010;printf(%d%dn,a,输出结果:8 102-11,0000 0000 0000 1010&0000 0000 0000 1000 0000 0000 0000 1000即:a&b的值是8,运行jc2_c,32,移位运算,例如:ab-1 等价于(a+8)(b-1),例如:假设a=10,b=2,求ab-1,main()int a=10,b=2;printf(%d%dn,ab-1);,输出结果:40 9,运行jc2_d,请自行分析运行结果,33,例题 x=2;y=3;z=4X%=y%=2X=+y%z-x!(x=y)&(y=z)|0!(x+y)+z-1&b+cxy|z&y,34,2.8.2 逗号运算符和逗号表达式 在语言中逗号“,”也是一种运算符,称为逗号运算符。其功能是把两个表达式连接起来组成一个表达式,称为逗号表达式。形式:逗号表达式1,逗号表达式2,逗号表达式n 求值规则:从左至右依次计算各表达式的值;优先级:最低;结合性:自左至右;表达式的值:最后一个表达式的值。,第2章 C语言的基本数据类型与表达式,35,例如: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语言的基本数据类型与表达式,36,形式有两种: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语言的基本数据类型与表达式,2.8.4 求字节运算符:sizeof 作用:求得变量或某种数据类型所需的字节数。,