《C程序设计第二章主讲王广正》由会员分享,可在线阅读,更多相关《C程序设计第二章主讲王广正(40页珍藏版)》请在金锄头文库上搜索。
1、C程序设计程序设计主讲:王广正主讲:王广正第二章第二章 数据类型、运算符与表达式数据类型、运算符与表达式l lC语言的数据类型语言的数据类型l l常量与变量常量与变量l l变量赋初值变量赋初值l l运算符和表达式运算符和表达式目的、要求:目的、要求: 掌握C的数据类型、运算符尤其是赋值运算符;掌握标识符的命名规则。3.1 C语言的数据类型语言的数据类型C数据类型数据类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型枚举类型枚举类型整型整型整型整型 字符型字符型字符型字符型 实实实实型型型型( (浮浮浮浮点点点点型型型型) ) 单精度型单精度型单精度型单精度型 双精度型双精度型双精度型
2、双精度型 基本类型基本类型基本类型基本类型指针类型指针类型构造类型构造类型本章讨论本章讨论本章讨论本章讨论基本类型数据基本类型数据基本类型数据基本类型数据3.2 常量与变量常量与变量l l常量:常量: 其值不随程序的运行而改变的量l l变量:变量: 其值可随程序的运行而改变的量3.2.1 常量常量常量字面常量(或直接常量):如3,4,6.5,a,b符号常量:以标识符代表常量的符号,一般用大写 #define PI 3.1415926不管是字面常量还是符号常量,只要是常量,其值都不能被改变!#define PI 3.14main()PI=3.15;#define PI 3.1415926main
3、()float r=3,s,v;s=4*PI*r*r;v=4/3*PI*r*r*r;3.2.2 变量变量main( ) main( ) intint a,ba,b; /*; /*定义变量定义变量定义变量定义变量a,ba,b为整型为整型为整型为整型* */ /a=123;b=456; /*a=123;b=456; /*赋初值赋初值赋初值赋初值* */ / 变量代表内存中的一个存储单元,用来存放数据。ab123456注意注意:变量名变量名和变量值变量值的区别对应内存地址 内存地址中存放的内容 变量名又称为变量名又称为标识符,只能由字母、数字标识符,只能由字母、数字和下划线和下划线3种字符组成,且第
4、一个字符必须是种字符组成,且第一个字符必须是字母或下划线字母或下划线。123, def, sum, _y, y&u12.以下正确的以下正确的C语言标识符是语言标识符是_。(2005-1)A) %x B) a+b C) a123 D) test!11._是合法的用户自定义标识符。(是合法的用户自定义标识符。(2005-12)A) ah-spks B) double C) D) _myapple课堂练习课堂练习11.以下合法的用户标识符是以下合法的用户标识符是_。(。(2006-1)A) 1st B) break C) Two Words D) B757(1)C语言中,大、小写字母被认为是两个不同
5、的字符,变量名一般用小写。(2)C语言中,标识符的长度无统一规定,随系统而不同。在写程序时尽量不要超过8个字符。(3)标识符的选取原则原则:“见名知意见名知意”,这也是结构化程序的特征之一。(4)C语言中,变量必须“先定义后引用”,以便在编译时发现错误。注意事项注意事项3.3 整形数据整形数据无符号整型:unsigned int 无符号短整型:unsigned short无符号长整型:unsigned long基本型:int表示,-32768+32767短整型:short int或short表示,同int。长整型:long int或long表示, -2147483648 +2147483647
6、无符号型10进制8进制:0开头的数字序列16进制: 0x开头的数字序列整型常量整型变量整型数据整型变量的定义 变量的定义一般放在一个函数的开头部分。例3.2:整型变量的定义及不同类型整型数据间的运算main () int a,b,c,d; unsigned u; a=12;b=-24;u=10; c=a+u;d=b+u; printf(a+u=%d,b+u=%dn,c,d);例3.3:整型数据的溢出 整型数后加l或L表示长整型,其存储空间扩大为4个字节。整数后面加u,按无符号数方式存储,如-12345u,则先将其转换成补码53191,然后按无符号数存储。main () int a,b; a=3
7、2767; b=a+1; printf(%d,%dn,a,b);3.4 浮点型(实型)数据浮点型(实型)数据十进制形式:由数字和小数点组成指数形式:123e3或123E3代表123*103E/e前必须有数字E/e后必须为整数单精度(float型):一般占4个字节(32位), 67位有效数字双精度(double型):一般占8个字节,15或16位有效数字实型常量实型变量实型数据长双精度(long double型):一般占16个字节,18或19位有 效数字 计算时,C编译系统自动将实型常量按双精度处理,然后根据变量类型截取相应的有效位数。这样可提高计算精度,但会降低运算速度。 若要按float型运算
8、,在数字后加f或F即可,如1.65f。实型数据的舍入误差:实型数据的舍入误差:因有效数字位数有限而产生的。例3.4:实型数据的舍入误差main( )float a,b; a=123456.789e5;b=a+20; printf(“a=%fnb=%fn”,a,b);运行结果:a=12345678848.000000b=12345678848.0000003.5 字符型数据字符型数据l l字符常量字符常量单引号括起来的单个字符,如单引号括起来的单个字符,如a,x等等l l转义字符转义字符P48页表页表3-3l l字符变量字符变量(char)只能存放一个字符,在内存中占一个字节只能存放一个字符,在
9、内存中占一个字节字符在内存中以字符在内存中以ASCII代码形式存放代码形式存放字符变量和整型变量可以通用字符变量和整型变量可以通用3.5.4 字符串常量字符串常量l l用双引号括起的一个字符序列用双引号括起的一个字符序列 例如:例如:ABC、123、a、 nt “Good morning”等等l l字符串常量的长度字符串常量的长度 : 所包含的字符个数所包含的字符个数 l l字符串常量的存储方式:字符串常量的存储方式: n nGG o o o o d dmm o o r rn ni i n n g g 0 0a a 0 0所占存储单元数:所占存储单元数:串长度串长度1例如:例如:字符串字符串结
10、束标记结束标记19. 设有说明语句:char a=123;则变量a_。(2005-12)A) 包含一个字符 B)包含两个字符 C) 包含三个字符 D) 说明不合法13. 以下属于合法的长整型常量的是_。(2006-1)A) 5876 B) 0L C) 2E10 D) ”5876”课堂练习课堂练习3.6 变量赋初值变量赋初值main( ) main( ) intint a,ba,b; /*; /*定义变量定义变量定义变量定义变量a,ba,b为整型为整型为整型为整型* */ /a=123;b=456; /*a=123;b=456; /*赋初值赋初值赋初值赋初值* */ / C语言中,变量赋值由赋值
11、运算符语言中,变量赋值由赋值运算符=来完成,方法为:来完成,方法为: 变量变量=表达式表达式 赋值运算符的结合方向:赋值运算符的结合方向: 自右至左自右至左 a=b=c=5+3; a+b=53.6 变量赋初值(续)变量赋初值(续)C语言允许在定义变量的同时对变量初始化。如:int a=3;int a;a=3;等价int a,b,c=3;int a,b,c;c=3;等价3.6 变量赋初值(续)变量赋初值(续)注意注意:对几个变量赋同一个初值的方法为:对几个变量赋同一个初值的方法为: int a=b=c=5; int a=5,b=5,c=5;main()int a=b=c=5;printf(“a=
12、%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);3.7 各类数值型数据间的混合运算各类数值型数据间的混合运算l l整型、浮点型和字符型数据可以整型、浮点型和字符型数据可以混合运算混合运算。 12+a+1.7*bl l混合运算时需要进行混合运算时需要进行类型转换类型转换,这些转换,这些转换是由是由系统自动进行系统自动进行的。类型转换规则如下:的。类型转换规则如下:doublefloatlongunsignedintChar,short低高3.8.1 C语言运算符语言运算符类型类型类型类型种类种
13、类种类种类算术运算符算术运算符算术运算符算术运算符+ - * / %+ - * / %赋值运算符赋值运算符赋值运算符赋值运算符= =及其扩展赋值运算符及其扩展赋值运算符及其扩展赋值运算符及其扩展赋值运算符关系运算符关系运算符关系运算符关系运算符 = = = !=逻辑运算符逻辑运算符逻辑运算符逻辑运算符! & |! & |位运算符位运算符位运算符位运算符 | & | &条件运算符条件运算符条件运算符条件运算符?:?:逗号运算符逗号运算符逗号运算符逗号运算符, ,其他运算符其他运算符其他运算符其他运算符* *、& & sizeofsizeof . - . - 等等等等3.8 算术运算符和算术表达式
14、算术运算符和算术表达式1.基本的算术运算符:基本的算术运算符:加法运算符,或正值运算符,如加法运算符,或正值运算符,如4+7,+1减法运算符,或负值运算符,如减法运算符,或负值运算符,如5-2,-4 * 乘法运算符,如乘法运算符,如3*4 / 除法运算符,如除法运算符,如5/4% 模运算符,或称求余运算符,模运算符,或称求余运算符,%两侧均应两侧均应为整型数据,如为整型数据,如7/4说明说明l l没有乘方运算符没有乘方运算符没有乘方运算符没有乘方运算符,要计算,要计算,要计算,要计算a a3 3要写作要写作要写作要写作 a*a*a a*a*a 的连乘,的连乘,的连乘,的连乘,或用标准库函数或用
15、标准库函数或用标准库函数或用标准库函数 pow(apow(a, 3), 3)l l “ “/ /” ”的运算对象可为各种类型数据,但是当进行两的运算对象可为各种类型数据,但是当进行两的运算对象可为各种类型数据,但是当进行两的运算对象可为各种类型数据,但是当进行两个整型数据相除时,运算结果也是整型数据个整型数据相除时,运算结果也是整型数据个整型数据相除时,运算结果也是整型数据个整型数据相除时,运算结果也是整型数据 l l“ “%” ”要求运算对象必须是整型数据,功能是求两要求运算对象必须是整型数据,功能是求两要求运算对象必须是整型数据,功能是求两要求运算对象必须是整型数据,功能是求两数相除的余数
16、,余数的符号与被除数的符号相同。数相除的余数,余数的符号与被除数的符号相同。数相除的余数,余数的符号与被除数的符号相同。数相除的余数,余数的符号与被除数的符号相同。 9/4=29.0/4=2.259%4=1-9%4=-12. 算术表达式和运算符的优先级与结合性算术表达式和运算符的优先级与结合性l l由由运算符运算符将运算对象连接成的式子,称为将运算对象连接成的式子,称为算术表达式。算术表达式。l l运算符的优先级可以参考附录运算符的优先级可以参考附录C C。l l优先级相同的运算符,符合优先级相同的运算符,符合“左结合性左结合性”。a+b-c a=123;( ) + - + - * / % +
17、 - 同级 同级 同级 单目单目 双目双目 高高高高 低低低低3. 强制类型转换运算符强制类型转换运算符一般形式:一般形式:一般形式:一般形式:( (类型名类型名类型名类型名)( )(表达式表达式表达式表达式) ) 或或或或( (类型名类型名类型名类型名) )单个变量或常量单个变量或常量单个变量或常量单个变量或常量(int)a(int)2.3(float)(a+b)(float)a+b说明:在强制类型转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。main()float x;int i;i=(int)x;Printf(“x=%f,i=%dn”,x,i);4. 自增、自减运算符自增
18、、自减运算符l l+ -是单目运算符是单目运算符l l有前缀和后缀两种形式有前缀和后缀两种形式 前缀形式前缀形式: 先自增先自增(自减自减)再引用;再引用; 后缀形式后缀形式: 先引用再自增先引用再自增(自减自减);l l功能:功能: 前缀形式前缀形式 + a 等价于等价于 a = a + 1 - a 等价于等价于 a = a 1 后缀形式后缀形式 a + 等价于等价于 a = a + 1 a - 等价于等价于 a = a 1使变量的值增使变量的值增1 1或减或减1 14. 自增、自减运算符(举例)自增、自减运算符(举例)当当 a5 时时 +a 表达式的值为表达式的值为 6,且且 a6 a+
19、表达式的值为表达式的值为5 ,且且 a6 b=+a 等价于等价于 a=a+1; b=a 表达式的值为表达式的值为6,且且 a=6, b=6 b=a+ 等价于等价于 b=a; a=a+1 表达式的值为表达式的值为5,且,且 a=6, b=5 4. 自增、自减运算符(说明)自增、自减运算符(说明)l l+ 和和和和 - - 的运算对象只能是变量(或运算结果的运算对象只能是变量(或运算结果的运算对象只能是变量(或运算结果的运算对象只能是变量(或运算结果是变量的表达式)是变量的表达式)是变量的表达式)是变量的表达式), , 不能是常量(或运算结果是不能是常量(或运算结果是不能是常量(或运算结果是不能是
20、常量(或运算结果是数值的表达式)。数值的表达式)。数值的表达式)。数值的表达式)。 例如:例如:例如:例如: 5+5+、(a+2)+(a+2)+ 不合法。不合法。不合法。不合法。 l l具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。具有右结合性,结合方向为从右到左。例如:例如:例如:例如: a+ a+ 等价于等价于等价于等价于 -(a+) -(a+) l l如果有多个运算符连续出现时,如果有多个运算符连续出现时,如果有多个运算符连续出现时,如果有多个运算符连续出现时,C C系统尽可能多系统尽可能多系统尽可能多系统尽可能多的从左到右将字符组
21、合成一个运算符的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符的从左到右将字符组合成一个运算符例如:例如:例如:例如: i + ji + j 等价于等价于等价于等价于 ( i+)+j( i+)+j -i+-j-i+-j 等价于等价于等价于等价于 -(i+)+(-j)-(i+)+(-j) 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式l“=”为赋值运算符,如a3;l赋值表达式的一般形式为: 将将表达式的值表达式的值存入存入变量变量对应的内存单元对应的内存单元中中 m=12 b=a-2 x=(x = 5)a33.9 赋值运算符和赋值表达式(说明)赋值运算符和赋值表达式(说明)
22、l l赋值号左边必须是变量,右边可以是赋值号左边必须是变量,右边可以是C语言语言任意合法的表达式任意合法的表达式例如:例如:n= t +210 等价于:等价于:a= (b=( (b*c)10) )l l赋值号与数学中的等号含义不同赋值号与数学中的等号含义不同例如:数学中例如:数学中 a=b 等价于等价于 b=a C语言中语言中 a=b 不等价于不等价于 b=a3.9 赋值运算符和赋值表达式(续)赋值运算符和赋值表达式(续)l复合运算符:在赋值运算符前加上其它的运算符构成。l复合运算符的目的:简化程序和提高编译效率。复合赋值运算符复合赋值运算符复合赋值运算符复合赋值运算符( (右结合)右结合)右
23、结合)右结合) += -= *= /= %= += -= *= /= %= &= |= = = &= |= = = =a+=3a=a+3等价x%=y+3x=x%(y+3)等价3.10 逗号运算符和逗号表达式逗号运算符和逗号表达式l l逗号运算符:逗号运算符:,l l逗号表达式:逗号表达式:用逗号运算符连接的表达式。l l一般形式:一般形式: 表达式1,表达式2,表达式n 逗号表达式的值为表达式n的值。l l逗号表达式的优先级是最低的。如:逗号表达式的优先级是最低的。如: int a=3; a=3*5,a*4 a=? x=(a=3,6*a) 赋值表达式,x=18 x=a=3,6*a 逗号表达式,
24、?并不是任何地方出现的逗号都是作为逗号运算符,如: printf(“%d,%d,%d”,a,b,c); “a,b,c”为函数的3个参数,逗号为参数间的分隔符。 printf(“%d,%d,%d”,(a,b,c),b,c); “( a,b,c )”为逗号表达式,其值等于c的值。课堂练习课堂练习1313. .设整型变量设整型变量设整型变量设整型变量a a的值为的值为的值为的值为2 2,下列表达式值为,下列表达式值为,下列表达式值为,下列表达式值为1 1的是的是的是的是_。(2004-1)(2004-1)A)A) a%3 a%3 B)B) a/3 a/3 C)C) -a -a D) D) a+a+1
25、414. . 设变量设变量设变量设变量a a、b b、c c已定义并赋值,则下列表达式已定义并赋值,则下列表达式已定义并赋值,则下列表达式已定义并赋值,则下列表达式中符合中符合中符合中符合C C语言语法规则的是语言语法规则的是语言语法规则的是语言语法规则的是_。(2004-1)(2004-1)A) A) a=5+ a=5+ B) B) a=b=c+ a=b=c+ C) C) a=%2 a=%2 D) D) b=a+1=2b=a+1=21616. . 下列式中,最终运算结果的数据类型不是单精下列式中,最终运算结果的数据类型不是单精下列式中,最终运算结果的数据类型不是单精下列式中,最终运算结果的数
26、据类型不是单精度的表达式是度的表达式是度的表达式是度的表达式是_。A)A)(int)(3+3.0) (int)(3+3.0) B)B)1e-3 1e-3 C)C) (float)(3) (float)(3) D)D)(int)3.0+3.0(int)3.0+3.01717. .字符串字符串字符串字符串” ”abx4134cd102y”abx4134cd102y”的长度是的长度是的长度是的长度是_。(2004-12004-1)A)A)10 10 B)B)12 12 C)C)14 14 D)D)1818课堂练习课堂练习(续续)1818. . 设整型变量设整型变量设整型变量设整型变量x,y,zx,y
27、,z均为均为均为均为2 2,表达式,表达式,表达式,表达式( (x+)+(y+)+(zx+)+(y+)+(z+)+)的值是的值是的值是的值是_。(2004-1)(2004-1) A)A) 6 6 B)B) 7 7 C)C) 8 8 D)D) 9 91 1. .设设设设intint a=3,b=5;float x=7.5,y=3.5; a=3,b=5;float x=7.5,y=3.5;则表达式则表达式则表达式则表达式(float)a+b/2+(int)x%(int)y;(float)a+b/2+(int)x%(int)y;的值是的值是的值是的值是_。(2004-1)(2004-1)2323.
28、.执行语句:执行语句:执行语句:执行语句:intint a; a=1+1.5; a; a=1+1.5;后,正确的叙述是后,正确的叙述是后,正确的叙述是后,正确的叙述是_。(2005-12)(2005-12)A)A)a a的值是字符的值是字符的值是字符的值是字符 3 3 B)B)a a的值是浮点型的值是浮点型的值是浮点型的值是浮点型C)C)不允许字符型和浮点型相加不允许字符型和浮点型相加不允许字符型和浮点型相加不允许字符型和浮点型相加D)D)a a的值是字符的值是字符的值是字符的值是字符 11的的的的ASCIIASCII码值加上码值加上码值加上码值加上1 1课堂练习课堂练习(续续)2424. .
29、 设设设设intint类型的数据长度为类型的数据长度为类型的数据长度为类型的数据长度为2 2个字节,则个字节,则个字节,则个字节,则unsigned unsigned intint类型数据的取值范围是类型数据的取值范围是类型数据的取值范围是类型数据的取值范围是_。(2005-12)(2005-12)A)A)均为均为均为均为2 2个字节个字节个字节个字节 B)B)065535065535C)C)-3276832767 -3276832767 D)D)-256-256至至至至2552552525. . 执行下列语句后,运行结果为执行下列语句后,运行结果为执行下列语句后,运行结果为执行下列语句后,运
30、行结果为_。(2005-12)(2005-12)main()main() intint i=3,j; i=3,j; j=+ j=+i+ii+i+;+; printf(“%dn”,jprintf(“%dn”,j); ); A)A) 6 6 B)B) 7 7 C)C) 8 8 D)D) 9 9课堂练习课堂练习(续续)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)作业作业待定!待定!