46
C 语语语 语语语语 语语语语 语语语 、、 语语语语 语语语语语 语语 语语语 语语语 、、 语语语语语语语语语语 语语语语语语语

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

Embed Size (px)

DESCRIPTION

第二章 数据类型、运算符、表达式. 数据类型 常量与变量 整型、实型、字符型 不同类型数据间的转换 运算符和表达式. 整 型. 基本类型. 单精度型 float. 实型. 双精度型 double. 字符类型 char. 枚举类型 enum. C 数 据 类 型. 短整型 short. 数组. 整型 int. 构造类型. 结构体 struct. 长整型 long. 共用体 union. 指针类型. 空类型 void. 2.1 数据类型. . 2.2 常量与变量 常量和符号常量 - PowerPoint PPT Presentation

Citation preview

Page 1: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

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

数据类型常量与变量整型、实型、字符型不同类型数据间的转换运算符和表达式

Page 2: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

§ 2.1 数据类型

< >

C数据类型

基本类型

构造类型

指针类型空类型 void

字符类型 char

枚举类型 enum

整 型

实型单精度型 float

双精度型 double

数组

结构体 struct

共用体 union

短整型 short

长整型 long

整型 int

Page 3: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

§ 2.2 常量与变量常量和符号常量

常量:在程序运行过程中,其值不能改变的量 如 ;12,0,-3,4.6,-1.23,‘a’,’c’符号常量:用一个标识符代表一个常量例 2.1 符号常量的使用#define PRICE 30main(){ int num,total; num=10; total=num* PRICE; printf(“total=%d”,total);}

< >

运行结果:total=300

Page 4: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

符号常量的好处含义清楚 如 PRICE 代表价格能做到一改全改 如 #define PRICE 35

程序中所有以 PRICE 代表的价格自动改为 35

< >

变量在程序运行过程中,其值可以改变的量变量有一个名字变量在内存中占一定的存储单元

3

a

变量值

变量名

存储单元

Page 5: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C 标识符定义:用来标识变量、常量、函数等的有效字符序列组成:

只能由字母、数字、下划线组成,且第一个字母必须是字母或下划线

大小写敏感命名原则:

见名知意变量名尽量用小写,符号常量用大写长度尽量不要超过 8 个字符尽量不使用下划线开头不能用关键字作标识符避免使用容易认错的字符

例 : 0 o O 1 l I Z z 2

例 :判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char a>b _above $123

< >

M.D.John 3days#33

char $123a>b

Page 6: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

变量的使用应“先定义,后使用”未被事先定义的不作为变量名 例:如果在定义部分写了 int student ;

而在执行语句中错写成 stadent.

如: stadent =30;

则输出错误“变量 stadent 未定义”编译时根据变量的类型为其分配相应的存储单元 如 int 为两个字节 float 为四个字节编译时根据变量的类型检查运算是否合法 如 % 运算只能在整型数据之间进行 如果 a,b 为两个实型变量,则 a%b 是错误的

Page 7: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

§ 2.3 整型数据整型常量的表示方法

十进制整数 如 ;123,-456,0八进制整数 以 0 开头的数 如: 0123 即( 123 ) 8

其值为 1*82+2*81+3*80=83

十六进制整数 以 0x 开头的数 如: 0x123 即( 123 ) 16

其值为 1*162+2*161+3*160=291

< >

要注意各种进制数字的组成注

Page 8: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

各种进制之间的转换二进制、八进制、十六进制转换成十进制

方法:按权相加

10012345

2 59212120212121111011 )()(例

10012

8 94868381136 )()(例

100123

16 79781610162161516121 )()(例 AF

< >

Page 9: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

各种进制之间的转换 ( 整数 )二进制、八进制、十六进制转换成十进制

方法:按权相加十进制转换成二进制、八进制、十六进制

方法:连续除以基,从低到高记录余数,直至商为 0

例 把十进制数 59 转换成二进制数

592

292

142

72

32

120

(59)10=(111011)2

1

1

01

11

1 1 1 0 1 1

余余余余余余

例 把十进制数 159 转换成八进制数

1598

198

280

(159)10=(237)8

2 3 7

余 7

余 3

余 2

例 把十进制数 459 转换成十六进制数

45916

2816

1160

(459)10=(1CB)16

1 C B

余 11

余 12

余 1

Page 10: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

二进制与八进制之间的转换二进制转换成八进制:从右向左,每 3 位一组(不足 3 位左补 0 ),转换成八进制

八进制转换成二进制:用 3 位二进制数代替每一位八进制数

例 (1101001)2=(001,101,001)2=(151)8

例 (246)8=(010,100,110)2=(10100110)2

000 ~ 0001 ~ 1010 ~ 2011 ~ 3100 ~ 4101 ~ 5110 ~ 6111 ~ 7

< >

Page 11: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C二进制与十六进制之间的转换

二进制转换成十六进制:从右向左,每 4 位一组(不足 4 位左补 0 ),转换成十六进制

十六进制转换成二进制:用 4 位二进制数代替每一位十六进制数

例 (11010101111101)2=(0011,0101,0111,1101)2=(357D)16

例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2

0000 ~ 00001 ~ 10010 ~ 20011 ~ 30100 ~ 40101 ~ 50110 ~ 60111 ~ 71000 ~ 81001 ~ 91010 ~ A1011 ~ B1100 ~ C1101 ~ D1110 ~ E1111 ~ F

< >

Page 12: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

字节和位内存以字节为单元组成每个字节有一个地址一个字节一般由 8 个二进制位组成每个二进位的值是 0 或 1

01234567

0123456789

10

……

...

< >

7

6

4

3

2

5

1

Page 13: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C整型变量

整型数据在内存中的存放在内存中以二进制形式存放一个整型变量在内存中占两个字节

如: int i ;i=10; 数据在内存中的实际存放情况

补码正数的补码和其原码形式相同负数的补码

取 -10 的绝对值按位取反加 1

< >

0 0 1 00 0 0 0 0 0 0 0 10 0 0

0 0 1 00 0 0 0 0 0 0 0 10 0 0

1 1 0 11 1 1 1 1 1 1 1 01 1 1

1 1 1 01 1 1 1 1 1 1 1 01 1 1

Page 14: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

整型变量的分类有符号基本整型 [signed] int无符号基本整型 unsigned int有符号短整型 [signed] short [int] 无符号短整型 unsigned short [int] 有符号长整型 [signed] long [int]无符号长整型 unsigned long [int]

=327670 1 1 11 1 1 1 1 1 1 1 11 1 1

符号位

1 1 1 11 1 1 1 1 1 1 1 11 1 1 =65535

数据的第一位

有符号整型变量无符号整型变量

Page 15: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

ANSI 标准定义的整数类型

类型 比特数 取值范围

[sigend] int 16 -32768~32767

unsigned int 16 0~65535

[sigend] short [int] 16 -32768~32767

unsigned short [int] 16 0~65535

[sigend] long [int] 32 -231~ ( 231-1 )

unsigned long [int] 32 0~ ( 232-1 )

Page 16: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

整型变量的定义int a , b ;unsigned short c , d ;long e , f

< >

例 2.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=%d\n” , c , d );}

运行结果:a+u=22 , b+u=-14

Page 17: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

整型数据的溢出

< >

例 2.3 整型数据的溢出main (){ int a , b ; a=32767 ; b=a+1 ; printf (“ %d , %d\n” , a , b );}

运行结果:32767,-32768

0 1 1 11 1 1 1 1 1 1 1 11 1 1a:

32767

1 0 0 00 0 0 0 0 0 0 0 00 0 0b:

-32768

Page 18: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

整型常量的类型其值在 -32768~+32767 范围内的整数认为它是 int 型其值超出上述范围,在 -2147483648~+2147483647 范 围内,则认为是长整型一个整型常量后加一个字母 u ,认为是 unsigned int 型 如 12345u 。如果是 -12345u ,则先将 -12345 转换成补码

53191 ,然后按无符号数存储。一个整型常量后面加一个字母 l 或 L ,认为是 long int 型

3

12

6

9

1

2

4

57

8

10

11

Page 19: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

思考题 请写出下列程序的运行结果

< >

main (){ long int a ; a=32767+1 ; printf (“ a=%ld\n” , a );}

main (){ long int a ; a=32768 ; printf (“ a=%ld\n” , a );}

Page 20: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

§ 2.4 实型数据实型常量的表示方法

十进制小数形式 由数字和小数点组成(必须有小数点) 如 ;.123 、 123. 、 123.0 、 0.0指数形式 如: 123e3 或 123E3 都代表 123*103

字母 e 之前必须有数字, e 后面的指数必须为整数规范化的指数表示形式 一个实数可以有多种指数表示形式 如 123.456 可表示为 123.456e0 、 12.3456e1 、 1.23456e2 、 0.123456e3 等

字母 e 之前的小数部分中,小数点左边有且只能有一位 非零的数字 < >

Page 21: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C 实型变量实型数据在内存中的存放

实型变量的分类

< >

+ .314159 1

数符小数部分指数

类型 比特数 有效数字 数值范围

float 32 6~7 10-37~1038

double 64 15~16 10-307~10308

long double 80 18~19 10-4931~104932

Page 22: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C实型数据的舍入误差 例 2.4 实型数据的舍入误差

main(){ float a , b; /*double*/ a=123456.789e5 ; b=a+20; printf(“%f\n”,b);}

< >

运行结果:12345678848.000000

实型常量的类型

系统将实型常量作为双精度来处理

可在数的后面加字母 f 或 F ,按单精度处理

Page 23: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

§ 2.5 字符常量定义 :用单引号括起来的单个普通字符或转义字符 .

如 ‘ \101’ -----------‘A’ ‘\012’ -----------’\n’ ‘\376’ -----------’’ ‘\x61’ -----------’a’ ‘\60’ -----------’0’ ‘\483’ ----------()

例 :‘A’-------’\101’-------’\x41’--------65

如 ‘ a’ ‘A’ ‘?’ ‘\n’ ‘\101’转义字符 :反斜线后面跟一个字符或一个代码值表示

例 转义字符举例main(){ printf("\101 \x42 C\n"); printf("I say:\"How are you?\"\n"); printf("\\C Program\\\n"); printf("Turbo \'C\'");}

运行结果: ( 屏幕显示 )A B CIsay:”How are you?”\C Program\Turbo ‘C’

例 main() { printf(“Y\b=\n”); }

运行结果:屏幕显示: =打印机输出: ¥

字符形式 含义 ASCII 代码\n 换行,将当前位置移到下一行开头 10

\t 水平制表(跳到下一个制表位) 9

\b 退格,将当前位置移到前一列 8

\r 回车,将当前位置移到本行开头 13

\f 换页,将当前位值移到下页开头 12

\\ 反斜杠字符“ \” 92

\’ 单引号字符 39

\” 双引号字符 34

\ddd 1 到 3 位 8 进制数所代表的字符\xhh 1 到 2 位 16 进制数所代表的字符

Page 24: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

例 2.5 转义字符的使用main()

{

printf(“ ab c\t de\rf\tg\n");

printf(“h\ti\b\bj k\n");

}

运行结果:屏幕显示: f gde h j k打印机输出: fab c gde h jik

字符变量定义形式

char c1 , c2 ;赋值

c1=‘a’ ; c2=‘b’ ;

Page 25: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

字符数据在内存中的存储一个字符在内存中占一个字节字符数据在内存中以 ASCII 码存储

例 2.6 向字符变量赋以整数

main ()

{ char c1 , c2 ;

c1=97 ; c2=98 ;

printf (” %c %c\n”,c1,c2) ;

printf (” %d %d\n”,c1,c2) ;

}

01100001

‘a’ 在内存中的存储

01100010

‘b’ 在内存中的存储

字符数据和整型数据存储形式相似,可以互相转换

一个字符型数据既可以以字符形式输出,也可以以整数形式输出

ASCII 码 字符 输出

ASCII 码 输出 运行结果:a b97 98

c1=‘a’; c2=‘b’

Page 26: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

例 2.7 大小写字母的转换main()

{ char c1,c2;

c1='a';c2='b';

c1=c1-32;

c2=c2-32;

printf("%c %c\n",c1,c2);

}

运行结果:A B

字符数据与整型数据可以互相赋值

int i ; char c ;

i=‘a’;c=97;

字符变量中的最高位为符号位注

Page 27: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

<

字符常量与字符串常量不同

字符串常量定义:用双引号 (“”) 括起来的字符序列存储:每个字符串尾自动加一个 ‘ \0’ 作为字符串结束标志

h e l l o \0例 字符串“ hello” 在内存中

a a \0例 ‘ a’ “a”

例 : char ch; ch=“A”;

例 : char ch; ch=‘A’;

如 “ how do you do” ,“ china” ,” a”

Page 28: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

ANSI 标准定义的数据类型

< >

类型符号 关键字

数的表示范围所占位数

整型

字符

实型

(signed)int 16 -32768~32767(signed)short 16 -32768~32767

(signed)long 32 -2147483648~214748364716unsigned in

t0~65535

32 0~4294967295unsigned long

unsigned short 16 0~65535

有 float 32 10-37~1038

有 double 64 10-307~10308

有 char 8 -128~127

无 unsigned char 8 0~255

Page 29: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

§ 2.6 变量赋初值定义变量的同时使变量初始化 如: int a=3; float f=3.56; char c=‘a’;

也可部分赋初值 如: int a, b, c=3;对几个变量赋初值,可写成 int a=3, b=3, c=3; 不能写成 int a=b=c=3;

< >

int a=3;

int a;

a=3;int a, b, c=5;

int a, b, c;

c=5;

Page 30: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

double float

long

unsigned

int char,short低

高 说明 :

必定的转换

运算对象类型不同时转换 只表示转换方向

例 char ch; int i; float f; double d;

ch/i + f*d - (f+i)

int

int

double

double

double

double

double

double

int

int

double

double

double

double

double

double

10+‘a’ +i*f - d/e

例 int i; float f; double d; long e;

< >

§ 2.7 各类数值型数据间的混合运算

Page 31: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

§ 2.8 算术运算符和算术表达式

C运算符

算术运算符: + - * / % ++ --关系运算符: < <= = = > >= !=逻辑运算符:! && ||位运算符 : << >> ~ | ^ &赋值运算符: = 及其扩展赋值运算符条件运算符: ?:逗号运算符: ,指针运算符: * &求字节数 : sizeof强制类型转换:(类型)分量运算符: . ->下标运算符: []其它 : ( ) -

< >

Page 32: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

算术运算符和表达式基本算术运算符: + - * / %说明:

两整数相除,结果为整数 采取“向零取整”的方法%要求两侧均为整型数据

例 5/2 = 5/2.0 =

例 5%2 = -5%2 = 1%10 = 5%1 = 5.5%2

< >

例 5/2 = 2 5/2.0 =2.5

例 5%2 = 1 -5%2 = -1 1%10 = 1 5%1 = 0 5.5%2 ()

Page 33: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

算术表达式和运算符的优先级与结合性C算术表达式:用算术运算符和括号将运算对象连接起来的、符合 C语法规则的式子

结合方向为“自左至右”

< >

例 a*b/c-1.5+’a’ ab*c/1.5-’a’+

强制类型转换运算符可以将一个表达式转换成所需类型形式 (类型名)(表达式) 类型名与表达式都应用括号括起来

例( double ) a ( int )( x+y )

说明:强制类型转换时,得到一个所需类型 的中间变量,原变量的类型未发生变化

例 2.8 强制类型转换

main ()

{ float x ;

int I;

x=3.6 ;

i=(int) x;

printf (” x=%f,i= %d\n”,x,i) ;

}

运行结果:x=3.600000,i=3

Page 34: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

自增、自减运算符 ++ --作用:使变量值加 1或减 1种类:

前置 ++i, --i (先执行 i+1 或 i-1 ,再使用 i值)后置 i++,i-- (先使用 i值 , 再执行 i+1 或 i-1 )

例 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

Page 35: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

自增、自减运算符 ++ --作用:使变量值加 1或减 1种类:

前置 ++i, --i (先执行 i+1 或 i-1 ,再使用 i值)后置 i++,i-- (先使用 i值 , 再执行 i+1 或 i-1 )

说明:++ -- 不能用于常量和表达式 ,如 5++, (a+b)++++ --结合方向: 自右向左优先级:

例 -i++ -(i++) i=3; printf(“%d”,-i++); //-3 例 -i++ i=3; printf(“%d”,-i++);

Page 36: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

表达式使用中的问题说明注意编译系统的调用顺序例设 i=3 ;求 (i++)+(i++) +(i++)

有的系统值为 9 ,有的为 12

turboc 系统中得到 9

(++i)+(++i) +(++i)运算符的组成 自左至右尽可能多的将若干个字符组成一个运算符实参的求值顺序 printf(“ %d, %d”, i, i++);( i的值为 3) 有的系统值为 3 , 3 有的为 4 , 3

turboc 系统中得到 4 , 3

Page 37: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

赋值运算符和表达式赋值运算符

符号: =格式: 变量标识符 =表达式作用:将一个数据(常量或表达式)赋给一个变量

类型转换实型数据赋给整型变量时,舍弃实数的小数部分 int i; i=3.56; i的值为 3,以整数形式存储将整型数据赋给单、双精度变量时,数值不变,补足有效数字,以浮点数形式存储到变量中。

float f; f=23;转换成 23.00000 存储 double f;f=23;转换成 23.00000000000000 存储注意:单、双精度变量的有效数字的位数

< >

Page 38: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C类型转换

将一个 double数据赋给 float变量时,截取其前面 7位有效数字,存放到存储单元中。

注意:数值范围不能溢出将一个 float数据赋给 double变量时,数值不变,有效位数扩展到 16位,以 64位存储。

字符型数据赋给整型变量字符为无符号量时,将字符的 8位放到整型变量的低 8位,高 8位补零。

若为有符号字符,最高位为零,则整型变量的高 8位补零< >

1 1 1 11 1 1 0c=‘\376’

0 1 1 00 0 0 0 1 1 1 1 10 0 0

Page 39: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C类型转换

若字符最高位为 1,则高八位全部补 1。

注意:目的是使数值保持不变将一个 int、 short、 long数据赋给 char变量时,只将其低 8位原封不动送到 char型变量。

< >

1 1 1 11 1 1 0

i=289

1 1 1 01 1 1 1 1 1 1 1 11 1 1

0 0 0 10 0 0 1 0 0 1 0 00 0 0

0 0 0 00 1 0 1

c=‘\376’

Page 40: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C类型转换

将 int型数据赋给 long变量时,进行符号扩展,将整型数的16位送到 long型低 16位中,如果 int为正值,则 long高 16位补零,如果 int为负值,则高 16位补 1。

将一个 long数据赋给 int变量时,将其低 16位原封不动送到整型变量。

将 unsigned int型数据赋给 long型变量时,高位补零将一个 unsigned类型数据赋给一个占字节数相同的整型变量,将 unsigned型变量的内容原样送到非 unsigned变量中。若为有符号字符,最高位为零,则整型变量的高 8位补零。

注意:有可能出现数据错误

< >

0 0 0 00 0 0 0 0 0 0 0 10 0 00 0 1 00 0 0 0 0 0 0 0 00 0 0

0 0 0 00 0 0 0 0 0 0 0 10 0 0

Page 41: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C类型转换

unsigned int a=65535;int b;b=a;

注意:根据补码知识, b的值为 -1 。将非 unsigned型数据赋给长度相同的 unsigned型变量,也是原样照赋。

< >

a1 1 1 11 1 1 11 1 1 11 1 1 1

例 2.9 有符号数据传送给无符号变量

main () { unsigned a ; int b=-1 ; a=b ; printf (“ %u” , a ); }

运行结果:65535

1 1 1 11 1 1 11 1 1 11 1 1 1 b

不同类型的整型数据间的赋值:

按存储单元中的存储形式直接传送

Page 42: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

复合的赋值运算符在“ =”前加上其他运算符,可构成复合的运算符 a+=3 等价于 a=a+3 x*=y+8 等价于 x=x*( y+8) x%=3 等价于 x=x%3 为便于记忆,可以这样理解 a+=b ( a为变量, b为表达式) a+=b (将有下划线的移到“ =”右侧) a=a+b (在“ =”左侧补上变量名 a)10 种复合赋值运算符 +=, -=, *=, /=, %=, <<=,>>=,&=,∧=,|=

< >

Page 43: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子形式 〈变量〉〈赋值运算符〉〈表达式〉 求解过程 将赋值符右侧的表达式的值赋给左侧的变量

< >

说明 :结合方向:自右向左左侧必须是变量,不能是常量或表达式

例 3=x-2*y; a+b=3;

赋值表达式的值与变量值相等 , 且可嵌套

例 : a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2)

赋值表达式也可以包含复合的赋值运算符

例 : 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))//a=0 等价于 a=a+(a=a*(a=a-(a=a*3)))

Page 44: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

逗号运算符和表达式形式:表达式 1, 表达式 2,…… 表达式 n结合性 : 从左向右求值顺序:表达式 1 ,表达式 2 ,……表达式 n逗号表达式的值:等于表达式 n 的值用途:常用于循环 for 语句中

例 a=3*5,a*4 a=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(“%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

Page 45: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C

逗号运算符和表达式形式:表达式 1, 表达式 2,…… 表达式 n结合性 : 从左向右求值顺序:表达式 1 ,表达式 2 ,……表达式 n逗号表达式的值:等于表达式 n 的值用途:常用于循环 for 语句中例 :main(){ int x,y=7; float z=4; x=(y=y+6,y/z); printf("x=%d\n",x);}

运行结果: x=3

< >

Page 46: 第二章 数据类型、运算符、表达式

c语言程序设计

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

C main(){char a=176,b=219;printf("%c%c%c%c%c\n",b,a,a,a,b);printf("%c%c%c%c%c\n",a,b,a,b,a);printf("%c%c%c%c%c\n",a,a,b,a,a);printf("%c%c%c%c%c\n",a,b,a,b,a);printf("%c%c%c%c%c\n",b,a,a,a,b);

}作业:

P41 2.3 ( 2 )、( 5 ), 2.6 , 2.7 , 2.8 ,2.9 , 2.10 , 2.11 , 2.12