《C语言程序设计》ppt课件_第1页
《C语言程序设计》ppt课件_第2页
《C语言程序设计》ppt课件_第3页
《C语言程序设计》ppt课件_第4页
《C语言程序设计》ppt课件_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

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

文档简介

1、语言程序设计数据类型、运算符和表达式 一、C语言的数据类型 二、C语言的变量和常量2.1 常量和符号常量1 1、常量、常量: : 在程序运行过程中,其值不能被改在程序运行过程中,其值不能被改变的量。变的量。 每种数据类型都有常量,也都有变量。如整型每种数据类型都有常量,也都有变量。如整型常量、浮点型常量常量、浮点型常量. .例如:例如: 12 12、4 4 、-67 -67 或或 3.143.14 5.6 5.6 或或 a a 、dd 从上可以看出常量可以是不同类型的从上可以看出常量可以是不同类型的. .2 2、常量分为两种直接常量和符号常量。、常量分为两种直接常量和符号常量。 直接常量直将数

2、值直接使用,如:直接常量直将数值直接使用,如:a=ba=b* *1010; ;当用一个标志符代表一个常量时,称为符号常量当用一个标志符代表一个常量时,称为符号常量. . 2.1 常量和符号常量1 1、常量、常量: : 在程序运行过程中,其值不能被改在程序运行过程中,其值不能被改变的量。变的量。 每种数据类型都有常量,也都有变量。如整型每种数据类型都有常量,也都有变量。如整型常量、浮点型常量常量、浮点型常量. .例如:例如: 12 12、4 4 、-67 -67 或或 3.143.14 5.6 5.6 或或 a a 、dd 从上可以看出常量可以是不同类型的从上可以看出常量可以是不同类型的. .2

3、 2、常量分为两种直接常量和符号常量。、常量分为两种直接常量和符号常量。 直接常量直将数值直接使用,如:直接常量直将数值直接使用,如:a=ba=b* *1010; ;当用一个标志符代表一个常量时,称为符号常量当用一个标志符代表一个常量时,称为符号常量. . 上例中的上例中的PRICE PRICE 就称为符号常量;凡在程序中出现的就称为符号常量;凡在程序中出现的PRICE PRICE 都代表都代表3030。 PRICE=PRICE+5; PRICE=PRICE+5; /*正确否*/一般情况下,符号常量名用大写、变量用小写。一般情况下,符号常量名用大写、变量用小写。 例例: :# #define

4、PRICE 30define PRICE 30main()main() int num, total; int num, total; num=10;num=10; total=num total=num* * PRICE; PRICE; printf(total=%d,total); printf(total=%d,total); 3 3、符号常量的声明和使用、符号常量的声明和使用一般放在程序的前端,与一般放在程序的前端,与# #include include 在一块:在一块:# #define define 符号常量名符号常量名 值值如:如:# #define Zero 0define Z

5、ero 0好处:好处: 含义清楚含义清楚 (# (#define Second 60) define Second 60) 一改全改一改全改 (# (#define PI 3.14)define PI 3.14)2.2 变量 在程序运行过程中,在程序运行过程中,其值可以改变其值可以改变的量称为变的量称为变量。量。 一个变量应该有一个变量名,并且一个变量应该有一个变量名,并且在内存中占在内存中占据一定的的存储单元据一定的的存储单元用来存放变量的值。用来存放变量的值。 注意:变量名与变量值的区别注意:变量名与变量值的区别 在在C C语言中,要求对所有用到的变量作强制定义,语言中,要求对所有用到的变

6、量作强制定义,即即“先定义、后使用先定义、后使用”。 因为:因为: 1 1、 编译程序不能翻译未定义变量。编译程序不能翻译未定义变量。 2 2、 编译程序在编译时根据变量类型确定存储编译程序在编译时根据变量类型确定存储单元的数量并分配空间单元的数量并分配空间 3 3、编译程序在编译时根据变量类型进行语法检查。、编译程序在编译时根据变量类型进行语法检查。例,整型变量例,整型变量a a、b b可以进行可以进行“求余求余”运算运算 a % ba % b;若把若把a a、b b定义为实数,则上述运算非法。定义为实数,则上述运算非法。main() int i, studentNo; i=5; stude

7、ntno=5; /*错在哪里错在哪里*/ j=3; /*错在哪里错在哪里*/ 一条变量说明语句由数据类型和其后的一个或多一条变量说明语句由数据类型和其后的一个或多个变量名组成。变量说明的形式如下个变量名组成。变量说明的形式如下: : 类型类型 ; 这里类型是指这里类型是指Turbo C2.0Turbo C2.0的有效数据类型。的有效数据类型。 变量表是一个或多个变量表是一个或多个, , 每个标识符之间每个标识符之间用用,分隔。分隔。 例如例如: : int iint i int i, j, k; int i, j, k; char c, str5, char c, str5, * *p;p;

8、所谓所谓标识符标识符是指常量、变量、语句标号以及用户是指常量、变量、语句标号以及用户自定义函数的名称。自定义函数的名称。 Turbo C 2.0 Turbo C 2.0标识符的定义十分灵活。作为标识符标识符的定义十分灵活。作为标识符必须满足以下规则必须满足以下规则: : 1.1.所有标识符必须由一个字母所有标识符必须由一个字母( (az, AZ)az, AZ)或下或下划线划线(_)(_)开头开头; ; 2. 2.标识符的其它部分可以用字母、下划线或数字标识符的其它部分可以用字母、下划线或数字(09)(09)组成组成; ; 3. 3.大小写字母表示不同意义大小写字母表示不同意义, , 即代表不同

9、的标识即代表不同的标识符符; ; 4. 4.标识符只有前标识符只有前3232个字符有效个字符有效( (Turbo C)Turbo C) 5. 5.标识符不能使用标识符不能使用Turbo C2.0Turbo C2.0的关键字。的关键字。2.3标识符下面举出几个正确和不正确的标识符下面举出几个正确和不正确的标识符: :正确正确-不正确不正确smartsmart-5smart5smart_decision_decision-bomb? bomb? key_boardkey_board-key.board key.board FLOATFLOAT-floatfloat三、整型数据 整型常量即整常数按不

10、同的进制区分整型常量即整常数按不同的进制区分, , 整型常数整型常数有三种表示方法有三种表示方法: : 十进制数十进制数: : 以非以非0 0开始的数开始的数 如如:220, -560, 45900:220, -560, 45900八进制数八进制数: : 以以0 0开始的数开始的数 如如:06; 0106, 05788:06; 0106, 05788十六进制数十六进制数: : 以以0 0X X或或0 0 x x开始的数开始的数 如如:0:0X0D, 0XFF, 0 x4e X0D, 0XFF, 0 x4e 3.1.整型常量 main() int i; i=11; printf(“i=%dn”,

11、i); i=011; printf(“i=%dn”,i); i=0 x11; printf(“i=%dn”,i); i=0X11; printf(“i=%dn”,i);程序的输出结果是多少?程序的输出结果是多少?注意:注意:可在整型可在整型常数常数后后添加一个添加一个 LL或或 ll字母字母表示该数表示该数为为长整型数长整型数, ,如如2222L, 0773L, 0Xae4lL, 0773L, 0Xae4l。另外另外, , 所有整数的缺省类型是所有整数的缺省类型是intint,可在整型常数可在整型常数后添加一个后添加一个 LL或或 ll字母表示该数为长整型数字母表示该数为长整型数, , 如如

12、22 22L,0773L, 0Xae4lL,0773L, 0Xae4l。若加上若加上一个一个 uu或或 UU字母表示该数为无符号字母表示该数为无符号整型整型数,如数,如2727u, 0400u, 0 xb8000000uu, 0400u, 0 xb8000000u。若加上一个若加上一个 ulul或或 ULUL字母表示该数为无符号长字母表示该数为无符号长整型整型数,如数,如 27 27ul, 0400UL, 0 xb8000000ULul, 0400UL, 0 xb8000000UL。当整数的值超出当整数的值超出intint类型所能表示的范围时称为整类型所能表示的范围时称为整数数溢出溢出。 1

13、1整型变量的分类整型变量的分类: :加上不同的修饰加上不同的修饰符符, , 整型变整型变量有以下几种类型量有以下几种类型; ; C C语言标准没有规定整型变量在计算机内存中所语言标准没有规定整型变量在计算机内存中所占的字节数,它与具体的机器和操作系统有关:占的字节数,它与具体的机器和操作系统有关: 3.2、整型变量2. 2. 整型变量的定义整型变量的定义可以用下列语句定义整型变量可以用下列语句定义整型变量: :int a, b; int a, b; / /* *a a、b b被定义为有符号短整型变量被定义为有符号短整型变量* */ /unsigned long c; unsigned long

14、 c; / /* *c c被定义为无符号长整型变量被定义为无符号长整型变量* */ /unsigned short c,d; unsigned short c,d; / /* *指定变量指定变量c c、d d为无符号短整型为无符号短整型 * */ /long e,f; long e,f; / /* * 指定变量指定变量e e、f f为长整型为长整型* */ /程序中在函数的开头部分定义变量。程序中在函数的开头部分定义变量。main()main() int a,b,c,d; int a,b,c,d; / /* * 指定变量指定变量a a、b b、c c、d d为整型为整型 * */ / unsi

15、gned u; unsigned u; / /* * 指定变量指定变量u u为无符号整型为无符号整型 * */ / a = 12; b = -24; u = 10; a = 12; b = -24; u = 10; c = a + u; d = b+u; c = a + u; d = b+u; printf(a+u = %d, b+u = %dn, c,d); printf(a+u = %d, b+u = %dn, c,d); 程序运行显示:程序运行显示:a+u = 22, b+u = -14a+u = 22, b+u = -14 3. 3. 整型变量的溢出整型变量的溢出 main()main

16、() int i,j; int i,j; unsigned k,l,m; unsigned k,l,m; i=32767; i=32767; j=i+1; j=i+1; l=65535u; l=65535u; m=l+2; m=l+2; printf(j=%dn,j); printf(j=%dn,j); printf(l=%un,l); printf(l=%un,l); printf(m=%un,m); printf(m=%un,m); 象这类问题体现了象这类问题体现了C C语言灵活性所带来的副作用。语言灵活性所带来的副作用。这种错误系统不给提示,由程序员自己控制。这种错误系统不给提示,由程序

17、员自己控制。四、实型数据实数(实数(realreal)又称为浮点数(又称为浮点数(floatfloat), ,有两种表达方式:有两种表达方式:普通普通( (十进制十进制) )方式:方式:0.1230.123、 .123 .123、 123.0 123.0、 123. 123.、 0.0 0.0(必须有小数点)(必须有小数点)指数方式:指数方式:123123e3e3或或123123E3E3、123E-2123E-2注意注意:字母:字母e(e(或或E)E)之前必须有数字之前必须有数字 e e后面指数必须为整数后面指数必须为整数规范化指数形式规范化指数形式:e e前的小数部分中,小数点左边只能有一前

18、的小数部分中,小数点左边只能有一位非位非0 0数字。如下面例子应为:数字。如下面例子应为: 1.23 1.23e5e5 错误:错误:0.1230.123e6e64.1 实型常量4.2 实型变量精确程度例:例:float x,y; /float x,y; /* * 指定指定x x、y y为单精度实型变量为单精度实型变量 * */ /double z; /double z; /* * 指定指定z z为双精度实型变量为双精度实型变量 * */ /实型常量不分实型常量不分floatfloat和和doubledouble。问题:如何用图示的方法表示这些变量的内存空间?问题:如何用图示的方法表示这些变量的

19、内存空间? 4.3 实型变量的误差与精度main() float a,b; a=123456.789e5; b=a+20; printf(“%fn”,a); printf(“%fn”,b);注意输出结果注意输出结果main() float a; double b; a=111111.111; b=111111.111; printf(“%fn”,a); printf(“%fn”,b);注意输出结果注意输出结果五、字符型数据用用单引号单引号( (撇号撇号) )括起来的一个字符。括起来的一个字符。如:如: aa、xx、DD、?、$。注意,注意,aa和和AA是不同的字符常量。是不同的字符常量。因为因

20、为C C语言区分大小写。语言区分大小写。以以“”“”开头的字符序列,称为开头的字符序列,称为“转义序列转义序列”。“”“”使其后面的字符变为另外的意义。见下表。使其后面的字符变为另外的意义。见下表。5.1 字符常量转义序列主要用来控制打印机和屏幕输出。转义序列主要用来控制打印机和屏幕输出。 例:例:printf(n sum is %dnn,sum);printf(n sum is %dnn,sum);比较下面两句的区别:比较下面两句的区别:printf(“this is a “test”); printf(“this is a “test”); / /* *出错出错* */ /printf(“

21、this is a “test”); printf(“this is a “test”); / /* *输出输出: :this is a “test”this is a “test”* */ / char c1,c2; /char c1,c2; /* * 定义定义c1c1、c2c2为字符变量为字符变量 * */ /c1 = a; c2 = b;c1 = a; c2 = b;字符变量在内存中占一字节。字符变量在内存中占一字节。问题:如何用图示的方法表示这些变量的内存问题:如何用图示的方法表示这些变量的内存空间?空间? 5.2 字符变量字符在内存中以字符在内存中以ASCIIASCII码存放。码存放

22、。 5.3 字符数据在内存中的存储形式及其使用方法main()main() char c1,c2; char c1,c2; c1 = A; c2 = B; c1 = A; c2 = B; printf(%c %c,c1+32,c2+32); printf(%c %c,c1+32,c2+32); 该例的输出是:该例的输出是: a b a b main()main() char c1,c2; char c1,c2; c1 = a; c2 = b; c1 = a; c2 = b; c1 = c1 - 32; c2 = c2 - 32; c1 = c1 - 32; c2 = c2 - 32; prin

23、tf(%c %c,c1,c2); printf(%c %c,c1,c2); C C语言允许字符和整数之间进行运算语言允许字符和整数之间进行运算 字符常量字符常量: 单引号单引号括起来的括起来的一个字符一个字符。字符串常量字符串常量:双引号双引号括起来的括起来的字符序列字符序列(00N N个字符)。如:个字符)。如: How do you do., How do you do., CHINA, a, $123.45CHINA, a, $123.45字符串常量在内存中的存放:字符串常量在内存中的存放:每一个字符均以其每一个字符均以其ASCIIASCII码存放,码存放,且最后添加一且最后添加一个个“

24、空字符空字符”(二进制(二进制0000000000000000,记为,记为NULLNULL或或 0 0 。 字 符。 字 符 0 0 在 内 存 中 存在 内 存 中 存 0 0 x 3 0 x 3 0 即即0010000000100000)。)。5.4 字符串常量例:字符串常量例:字符串常量“CHINA”CHINA”存放在内存中的情况存放在内存中的情况是:是:(6(6字节存储器空间,不是字节存储器空间,不是5 5字节字节) )因此,因此,字符字符 aa和字符串和字符串 aa的区别的区别是:是:字符字符a a :1 1字节字节(值为(值为9797) 字符串字符串 aa:2 2字节字节(值为(值

25、为97,097,0) 5.5 字符与整型的相互转换main( ) main( ) char c1,c2; char c1,c2; c1=a; c2=b; c1=a; c2=b; printf (“c1=%c,c2=%c n”,c1,c2); printf (“c1=%c,c2=%c n”,c1,c2); printf (“c1=%d,c2=%d n”,c1,c2); printf (“c1=%d,c2=%d n”,c1,c2); /*问题:结果如何*/六、变量赋初值为什么要给变量赋初值?为什么要给变量赋初值?( (教室不打扫教室不打扫) )因为分配的内存空间可能有一个因为分配的内存空间可能有一

26、个脏数据脏数据。如果。如果不赋初值,默认初始值就是这个脏数据。不赋初值,默认初始值就是这个脏数据。( (举举例说明例说明) )1.1.定义的同时给变量赋初值定义的同时给变量赋初值如:如:int a=3; float b=3.1415;int a=3; float b=3.1415; char c=x; char c=x; 2.2.定义变量时,可以对其中的一部分变量赋初定义变量时,可以对其中的一部分变量赋初值值. .如:如: int a=3, b, c, d=8; int a=3, b, c, d=8; 3.3.把一个值赋给不同变量时,要分别进行。把一个值赋给不同变量时,要分别进行。 如不应写为

27、:如不应写为:int a=b=c=3; int a=b=c=3; 而应写为:而应写为: int a=3,b=3,c=3; int a=3,b=3,c=3; 4.4.初始化是在程序运行时,执行本函数时赋以初始化是在程序运行时,执行本函数时赋以初值的。初值的。 即不是编译时赋以初值的。如:即不是编译时赋以初值的。如: int a=3; int a=3; 相当于:相当于:int a; a=3; int a; a=3; int a,b,c=5; int a,b,c=5; 相当于:相当于:int a,b,c; int a,b,c; c=5;c=5; 七、各类数值型数据间的混合运算在在C C语言中,整、实

28、、字符型数据间可以混合运语言中,整、实、字符型数据间可以混合运算,如:算,如:10 + 10 + a + 1.5 - 8765.1234 a + 1.5 - 8765.1234 * * b b1 1、不同类型数据间进行运算时,要转换成同一、不同类型数据间进行运算时,要转换成同一类型类型 转换过程中,低类型向高类型靠拢,然后进行转换过程中,低类型向高类型靠拢,然后进行运算,不同类型之间转换如下图所示,运算,不同类型之间转换如下图所示,横向横向左箭头为必转,纵向箭头表示有条件类型转左箭头为必转,纵向箭头表示有条件类型转换。换。 例:例: charchar数据在运算前数据在运算前必定必定转换为转换为

29、intint数据;数据;intint数据数据可以转换可以转换为为unsignedunsigned数据;数据;floatfloat数据在运算前数据在运算前必定必定转换为转换为doubledouble数据数据( (即即使两个使两个floatfloat相加相加) ); int int数据可以转换为数据可以转换为doubledouble数据数据( (若另外一个运若另外一个运算数据为算数据为double)double),(,(直接转换,不需先转换直接转换,不需先转换为为unsignedunsigned,longlong,再转换为再转换为doubledouble)。)。 上式的运算次序是上式的运算次序是:

30、 进行进行10+10+aa运算。先将运算。先将 aa转换为整数转换为整数9797,运算结果为整数,运算结果为整数107107。 进行进行i i* *f f运算。先将运算。先将i i和和f f均转换为均转换为doubledouble类型(实运算过程总是类型(实运算过程总是使用使用doubledouble类型,仅在把结果存入存储器时,才可能使用类型,仅在把结果存入存储器时,才可能使用floatfloat类型),运算结果是类型),运算结果是doubledouble类型。类型。 整数整数107107与与i i* *f f的积相加。先将整数的积相加。先将整数107107转换为转换为doubledoubl

31、e类型类型(107.0107.0),运算结果是),运算结果是doubledouble类型。类型。 进行进行d/ed/e运算。先将运算。先将long elong e转换为转换为doubledouble类型,运算结果是类型,运算结果是doubledouble类型。类型。 进行进行- -运算,结果为运算,结果为doubledouble类型。类型。 八、算术运算符和算术表达式8.1 C运算符简介8.2算术运算符和算术表达式1 1、基本的算术运算符、基本的算术运算符 + +:加法或正值运算符,如:加法或正值运算符,如:2+3 2+3 、+5 +5 - -:减法或负值运算符,如:减法或负值运算符,如:8-

32、3 8-3 、-6 -6 * *:乘法运算符,:乘法运算符, 如:如:3 3* *5 5 /: /: 除法运算符,则可以是整或实型数据。如除法运算符,则可以是整或实型数据。如5/3 5/3 % %:求余运算符,两侧必是:求余运算符,两侧必是整型数据整型数据。如。如7%47%4 注:注:-5/3 = -1-5/3 = -1(余(余-2-2) 或或 -2( -2(余余+1)+1),Turbo C Turbo C 取取- -1 1结果(结果(“向零取整向零取整”)。)。 2 2、算术表达式和运算符的优先级与结合性、算术表达式和运算符的优先级与结合性算术表达式:算术表达式: 如:如:a a* *b/c

33、-1.5+ab/c-1.5+a在在C C语言中,运算符共有语言中,运算符共有1515个优先级,其中算术个优先级,其中算术运算符的优先级是:运算符的优先级是: * *、/ / 、% %(3 3级)级) + + 、- -(4 4级)级) 请见请见P375376 P375376 算术运算符的结合方向:从左向右算术运算符的结合方向:从左向右 注意:对于运算符的结合方向,只需记住注意:对于运算符的结合方向,只需记住三种三种运算符是自右向左运算符是自右向左的,其余都是自左向右的。的,其余都是自左向右的。这三种运算符是:这三种运算符是:单目运算符、单目运算符、三目运算符三目运算符( (only one)on

34、ly one)、赋值运算符赋值运算符( (不计算好如何赋值?不计算好如何赋值?) )例:例: a = b + ca = b + c由于赋值运算符由于赋值运算符= =为右结合,为右结合,先执行右边的先执行右边的b+cb+c,再赋值给再赋值给a a。8.3、强制类型转换运算符一般形式:一般形式: (类型名)(类型名) (表达式)(表达式) 如:(如:(double)a double)a 将将a a转换为转换为doubledouble型型 ( (int)(x+y) int)(x+y) 将将x+yx+y的值转换为整型的值转换为整型 ( (float)(5%3) float)(5%3) 将将5%35%3

35、的值转换成单精度实型的值转换成单精度实型 说明:说明:1.1.(intint)(x+y) (x+y) 与与( (int)x+y int)x+y 意义不同意义不同 2. 2. 类型转换后得到一个中间值,而原来变量本类型转换后得到一个中间值,而原来变量本身的类型没有发生变化。身的类型没有发生变化。 3.(3.(int)xint)x不要写成不要写成int(x); int(x); / /* *C C语言中语言中不行,不行,c+c+允许允许* */ /main( )main( ) float x , i; x=3.6; i=(int) (x); float x , i; x=3.6; i=(int) (

36、x); printf (“x=%f, i=%fn”,x,i); printf (“x=%f, i=%fn”,x,i); 运算结果:运算结果:x=3.600000,x=3.600000, i=3.000000 i=3.000000思考:程序运行期间,思考:程序运行期间,x,ix,i的类型和值发生变化没有?的类型和值发生变化没有?8.4、自增、自减运算符 +:增:增1 1运算符,使变量值增运算符,使变量值增1 1。 记忆:记忆:+在前,先加;在后,后加在前,先加;在后,后加 - -:减:减1 1运算符,使变量值减运算符,使变量值减1 1。 如:如: + +i ,-ii ,-i:在使用变量在使用变量

37、i i之前,先使变量之前,先使变量i i加加(减)(减)1 1。 i+,i-i+,i-:在使用变量在使用变量i i之后,使变量之后,使变量i i值加值加(减)(减)1 1。 main( ) main( ) int i,j; i=3;j=+i; int i,j; i=3;j=+i; printf printf (“i=%d,j=%dn”,i,j); (“i=%d,j=%dn”,i,j); 运算结果:运算结果:i=4,j=4i=4,j=4main( ) main( ) int i,j; i=3;j=i+; int i,j; i=3;j=i+; printf printf (“i=%d,j=%dn”

38、,i,j); (“i=%d,j=%dn”,i,j); 运算结果:运算结果:i=4,j=3i=4,j=3说明:说明: 1.+,- -1.+,- -运算符运算符只能用于变量,而只能用于变量,而不能用于常量和表不能用于常量和表达式。达式。 如如a+,b-a+,b-是正确是正确的,而的,而5+,(5+,(x+y)- x+y)- - -却是错误的。却是错误的。 2.+,- -运算符的运算符的结合方向是从右向结合方向是从右向左。左。 main( ) main( ) int i,j; int i,j; i=3; i=3; i+; i+; j=i;j=i; printf (“i=%d,j=%dn”,i,j);

39、 printf (“i=%d,j=%dn”,i,j); 运算结果运算结果? ?main( ) main( ) int i; i=3; int i; i=3; printf (“i1=%dn”,-i+); printf (“i1=%dn”,-i+); printf (“i2=%dn”,i); printf (“i2=%dn”,i); 运算结果:运算结果:i1=-3 i2=4 i1=-3 i2=4 注意:结合性自右向注意:结合性自右向左(单目运算符)左(单目运算符)main( ) main( ) int i; i=3; int i; i=3; printf (“i1=%dn”,-+i); prin

40、tf (“i1=%dn”,-+i); printf (“i2=%dn”,i); printf (“i2=%dn”,i); 运算结果:运算结果:i1= -4 i2=4i1= -4 i2=4main( ) main( ) int i=3,j=3,k,q; int i=3,j=3,k,q; k=(i+)+(i+)+(i+); k=(i+)+(i+)+(i+); q=(+j)+(+j)+(+j); q=(+j)+(+j)+(+j); printf (“i=%d,j=%d,k=%d,q=%dn”,i,j,k,q); printf (“i=%d,j=%d,k=%d,q=%dn”,i,j,k,q); TCT

41、C运算结果:运算结果:i=6,j=6,k=9,q=18i=6,j=6,k=9,q=181)、无需深究的问题表达式中的子表达式的求值顺序各编译系统是有表达式中的子表达式的求值顺序各编译系统是有差别的。差别的。 2)2)在在C C语言中运算符的确定语言中运算符的确定 在由多个字符组成的表达式中,应在由多个字符组成的表达式中,应尽可能多地尽可能多地从左向右从左向右将若干个字符组成一个运算符。将若干个字符组成一个运算符。 如:如:i+j i+j 其结合性是:其结合性是:( (i+)+j i+)+j 不是:不是:i+(+j) i+(+j) 。 3)3)printf printf 函数输出实参的顺序函数输

42、出实参的顺序 如:如:int i=3; printf (“%d,%dn”,i,i+); int i=3; printf (“%d,%dn”,i,i+); 有的系统按从左到右的顺序求值,输出结果是:有的系统按从左到右的顺序求值,输出结果是:3,3 3,3 而而Turbo C Turbo C 是按从右到左顺序求值,输出结果是按从右到左顺序求值,输出结果是:是:4,3 4,3 结论:不写别人甚至自己都看不懂的程序,也结论:不写别人甚至自己都看不懂的程序,也不写那些不知道系统会怎样运行的程序不写那些不知道系统会怎样运行的程序. . 九、 赋值运算符和赋值表达式9.1、赋值运算符“=”“=”是赋值号,也

43、是赋值运算符是赋值号,也是赋值运算符 功能:将赋值号右边表达式的值赋给赋值号左功能:将赋值号右边表达式的值赋给赋值号左边的变量,赋值号同时含有计算的功能。边的变量,赋值号同时含有计算的功能。 如:如:a=3; b=xa=3; b=x* *y; y; a,b a,b变量中原来不管存放什么值,执行赋值语变量中原来不管存放什么值,执行赋值语句后,新值将取代旧值句后,新值将取代旧值 9.2、类型转换(1)(1)实型数据赋给整型变量时,舍去实型数据的实型数据赋给整型变量时,舍去实型数据的小数部分。小数部分。如:如:int i; i=3.56; int i; i=3.56; 结果结果i i的值为的值为3

44、3 (2)(2)整型数据赋给实型变量时,数值不变,但以整型数据赋给实型变量时,数值不变,但以浮点形式存放于内存。浮点形式存放于内存。 如:如: float a=23; float a=23; 先将先将2323转换成转换成23.00000023.000000,然后送,然后送a a中。中。 double b=23; double b=23; 先将先将2323转换为转换为23.00000000000000,23.00000000000000,然后送然后送b b中中 (3)(3)doubledouble型数据赋给型数据赋给floatfloat变量变量 截取其前面的截取其前面的7 7位有效数字,存放到位

45、有效数字,存放到floatfloat单元,单元,应注意数值范围不能溢出应注意数值范围不能溢出 如:如:float f; float f; double d=123.45678e65; double d=123.45678e65; f=d; f=d; 由于数据溢出,由于数据溢出,f f将得到错误的值将得到错误的值 float float 数据赋给数据赋给doubledouble变量时,数值不变,有变量时,数值不变,有效位扩展到效位扩展到1616位。位。(4)(4)字符型数据赋给整型变量字符型数据赋给整型变量 (5)(5)int, short, longint, short, long型数据赋给型

46、数据赋给charchar变量变量, ,则则将其低位赋给将其低位赋给charchar型变量型变量 (6)(6)longlong型数据赋给型数据赋给intint型变量型变量, ,将将longlong型数据的型数据的低低1616位赋给位赋给intint型变量型变量 (7)(7)将将unsigned intunsigned int型数据赋给型数据赋给longlong型变量时型变量时: : 将将unsigned intunsigned int型数据送到型数据送到long intlong int型变量型变量的低的低1616位,位,long intlong int的变量高的变量高1616位补位补0 0 若无

47、符号数据赋给相同长度的带符号的变量若无符号数据赋给相同长度的带符号的变量时,则原样赋给。时,则原样赋给。 要注意数据的有效位占据符号位要注意数据的有效位占据符号位, ,若最高位为若最高位为1 1,则赋值后新变量的值成负。,则赋值后新变量的值成负。 (8)(8)将带符号的数赋给长度相同的无符号变量将带符号的数赋给长度相同的无符号变量 原样赋给原样赋给 main( )main( ) unsigned int a; unsigned int a; int b= -1; int b= -1; a=b; a=b; printf (“a=% u,b=%dn”,a,b); printf (“a=% u,b=

48、%dn”,a,b); 运算结果:运算结果: a=65535,b= -1a=65535,b= -1 9.3、复合的赋值运算符在赋值号前加其它运算符,可以构成复合运算符。在赋值号前加其它运算符,可以构成复合运算符。 如:如: a=a+b a=a+b 等价于等价于 a+=ba+=b x=x x=x* *(y+8) (y+8) 等价于等价于 x x* *=y+8=y+8 x=x%3 x=x%3 等价于等价于 x%=3x%=3 为了便于记忆,将赋值号左边移到赋值号右边,赋值号为了便于记忆,将赋值号左边移到赋值号右边,赋值号左边再补上变量名。左边再补上变量名。 如:如:a+= b a+= b a+a+复制

49、到复制到= =右边右边, ,等号左边补操作数等号左边补操作数a a a=a+b a=a+b 其中其中a a是变量,是变量,b b是表达式是表达式 x x* *= y+8 - = y+8 - x=xx=x* *(y+8)(y+8) 而不是而不是x=xx=x* *y+8y+8 C C语言中,有十个二元运算符:语言中,有十个二元运算符:+ +、- -、* *、/ /、% %、& &、 、| | 可与赋值号一起构成复合运算符;可与赋值号一起构成复合运算符;其优点是:简化程序,提高编译效率。其优点是:简化程序,提高编译效率。9.4、赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子。由赋值运算符

50、将一个变量和一个表达式连接起来的式子。 (1) (1)一般形式:一般形式: a=5; a=5;(2)(2)赋值表达式求解过程:赋值表达式求解过程: 计算赋值号右边表达式的值,然后赋给左边的变量。计算赋值号右边表达式的值,然后赋给左边的变量。 如:如:a=3+5 a=3+5 在在C C语言中,表达式又可以是赋值表达式,如语言中,表达式又可以是赋值表达式,如a=(b=5);a=(b=5);其中其中 b=5b=5是赋值表达式,其值是是赋值表达式,其值是5 5,因此,因此a a的值是的值是5 5,整,整个表达式的值是个表达式的值是5 5。 (3)(3)赋值运算符的结合顺序:从右向左赋值运算符的结合顺序:从右向左 因此:因此:a=(b=5) a=(b=5) 与与 a=b=5 a=b=5 是等价的。是等价的。 赋值表达式的例子:赋值表达式的例子: a=b=c=5a=b=c=5 表达式的值为表达式的值为5 5,a,b,ca,b,c的值为的值为5 5。 a=5+(c=6)a=5+(c=6) 表达式的

温馨提示

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

评论

0/150

提交评论