1、第二章 数据类型、运算符、表达式、赋值语句、输入输出1课程名称:语言程序设计课型与教法:讲授学时:2课时授课题目: 第章 数据类型、运算符、表达式、赋值语句、输入输出基本教材:语言程序设计(高等教育出版社)廖雷主编教学目的与要求:通过本章的学习使学生熟悉语言的关键词、标识符、数据类型,掌握字符串常量与字符常量的区别、转义字符的使用、变量的定义。教学重点与难点:数据类型,不同数据类型的使用范围;变量的定义 2 C语言的词法记号语言的词法记号 数据类型数据类型 常量与变量常量与变量 运算符和表达式运算符和表达式 类型转换类型转换 数据输出数据输出 数据输入数据输入第二章 数据类型、运算符、表达式、
2、赋值语句、输入输出第二章 数据类型、运算符、表达式、赋值语句、输入输出3C语言的词法记号C语言编写的程序是由各种不同的词法记号构成词法记号:程序中具有独立含义的不可进一步分割的单位共5类: 关键词 标识符 常量 运算符 分隔符 ( ) * . : = ; #第二章 数据类型、运算符、表达式、赋值语句、输入输出4关键词:C语言中预定义的符号,有固定的含义(32个)用途:存储类别 auto extern register static 类型定义 typedef流程控制 break case continue default do else goto if return switch while f
3、or数据类型 int long short float double char signed unsigned struct union enum void const volatile运算符 sizeof 用户定义的任何名字不得与关键词冲突 准关键词:有固定的含义用途:预处理命令:define endif include ifdef ifndef line undef库系统函数名:scanf、printf等允许准关键词另作它用建议不对这些准关键词另作它用。关键词第二章 数据类型、运算符、表达式、赋值语句、输入输出5关键词用途说明char一个字节长的字符值short短整数int 整数unsig
4、ned数无符号类型,最高位不作符号位long长整数float据单精度实数double双精度实数struct类用于定义结构的关键词union用于定义联合(共用体)的关键词void型空类型,用它定义的对象不具有任何值enum定义枚举类型的关键词signed有符号类型,最高位作符号位const表明这个量在程序执行过程中不可变volatile表明这个量在程序执行过程中可被隐含地改变第二章 数据类型、运算符、表达式、赋值语句、输入输出6关键词用途说明break退出最内层的循环或switch语句caseswitch语句中的情况选择continue 流跳到下一轮循环defaultswitch语句中其余情况标
5、号do程在dowhile循环中的循环起始标记 elseif语句中的另一种选择for控带有初值、测试和增量的一种循环goto转移到标号指定的地方if制语句的条件执行return返回到调用函数switch从所有列出的动作中作出选择while在while和dowhile循环中语句的条件执行第二章 数据类型、运算符、表达式、赋值语句、输入输出7关键词用途说明typedef用于定义同义数据类型auto存自动变量register 储寄存器类型static类静态变量extern别外部变量说明sizeof运算符计算表达式和类型的字节数第二章 数据类型、运算符、表达式、赋值语句、输入输出8定义:用户自行定义的符
6、号,用来标识变量、常量、函数、标号等组成:只能由字母、数字、下划线(_)组成,且第一个字符必须是字母或下划线大小写敏感不能使用关键词长度:最长32个字符命名原则:见名知意不宜混淆 如l与I, o与0常用大写字母表示常量标识符,变量等其他类型标识符用小写字母表示系统内部使用了一些用下划线开头的标识符,建议定义标识符时尽量不用下划线开头,以防止冲突例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123M.D.John3days#33char$123ab标识符 第二章
7、数据类型、运算符、表达式、赋值语句、输入输出9数据类型总表C数据类型基本类型构造类型指针类型空类型 void定义类型 typedef字符类型 char枚举类型 enum整 型浮点型单精度型 float双精度型 double数组结构 struct联合 union短整型 short长整型 long整型 int数据类型决定:1. 数据占内存字节数2. 数据取值范围3. 其上可进行的操作数据类型第二章 数据类型、运算符、表达式、赋值语句、输入输出10类型符号关键词数的表示范围所占位数整型字符型浮点型有无(signed)int16-3276832767(signed)short16-3276832767
8、(signed)long32-2147483648214748364716unsigned int0655353204294967295unsigned longunsigned short16065535有float323.4e-383.4e38有double641.7e-3081.7e308有char 8 -128127无unsigned char 8 0255说明:数据类型所占字节数随机器硬件不同而不同,上表以IBM PC机为例请看int和unsigned int基本数据类型 第二章 数据类型、运算符、表达式、赋值语句、输入输出11 一般用大写字母 是宏定义预处理命令,不是C语句 整型常
9、量 请点击: 浮点型常量 请点击: 字符常量 请点击: 字符串常量 请点击:如 #define PRICE 30定义:程序运行时其值不能改变的量分类: 符号常量:用标识符代表常量 定义格式: #define 符号常量 常量例 符号常量举例(ch2_1.c)#include #define PRICE 30main() int num,total; num=10; total=num*PRICE; printf(total=%d,total);运行结果:total=300常量 第二章 数据类型、运算符、表达式、赋值语句、输入输出12 三种表示形式: 十进制整数:由数字09和正负号表示.如 327
10、67, 123,-456,0 八进制整数:由数字0开头,后跟数字07表示.如0123,011 十六进制整数:由0 x或0X开头,后跟09,af,AF表示. 如0 x123,0Xff例 12 与 12L 12 为int型 12L 为long int型例 30000 为int型 65536 为long int 型 整型常量的类型 根据其值所在范围确定其数据类型 在整常量后加字母l或L,认为它是long int 型常量问题:0123 = ( )100 x123 = ( )100Xff = ( )1083291255问题:0123 = ( )100 x123 = ( )100Xff = ( )10整型
11、常量(整常数)整型常量(整常数) 第二章 数据类型、运算符、表达式、赋值语句、输入输出13 表示形式: 十进制数形式:(必须有小数点) 如0.123, .123, 123.0, 0.0, 123. 指数形式:(e或E之前必须有数字;指数必须为整数)如12.3e3 ,123E2, 1.23e4 , e-5 , 1.2E-3.5 浮点常量的类型 默认double型 在浮点常量后加字母f或F,认为它是float型浮点常量(实型常量、实数或浮点数)浮点常量(实型常量、实数或浮点数)e-51.2E-3.5 第二章 数据类型、运算符、表达式、赋值语句、输入输出14 定义:用单引号括起来的单个普通字符或转义
12、字符. 字符常量的值:该字符的ASCII码值如 101 -A 012 -n x40 - x61 -a 60 -0 483 -()A-101-x41-65如 a A ? n 101 转义字符:反斜线后面跟一个字符或一个代码值表示例 转义字符举例(ch2_2.c) main() printf(101 x42 Cn); printf(I say:How are you?n); printf(C Programn); printf(Turbo C );运行结果:运行结果:(屏幕显示屏幕显示)A B CI say:”How are you?”C ProgramTurbo C例 main() printf
13、(“Yb=n”); /*ch2_3.c*/ 运行结果:运行结果:屏幕显示:屏幕显示:=打印机输出:打印机输出:字符常量字符常量如 A65, a97, 048, n10 注意:和是不合法的字符常量转义字符及其含义:转义字符含义nvrdddtbf”xhh转义字符含义换行竖向跳格回车单引号3位8进制数代表的字符横向跳格(Tab)退格换行但不回车反斜线双引号2位16进制数代表的字符第二章 数据类型、运算符、表达式、赋值语句、输入输出15 字符常量与字符串常量不同 定义:用双引号(“”)括起来的字符序列 存储:每个字符串尾自动加一个 0 作为字符串结束标志h e l l o 0例 字符串“hello”在
14、内存中6565 0例 a“a”例 空串 “”0字符串常量字符串常量 第二章 数据类型、运算符、表达式、赋值语句、输入输出16概念:其值可以改变的量变量代表某个存储空间及其所存储的数据变量名、变量值和变量的地址 变量名:标识变量的名字,与内存中的某一存储空间相联系 变量值:在这个存储空间中存储的数据 变量的地址:这个存储空间的首地址 在程序中通过变量名来引用变量值赋值:向变量所代表的存储空间传送数据的操作。赋值操作用“=”表示 变量变量例: a=1; a=a+1; b=a;.2字节&c=6300.内存-3变量名变量地址变量值int c第二章 数据类型、运算符、表达式、赋值语句、输入输出17编译程
15、序根据变量定义为其分配指定字节的内存单元.地址int a=1, b=-3,c;abc2字节2字节2字节地址地址.内存1-3随机数概念:其值可以改变的量变量代表某个存储空间及其所存储的数据变量说明的一般格式: ,; 变量初始化:说明时赋初值;可对被说明变量的部分初始化 例: int a,b,c; float data; char ch1; double z;合法标识符例: int a=2,b,c=4; float data=3.67; char ch=A; int x=1,y=1,z=1; 变量的使用:先说明,后使用例 int student; stadent=19; /*Undefined s
16、ymbol stadent in function main*/ 变量说明位置:一般放在函数开头main() int a,b=2; float data; a=1; data=(a+b)*1.2; printf(“data=%fn”,data);变量说明可执行语句main() int a,b=2; a=1; float data; data=(a+b)*1.2; printf(“data=%fn”,data);变量变量决定分配字节数和数的表示范围第二章 数据类型、运算符、表达式、赋值语句、输入输出18一个运算符计算表达式和类型的字节数格式:sizeof(类型标识符或表达式)字符型变量 字符变量
17、存放字符ASCII码 char与int数据间可进行算术运算例 int a; char ch; a=D; /* a=68; */ ch=8+0; /* ch=8; */ ch=E+a-A /* ch=e; */ ch=65; /* ch=A; */没有字符串变量,用字符数组存放sizeofsizeof例 int a,b; float f; a=sizeof(b); /* a=2; */ a=sizeof(float); /* a=4; */ b=sizeof(12L); /* b=4; */第二章 数据类型、运算符、表达式、赋值语句、输入输出19/*ch2_4.c*/ #define PRICE
18、 12.5 main() int num=3; float total; char ch1,ch2=D; total=num*PRICE; ch1=ch2-A+a; printf(“total=%f,ch1=%cn”,total,ch1); 宏定义变量说明输出结果运行结果:total=37.500000, ch1=d例子 第二章 数据类型、运算符、表达式、赋值语句、输入输出20课程名称:语言程序设计课型与教法:讲授学时:2课时授课题目: 第章 数据类型、运算符、表达式、赋值语句、输入输出基本教材:语言程序设计(高等教育出版社)廖雷主编教学目的与要求:通过本章的学习使学生熟悉C语言的运算符和表达
19、式,掌握算术逻辑关系赋值运算符和表达式、位运算、各类数据混合运算、类型转换。 教学难点:运算符的优先级问题、类型转换教学重点:算术逻辑关系赋值运算符和表达式;位运算 第二章 数据类型、运算符、表达式、赋值语句、输入输出21C C运运算算符符算术运算符:算术运算符:+ - + - * * / % + - / % + -关系运算符:关系运算符: = != = !=逻辑运算符:!逻辑运算符:! & |& |位运算符位运算符 : | & | &赋值运算符:赋值运算符:= = 及其复合赋值运算符及其复合赋值运算符条件运算符:条件运算符:?:?:逗号运算符:逗号运算符:, ,指针运算符:指针运算符:* *
20、 & &求字节数求字节数 :sizeofsizeof强制类型转换:(类型)强制类型转换:(类型)分量运算符:分量运算符:. -. -下标运算符:下标运算符:其其 它:它:( )( )等等 运算符和表达式第二章 数据类型、运算符、表达式、赋值语句、输入输出22运算符功能运算符功能与运算量关系与运算量关系要求运算量个数要求运算量个数要求运算量类型要求运算量类型运算符优先级别运算符优先级别一个运算量的两侧有不同的运算符,先执行一个运算量的两侧有不同的运算符,先执行“优先级优先级别别”高的运算高的运算结合方向结合方向一个运算量的两侧有两个相同优先级别的运算符,则一个运算量的两侧有两个相同优先级别的运算
21、符,则按结合方向顺序处理。按结合方向顺序处理。两种:两种:自左向右的结合方向(左结合性)自左向右的结合方向(左结合性)自右向左的结合方向(右结合性)自右向左的结合方向(右结合性)结果的类型结果的类型学习运算符应注意学习运算符应注意第二章 数据类型、运算符、表达式、赋值语句、输入输出23运算符运算符结合性结合性1515( ) - .( ) - .左左1414! + - ! + - - -(负号运算符)(负号运算符) (type) (type) * *(取内容运算符)(取内容运算符) & &(取地址运算符)(取地址运算符) sizeofsizeof右右1313* *(乘法运算符)(乘法运算符) /
22、 %/ %左左1212+ + - -(减法运算符)(减法运算符)左左1111 左左1010 = =左左9 9= != !=左左8 8& &(按位与运算符)(按位与运算符)左左7 7 左左6 6| |左左5 5&左左4 4|左左3 3?:?:右右2 2= += -= = += -= * *= /= %= = |= &= = = ) - * * / % - + - / % - + -(减号)(减号) (14) (13) (12)(14) (13) (12) 说明:说明:两整数相除,结果为整数,舍小数部分;否则为两整数相除,结果为整数,舍小数部分;否则为doubledouble型型% %要求两侧均为
23、整型数据要求两侧均为整型数据例例 5/2 = -5/2.0 =例例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2算术运算符和算术表达式算术运算符和算术表达式2-2.51-110( )第二章 数据类型、运算符、表达式、赋值语句、输入输出25自增、自减运算符自增、自减运算符+ -+ -作用:使变量值加作用:使变量值加1 1或减或减1 1种类:种类:前置前置 +i,-i (+i,-i (先执行先执行i=i+1i=i+1或或i=i-1i=i-1,再使用,再使用i i值)值)后置后置 i+,i- (i+,i- (先使用先使用i i值值, ,再执行再执行i=i+1i=i+1或或i=i-1
24、i=i-1)例例 j=3; k=+j; j=3; k=j+; a=3; b=5; c=(+a)*b; a=3; b=5; c=(a+)*b; j=j+1; k=j; /k=4,j=4/k=4,j=4k=j; j=j+1; /k=3,j=4/k=3,j=4/c=20,a=4/c=20,a=4/c=15,a=4/c=15,a=4算术运算符和算术表达式算术运算符和算术表达式第二章 数据类型、运算符、表达式、赋值语句、输入输出26说明:说明: + - + - 不能用于常量和表达式不能用于常量和表达式, ,如如5+5+,(a+b)+(a+b)+ + - + - 结合方向:结合方向: 自右向左自右向左 优
25、先级:优先级:- - + - -+ - -* * / % -+ - / % -+ - (14) (13) (12)(14) (13) (12)自增、自减运算符自增、自减运算符+ -+ -作用:使变量值加作用:使变量值加1 1或减或减1 1种类:种类:前置前置 +i, -i (+i, -i (先执行先执行i+1i+1或或i-1i-1,再使用,再使用i i值)值)后置后置 i+,i- (i+,i- (先使用先使用i i值值, ,再执行再执行i+1i+1或或i-1i-1)算术运算符和算术表达式算术运算符和算术表达式第二章 数据类型、运算符、表达式、赋值语句、输入输出27简单赋值运算符简单赋值运算符符
26、号:符号: = =格式:格式: = 作用:将作用:将 的值赋给的值赋给 复合赋值运算符复合赋值运算符种类:种类:+= -= += -= * *= /= %= = /= %= = = = &= = |= &= = |=含义:含义: var1 op= exp1var1 op= exp1 var1 = var1 op exp1var1 = var1 op exp1a+=3a=a+3x*=y+8x=x*(y+8)x%=3x=x%3例例 a=3;a=3; d=func(); d=func(); c=d+2; c=d+2;赋值运算符和表达式赋值运算符和表达式第二章 数据类型、运算符、表达式、赋值语句、输入
27、输出28赋值表达式是表达式,则可嵌套,其值就是被赋值后变赋值表达式是表达式,则可嵌套,其值就是被赋值后变量的值量的值结合方向:结合方向:自右向左自右向左优先级优先级: : 2 2左侧必须是数值变量、结构成员、间接指针和数组分左侧必须是数值变量、结构成员、间接指针和数组分量中的一个,不能是常量或其它表达式量中的一个,不能是常量或其它表达式赋值转换赋值转换规则规则: :使赋值号右边表达式值使赋值号右边表达式值自动自动转换成其左转换成其左边变量的类型边变量的类型例例 3=x-23=x-2* *y;y; a+b=3; a+b=3; 例例 int i; int i; i=2.56; / i=2.56;
28、/结果结果i=2;i=2;例例: a=b=c=5: a=b=c=5 a=(b=5) a=(b=5) a=5+(c=6) a=5+(c=6) a=(b=4)+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) a=(b=10)/(c=2)/表达式值为表达式值为5 5,a,b,ca,b,c值为值为5 5/表达式值表达式值5 5, b=5;a=5b=5;a=5/表达式值表达式值1111,c=6,a=11c=6,a=11/表达式值表达式值1010,a=10,b=4,c=6a=10,b=4,c=6/表达式值表达式值5 5,a=5,b=10,c=2a=5,b=10,c=2赋值运算符赋值运
29、算符说明(说明(1 1):):例例 float f; float f; int i; int i; i=10; i=10; f=i; f=i;则则 f=10.0f=10.0第二章 数据类型、运算符、表达式、赋值语句、输入输出29例例: int a=2;: int a=2; a%=4-1; a%=4-1; a=12; a=12; a+=a-=a a+=a-=a* *a a/a=-264 /a=-264 等价于等价于a=a+(a=a-(aa=a+(a=a-(a* *a)a)赋值表达式是表达式,则可嵌套其值就是被赋值后赋值表达式是表达式,则可嵌套其值就是被赋值后变量的值变量的值结合方向:结合方向:自
30、右向左自右向左优先级优先级: : 2 2左侧必须是变量,不能是常量或表达式左侧必须是变量,不能是常量或表达式赋值转换赋值转换规则规则: :使赋值号右边表达式值使赋值号右边表达式值自动自动转换成其转换成其左边变量的类型左边变量的类型赋值运算符赋值运算符说明(说明(2 2):):/a=2/a=2第二章 数据类型、运算符、表达式、赋值语句、输入输出30关系运算符关系运算符种类:种类: = != = !=结合方向:自左向右结合方向:自左向右优先级别:优先级别:关系表达式的值:是逻辑值关系表达式的值:是逻辑值“真真”或或“假假”,用,用1 1和和0 0表表示示=!=优先级优先级10(高)(高)优先级优先
31、级9(低)(低)例例 ca+b /c(a+b)ca+b /c(a+b) ab!=c /(ab)!=c ab!=c /(ab)!=c a=bc /a=(bc) a=bc /a=(bc /a=(bc) a=bc /a=(bc)例例 int a=3,b=2,c=1,d,f;int a=3,b=2,c=1,d,f; ab ab (ab)=c (ab)=c b+ca b+cb d=ab f=abc f=abc/表达式值表达式值1 1/表达式值表达式值1 1/表达式值表达式值0 0/d=1/d=1/f=0/f=0关系运算符和关系表达式关系运算符和关系表达式第二章 数据类型、运算符、表达式、赋值语句、输入输
32、出31例例 若若a=0; b=0.5; x=0.3;a=0; b=0.5; x=0.3; 则则 a=x=ba=x278278在在C C中是允许的,中是允许的, 值为值为0 0例例 int i=1, j=7,a; int i=1, j=7,a; a=i+(j%4!=0); a=i+(j%4!=0); 则则 a=a=2 2例:字符数据的比较按其例:字符数据的比较按其ASCIIASCII码进行码进行 a0 a0 结果为结果为 A100 A100 结果为结果为1 10 0关系运算注意(关系运算注意(1)第二章 数据类型、运算符、表达式、赋值语句、输入输出32例例 注意区分注意区分“= =”与与“=”=
33、” int a=0,b=1; int a=0,b=1; if(a if(a= =b) b) printf(“a equal to b”); printf(“a equal to b”); else else printf(“a not equal to printf(“a not equal to b”);b”);例例 应避免对应避免对浮点数浮点数作相等或不等的判断作相等或不等的判断原因:判定两个浮点数是否相等时,由于计算机存原因:判定两个浮点数是否相等时,由于计算机存储上出现的误差,会出现错误的结果储上出现的误差,会出现错误的结果如:如: 1.0/3.01.0/3.0* *3.0=1.0 3
34、.0=1.0 可改写为:可改写为:fabs(1.0/3.0fabs(1.0/3.0* *3.0-1.0)1e-63.0-1.0)1e-6关系运算注意(关系运算注意(2)第二章 数据类型、运算符、表达式、赋值语句、输入输出33ab!a!ba&ba|b真真假假真真假假假假假假真真真真逻辑运算符逻辑运算符种类:种类: ! !(逻辑非)(逻辑非) &(逻辑与)(逻辑与) |(逻辑或)(逻辑或)逻辑运算真值表逻辑运算真值表C C语言中语言中, ,运算量运算量: : 0 0表示表示“假假”, 非非0 0表示表示“真真” 运算结果运算结果: : 0 0表示表示“假假”, 1 1表示表示“真真”真真假假假假假
35、假假假假假真真真真假假假假真真真真真真假假真真真真逻辑运算符和表达式逻辑运算符和表达式第二章 数据类型、运算符、表达式、赋值语句、输入输出34! (14)& (5)| (4)高高低低例例 a=x & xb&xy a=b|x=y !a|abl 优先级:优先级:l 结合方向:结合方向:! : 从右向左从右向左& : 从左向右从左向右| : 从左向右从左向右/ (a=x) & (xb)&(xy)/(a=b)|(x=y)/(!a)|(ab)逻辑运算符和表达式(2)第二章 数据类型、运算符、表达式、赋值语句、输入输出35! (14)& (5)| (4)高高低低l优先级:优先级:l结合方向:结合方向:!
36、:从右向左从右向左& :从左向右从左向右| :从左向右从左向右例例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|83)&2)|(83)&2)|(8(4-(!0) 值为值为1 1逻辑运算符和表达式(逻辑运算符和表达式(3)第二章 数据类型、运算符、表达式、赋值语句、输入输出36短路特性短路特性:&和和|是短路运算符,在进行逻辑表达式求解时是短路运算符,在进行逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符逻辑运算符才能求出表达式的解时,才执行该运算符例
37、例 a&b&ca&b&c /只在只在a a为真时,才判别为真时,才判别b b的值;的值; 只在只在a a、b b都为真时,才判别都为真时,才判别 c c的值的值例例 a|b|ca|b|c /只在只在a a为假时,才判别为假时,才判别b b的值;的值; 只在只在a a、b b都为假时,才判别都为假时,才判别 c c的值的值例例 x=y=z=1; +x|+y&+z;x=y=z=1; +x|+y&+z;例例 x=y=z=1; +x&+y|+z;x=y=z=1; +x&+y|+z;/结果结果 x=2,y=z=1x=2,y=z=1逻辑运算符和表达式(逻辑运算符和表达式(4)! (14)& (5)| (4
38、)高高低低l优先级:优先级:l结合方向:结合方向:! : 从右向左从右向左& : 从左向右从左向右| : 从左向右从左向右/结果结果 x=y=2,z=1x=y=2,z=1第二章 数据类型、运算符、表达式、赋值语句、输入输出37位运算是指进行二进制位的运算位运算是指进行二进制位的运算位运算符位运算符位运算位运算位运算符位运算符含义含义复合赋值运复合赋值运算符算符含义含义 按位取反按位取反& 按位与按位与&=位与赋值位与赋值 按位异或按位异或=位异或赋值位异或赋值| 按位或按位或|=位或赋值位或赋值 左移左移 右移右移=右移赋值右移赋值优先级:优先级:2 2结合性:从右向左结合性:从右向左第二章
39、数据类型、运算符、表达式、赋值语句、输入输出38 (14)& (8) (7) | (6)高高低低l 优先级:优先级:l 结合方向:结合方向: : 从右向左从右向左& : 从左向右从左向右 : 从左向右从左向右 | : 从左向右从左向右位运算符aba&baba|b10100011b1011100000110110l 位运算规则:位运算规则:第二章 数据类型、运算符、表达式、赋值语句、输入输出39 (14)& (8) (7) | (6)高高低低例例 int x=0 x1234,y=0 x20A;int x=0 x1234,y=0 x20A; x|y x&y xy xl 优先级:优先级:l 结合方向
40、:结合方向: : 从右向左从右向左& : 从左向右从左向右 : 从左向右从左向右 | : 从左向右从左向右位运算符01000011001000011010000000100000( | )111000110010000101000011001000011010000000100000(&)000000000010000001000011001000011010000000100000()11100011000000010100001100100001()1011110011011110第二章 数据类型、运算符、表达式、赋值语句、输入输出40 (14)& (8) (7) | (6)高高低低l 优
41、先级:优先级:l 结合方向:结合方向: : 从右向左从右向左& : 从左向右从左向右 : 从左向右从左向右 | : 从左向右从左向右位运算符例例 x|y&z x|y& x|y&z z xy&z x&y&z x|x/ x|(y&z) / x|(y&(z)/ x(y&(z)/ (x&y)&z/ -1第二章 数据类型、运算符、表达式、赋值语句、输入输出41左移、右移运算符左移、右移运算符 作用:使变量各个位全部左移或右移若干位作用:使变量各个位全部左移或右移若干位优先级:优先级:1111结合性:从左向右结合性:从左向右说明:说明:左移后右边空位补零左移后右边空位补零对无符号数或正数右移后左端补对无符
42、号数或正数右移后左端补0 0;负数左端补;负数左端补1 1例例 int x=0 x8585, y=0 x85; unsigned z=0 x8585; x2; y2; z2;位运算符位运算符0101100001011000(x2)0001011000011110010101100000000000(y2)0001001000000000010101100001011000(z2)000101100001001001第二章 数据类型、运算符、表达式、赋值语句、输入输出42形式:形式: ,n结合性:从左向右结合性:从左向右优先级:优先级:1 1逗号表达式的值:等于逗号表达式的值:等于 n的值的值例
43、例 a=3*5,a*4 a=3*5,a*4,a+5例例 x=(a=3,6*3) x=a=3,6*a/a=15,表达式值表达式值60/a=15,表达式值表达式值20/赋值表达式,表达式值赋值表达式,表达式值18,x=18/逗号表达式逗号表达式,表达式值表达式值18,x=3逗号运算符和表达式逗号运算符和表达式例例:/*ch2_5.c*/#include main() int x,y=7; float z=4; x=(y=y+6,y/z); printf(x=%dn,x);运行结果:运行结果:x=3第二章 数据类型、运算符、表达式、赋值语句、输入输出43一般形式:一般形式: expr1 expr1
44、? ? expr2 expr2 : : expr3 expr3执行过程执行过程: :例例: : 求求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);expr1取取expr2值值取取expr3值值非非00例例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c0?1:(x0?1:(x0?-1:0)条件运算符与表达式 第二章 数据类型、运算符、表达式、赋值语句、输入输出44隐式转换隐式转换什么情况下发生什么情况下发生运算转换运算转换-不同类型数据混合运算时不同类型数据混合运算时赋值转换赋值转换-把一个值赋给与其类型不同的变量时把一个值赋给
45、与其类型不同的变量时输出转换输出转换-输出时转换成指定的输出格式输出时转换成指定的输出格式函数调用转换函数调用转换-实参与形参类型不一致时转换实参与形参类型不一致时转换运算转换规则运算转换规则: :不同类型数据运算时先不同类型数据运算时先自动自动转换成同一类转换成同一类型型类型转换类型转换第二章 数据类型、运算符、表达式、赋值语句、输入输出45doublefloatlongunsignedintchar,short低低高高说明说明:必定的转换必定的转换运算对象类型不同时转换运算对象类型不同时转换 char ch; int i; float f; double d;ch/i + f*d - (f
46、+i)intintdoubledoubledoubledoubledoubledouble例第二章 数据类型、运算符、表达式、赋值语句、输入输出46 一般形式:一般形式:( (类型名类型名) ) 例例: (int)(x+y): (int)(x+y) (int)x+y (int)x+y (double)(3/2) (double)(3/2) (int)3.6 (int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变说明:强制转换得到所需类型的中间变量,原变量类型不变 例例 main() float x; int i; x=3.6; i=(int)x; printf(“x=%f,i=
47、%d”,x,i); 结果:结果:x=3.600000,i=3较高类型向较低类型转换时可能发生较高类型向较低类型转换时可能发生精度损失问题精度损失问题 显式转换(强制转换)显式转换(强制转换)优先级:优先级:1414结合性:从右向左结合性:从右向左第二章 数据类型、运算符、表达式、赋值语句、输入输出47例例1:int j=376; printf(“j=%dn”,j); 1111111011111111/*扩展高位扩展高位*/结果:结果:j=-2例例2: int m=0 x20000L; printf(“m=%dn”,m);00 00 00 00 00 00 00 10 00 00 00 00 0
48、0 00 00 00/*去除去除long的高的高16位位*/结果:结果:m=0例例3:float b=1.1234567; printf(“b=%fn”,b);/*四舍五入四舍五入*/结果:结果:b=1.123457第二章 数据类型、运算符、表达式、赋值语句、输入输出48例例4: unsigned u=65535; int n=u; printf(“n=%dn”,n);1111111111111111/*原样保留,数据发生改变原样保留,数据发生改变*/结果:结果:n=-1/*ch2_11.c*/例例5: unsigned u1=-1; printf(“u1=%un”,u1); /*原样保留,数
49、据发生改变原样保留,数据发生改变*/结果:结果:u1=655351111111111111111注意不同数据类型的表示范围 第二章 数据类型、运算符、表达式、赋值语句、输入输出49课程名称:语言程序设计课型与教法:讲授,通过程序扩展,进行对比学习学时:2课时授课题目: 第章 数据类型、运算符、表达式、赋值语句、输入输出基本教材:语言程序设计(高等教育出版社)廖雷主编教学目的与要求:通过本章的学习使学生掌握变量初始化和赋值语句,格式化输出函数printf,格式化输出函数scanf的使用方法教学难点:printf、scanf的使用方法教学重点:正确进行格式化的输入输出;在实际编程时正确应用变量、数
50、据类型、运算符、表达式、格式化输入输出函数第二章 数据类型、运算符、表达式、赋值语句、输入输出50数据输出格式:int putchar( char ch )参数:ch为字符常量、变量或表达式功能:把字符ch输出到显示器上返回值:正常,为输出的字符ch;出错,为EOF(-1)u C语言无语言无I/O语句,语句,I/O操作由标准操作由标准I/O函数实现函数实现 字符输出函数u #include 第二章 数据类型、运算符、表达式、赋值语句、输入输出51格式:printf(控制字符串,参数1,参数2,)功能:按控制字符串,将参数转换成一定格式输出返回值:正常,返回输出字节数;出错,返回EOF(-1)参