C语言【清华大学出版社】西安交通大学课件第03章_第1页
C语言【清华大学出版社】西安交通大学课件第03章_第2页
C语言【清华大学出版社】西安交通大学课件第03章_第3页
C语言【清华大学出版社】西安交通大学课件第03章_第4页
C语言【清华大学出版社】西安交通大学课件第03章_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第三章第三章 数据类型、运算符和表达式数据类型、运算符和表达式13.1 C3.1 C语言数据类型语言数据类型3.1.1 C语言数据类型语言数据类型 整型 字符型 实型(浮点型) 枚举类型 数组 结构体类型 共用体类型 单精度型双精度型基本类型构造类型指针类型空类型数据类型23.2 3.2 常量与变量常量与变量3.2.1常量常量1.定义:定义:在程序执行期间,其值不可改变的量称为常量在程序执行期间,其值不可改变的量称为常量2.类型:类型:数值常量数值常量 例如:例如:10,3 , 2.68等等符号常量符号常量 即用一个符号代表一个常量即用一个符号代表一个常量 例如例如: #define PRIC

2、E 30 main( ) int num,total; num=10, total=num*PRICE; printf(“total%d”,total); 3说明:说明: 符号常量必须符号常量必须先定义先定义后才能用它表示一后才能用它表示一个数值。个数值。 符号常量的值在其作用域内不能改变,符号常量的值在其作用域内不能改变,也不能再被赋值。也不能再被赋值。 符号常量名习惯用符号常量名习惯用大写大写字母表示。字母表示。4符号变量的好处(1)含义清楚。定义符号常量名时应考虑“见名知意”。 (2)在需要改变一个常量时能做到“一改全改”。53.2.2变量变量1. 定义:定义:程序执行期间值可以改变的量

3、。2.命名规则命名规则: 变量名由标识符表示,只能由字母字母、数字数字和下划线下划线三种字符组成,且第一个字符必须为字母字母或下划线下划线。 例如: M.D.John , %gf , add , _ce36 , age& , 5thclass, lotus-1-2-3 , cd*ef , float 注意,C语言区分大小写,大写字母和小写字母被认为是两个 不同的字符。因此,sum和SUM,Class和class是两个不同的变 量名。 3. 变量要变量要“先定义,后使用先定义,后使用” 定义格式:定义格式:类型说明符类型说明符 标识符标识符1, ,1, ,标识符标识符n n 例如:int

4、 x, y, z; (每个变量分配 2个 字节) float a, b, c, d; (每个变量分配 4个 字节)6在在C语言中,变量必须强制定义,其目的:语言中,变量必须强制定义,其目的:1、凡未被事先定义的,不作为变量名。2、每一个变量被指定为一确定的类型,在编译时就能为 其分配相应的存储单元。3、指定每一个变量为一确定的类型,在编译时据此检查 该变量所进行的运算是否合法。 73.33.3整型数据整型数据3.3.1整型常量的表示法整型常量的表示法十进制整数十进制整数 :由数字(0-9)和正负号表示 例如:123、-456、0 等 023不合法的十进制整数八进制整数八进制整数:以0开头数是八

5、进制数 例如: 0123 即(123)8 =( 83) 10 (123) 8=182+2 81+3 80 =( 83) 10十六进制整数十六进制整数:以0 x或0X开头, 例如: 0 x123 即 (123) 16 =( 291) 10 -0 x12 即 (-12) 16 =( -18 ) 1083.3.2 整型变量整型变量1. 整型数据在内存中的存放形式(补码表示法:便于加减运算)整型数据在内存中的存放形式(补码表示法:便于加减运算)2. int i;3. i=10;4. 5. 10=(1010)2 2102522210余数0101首位0 0 0 0 0 0 0 0 0 0 0 0 1 0

6、1 00 0 0 0 0 0 0 0 0 0 0 0 1 0 1 01 1 1 1 1 1 1 1 1 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 010的原码取反取反后再加1,得-10的补码10的表示法的表示法,正数的补码等于它的原码正数的补码等于它的原码-1092整型变量的分类整型变量的分类 基本型:以 intint 表示 短整型:以 short short intint 或 shortshort 表示 1.类型 长整型:以 long long intint 或 longlong 表示 (123l、 123L) 无符号基本型(unsigned u

7、nsigned intint) 无符号型 无符号短整型(unsigned shortunsigned short) 无符号长整型(unsigned longunsigned long)(-3276832767)一个无符号整型变量中可以存放的正数的范围比一般整型变量中正数的范围扩大一倍。int a; /* 变量a 的数值范围: -3276832767 */unsigned int b; /* 变量b的数值范围:065535 */1011 整型变量的字长 short型 字长16位(2个字节)。 long 型 字长32位(4个字节)。 int 型 随编译程序而定(可以是2个字节,也可以是4个字节)

8、C要求 long型数据长度不短于int型, short型不长于int型。( short=int2 逻辑表达式,如:逻辑表达式,如:35&a=b 条件表达式,如:条件表达式,如:ab?a:b 逗号表达式,如:逗号表达式,如:a=3,b=4,c=5323.83.8算术运算符和算术表达式算术运算符和算术表达式1、基本的算术运算符、基本的算术运算符: + - * / %说明:()上述运算符均为双目运算符(即有两个操作数)(2)在“”运算中,若操作数均为整数,则执行整除运算,舍去小数部分。例如:5/3=1(3)“”要求两侧均为整数,“”运算不能用于float 和 double型数据例如:2332

9、 2、算术表达式和运算符的优先级与结合性、算术表达式和运算符的优先级与结合性(1)算术表达式:用算术运算符和括号将操作数连接起来的,符合语法规则的式子。运算对象包括常量、变量、函数等。 例如: a + b + a*b/c +2.8(2)优先级:优先级:高于(3)结合性结合性: “自左至右的结合方向” 例如:a - b + c3 3、强制类型转换强制类型转换作用:可以利用强制类型转换运算符将一个表达式转换成所需类型。 形式:(类型名)(表达式)例如:( double) (a+b)34说明:()表达式应用括号括起例如:(int)(x+y) ; 如果写成 (int)x+y 则只将x转换成整型,然后与

10、y相加。 若要得到x/2的小数部分,应写为: (float)x/2 还是 (float) (x/2)()在强制类型转换时,得到一个所需类型的中间变量,原来变量类型未发生变化。例如:float x=8.6 ; int y; y=(int)x ;35请看下面程序段请看下面程序段: main( ) float x; int i; x=3.6; i=(int)x; printf(“x=%f, i=%d”,x,i);输出结果输出结果: x=3.600000, i=3注意:强制类型转换后并不改变原来变量的类型注意:强制类型转换后并不改变原来变量的类型36从上可知,有两种类型转换,一种是在运算时不必用户指定

11、,系统自动进行的类型转换,如3+65。第二种是强制类型转换。当自动类型转换不能实现目的时,可以用强制类型转换。如“”运算符要求其两侧均为整型量,若x为float型,则“x3”不合法,必须用:“(int)x3”。从附录可以查到,强制类型转换运算优先于运算,因此先进行(int)x的运算,得到一个整型的中间变量,然后再对3求模。此外,在函数调用时,有时为了使实参与形参类型一致,可以用强制类型转换运算符得到一个所需类型的参数。 374、自增、自减运算符(、)、自增、自减运算符(、)作用:作用:使变量的值增或减,类似于i=i+1。如:i , i (使用之前,先使i的值加(减)1)i, i (使用之后,使

12、i的值加(减)1) +i 先执行i=i+1,再使用i的值 i+ 先使用i的值,再执行i=i+1 举例:举例: int j,i=3; j=+i; /*j的值为的值为4,i为为4*/ j=i+; /*j的值为的值为4,然后然后i的值变为的值变为5 */ j=-i+; /*j的值的值-5,然后,然后i的值变为的值变为6 */38说明:(1)为单目运算符(2)+ 、只能用于变量,而不能用于常量或表达式。 例如:,(x+y)+,+a, b+ 中合法的为:(3)自增、自减运算符为右结合性(即自右至左)。例如:a+ (a+) 错误的结合(-a)+例如int a = 3。那么printf(“%d”,-a+)输

13、出什么?34、自增、自减运算符(、)、自增、自减运算符(、)39练习题练习题1.设a=2, 则执行语句 k=+a+a+ 后的 k值为多少?2. (k=6, a=4)2.a=(i+)+(i+)+(i+) i的初始值为1 ?3.a=3, i=43.printf(“%d,%d”,i, i+) i的初始值为1 ?4.2,1 请避免这种写法403.9 3.9 赋值运算符和赋值表达式赋值运算符和赋值表达式1、 赋值运算符(赋值运算符(=)形式:变量名=常量或表达式作用:将右边常量或表达式的值赋给左边的变量例如: b=c+d 要求要求:如果表达式类型与左边的变量的类型不:如果表达式类型与左边的变量的类型不

14、匹配,自动进行类型转换。匹配,自动进行类型转换。 412、类型转换的原则、类型转换的原则(1) 将实型数据赋给整型变量时将实型数据赋给整型变量时,舍弃实数的小数部分舍弃实数的小数部分 如:若如:若a为为int型变量,型变量, 执行执行a=3.56后,后,则则a的值的值3 (2) 将整型数据赋给实型数据时将整型数据赋给实型数据时,数值不变数值不变,但以浮点但以浮点 形式存储到变量中。形式存储到变量中。 如:若如:若b为为float型变量,执行型变量,执行b=35后,后,则则b为为35.00000 若若d为为double型变量,执行型变量,执行d=23后,则后,则d为为 2300000000000

15、000 (3) 整型数据赋给字符型变量时整型数据赋给字符型变量时, 只将低只将低8位原封位原封不动地送到字符变量中(即截断)。不动地送到字符变量中(即截断)。0010 00010000 0001 0010 0001如:i=289c=33 c=!42(4) 字符型数据赋给整型变量时字符型数据赋给整型变量时, 将字符数据将字符数据(8位位)放到整型变量低放到整型变量低8位中。高位中。高8位则需要依据位则需要依据“符符号扩展号扩展”来决定。来决定。例1(无符号字符数据赋给整型变量) unsigned char c; int i; c=254; i=c;1111 1110c= 254i=254 000

16、0 0000 1111 1110例2(Turbo C 系统把字符处理为带符号的) char c; int i; c=254; i=c; /* 变量c 以整数形式输出为-2 */1111 1110c= 254i=-2 1111 1111 1111 111043(5)double 赋给赋给 float 时,截取前面时,截取前面7位有效数字。位有效数字。但应注意数值范围不能溢出但应注意数值范围不能溢出 。如:。如: float f; double d=123456789e100; f=d;就会出现溢出。;就会出现溢出。 将一个将一个float型数据赋给型数据赋给double变量时,数值不变,变量时,

17、数值不变,有效位数扩展到有效位数扩展到16位,在内存中以位,在内存中以64位位(bit)存储。存储。 (6)将带符号的整型数据)将带符号的整型数据(int型型)赋给赋给long型变量时,型变量时,要进行符号扩展,将整型数的要进行符号扩展,将整型数的16位送到位送到long型低型低16位位中,如果中,如果int型数据为正值型数据为正值(符号位为符号位为0),则,则long型变量型变量的高的高16位补位补0;如果;如果int型变量为负值型变量为负值(符号位为符号位为1),则,则long型变量的高型变量的高16位补位补1,以保持数值不改变。,以保持数值不改变。 若将一个若将一个long型数据赋给一个

18、型数据赋给一个int型变量,只将型变量,只将long型数据中低型数据中低16位原封不动地送到整型变量位原封不动地送到整型变量(即截断即截断)。 44 (7)将将unsigned int型数据赋给型数据赋给long int型变量时,不型变量时,不存在符号扩展问题,只需将高位补存在符号扩展问题,只需将高位补0即可。将一个即可。将一个unsigned类型数据赋给一个占字节数相同的整型变量类型数据赋给一个占字节数相同的整型变量(例如:例如:unsigned int=int,unsigned long=long,unsigned short=short),将,将unsigned型变量的内容原型变量的内容

19、原样送到非样送到非unsigned型变量中,但如果数据范围超过相型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。应整型的范围,则会出现数据错误。 (8)将非将非unsigned型数据赋给长度相同的型数据赋给长度相同的unsigned型型变量,也是原样照赋变量,也是原样照赋(连原有的符号位也作为数值一起连原有的符号位也作为数值一起传送传送)。 45例3:(带符号int型数据赋给long型变量) int a; long b; a=254; b=a;0000 0000 0000 0000 0000 0000 1111 1110a=254 0000 0000 1111 1110b=254

20、 例4:(带符号int型数据赋给long型变量) int a; long b; a=-2; b=a;1111 1111 1111 1111 1111 1111 1111 1110a=-2 1111 1111 1111 1110b=-2 46例5: (无符号int型数据赋给long型变量) unsigned int a; long b; a=65534; b=a;0000 0000 0000 0000 1111 1111 1111 1110a=65534 1111 1111 1111 1110b=65534 例6: (有符号数据赋给无符号变量) int a; unsigned int b; a=

21、-2; b=a;1111 1111 1111 1110a=-2 1111 1111 1111 1110b=65534 473、复合赋值运算符复合赋值运算符复合赋值运算符:在赋值符“=”之前加上其它运算符凡是二元(二目)运算符,都可以与赋值符一起组合成复合赋值符。所以C语言共有10种复合赋值运算符 += ,=, ,&, =, |=48例如:a+=3 a=a+3 x*=y+3 x=x*(y+3)4、 赋值表达式赋值表达式定义:由赋值运算符将一个变量和一个表达式连接起来的式子式子。形式: 变量变量 = 表达式表达式说明: 赋值表达式的值为被赋值的变量的值。赋值表达式的值为被赋值的变量的值。例如:a=b=c=6 a=(b=4)+(c=6) a=(b=4)*(c=6)49 练习:写出顺序执行下列表达式运算后的x值: 1. x=a=b=10 2. x=25%(c=3) X=10X=1赋值表达

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论