《C程序设计-第二章.ppt》由会员分享,可在线阅读,更多相关《C程序设计-第二章.ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C程序设计,主讲:王广正,2020/10/15,第二章 数据类型、运算符与表达式,C语言的数据类型 常量与变量 变量赋初值 运算符和表达式,目的、要求: 掌握C的数据类型、运算符尤其是赋值运算符;掌握标识符的命名规则。,2020/10/15,3.1 C语言的数据类型,C数据类型,本章讨论 基本类型数据,2020/10/15,3.2 常量与变量,常量: 其值不随程序的运行而改变的量 变量: 其值可随程序的运行而改变的量,2020/10/15,3.2.1 常量,常量,字面常量(或直接常量):如3,4,6.5,a,b,符号常量:以标识符代表常量的符号,一般用大写 #define PI 3.14159
2、26,不管是字面常量还是符号常量,只要是常量,其值都不能被改变!,2020/10/15,#define PI 3.14 main() PI=3.15; ,#define PI 3.1415926 main() float r=3,s,v; s=4*PI*r*r; v=4/3*PI*r*r*r; ,2020/10/15,3.2.2 变量,main( ) int a,b; /*定义变量a,b为整型*/ a=123;b=456; /*赋初值*/ ,变量代表内存中的一个存储单元,用来存放数据。,123,456,2020/10/15,变量名又称为标识符,只能由字母、数字和下划线3种字符组成,且第一个字符
3、必须是字母或下划线。,123, def, sum, _y, y unsigned u; a=12;b=-24;u=10; c=a+u;d=b+u; printf(a+u=%d,b+u=%dn,c,d); ,2020/10/15,例3.3:整型数据的溢出,整型数后加l或L表示长整型,其存储空间扩大为4个字节。整数后面加u,按无符号数方式存储,如-12345u,则先将其转换成补码53191,然后按无符号数存储。,main () int a,b; a=32767; b=a+1; printf(%d,%dn,a,b); ,2020/10/15,3.4 浮点型(实型)数据,2020/10/15,计算时,
4、C编译系统自动将实型常量按双精度处理,然后根据变量类型截取相应的有效位数。这样可提高计算精度,但会降低运算速度。 若要按float型运算,在数字后加f或F即可,如1.65f。 实型数据的舍入误差:因有效数字位数有限而产生的。,例3.4:实型数据的舍入误差,main( ) float a,b; a=123456.789e5;b=a+20; printf(“a=%fnb=%fn”,a,b); ,运行结果: a=12345678848.000000 b=12345678848.000000,2020/10/15,3.5 字符型数据,字符常量 单引号括起来的单个字符,如a,x等 转义字符 P48页表3
5、-3 字符变量(char) 只能存放一个字符,在内存中占一个字节 字符在内存中以ASCII代码形式存放 字符变量和整型变量可以通用,2020/10/15,3.5.4 字符串常量,用双引号括起的一个字符序列 例如:ABC、123、a、 nt “Good morning”等 字符串常量的长度 : 所包含的字符个数 字符串常量的存储方式:,所占存储单元数:串长度1 例如:,字符串 结束标记,2020/10/15,19. 设有说明语句:char a=123;则变量a_。(2005-12) A) 包含一个字符 B)包含两个字符 C) 包含三个字符 D) 说明不合法,13. 以下属于合法的长整型常量的是_
6、。(2006-1) A) 5876 B) 0L C) 2E10 D) ”5876”,课堂练习,2020/10/15,3.6 变量赋初值,main( ) int a,b; /*定义变量a,b为整型*/ a=123;b=456; /*赋初值*/ ,C语言中,变量赋值由赋值运算符=来完成,方法为: 变量=表达式 赋值运算符的结合方向: 自右至左 a=b=c=5+3;,2020/10/15,3.6 变量赋初值(续),C语言允许在定义变量的同时对变量初始化。如:,int a=3;,int a; a=3;,等价,int a,b,c=3;,int a,b,c; c=3;,等价,2020/10/15,3.6
7、变量赋初值(续),注意:对几个变量赋同一个初值的方法为: int a=b=c=5; int a=5,b=5,c=5;,main() int a=b=c=5; printf(“a=%d,b=%d,c=%c”,a,b,c); ,main() int a,b,c; a=b=c=5; printf(“a=%d,b=%d,c=%c”,a,b,c); ,2020/10/15,3.7 各类数值型数据间的混合运算,整型、浮点型和字符型数据可以混合运算。 12+a+1.7*b 混合运算时需要进行类型转换,这些转换是由系统自动进行的。类型转换规则如下:,2020/10/15,3.8.1 C语言运算符,2020/1
8、0/15,3.8 算术运算符和算术表达式,1.基本的算术运算符: 加法运算符,或正值运算符,如4+7,+1 减法运算符,或负值运算符,如5-2,-4 * 乘法运算符,如3*4 / 除法运算符,如5/4 % 模运算符,或称求余运算符,%两侧均应为整型数据,如7/4,2020/10/15,说明,没有乘方运算符,要计算a3要写作 a*a*a 的连乘,或用标准库函数 pow(a, 3) “/”的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据 “%”要求运算对象必须是整型数据,功能是求两数相除的余数,余数的符号与被除数的符号相同。,9/4=2 9.0/4=2.25,9%4=
9、1 -9%4=-1,2020/10/15,2. 算术表达式和运算符的优先级与结合性,由运算符将运算对象连接成的式子,称为算术表达式。 运算符的优先级可以参考附录C。 优先级相同的运算符,符合“左结合性”。,a+b-c a=123;,2020/10/15,3. 强制类型转换运算符,一般形式: (类型名)(表达式) 或 (类型名)单个变量或常量,(int)a (int)2.3 (float)(a+b) (float)a+b,说明: 在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。,main() float x; int i; i=(int)x; Printf(“x=%f,i
10、=%dn”,x,i); ,2020/10/15,4. 自增、自减运算符,+ -是单目运算符 有前缀和后缀两种形式 前缀形式: 先自增(自减)再引用; 后缀形式: 先引用再自增(自减); 功能: 前缀形式 + a 等价于 a = a + 1 - a 等价于 a = a 1 后缀形式 a + 等价于 a = a + 1 a - 等价于 a = a 1,使变量的值增1或减1,2020/10/15,4. 自增、自减运算符(举例),当 a5 时 +a 表达式的值为 6,且 a6 a+ 表达式的值为5 ,且 a6 b=+a 等价于 a=a+1; b=a 表达式的值为6,且 a=6, b=6 b=a+ 等价
11、于 b=a; a=a+1 表达式的值为5,且 a=6, b=5,2020/10/15,4. 自增、自减运算符(说明),+ 和 - 的运算对象只能是变量(或运算结果是变量的表达式), 不能是常量(或运算结果是数值的表达式)。 例如: 5+、(a+2)+ 不合法。 具有右结合性,结合方向为从右到左。 例如: a+ 等价于 -(a+) 如果有多个运算符连续出现时,C系统尽可能多的从左到右将字符组合成一个运算符 例如: i + j 等价于 ( i+)+j -i+-j 等价于 -(i+)+(-j),2020/10/15,3.9 赋值运算符和赋值表达式,“=”为赋值运算符,如a3; 赋值表达式的一般形式为
12、: 将表达式的值存入变量对应的内存单元中 m=12 b=a-2 x=(x = 5),3,2020/10/15,3.9 赋值运算符和赋值表达式(说明),赋值号左边必须是变量,右边可以是C语言任意合法的表达式 例如:n= t +210 等价于:a= (b=( (b*c)10) ) 赋值号与数学中的等号含义不同 例如:数学中 a=b 等价于 b=a C语言中 a=b 不等价于 b=a,2020/10/15,3.9 赋值运算符和赋值表达式(续),复合运算符:在赋值运算符前加上其它的运算符构成。 复合运算符的目的:简化程序和提高编译效率。,复合赋值运算符(右结合) += -= *= /= %= a=3*
13、5,a*4 a=?,2020/10/15,x=(a=3,6*a) 赋值表达式,x=18 x=a=3,6*a 逗号表达式,?,并不是任何地方出现的逗号都是作为逗号运算符,如:,printf(“%d,%d,%d”,a,b,c); “a,b,c”为函数的3个参数,逗号为参数间的分隔符。 printf(“%d,%d,%d”,(a,b,c),b,c); “( a,b,c )”为逗号表达式,其值等于c的值。,2020/10/15,课堂练习,13.设整型变量a的值为2,下列表达式值为1的是_。(2004-1) A) a%3 B) a/3 C) -a D) a+ 14. 设变量a、b、c已定义并赋值,则下列表
14、达式中符合C语言语法规则的是_。(2004-1) A) a=5+ B) a=b=c+ C) a=%2 D) b=a+1=2 16. 下列式中,最终运算结果的数据类型不是单精度的表达式是_。 A)(int)(3+3.0) B)1e-3 C) (float)(3) D)(int)3.0+3.0 17.字符串”abx4134cd102y”的长度是_。(2004-1) A)10 B)12 C)14 D)18,2020/10/15,课堂练习(续),18. 设整型变量x,y,z均为2,表达式(x+)+(y+)+(z+)的值是_。(2004-1) A) 6 B) 7 C) 8 D) 9 1.设int a=3
15、,b=5;float x=7.5,y=3.5;则表达式(float)a+b/2+(int)x%(int)y;的值是_。(2004-1) 23.执行语句:int a; a=1+1.5;后,正确的叙述是_。(2005-12) A)a的值是字符3 B)a的值是浮点型 C)不允许字符型和浮点型相加 D)a的值是字符1的ASCII码值加上1,2020/10/15,课堂练习(续),24. 设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围是_。(2005-12) A)均为2个字节 B)065535 C)-3276832767 D)-256至255 25. 执行下列语句后,运行结果为_。(2005-12) main() int i=3,j; j=+i+i+; printf(“%dn”,j); A) 6 B) 7 C) 8 D) 9,2020/10/15,课堂练习(续),26. 若a为int类型,且其值为5,则执行表达式a+=a-=a*a后,a的值为_。(2005-12) A) -5 B) -40 C) -15 D)不确定 3. 如果x,y,i和j都是int型变量,则表达式x=(i=1,j=6,y=8)的值为_。(2006-1),2020/10/15,作业,待定!,