1 / 52

第三章 数据类型、运算符与表达式

第三章 数据类型、运算符与表达式. 本章重点、难点: 1、 自加、自减运算 2. 类型转换 3. 复合的赋值运算符. 第三章 数据类型、运算符与表达式. 3.1 基本概念 1、 C 语言程序的组成特点 一个 C 源程序由函数构成, 其中至少包含一个主函数( main 函数) 。 C 程序总是由 main 函数开始执行。 分号 “ ; ” 是 C 语言的一部分。 C 程序书写格式自由,一行内可以写多条语句,且语句中的空格和回车符均可忽略不计。

lance-bruce
Download Presentation

第三章 数据类型、运算符与表达式

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章数据类型、运算符与表达式 本章重点、难点: 1、自加、自减运算 2. 类型转换 3. 复合的赋值运算符

  2. 第三章数据类型、运算符与表达式 • 3.1 基本概念 • 1、C语言程序的组成特点 • 一个C源程序由函数构成, 其中至少包含一个主函数(main函数)。 • C程序总是由main函数开始执行。 • 分号“;” 是C语言的一部分。 • C程序书写格式自由,一行内可以写多条语句,且语句中的空格和回车符均可忽略不计。 • 程序的注释部分应括在/*……*/之间;/和 *之间不允许留有空格;注释都分允许出现在程序中的任何位置上。

  3. 2、标识符 C语言的标识将可分为以下三类: 一、关键字(附录B) C语言共有32个关键字;每个关键字在C程序中都代表着某一固定含意,所有关键字都要用小写英文字母表示,且这些关键字都不允许作为用户标识将使用。 二、预定义标识符 这些标识符在C语言中都具有特定含意,如C语言提供的库函数的名字和预编译处理命令。因此为了避免误解,建议用户不要把这些预定义标识符作它用或将它们重新定义。

  4. 三、用户标识符 • 用户可以根据需要对C程序中用到的变量、符号常量、自己的函数或文件指针进行命名,形成用户标识符。这类标识符的构成规则如下:(P39) • 由英文字母、数字、下划线组成;且第一个字符不能是数字,必须是字母或下划线。 如:sum, average, class, student_name 正确 • M.D, $123, 3D64, a >b错误 • 大、小写英文字母的含意不同。 • 注意: 大写字母和小写字母被认为是两个不同的字符。因此,sum和SUM是两个不同的变量名。习惯上,变量名用小写字母表示,以增加可读性。

  5.             整 型               字符型   单精度        基本类型   浮点型               枚举类型  双精度 数据类型          数组类型         构造类型   结构体类型               共用体类型        指针类型        空类型 3、C语言的数据类型

  6. 3.2 常量(Constant) ⒈常量的概念 在程序中不能改变的量称为常量。常量的类型由数据的外部表现形式确定。如12、0、-3等为整型常量,4.6,-1.23等为实型常量,’a’,’d’为字符常量,一般从其字面形式即可判别,也可以用一个标识符代表一个常量,即符号常量。 #define PRICE 30 main() /*test2.c */ { int num,total; num=10; total=num*PRICE; printf("total=%d",total); } 实例运行

  7. 3.3 变量( Variable) ⒈变量的概念 变量是在程序中可以改变的量,变量具有三个特征: ⑴变量有名,用标识符命名; ⑵变量有类型; ⑶在程序中可以改变。 变量对应于内存中某一地址下的几个单元,变量名作为程序引 用变量的标志。变量的类型确定了变量在内存中所占单元的数量及 其表示的方式。变量的地址可以通过&运算获得。 int a; 整型变量占两个内存单元。 a变量的引用标志 &a对应a的地址。 内存 变量必须先说明后使用!说明的目的是确定变量的名字和类型。

  8. 3.4 整型数据 ⑴整型常量的表示 整型常量根据表示的范围可以有长整型和一般整型,还可以表 示为十进制、八进制、十六进制。其中八进制、十六进制不能有符 号。 一般整型的表示 进 制  表示举例  范 围 字节数 十 进 制   2304 -32768 ~ +32767  2 八 进 制04400 0 ~0177777 2 十六进制 0xaa00 0x0000 ~ 0xffff 2 长整型的表示 进 制  表示举例  范 围 字节数 十 进 制   -21234l -231 ~ +231-1  4 八 进 制 04400l 0 ~ 01777777777 4 十六进制 0xaa00l 0x0000----0xffffffff 4

  9. 3.4 整型数据 ⑵整型变量的分类 ①有符号整型变量说明 说明符 所占字节数 范围 int 2 -32768 ~ +32767 short [int] 2 -32768 ~ +32767 long [int] 4 -2147483648 ~ +2147483647 ②无符号整型变量说明 说明符 所占字节数 范围 Unsigned int 2 0 ~ 65535 unsigned short 2 0 ~ 65535 unsigned long 4 0 ~ 4294967295 各种整型数据所占的字节数说明见P42

  10. 3.4 整型数据 ⑶ 整型变量的定义 C规定在程序中所有用到的变量都必须在程序中指定其类型,即“定义”。 例如: int a,b; (指定变量a,b为整型) unsigned short c,d; (指定变量c,d为无符号短整型) 1ong e,f; (指定变量e,f为长整型) 对变量的定义,一般是放在一个函数的开头部分(也可以放在程序中间,但作用域只限于某一分程序,这将在后面介绍)。

  11. 3.4 整型数据 ⑶ 整型变量的定义(举例) /* test3.c */ main() { int a,b,c,d; /* 指定a,b,c,d为整型变量 */ unsigned u; /* 指定u为无符号整型变量* / a=12;b=-24;u=10; c=a+u;d=b+u; printf("c=%d d=%d",c,d); } 实例运行 不同种类的整型数据可以进行算术运算。

  12. (4) 整型数据的溢出 #include <stdio.h> void main() { int a,b; a=32767;b=a+1; printf(“a=%d,b=%d\n”,a,b); } 运行结果? a=32767,b=-32768

  13. 3.5 实型数据 (1) 浮点型常量的表示(只有十进制表示) 浮点型常量有两种表示方式:小数表示方法,指数表示方法。 小数表示方式规则:一个小数点、符号和至少一位数字。 指数表示方式规则: -2.0 1. 0.11113 -15. 规则:ne±m 表示 n×10m 指数部分 n小数部分,整型常量或小数形式表示的实型常量。 n决定精度,一般精度为7位;m决定范围,范围10-38到10+38,当超过范围时称为“溢出”,小于10-38称为下溢,当0处理,大于10+38,称为上溢,系统出错! 123.456 可表示为 12.3456E+1 可表示为 1.23456e2 (规泛化的指数形式) 可表示为 0.123456e3

  14. 3.5 实型数据 (2) 实型变量 C实型变量分为单精度(float型)和双精度(double型)两类,对每一个实型变量都应在使用前加以定义。如: float x; /*一个float型数据在内存中占4个字节(32位)*/ double z; /*一个double型数据占8个字节。*/ 单精度实数提供7位有效数字,双精度实数提供15~16位有效数字,数值的范围随机器系统而异。单精度实数的数值范围约为10-38~1038,双精度实数范围约为10-308~10308。 实型常量不分float型和double型。一个实型常量可以赋给一个float型或double型变量。根据变量的类型截取实型常量中相应的有效位数字, 说明符 所占字节数 范围 精度 float 4 10-38 ~ 10+38 7位 double 8 10-306 ~10+306 16位

  15. 3.5 实型数据 (2) 实型变量 例: main() /*test4.c*/ { float s; s=111111.11; printf("\nfloat=%f",s); } main() /*test5.c*/ { double s; s=111111.11; printf("\ndouble=%f",s); } 实例运行 实例运行 自学:P47 浮点型数据的舍入误差

  16. 3.6 字符型数据 (1) 字符常量的表示 字符常量用单撇号括起来的一个字符。字符有一个整型值,即该字符的ASCII码值。字符常量的表示方法:’a’、 ’!’ 。 值为:97 (2) 字符串常量的表示 双引号定界的字符序列。系统会在最后一个字符后加NULL(ASCII码值为0)标志字符串的结束。 如:”HEFEI ””hello” ’a’ 和 ”a”的区别? 内部 ’a’ :97 ”a”: 97NULL

  17. 3.6 字符型数据 (3) 转义字符 转义字符是C语言表示字符的特殊方法,用来表示ASCII字符集 中的控制字符,以及系统占用字符如:”。 表示方法:① \字符;②\八进制(十六进制整数,小于256) \\ 表示\ 符号 \’ 表示’ \” 表示” \b 表示回退一格 字母 \n 表示换到下一行头 \r 表示回车到本行头 \t 表示TAB(占8列) \ddd 1到3位八进制数所代表的字符 \xhh 1到2位十六进制数所代表的字符 结果? main() {printf ("\\141\141abc\n");}

  18. 3.6 字符型数据 (4)转义字符举例 main() /*test7.c*/ { printf(" ab c\t de\rf\tg\n"); printf("h\ti\b\bj k"); } 运行结果: f_ _ _ _ _ _ _ gde h_ _ _ _ _ _ j _ k 实例运行

  19. 3.6 字符型数据 (5)字符变量 一个字符占一个字节. 字符型变量用来存放字符常量,注意只能放一个字符,不要以为在一个字符变量中可以放一个字符串(包括若干字符)。 字符变量的定义形式如下: char c1,c2; 它表示c1和c2为字符型变量,各可以放一个字符,因此可以用下面语句对c1、c2赋值: c1=‘a’; c2=‘b’; 一般以一个字节来存放一个字符,或者说一个字符变量在内存中占一个字节。 说明符 所占字节数 范围 char 1 -128 ~ +127 unsigned char 1 0 ~ 255

  20. 3.6 字符型数据 (6)字符数据在内存中的存储形式及其使用方法 将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。 例如字符‘a’的ASCII代码为97,‘b’为98, 。实际上是以二进制形式存放的. main( ) { char c1,c2; c1=97;c2=98; printf(“%c %c”,c1,c2);} 运行结果: a b

  21. 3.6 字符型数据 (6)字符数据在内存中的存储形式及其使用方法 字符数据以ASCII码存储,它的存储形式与整数的存储形式相类似。C语言使字符型数据和整型数据之间可以通用。一个字符数据既可以以字符形式输出,也可以以整数形式输出。以字符形式输出时,需要先将存储单元中的ASCII码转换成相应字符,然后输出。以整数形式输出时,直接将ASCII码作为整数输出。也可以对字符数据进行算术运算,此时相当于对它们的ASCII码进行算术运算。

  22. 3.6 字符型数据 (6)字符数据在内存中的存储形式及其使用方法 字符数据与整型数据可以互相赋值。如: int i; char c; i=’a’; c=97; 是合法的。 字符数据可以以字符形式输出,也可以用整数形式输出。例如在上面语句之后执行语句: printf (”%c,%d\n”,c,c); printf (”%c,%d\n”,i,i); printf (”%c,%d\n”,i-32,i-32); 输出的结果是什么?

  23. 3.6 字符型数据 (7)字符串常量 字符常量是由一对单引号括起来的单个字符。C语言除了允许使用字符常量外,还允许使用字符串常量。字符串常量是一对双引号括起来的字符序列。如: “How do you do。”,”CHINA”,”$123.45” 都是字符串常量,可以输出一个字符串,如 printf (”How do you do.”); char c; c=’a’; c=”a”; right error c=”CHINA” ? 不能把一个字符串赋给一个字符变量。

  24. 3.6 字符型数据 (7)字符串常量 C规定:在每一个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。c规定以字符‘\0’作为字符串结束标志。‘\0’是一个ASCII码为0的字符,从ASCII代码表中可以看到ASCII码为0的字符是,“空操作字符”,即它不引起任何控制动作,也不是一个可显示的字符。 如果有一个字符串,“CHINA”实际上在内存中是 : 它的长度6个字符,最后一个字符为’\0’。但在输出时不输出. 例如: printf(”How do you do。”) 输出时一个一个字符输出,直到遇到最后的’\0’字符,就知道字符串结束,停止输出。‘\0’,字符是系统自动加上的。

  25. 3.7 变量赋初值 程序中常需要对一些变量预先设置初值。C规定,可以在定义变量时同时使变量初始化。如: int a=3; 指定a为整型变量,初值为3 float f=3.56; 指定f为实型变量,初值为3.56 char c=’a’; 指定c为字符变量,初值为‘a’ 也可以使被定义的变量的一部分赋初值。如: int a,b,c=5 表示a、b、c为整型变量,只有c初始化,值为5。 如果对几个变量赋以同一个初值,不能写成: int a=b=c=3; ERROR! 而应写成: int a=3,b=3,c=3;RIGHT!

  26. 3.8 各类数值型数据间的混合运算 整型、单精度型、双精度型数据可以混合运算。前已述及,字符型数据可以与整型通用,因此,整型、实型(包括单、双精度)、字符型数据间可以混合运算。例如 10+‘a’+1.5-8765.1234*‘b’ 是合法的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则按下图所示 double ← float↑long↑unsigned↑int ← char, short

  27. 3.8 各类数值型数据间的混合运算 • 图中横向向左的箭头表示必定的转换,如字符数据必定先转换为整数,short型转为int型,float型数据在运算时一律转换成双精度型,以提高运算精度(即使是两个float型数据相加,也都先化成double型,然后再相加)。 • 纵向的箭头表示当运算对象为不同类型时转换的方向。例如int型与doub1e型数据进行运算,先将int型的数据转换成图double型,然后在两个同类型(double型)数据进行运算,结果为double型。注意箭头方向只表示数据类型级别的高低,由低向高转换,不要理解为int型先转成unsigned型,再转成1ong型,再转成double型。如果一个Int型数据与一个double型数据运算,是直接将int型转成double型。同理,一个int型与一个Long型数据运算,先将int型转换成1ong型。

  28. 3.8 各类数值型数据间的混合运算 举例说明: • 假设已指定i为整型变量,f为float变量,d为double型变量,e为1ong型,有下面式子: 10十’a’+i*f-d/e • 运算次序为:①进行10+’a’的运算,先将‘a’转换成整数97,运算结果为107。②进行i*f的运算。先将i与f都转成double型,运算结果为double型。③整数107与i*f的积相加。先将整数107转换成双精度数(小数点后加若干个0,即107.000…00),结果为double型。④将变量e化成double型,d/e结果为double型。⑤将10十’a’+i*f的结果与”d/e结果为double型。 • 上述的类型转换是由系统自动进行的。

  29. 3.9 算术运算符和算术表达式 • 3.9.1 C运算符简介 • C的运算符有以下几类:(13种) • 1.算术运算符 (+ - * / %) • 2.关系运算符 (> < == >= <= !=) • 3.逻辑运算符 (! && ||) • 4.位运算符 (<< >> ~ | ^ &) • 5.赋值运算符 (= 及其扩展赋值运算符) • 6.条件运算符 (? :)

  30. 3.9 算术运算符和算术表达式 7. 逗号运算符 (,) 8.指针运算符 (* 和 &) 9.求字节数运算符 (sizeof) 10.强制类型转换运算符 (类型) 11.分量运算符 (. →) 12.下标运算符 ([ ]) 13.其它 (如函数调用运算符()) 本章只介绍算术运算符和赋值运算符。

  31. 3.9 算术运算符和算术表达式 1. 基本的算术运算 功能:完成各种类型数据的加、减、乘、除及求余数运算。 双目算术运算(两个运算对象参加的运算) -12%5 -2 “向零取整”. -5/3 = -1 只能对整型或字符型数据运算。余数符号与被除数相同。 ? -12%(-5)

  32. main() {int a,b; float c; a=12; b=5; c=a/b; printf ("c=%f\n",c); } 注:两个整数相除,结果为整数 C=2.000000 输出结果?

  33. 3.9 算术运算符和算术表达式 2. 算术表达式和运算符的优先级与结合级 ( 附录C ) C算术表达式:用算术运算符和括号将运算对象(也称操作数) 连接起来的、符合C语言语法规则的式子。 如: a * b / c - 1.5 + ’a’ 求表达式的值时,先按运算符的优先级别高到低的次序执行。 例: a + b*c 算术运算符的结合方向为:“自左至右” 例: a-b+c double ← float↑long↑unsigned↑int ← char, short • 如果一个运算符的两侧的数据类型不同,则会按右边所述,先自动进行类型转换,使二者具有同一种类型,然后进行运算。

  34. 3.9 算术运算符和算术表达式 • 强制类型转换运算符 强制类型转换运算符将一个表达式转换成所需类型 (double)a (将a转换成double类型) (int)(x+y) (将x+y的值转换成整型) (float)(5%3) (将5%3的值转换成float型) 其一般形式为 : (类型名)(表达式) 注意: 表达式应该用括号括起来。如果写成 (int)x+y只将x转换成整型,然后与y相加。 需要说明的是在强制类型转换时,得到一个所需类型的中间量,原来变量的类型未发生变化。例如 (int)x (不要写成int (x)) 如果x原指定为float型,进行强制类型运算后得到一个int型的中间变量,它的值等于x的整数部分,而x的类型不变(仍为float型)

  35. 3.9 算术运算符和算术表达式 main ( ) { float x; x=3.6; i=(int)x; printf(“x=%f,i=%d”x,i); } 实例运行 结论:两种类型转换:一种是系统自动进行类型转换 一种是强制类型转换 当自动类型转换不能实现目的时,可以用强制类型转换。如: “%”运算符要求其两侧均为整型量,若x为float型,则“x%3”不合法,必须用:(int)x%3”。强制类型转换运算优先于%运算,因此先进行(int)x的运算,得到一个整型的中间变量,然后再对3求模。

  36. 3.9 算术运算符和算术表达式 4. 自加、自减运算(单目运算):本章重点、难点 结合方向:自右至左 说明: ①运算对象只能是一个变量(不能对常量和表达式)。 ②前置是先运算,后引用,而后置则是先引用,后运算。 int i, x; i=5; x=i++;/* x=i;i=i+1;*/ i=5; x=++i;/* i=i+1;x=i;*/ 2++; /* Error !*/

  37. 3.9 算术运算符和算术表达式 4. 自加、自减运算(单目运算) 自增、自减运算符的用法与运算规则示例。 main() { int x=6, y; printf("x=%d\n",x); y = ++x; printf("y=++x: x=%d,y=%d\n",x,y); y = x--; printf("y=x--: x=%d,y=%d\n",x,y); } 实例运行

  38. 3.9 算术运算符和算术表达式 5. 有关表达式使用中的问题说明 C运算符和表达式使用灵活 (1)a=3; j=(a++)+(a++)+(a++); printf(“a=%d,j=%d”,a,j); 结果为: a=6 j=9 如何理解?(P58) (2)i+++j 为(i++)+j 还是 i+(++j) 呢? C编译系统在处理时尽可能多地(自左向右)将若干个字符组成一个运算符,因此, i+++j=(i++)+j (3)i=3; printf(“%d,%d”,i,i++);在多数系统中对函数参数的求值顺序是自右而左。 故上面的结果为: 4,3

  39. 3.10 赋值运算符和赋值表达式 1. 赋值运算符 赋值符号“=”就是赋值运算符,它的作用是将一个数据赋给一个变量。如“a=3”的作用是执行一次赋值操作(或称赋值运算)。把常量 3 赋给变量a,也可以将一个表达式的值赋给一个变量。 2. 类型转换(难点) 如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值时要进行类型转换。具体有以下几种情况:

  40. (1).将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如i为整型变量,执行“i=3.56”的结果是使i的值为3。(1).将实型数据(包括单、双精度)赋给整型变量时,舍弃实数的小数部分。如i为整型变量,执行“i=3.56”的结果是使i的值为3。 (2).将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中,如将23赋给float变量f,即f=23,先将23转换成23.00000,再存储在f中。如将23赋给double型变量d, 即d=23,则将23补足有效位数字为23.00000000000000,然后以双精度浮点数形式存储到d中。 (3).将一个double型数据赋给float变量时,截取其前面7位有效数字,存放到float变量的存储单元中。

  41. 3.10 赋值运算符和赋值表达式 • (4).字符型数据赋给整型变量时,由于字符只占一个字节,而整型变量为2个字节,因此将字符数据(8位)放到整型变量低8位中。有两种情况: • 如果所用系统将字符处理为无符号的量或对unsigned char型变量赋值,则将字符的8位放到整型变量低8位,高8位补零。例如:将字符‘\376’(八进制)赋给int型变量i i • 如果所用系统(Turbo C++)将字符处理为带符号的量,若字符最高位为0.则整型变量高8位补0;若字符最高位为1.则高8位全补1,这称为“符号扩展”.这样做的目的是使数值保持不变,如将字符‘\376’以整数形式输出为一2,i的值也是一2。 i

  42. 3.10 赋值运算符和赋值表达式 (5).将一个int、short、long型数据赋给char变量时,只将其低8位原封不动地送到char型变量中。例: Int I=289; char c; c=I; C=33 I=289 (6). 将带符号的整型数据(int型)赋给1ong型变量时。要进行符号扩展,如果int型数据为正值(符号位为0).则1ong型变量的高16位补0;如int型变量为负值(符号位为1),则1ong型变量的高16位补1,将整型数(int型)的16位送到1ong型低16位中,以保持数值不改变。反之,若将一个1ong型数据赋给一个int型变量,只将1ong型数据中低16位原封不动送到整型变量(即截断)

  43. main() { long b=0x12340123; int a; a=b; printf("\n%d",a); } 结果? 291

  44. 3.10 赋值运算符和赋值表达式 • (7)将unsigned int 型数据赋给long int,不存在扩展问题,只需将高位补0即可。将一个unsigned 类型数据赋给一个占字节数相同的的非unsigned型变量(例如unsigned int→int , unsigned long→long , unsigned short→ short )将unsigned型变量的内容原样送到非unsigned型变量中,但如果数据范围超过相应整型的范围,则会出现数据错误。如: • unsigned int a=65535 (216-1); int b; b=a; • printf(“%d”,b); • 将a整个送到b中,由于b是int型,第1位是符号位,成了负数。(-1的补码) • 运行结果为:-1 • 自学:P62小结

  45. 3.10 赋值运算符和赋值表达式 3. 复合的赋值运算符 说明: ①运算对象的左值只能是一个变量。 (a+2)+=5; /*Error !*/ ②%=运算的对象,必须是整性。 思考: a=12; a/=a+a; 结果? a=0

  46. 3.10 赋值运算符和赋值表达式 4. 赋值表达式(重点、难点) 赋值表达式:由赋值运算符将一个变量和一个表达式连接起来的式子。(结尾无分号) 它的一般形式为: (变量)(赋值运算符)(表达式) 例如: “a=5”这个赋值表达式的值为5(变量a的值也是5)。 赋值表达式中的“表达式”,又可以是一个赋值表达式。 如: a=(b=5) 括弧内的“b=5”是一个赋值表达式,因此“a=(b=5)”相当于“a=5”,a的值等于5,整个赋值表达式的值也等于5。赋值运算符按照“自右而左”的结合顺序

  47. 3.10 赋值运算符和赋值表达式 4. 赋值表达式 a=b=c=5 (赋值表达式值为5,a b c值均为5) a=5+(c=6) (表达式值为11,a值为11,c的值为6) a=(b=10)/(c=2)(表达式值为5,a等于5,b等于10,c等于2) 赋值表达式也可以包含复合的赋值运算符。如 a+=a-=a*a 也是一个赋值表达式。如果a的初值为12,此赋值表达式的求解步骤如下:①先行“a-=a*a”的运算,它相当于a=a一a*a=12一144=一132。②再进行“a十=一132”的运算,相当于a=a十(一132)=一132一132=一264。

  48. 将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其它语句(如循环语句)中,这是C语言灵活性的一种表现。如:将赋值表达式作为表达式的一种,使赋值操作不仅可以出现在赋值语句中,而且可以以表达式形式出现在其它语句(如循环语句)中,这是C语言灵活性的一种表现。如: Printf (“%d”,a=b); 若b=3,则输出a=3,在一个语句中完成了赋值和输出双重功能。

  49. 3.11 逗号运算符和逗号表达式 用它将两个表达式连接起来。如 :3十5,6十8 称为逗号表达式。逗号表达式的一般形式为: 表达式1,表达式2 逗号表达式的求解过程是:先求解表达式1,再求解表达式2。整个逗号表达式的值是表达式2的值。例如,上面的逗号表达式“3+5,6+8”的值为14。又如,逗号表达式 a=3*5,a*4 该如何理解?(a=15,表达式的值为60) 一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式,如: (a=3*5,a*4), a+5 先使a的值等于15,再进行a*4(但a值未变),再进行a+5得20,即整个表达式的值为20。

  50. 3.11 逗号运算符和逗号表达式 逗号表达式的一般形式可以扩展为: 表达式1,表达式2,表达式3,……表达式n 它的值为表达式n的值。 逗号运算符是所有运算符中级别最低的。因此,下面两个表达式的作用是不同的: ① x=(a=3,6*3) ② x=a=3,6*a ? 求x的值

More Related