收藏 分享(赏)

第2章-C语言教学课件-数据类型运算符和表达式.ppt

上传人:weiwoduzun 文档编号:3852024 上传时间:2018-11-22 格式:PPT 页数:89 大小:904.04KB
下载 相关 举报
第2章-C语言教学课件-数据类型运算符和表达式.ppt_第1页
第1页 / 共89页
第2章-C语言教学课件-数据类型运算符和表达式.ppt_第2页
第2页 / 共89页
第2章-C语言教学课件-数据类型运算符和表达式.ppt_第3页
第3页 / 共89页
第2章-C语言教学课件-数据类型运算符和表达式.ppt_第4页
第4页 / 共89页
第2章-C语言教学课件-数据类型运算符和表达式.ppt_第5页
第5页 / 共89页
点击查看更多>>
资源描述

1、第2章 数据类型、运算符与表达式,苏小红 ,,C语言大学实用教程,内容提要,基本数据类型; 常量和变量; 标识符命名; 常用运算符和表达式; 运算符的优先级与结合性,一个简单的C程序例子,#include /*函数功能:计算两个整数相加之和入口参数:整型数据a和b返回值: 整型数a和b之和 */ int Add(int a, int b) return (a + b); /*主函数*/ main() int x, y, sum = 0;printf(“Input two integers:“);scanf(“%d%d“, /*输出x和y相加之和*/ ,C程序常见符号分类,关键字(Keyword

2、) 又称为保留字,C语言中预先规定的具有固定含义的一些单词 标识符(Identifier) 系统预定义标识符 用户自定义标识符 运算符(Operator) 34种,详见附录2 分隔符(Separator) 空格、回车/换行、逗号等 其它符号 大花括号“”和“”通常用于标识函数体或者一个语句块 “/*”和“*/”是程序注释所需的定界符 数据(Data) 变量(Variable) 常量(Constant),数据类型(Data Type),数据为什么要区分类型? 不同类型的数据代表不同的 数据表示形式 合法的取值范围 占用内存空间大小 可参与的运算种类 从基本数据类型到抽象数据类型 无数据类型 基本

3、数据类型 构造数据类型 抽象数据类型,数据类型(Data Type),标识符命名,变量名 函数名 由英文字母、数字和下划线组成,大小写敏感 不可以是数字开头 直观,见名知意,便于记忆和阅读 最好使用英文单词或其组合 切忌使用汉语拼音 下划线和大小写通常用来增强可读性 variablename variable_name VariableName, variableName 不允许使用关键字作为标识符的名字 int, float, for, while, if等 某些功能的变量采用习惯命名 如:for语句所采用的循环变量习惯用i, j, k,Windows 风格,UNIX 风格,b, B, KB

4、, MB, GB, TB,Megabyte(MB),中文叫法:兆 Kilobyte(KB),中文叫法: K Byte,中文叫法:字节 bit,中文叫法:位 Gigabyte(GB),中文叫法:G Terabyte(TB),中文叫法:T,1 TB = 1,024 GB,1 GB = 1,024 MB,1 MB = 1,024 KB,1 KB = 1,024 B,1 B = 8 b,b, B, KB, MB, GB, TB,一个位有多大? 只能是“0”或者“1”,这叫二进制 一个字节有多大? 保存一个字符(英文字母、数字、符号) ASCII(美国标准信息交换码)编码 两个字节保存一个汉字 GB编码

5、 可以表示数字0255,基本数据类型,int 整数,在目前绝大多数机器上占4个字节。TC2中是2个字节 float 单精度浮点数,一般是4个字节长 double 双精度浮点数,一般是8个字节长 char 字符,一般是1个字节长 用来表示256个ASCII字符,或者0255的整数,数据类型修饰符,short short int,短整数,一般2个字节长。通常简写为short long long int,长整数,一般是4个字节长。通常简写为long long double,长双精度(高精度)浮点数,一般是10个字节长。 signed 用来修饰char、int、short和long,说明他们是有符号的

6、整数(正整数、0和负整数)。一般缺省都是有符号的,所以这个修饰符通常省略 unsigned 用来修饰char、int、short和long,说明他们是无符号的整数(正整数和0),使用变量要注意,不要对变量所占的内存空间字节数想当然 用sizeof获得变量或者数据类型的长度 现场演示程序在Turbo C2.0和Visual C下的运行结果,注意!,#include main() printf(“Data type Number of bytesn“);printf(“- -n“);printf(“char %dn“, sizeof(char);printf(“int %dn“, sizeof(i

7、nt);printf(“short int %dn“, sizeof(short);printf(“long int %dn“, sizeof(long);printf(“float %dn“, sizeof(float);printf(“double %dn“, sizeof(double); ,变量声明,使用变量的基本原则 变量必须先定义,后使用 所有变量必须在第一条可执行语句前定义 声明的顺序无关紧要 一条声明语句可声明若干个同类型的变量 声明变量,是初始化变量的最好时机 不被初始化的变量,其值为危险的随机数char esc = a;int i = 1;int sum = 0;float

8、 eps = 1.0e-5;,实型数据提供的有效数字位数,float型数据提供7位有效数字 double型数据提供16位有效数字 使用不当导致舍入误差,#include main() float a;double b;a = 123456.789e4;b = 123456.789e4;printf(“%fn%fn“,a,b); ,数据在内存中的存储格式,整型 实型 字符型,char型与int型之间的关系,小写字母转换为大写字母,#include main() char ch = b; ch = b - 32; printf(“%c, %dn“, ch, ch); ,#include main(

9、) char ch = b; ch = b - (a - A) ; printf(“%c, %dn“, ch, ch); ,常数(Constant),整型常数 18、-31 长整型常量 123l、123L、123456l、123456L 无符号型常量 123u、 123U 浮点常数 十进制小数形式 123.45、456.78 指数形式 1e-2、4.5e3 单精度实型常量 123.45f、 456.78F、1e-2f、4.5e3F 长双精度型常量 123.45l、 456.78L、1e-2l、4.5e3L,一般用大写字母 是宏定义预处理命令,不是C语句 直接常量: 整型常量 实型常量 字符常量

10、 字符串常量,如 #define PRICE 30,定义:程序运行时其值不能改变的量(即常数) 分类: 符号常量:用标识符代表常量 定义格式: #define 符号常量 常量,例 符号常量举例(ch2_1.c)#define PRICE 30 main() int num,total;num=10;total=num*PRICE;printf(“total=%d“,total); ,运行结果:total=300,常量,三种形式: 十进制整数:由数字09和正负号表示.如 123,-456,0 八进制整数:由数字0开头,后跟数字07表示.如0123,011 十六进制整数:由0x开头,后跟09,af

11、,AF表示. 如0x123,0Xff,例 12 与 12L,例 30000 为int型65536 为long int 型,整型常量的类型 根据其值所在范围确定其数据类型 在整常量后加字母l或L,认为它是long int 型常量,问题: 0123 = ( )10 0x123 = ( )10 0Xff = ( )10,整型常量(整常数),八进制与十六进制常数,以数字“0”开始的整型常数是八进制数 022、-037 010和10大小不一样 因为八进制并不常用,所以此种表示法比较少见 以“0x”或者“0X”开始的整型常数是十六进制 AF和af用来表示十进制的1015 十六进制的形式比较常用,尤其在进行

12、位一级的控制的时候 0x12、-0x1F, -0x1f,表示形式: 十进制数形式:(必须有小数点) 如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 型,实型常量(实数或浮点数),定义:用单引号括起来的单个普通字符或转义字符.,字符常量的值:该字符的ASCII码值,如 101 -A 012 -n376 - x61 -a60 -0 483 -(),例: A-101-x41-6

13、5,如 A65, a97,048 , n10,如 a A ? n 101,转义字符:反斜线后面跟一个字符或一个代码值表示,例 转义字符举例(ch2_001.c,ch2_004.c) main() printf(“101 x42 Cn“);printf(“I say:“How are you?“n“);printf(“C Programn“);printf(“Turbo C“); ,运行结果:(屏幕显示) A B C Isay:”How are you?” C Program Turbo C,例 main() printf(“Yb=n”);,运行结果: 屏幕显示:= 打印机输出:,字符常量,字符

14、(Character)常数,字符常数的表示方法 a,A,5,%,$ 单引号内只能有一个字符,除非用“”开头 就是一个普通整数,也可以参与各种数学运算 每个字符具有一个0255之间的数值,可从ASCII表查出 注意:5和整数5的区别 字符的数学运算在密码学内用得比较多,字符常数,转义字符 一些特殊字符(无法从键盘输入或者另有它用)用转义字符表示,字符串(String)常数,用双引号括住的由0个或多个字符组成的字符序列 “I am a string“ “表示空字符串 转义字符也可以在字符串中使用 引号只作为字符串开始和结束的标志 C语言内部用0表示字符串的结束 除注释外,是唯一可以出现中文的地方

15、“x“和x是不同的 里定义了一系列专门的字符串处理函数,3.字符和字符串字符串是用双引号括起来的字符序列。字符和字符串有着本质的区别,两者不能混淆:(1)字符用单引号括起来,而字符串用双引号括起来;两者不能混淆。(2) 不能将字符串赋给一个字符变量。(3)单引号括起来的只有一个字符,而双引号括起来的有多个字符。不管显示出来有多少个字符,字符串都有一个看不见的字符0 。C语言规定:以字符0作为字符串结束的标志。在写字符串时不必加0 , 0字符是系统自动加上的。字符: a ,字符串:”a ”中有两个字符a 和0 , 其中0 是ASCII码值0的字符,是空字符。比如字符串CHINA的长度是个字符,而

16、不是个字符。,枚举(Enumeration)常量,一个被遗忘的角色 从程序来窥其一斑enum weeks MON, TUE, WED, THU, FRI, SAT, SUN;enum weeks today;enum response no, yes, none;enum response answer;today = TUE;answer = yes;if (answer = yes)printf(“Today is Tuesday.n“);elseprintf(“Today is NOT Tuesday.n“);,宏常量,宏常量 也称符号常量 一般采用大写字母表示 #define 标识符

17、字符串 不是语句,而是一种编译预处理命令 宏替换(Macro Substitulition),#include #define PI 3.14159 #define R 5.3 main() printf(“area = %fn“, PI * R * R);printf(“circumference = %fn“, 2 * PI * R); ,宏常量,宏常量 也称符号常量 一般采用大写字母表示 #define 标识符 字符串 不是语句,而是一种编译预处理命令 宏替换(Macro Substitulition),#include #define PI 3.14159 #define R 5.3

18、main() printf(“PI*R*R = %fn“, PI * R * R);printf(“2*PI*R = %fn“, 2 * PI * R); ,const常量,用const修饰定义的变量为常量 const float pi = 3.1425926; 常量只能在定义时赋值,然后不能再改变其值常数、 const常量、宏常量和枚举常量,都可以用来表示一个永远不会改变的数 前者不建议直接使用,而用后三者代替,运算符和表达式,运算符功能 与运算量关系 要求运算量个数 要求运算量类型 运算符优先级别 结合方向 结果的类型,学习运算符应注意,算术运算符,+,-,*,/ 加、减、乘、除运算 四则

19、混合运算中,先算乘除,后算加减, 按从左向右的顺序计算,左结合 % 求余运算 结合方向:从左向右 优先级: - -* / % - + -(2) (3) (4) 说明: “-”可为单目运算符时,右结合性 两整数相除,结果为整数 %要求两侧均为整型数据,例 5/2 =-5/2.0 =,例 5%2 =-5%2 =1%10 =5%1 =5.5%2,2,-2.5,1,-1,1,0,(),常用的标准数学函数,关系运算符,,=,=,=,!= 大于,大于等于,小于,小于等于,等于,不等于 关系运算符运算出的结果为0和非0 0,表示假,即该关系不成立 非0,表示真,即该关系成立 绝大多数编译器,关系运算得到的非

20、0结果为1,但是不要利用这个1,关系运算符 种类:= != 结合方向:自左向右 优先级别:,例 ca+b /c(a+b)ab!=c /(ab)!=ca=bc /a=(bc),关系表达式的值:是逻辑值“真”或“假”,用1和0表示,例 int a=3,b=2,c=1,d,f;ab (ab)=cb+cbf=abc,/表达式值1,/表达式值1,/表达式值0,/d=1,/f=0,关系运算符和表达式,例 若a=0; b=0.5; x=0.3;则 a=x=b的值为,0,例 5278在C中是允许的,值为,0,例 int i=1, j=7,a; a=i+(j%4!=0); 则a=,2,例 a0 结果为A100

21、结果为,1,0,关系运算注意(1),例 注意区分“=”与“=”int a=0,b=1;if(a=b) printf(“a equal to b”);elseprintf(“a not equal to b”);,例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,0,关系运算注意(2),逻辑运算符 种类: ! & | 逻辑运算真值表,C语言中,运算量: 0表示“假”,非0表示“真”,运算结果: 0表示“假”,1表示“真”,逻辑运算符和表达式,逻辑运算也被称为布尔(Boolean)运算,& 与运算 ( a

22、b & b c);a大于b,并且b大于c | 或运算 ( a b | b c); a大于b,或者b大于c ! 求反 ( !a );如果a是0,结果非0;如果a是非0,结果是0 并不改变a的值,例 ab&xya=b|x=y!a|ab,优先级:,结合方向:,/ (a=x) & (x=b),/(ab)&(xy),/(a=b)|(x=y),/(!a)|(ab),逻辑运算符和表达式,优先级:,结合方向:,例 a=4;b=5;!aa&ba|b!a|b4&0|253&2|84-!0c&d,值为1,值为0,值为1,值为1,值为1,值为1,/(53)&2|(8(4-(!0) 值为1,逻辑运算符和表达式(3),优

23、先级:,结合方向:,短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符,例 a(m=ab)&(n=cd),/结果m=0,n=1,逻辑运算符和表达式(4),实例,ch是英文大写字母 (ch = A) & (ch = Z) 判断某一年year是否是闰年的条件是满足下列两个条件之一: 能被4整除,但不能被100整除; 能被400整除;(year % 4 = 0) & (year % 100 != 0) | (year % 400 = 0),类型转换,在进行赋值操作时,会发生类型转换 将取值范围小的类型转为取值范围大的类型是安全

24、的 反之是不安全的 如果大类型的值在小类型能容纳的范围之内,则平安无事 但是,浮点数转为整数,会丢失小数部分,非四舍五入 反之,转换后的结果必然是错误的,具体结果与机器和实现方式有关。避免如此使用,字符串与数值类型之间的转换,int i = “123“ 这样用是不行地 atof(),atoi(),atol() 把字符串转为double,int和long 定义在stdlib.h中 sprintf() 可以用来把各种类型的数值转为字符串 定义在stdio.h中,自动类型转换,同种数据类型的运算结果,还是该类型 不同种数据类型的运算结果,是两种类型中取值范围更大的那种 long double dou

25、ble float long int short char 把数据赋值给另外一种类型变量也会发生自动类型转换 从小到大,顺利转换 从大到小,可能丢失信息(好的编译器会发出警告),隐式转换 什么情况下发生 运算转换-不同类型数据混合运算时 赋值转换-把一个值赋给与其类型不同的变量时 输出转换-输出时转换成指定的输出格式 函数调用转换-实参与形参类型不一致时转换 运算转换规则:不同类型数据运算时先自动转换成同一类型,char ch;int i;float f;double d;,ch/i + f*d - (f+i),例1,一般形式:(类型名)(表达式)例: (int)(x+y)(int)x+y(d

26、ouble)(3/2)(int)3.6 说明:强制转换得到所需类型的中间变量,原变量类型不变,例 main() float x;int i;x=3.6;i=(int)x;printf(“x=%f,i=%d”,x,i); 结果:x=3.600000,i=3,精度损失问题,显式转换(强制转换),类型强转(Casting),可以通过“(类型)表达式”的方式把表达式的值转为任意类型 强转时,你必须知道你在做什么 强转与指针,并称C语言两大神器,用好了可以呼风唤雨,用坏了就损兵折将,#include main() int m = 5;printf(“m / 2=%dn“, m/2);printf(“(f

27、loat) (m / 2) = %fn“, (float) (m / 2);printf(“(float) m / 2 = %fn“, (float) m / 2);printf(“m = %dn“, m); ,自增、自减运算符+ -,说明: + - 不能用于常量和表达式,如5+,(a+b)+ + -结合方向: 自右向左 优先级:- + - -* / % -+ -(2) (3) (4),作用:使变量值加1或减1 种类: 前置 +i, -i (先执行i+1或i-1,再使用i值) 后置 i+,i- (先使用i值,再执行i+1或i-1),m = n+; 等价于 m=n; n+; m = +n; 等价

28、于 n+; m=n;,例 -i+ -(i+)i=3; printf(“%d”,-i+); /-3,例 -i+i=3; printf(“%d”,-i+);,自增、自减运算符+ -,例 j=3; k=+j; j=3; k=j+; j=3; printf(“%d”,+j); j=3; printf(“%d”,j+); a=3;b=5;c=(+a)*b; a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,良好的程序设计风格提倡:在一行语句中,一个变量只能出现一次加1或者减1运算 过多的加1和减1运算混合,不仅可读性差,而且因为编

29、译器实现的方法不同,导致不同编译器产生不同的运行结果,概念,位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。语言提供位运算的功能,与其他高级语言(如PASCAL)相比,具有很大的优越性。,位操作运算符,位运算符和位运算,运算符 含义 运算符 含义 按位与 取反 | 按位或 右移,(1)位运算符中除以外,均为二目(元)运算符,即要求两侧各有一个运算量。 (2)运算量只能是整型或字符型的数据,不能为实型数据。,语言提供的位运算符有:,说明:,“按位与”运算符(),按位与是指:参加运算的两个数据,按二进制位

30、进行“与”运算。如果两个相应的二进制位都为,则该位的结果值为;否则为。即:,,例:并不等于,应该是按位与运算:,注意:如果参加&运算的是负数(如-3&-5),则要以补码形式表示为二进制数,然后再按位进行“与”运算。,3&5的值得,按位与的用途:,若想对一个存储单元清零,即使其全部二进制位为,只要找一个二进制数,其中各个位符合以下条件:原来的数中为的位,新数中相应位为。然后使二者进行运算,即可达到清零目的。,(1) 清零。,例: 原有数为,另找一个数,设它为,这样在原数为的位置上,该数的相应位值均为。将这两个数进行运算:,(2) 取一个数中某些指定位。,如有一个整数(个字节),想要取其中的低字节

31、,只需将与8个1按位与即可。,(3)保留一位的方法:与一个数进行运算,此数在该位取。,即:a=84,b=59c=a&b=16,例:有一数,想把其中左面第、位保留下来,运算如下:,“按位或”运算符(|),两个相应的二进制位中只要有一个为,该位的结果值为。 即 |,|,|,|,例: 060|017,将八进制数60与八进制数17进行按位或运算。,应用:按位或运算常用来对一个数据的某些位定值为。例如:如果想使一个数的低位改为,只需将与进行按位或运算即可。,例: 是一个整数(位), 有表达式: | 则低位全置为,高位保留原样。,“异或”运算符(),异或运算符也称XOR运算符。它的规则是: 若参加运算的两

32、个二进制位同号则结果为(假)异号则结果为(真),即:00=0,01=1,10=1, 11=0,即:071052=023 (八进制数),例:,() 使特定位翻转,设有,想使其低位翻转,即变为,变为。可以将它与进行运算,即:,运算符应用:,运算结果的低位正好是原数低位的翻转。可见,要使哪几位翻转就将与其进行运算的该几位置为即可。,因为原数中的与进行运算得,得,故保留原数。,例如:01200=012,() 与相,保留原值,() 交换两个值,不用临时变量,例如:,。 想将和的值互换,可以用以下赋值语句实现: ab; ba; ab;, ()(ab的结果,a已变成) ()(ba的结果,b已变成) ()(a

33、b的结果,a已变成), 执行前两个赋值语句:“;”和“;”相当于b=b(ab)。 再执行第三个赋值语句: 。由于a的值等于(),b的值等于(),因此,相当于a=,即a的值等于,等于。 得到原来的值。,即等效于以下两步:,“取反”运算符(),是一个单目(元)运算符,用来对一个二进制数按位取反,即将变,将变。例如,是对八进制数(即二进制数)按位求反。,左移运算符(),左移运算符是用来将一个数的各二进制位全部左移若干位。运算符左边是移位对象,右边是整型表达式,代表左移的位数。左移时,右端补0;左端移出的部分舍弃。,例如:a=2 将的二进制数左移2位,右补0。 若15,即二进制数00001111, 左

34、移位得00111100,(十进制数60),高位左移后溢出,舍弃。,左移位相当于该数乘以2,左移2位相当于该数乘以22=4,152=60,即乘了4。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。假设以一个字节(位)存一个整数,若为无符号整型变量,则a=64时,左移一位时溢出的是0,而左移2位时,溢出的高位中包含1。,右移运算符(),右移运算符是a2表示将a的各二进制位右移2位,移到右端的低位被舍弃,对无符号数和正整数,高位补0。对于负整数,高位补1。,例如:a=017时:a的值用二进制形式表示为00001111, 舍弃低2位11: a2=00000011,右移一位相当于除以2右移n

35、位相当于除以2n。,位运算赋值运算符,位运算符与赋值运算符可以组成复合赋值运算符。例如: &=, |=, =, =, =,例: a & = b相当于 a = a & ba =2相当于a = a 2,不同长度的数据进行位运算,如果两个数据长度不同(例如long型和int型),进行位运算时(如a & b,而a为long型,b为int型),系统会将二者按右端对齐。如果b为正数,则左侧16位补满0;若b为负数,左端应补满1;如果b为无符号整数型,则左侧添满0。,有以下程序 main() int c=35; printf(“%d “,c 程序运行后的输出结果是 ( )。 A) 0 B) 70 C) 35

36、 D) 1,设有定义语句:char c1=92,c2=92;,则以下表达式中值为零的是( )。 A)c1c2 B)c1&c2 C) c2 D)c1|c2,设char型变量x中的值为10100111,则表达式(2+x)(3)的值是( )。 A) 10101001 B) 10101000 C) 11111101 D) 01010101,有以下程序 main() int x=3, y=2, z=1; printf(“%dn“,x/y 程序运行后的输出结果是( )。 A)3 B)2 C)1 D)0,赋值运算符,下面两个语句是等价的 i = i + 2; i += 2; +、-、*、/、%、&、|运算符

37、都可以按此种方式处理 这种形式看起来更直观,而且执行效率一般也能更高一些,条件表达式,把a和b中的最大值放入z中 if (a b) z = a; else z = b; z = (a b) ? a : b; 此种表达式切忌用得过于繁杂,一般形式: expr1 ? expr2 : expr3 执行过程 功能:相当于条件语句,但不能取代一般if语句,例 求 a+|b|printf(“a+|b|=%dn”,b0?a+b:a-b);,例 (a=b)?Y:N(x%2=1)?1:0(x=0)?x:-x(c=a & c=z)?c-a+A:c,条件运算符可嵌套如 x0?1:(x0?-1:0) 优先级: 13,

38、结合方向:自右向左如 ab?a:cd?c:d ab?a:(cd?c:d) expr1、expr2、expr3类型可不同,表达式值取较高的类型,例 x?a:b /x=0,表达式值为b; x0,表达式值为axy?1:1.5 /xy ,值为1.0; xy ,值为1.5,条件运算符与表达式,条件运算符与表达式(1),十进制:4956= 410+910 +510+610,二进制:1011=12+02 +12+12,十六进制:81AE=816+116 +1016+1416,八进制:4275=48+28 +78+58,条件运算符与表达式(2),简单赋值运算符 符号: = 格式: 变量标识符=表达式 作用:将

39、一个数据(常量或表达式)赋给一个变量,复合赋值运算符 种类:+= -= *= /= %= = = &= = |= 含义: exp1 op= exp2 exp1 = exp1 op exp2,例 a=3;d=func();c=d+2;,赋值运算符和表达式,结合方向:自右向左 优先级: 14 左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,例 3=x-2*y;a+b=3;,例 float f; int i;i=10; f=i; 则 f=10.0,例 int i; i=2.56; /结果i=2;,例: a=b=c

40、=5a=(b=5)a=5+(c=6)a=(b=4)+(c=6)a=(b=10)/(c=2),/表达式值为5,a,b,c值为5,/ b=5;a=5,/表达式值11,c=6,a=11,/表达式值10,a=10,b=4,c=6,/表达式值5,a=5,b=10,c=2,说明(1):,结合方向:自右向左优先级: 12左侧必须是变量,不能是常量或表达式,赋值表达式的值与变量值相等,且可嵌套,赋值转换规则:使赋值号右边表达式值自动转换成其左边变量的类型,例: a=12; a+=a-=a*a,例: int a=2; a%=4-1; a+=a*=a-=a*=3;,/a=-264 等价于a=a+(a=a-(a*a

41、),/a=0 等价于a=a+(a=a*(a=a-(a=a*3),说明(2):,逗号运算符,多数情况下,并不使用整个逗号表达式的值,更常见的情况是要分别得到各表达式的值 主要用在循环语句中,同时对多个变量赋初值等 for (i = 0 , j = 0; i j; i+, j+),形式:表达式1,表达式2,表达式n 结合性:从左向右 优先级: 15 逗号表达式的值:等于表达式n的值 用途:常用于循环for语句中,例 a=3*5,a*4a=3*5,a*4,a+5 例 x=(a=3,6*3)x=a=3,6*a 例 a=1;b=2;c=3;printf(“%d,%d,%d”,a,b,c); printf

42、(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表达式值60,/a=15,表达式值20,/赋值表达式,表达式值18,x=18,/逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,逗号运算符和表达式,例: /*ch2_6.c*/ #include main() int x,y=7;float z=4;x=(y=y+6,y/z);printf(“x=%dn“,x); ,运行结果:x=3,优先级,( ) - . ! + - + - * & (类型) sizeof * / % + - = = != & | & | ? : = += -= *= /= %= &= = |= = ,优先级,能背下优先级表的人凤毛麟角 用括号来控制运算顺序更直观、方便,并减少出错的概率,结合性,多数运算符为左结合 少数为右结合: 一元运算符 赋值运算符 条件运算符,这一章我们学到了,变量的命名规则 数据类型 char,short,int,long,float,double,long double signed,unsigned enum 常数、转义字符运算符 算术运算符、关系运算符、逻辑运算符、增一/减一运算符、位运算符、赋值运算符、类型强转运算符、逗号运算符、条件运算符(? :)、 sizeof类型转换 优先级和结合性,ASCII字符表1,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 网络科技 > C/C++资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报