(精品)C语言-第三章.ppt

上传人:hyn****60 文档编号:82697210 上传时间:2023-03-26 格式:PPT 页数:73 大小:515.50KB
返回 下载 相关 举报
(精品)C语言-第三章.ppt_第1页
第1页 / 共73页
(精品)C语言-第三章.ppt_第2页
第2页 / 共73页
点击查看更多>>
资源描述

《(精品)C语言-第三章.ppt》由会员分享,可在线阅读,更多相关《(精品)C语言-第三章.ppt(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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

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

4、tal;num,total;num=10;num=10;total=num*PRICE;total=num*PRICE;printfprintf(total=%d,total);(total=%d,total);3 3、符号常量的声明和使用、符号常量的声明和使用一般放在程序的前端,与一般放在程序的前端,与#include include 在一块:在一块:#define define 符号常量名符号常量名 值值如:如:#define Zero 0define Zero 0好处:好处:含义清楚含义清楚(#(#define Second 60)define Second 60)一改全改一改全改(#(

5、#define PI 3.14)define PI 3.14)2.2 变量 在在程程序序运运行行过过程程中中,其其值值可可以以改改变变的的量量称称为为变变量。量。一一个个变变量量应应该该有有一一个个变变量量名名,并并且且在在内内存存中中占占据一定的的存储单元据一定的的存储单元用来存放变量的值。用来存放变量的值。注意:变量名与变量值的区别注意:变量名与变量值的区别 在在C C语语言言中中,要要求求对对所所有有用用到到的的变变量量作作强强制制定定义义,即即“先定义、后使用先定义、后使用”。因为:因为:1 1、编译程序不能翻译未定义变量。编译程序不能翻译未定义变量。2 2、编编译译程程序序在在编编译

6、译时时根根据据变变量量类类型型确确定定存存储储单元的数量并分配空间单元的数量并分配空间 3 3、编编译译程程序序在在编编译译时时根根据据变变量量类类型型进进行行语语法法检检查查。例例,整整型型变变量量a a、b b可可以以进进行行“求求余余”运运算算 a a%b b;若把若把a a、b b定义为实数,则上述运算非法。定义为实数,则上述运算非法。main()int i,studentNo;i=5;studentno=5;/*错在哪里错在哪里*/j=3;/*错在哪里错在哪里*/一一条条变变量量说说明明语语句句由由数数据据类类型型和和其其后后的的一一个个或或多多个变量名组成。变量说明的形式如下个变量

7、名组成。变量说明的形式如下:类型类型 ;这里类型是指这里类型是指Turbo C2.0Turbo C2.0的有效数据类型。的有效数据类型。变变量量表表是是一一个个或或多多个个标标标标识识识识符符符符名名名名,每每个个标标识识符符之之间间用用,分隔。分隔。例如例如:intint i i intint i,j,k;i,j,k;char c,str5,*p;char c,str5,*p;所所谓谓标标识识符符是是指指常常量量、变变量量、语语句句标标号号以以及及用用户户自定义函数的名称。自定义函数的名称。Turbo Turbo C C 2.02.0标标识识符符的的定定义义十十分分灵灵活活。作作为为标标识识

8、符符必须满足以下规则必须满足以下规则:1.1.所所有有标标识识符符必必须须由由一一个个字字母母(az,az,AZ)AZ)或或下下划线划线(_)(_)开头开头;2.2.标标识识符符的的其其它它部部分分可可以以用用字字母母、下下划划线线或或数数字字(09)(09)组成组成;3.3.大大小小写写字字母母表表示示不不同同意意义义,即即代代表表不不同同的的标标识识符符;4.4.标识符只有前标识符只有前3232个字符有效个字符有效(Turbo C)Turbo C)5.5.标识符不能使用标识符不能使用Turbo C2.0Turbo C2.0的关键字。的关键字。2.3标识符下面下面举举出几个正确和不正确的出几

9、个正确和不正确的标识标识符符:正确正确-不正确不正确smartsmart-5smart5smart_decision_decision-bomb?bomb?key_boardkey_board-key.board key.board FLOATFLOAT-floatfloat三、整型数据 整整型型常常量量即即整整常常数数按按不不同同的的进进制制区区分分,整整型型常常数数有三种表示方法有三种表示方法:十进制数十进制数:以非以非0 0开始的数开始的数 如如:220,-560,45900:220,-560,45900八进制数八进制数:以以0 0开始的数开始的数 如如:06;0106,05788:06

10、;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”,i);i=011;printf(“i=%dn”,i);i=0 x11;printf(“i=%dn”,i);i=0X11;printf(“i=%dn”,i);程序的输出结果是多少?程序的输出结果是多少?注意:注意:可可在在整整型型常常数数后后添添加加一一个个 LL或或 ll字字母母表表示示该该数数为为长长整型数整型数,如如2222L,0773L,0X

11、ae4lL,0773L,0Xae4l。另另外外,所所有有整整数数的的缺缺省省类类型型是是intint,可可在在整整型型常常数数后后添添加加一一个个 LL或或 ll字字母母表表示示该该数数为为长长整整型型数数,如如 22 22L,0773L,0Xae4lL,0773L,0Xae4l。若若加加上上一一个个 uu或或 UU字字母母表表示示该该数数为为无无符符号号整整型型数,如数,如2727u,0400u,0 xb8000000uu,0400u,0 xb8000000u。若若加加上上一一个个 ulul 或或 ULUL字字母母表表示示该该数数为为无无符符号号长长整型整型数,如数,如 27 27ulul,

12、0400UL,0 xb8000000UL,0400UL,0 xb8000000UL。当当整整数数的的值值超超出出intint类类型型所所能能表表示示的的范范围围时时称称为为整整数数溢出溢出。1 1整整型型变变量量的的分分类类:加加上上不不同同的的修修饰饰符符,整整型型变变量有以下几种类型量有以下几种类型;C C语语言言标标准准没没有有规规定定整整型型变变量量在在计计算算机机内内存存中中所所占的字节数,它与具体的机器和操作系统有关:占的字节数,它与具体的机器和操作系统有关:3.2、整型变量2.2.整型变量的定义整型变量的定义可以用下列语句定义整型变量可以用下列语句定义整型变量:intint a,

13、b;a,b;/*a/*a、b b被定义为有符号短整型变量被定义为有符号短整型变量*/*/unsigned long c;unsigned long 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()intint a,b,c,d;a,b,c,d

14、;/*/*指定变量指定变量a a、b b、c c、d d为整型为整型*/*/unsigned 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;printfprintf(a+u=%d,b+u=%dn,c,d);(a+u=%d,b+u=%dn,c,d);程序运行显示:程序运行显示:a+u=22,b+u=-14a+u=22,b+u=-14 3.3.整型变量的溢出整型变量的溢出 main()main()intint i,j;i,j;unsigned k

15、,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;printfprintf(j=%dn,j);(j=%dn,j);printfprintf(l=%un,l);(l=%un,l);printfprintf(m=%un,m);(m=%un,m);象这类问题体现了象这类问题体现了C C语言灵活性所带来的副作用。语言灵活性所带来的副作用。这种错误系统不给提示,由程序员自己控制。这种错误系统不给提示,由程序员自己控制。四、实型数据实数(实数(realreal)又称为浮点数(又称为浮点数(floatf

16、loat),有两种表达方式:有两种表达方式:普普通通(十十进进制制)方方式式:0.1230.123、.123.123、123.0123.0、123.123.、0.00.0(必须有小数点)(必须有小数点)指数方式:指数方式:123123e3e3或或123123E3E3、123E-2123E-2注意注意:字母:字母e(e(或或E)E)之前必须有数字之前必须有数字 e e后面指数必须为整数后面指数必须为整数规规范范化化指指数数形形式式:e e前前的的小小数数部部分分中中,小小数数点点左左边边只只能能有有一一位非位非0 0数字。如下面例子应为:数字。如下面例子应为:1.23 1.23e5e5 错误:错

17、误:0.1230.123e6e64.1 实型常量4.2 实型变量精确程度例:例:float x,y;/*float x,y;/*指定指定x x、y y为单为单精度精度实实型型变变量量*/*/double z;/*double z;/*指定指定z z为为双精度双精度实实型型变变量量*/*/实实型常量不分型常量不分floatfloat和和doubledouble。问题:如何用图示的方法表示这些变量的内存空间?问题:如何用图示的方法表示这些变量的内存空间?4.3 实型变量的误差与精度main()float a,b;a=123456.789e5;b=a+20;printf(“%fn”,a);print

18、f(“%fn”,b);注意输出结果注意输出结果main()float a;double b;a=111111.111;b=111111.111;printf(“%fn”,a);printf(“%fn”,b);注意输出结果注意输出结果五、字符型数据用用单引号单引号(撇号撇号)括起来的一个字符。括起来的一个字符。如:如:aa、xx、DD、?、$。注意,注意,aa和和AA是不同的字符常量。是不同的字符常量。因为因为C C语言区分大小写。语言区分大小写。以以“”“”开头的字符序列,称为开头的字符序列,称为“转义序列转义序列”。“”“”使其后面的字符变为另外的意义。见下表。使其后面的字符变为另外的意义。

19、见下表。5.1 字符常量转义序列主要用来控制打印机和屏幕输出。转义序列主要用来控制打印机和屏幕输出。例:例:printfprintf(n sum is%dnn,sum);(n sum is%dnn,sum);比较下面两句的区别:比较下面两句的区别:printfprintf(“this is a“test”);(“this is a“test”);/*/*出错出错*/*/printfprintf(“this is a“test”);(“this is a“test”);/*/*输出输出:this is a“test”this is a“test”*/*/char c1,c2;/*char c1,

20、c2;/*定定义义c1c1、c2c2为为字符字符变变量量*/*/c1=a;c2=b;c1=a;c2=b;字符字符变变量在内存中占一字量在内存中占一字节节。问问题题:如如何何用用图图示示的的方方法法表表示示这这些些变变量量的的内内存存空间?空间?5.2 字符变量字符在内存中以字符在内存中以ASCIIASCII码存放。码存放。5.3 字符数据在内存中的存储形式及其使用方法main()main()char c1,c2;char c1,c2;c1=A;c2=B;c1=A;c2=B;printfprintf(%c%c,c1+32,c2+32);(%c%c,c1+32,c2+32);该例的输出是:该例的输

21、出是: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;printfprintf(%c%c,c1,c2);(%c%c,c1,c2);C C语言允许字符和整数之间进行运算语言允许字符和整数之间进行运算 字符常量字符常量:单引号单引号括起来的括起来的一个字符一个字符。字符串常量字符串常量:双引号双引号括起来的括起来的字符序列字符序列(00N N个字符)。如:个字符)。如:How do you do.,How do you do.,CHINA,a,$123

22、.45CHINA,a,$123.45字符串常量在内存中的存放:字符串常量在内存中的存放:每每一一个个字字符符均均以以其其ASCIIASCII码码存存放放,且且最最后后添添加加一一个个“空空字字符符”(二二进进制制0000000000000000,记记为为NULLNULL或或00。字符。字符00在内存中存在内存中存0 0 x30 x30即即0010000000100000)。)。5.4 字符串常量例例:字字符符串串常常量量“CHINA”CHINA”存存放放在在内内存存中中的的情情况况是:是:(6(6字节存储器空间,不是字节存储器空间,不是5 5字节字节)因此,因此,字符字符 aa和字符串和字符串

23、 aa的区的区别别是:是:字符字符a a:1 1字节字节(值为(值为9797)字符串字符串 aa:2 2字节字节(值为(值为97,097,0)5.5 字符与整型的相互转换main()main()char c1,c2;char c1,c2;c1=a;c2=b;c1=a;c2=b;printfprintf(“c1=%c,c2=%c n”,c1,c2);(“c1=%c,c2=%c n”,c1,c2);printfprintf(“c1=%d,c2=%d n”,c1,c2);(“c1=%d,c2=%d n”,c1,c2);/*问题:结果如何*/六、变量赋初值为为什么要什么要给变给变量量赋赋初初值值?(教

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

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

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

27、nedunsigned数据;数据;floatfloat数据在运算前数据在运算前必定必定转换为转换为doubledouble数据数据(即使即使两个两个floatfloat相加相加);int int数据可以转换为数据可以转换为doubledouble数据数据(若另外一个运若另外一个运算数据为算数据为double)double),(,(直接转换,不需先转换直接转换,不需先转换为为unsignedunsigned,longlong,再转换为再转换为doubledouble)。)。上式的运算次序是上式的运算次序是:进行进行10+10+aa运算。先将运算。先将 aa转换为整数转换为整数9797,运算结果为

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

29、ed/e运算。先将运算。先将long elong e转换为转换为doubledouble类型,运算结果是类型,运算结果是doubledouble类型。类型。进行进行-运算,结果为运算,结果为doubledouble类型。类型。八、算术运算符和算术表达式8.1 C运算符简介8.2算术运算符和算术表达式1 1、基本的算术运算符、基本的算术运算符 +:加法或正值运算符,如:加法或正值运算符,如:2+3 2+3、+5+5 -:减法或负值运算符,如:减法或负值运算符,如:8-3 8-3 、-6-6 *:乘法运算符,:乘法运算符,如:如:3*5 3*5 /:/:除法运算符,则可以是整或实型数据。除法运算符

30、,则可以是整或实型数据。如如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*b/c-1.5+aa*b/c-1.5+a在在C C语语言言中中,运运算算符符共共有有1515个个优优先先级级,其其中中算算术术运算符的优先级是:运算符的优先级是:*、/、%(3 3级)级)+

31、、-(4 4级)级)请见请见P375376 P375376 算算术术运算符的运算符的结结合方向:从左向右合方向:从左向右 注注意意:对对于于运运算算符符的的结结合合方方向向,只只需需记记住住三三种种运运算算符符是是自自右右向向左左的的,其其余余都都是是自自左左向向右右的的。这这三种运算符是:三种运算符是:单目运算符、单目运算符、三目运算符三目运算符(only one)only one)、赋值运算符赋值运算符(不计算好如何赋值?不计算好如何赋值?)例:例:a=b+ca=b+c由于由于赋值赋值运算符运算符=为为右右结结合,合,先先执执行右行右边边的的b+cb+c,再再赋值给赋值给a a。8.3、强

32、制类型转换运算符一般形式:一般形式:(类型名)(类型名)(表达式)(表达式)如:(如:(double)a double)a 将将a a转换为转换为doubledouble型型 (intint)(x+y)(x+y)将将x+yx+y的值转换为整型的值转换为整型 (float)(5%3)float)(5%3)将将5%35%3的值转换成单精度实型的值转换成单精度实型 说明:说明:1.1.(intint)(x+y)(x+y)与与(intint)x+y )x+y 意义不同意义不同 2.2.类类型型转转换换后后得得到到一一个个中中间间值值,而而原原来来变变量量本本身的类型没有发生变化。身的类型没有发生变化。

33、3.(3.(intint)x)x不要写成不要写成intint(x);(x);/*C C语语言中言中不行,不行,c+c+允许允许*/*/main()main()float x,i;x=3.6;i=(float x,i;x=3.6;i=(intint)(x);)(x);printfprintf(“x=%f,i=%fn”,x,i);(“x=%f,i=%fn”,x,i);运算结果:运算结果:x=3.600000,x=3.600000,i=3.000000 i=3.000000思考:程序运行期间,思考:程序运行期间,x,ix,i的类型和值发生变化没有?的类型和值发生变化没有?8.4、自增、自减运算符 +

34、:增:增1 1运算符,使变量值增运算符,使变量值增1 1。记忆:记忆:+在前,先加;在后,后加在前,先加;在后,后加-:减:减1 1运算符,使变量值减运算符,使变量值减1 1。如:如:+i i,-i,-i:在在使使用用变变量量i i之之前前,先先使使变变量量i i加加(减)(减)1 1。i+,i-i+,i-:在在使使用用变变量量i i之之后后,使使变变量量i i值值加加(减)(减)1 1。main()main()intint i,j;i=3;j=+i;i,j;i=3;j=+i;printfprintf (“i=%d,j=%dn”,i,j);(“i=%d,j=%dn”,i,j);运算结果:运算结

35、果:i=4,j=4i=4,j=4main()main()intint i,j;i=3;j=i+;i,j;i=3;j=i+;printfprintf (“i=%d,j=%dn”,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()intint

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

37、tfprintf(“i1=%dn”,-+i);(“i1=%dn”,-+i);printfprintf(“i2=%dn”,i);(“i2=%dn”,i);运算结果:运算结果:i1=-4 i2=4i1=-4 i2=4main()main()int int i=3,j=3,k,q;i=3,j=3,k,q;k=(i+)+(i+)+(i+);k=(i+)+(i+)+(i+);q=(+j)+(+j)+(+j);q=(+j)+(+j)+(+j);printfprintf(“i=%d,j=%d,k=%d,q=%dn”,i,j,k,q);(“i=%d,j=%d,k=%d,q=%dn”,i,j,k,q);TCTC

38、运算结果:运算结果: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 函数输出实参的顺序函数输出实参的顺序 如如

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

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

41、变变,但但以以浮点形式存放于内存。浮点形式存放于内存。如:如: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位有效数字,存放到位有效数字,存放到floatfloat单元,单元,应注意数值范围不能溢出应注意数值范围不能溢出

42、 如:如: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)intint,short,long,short,long型数据型数据赋给赋给charchar变变量量,则则将其将其低位低位赋给赋给charchar型型变变量量 (6)(6)longlo

43、ng型数据型数据赋给赋给intint型型变变量量,将将longlong型数据的低型数据的低1616位位赋给赋给intint型型变变量量 (7)(7)将将unsigned unsigned intint型数据型数据赋给赋给longlong型型变变量量时时:将将unsigned unsigned intint型型数数据据送送到到long long intint型型变变量量的低的低1616位,位,long long intint的变量高的变量高1616位补位补0 0 若无符号数据若无符号数据赋给赋给相同相同长长度的度的带带符号的符号的变变量量时时,则则原原样赋给样赋给。要注意数据的有效位占据符号位要

44、注意数据的有效位占据符号位,若最高位若最高位为为1 1,则赋值则赋值后新后新变变量的量的值值成成负负。(8)(8)将将带带符号的数符号的数赋给长赋给长度相同的无符号度相同的无符号变变量量 原原样赋给样赋给 main()main()unsigned unsigned intint a;a;int int b=-1;b=-1;a=b;a=b;printf printf(“a=%u,b=%dn”,a,b);(“a=%u,b=%dn”,a,b);运算结果:运算结果:a=65535,b=-1a=65535,b=-1 9.3、复合的赋值运算符在赋值号前加其它运算符,可以构成复合运算符。在赋值号前加其它运算

45、符,可以构成复合运算符。如:如:a=a+b a=a+b 等价于等价于 a+=ba+=b x=x*(y+8)x=x*(y+8)等价于等价于 x*=y+8x*=y+8 x=x%3 x=x%3 等价于等价于 x%=3x%=3 为了便于记忆,将赋值号左边移到赋值号右边,赋值号为了便于记忆,将赋值号左边移到赋值号右边,赋值号左边再补上变量名。左边再补上变量名。如:如:a+=b a+=b a+a+复制到复制到=右边右边,等号左边补操作数等号左边补操作数a a a=a+b a=a+b 其中其中a a是变量,是变量,b b是表达式是表达式 x*=y+8 -x*=y+8 -x=x*(y+8)x=x*(y+8)而

46、不是而不是x=x*y+8x=x*y+8 C C语言中,有十个二元运算符:语言中,有十个二元运算符:+、-、*、/、%、&、|可与赋值号一起构成复合运算符;可与赋值号一起构成复合运算符;其优点是:简化程序,提高编译效率。其优点是:简化程序,提高编译效率。9.4、赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子。由赋值运算符将一个变量和一个表达式连接起来的式子。(1)(1)一般形式:一般形式:a=5;a=5;(2)(2)赋值表达式求解过程:赋值表达式求解过程:计算赋值号右边表达式的值,然后赋给左边的变量。计算赋值号右边表达式的值,然后赋给左边的变量。如:如:a=3+5 a=3+5 在在

47、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)

48、a=5+(c=6)表达式的值为表达式的值为1111,a a的值为的值为1111,c c的值为的值为6 6。a=(b=4)+(c=6)a=(b=4)+(c=6)表达式的值为表达式的值为1010,a a的值为的值为10,10,b b为为4,4,c c为为6 6。a=(b=10)/(c=2)a=(b=10)/(c=2)表达式的表达式的值为值为5 5,a a的的值为值为5,5,b b为为10,10,c c为为2 2。(4)(4)赋值赋值表达式也可以包含复合的表达式也可以包含复合的赋值赋值运算符运算符main()main()intint a=12,b;a=12,b;b=(a+=a-=a*a);b=(a+

49、=a-=a*a);printf printf(“a=%d,b=%dn”,a,b);(“a=%d,b=%dn”,a,b);运算运算结结果:果:a=-264,b=-264 a=-264,b=-264 a +=a-=a*a a +=a-=a*a a=a-a*aa=a-a*a 12-12*12 12-12*12 -132 -132 a=a+(-132)a=a+(-132)-132+(-132)-132+(-132)-264 -264十、逗号运算符和逗号表达式逗号运算符:逗号运算符:,又称又称“顺序求值运算符顺序求值运算符”;优先级最低优先级最低逗号表达式:用逗号将两个表达式连接起来的式子。逗号表达式:

50、用逗号将两个表达式连接起来的式子。形式:表达式形式:表达式1,1,表达式表达式2 2 求求解解过过程程:先先求求表表达达式式1 1的的值值,再再求求表表达达式式2 2的的值值,整整个个表表达式的值是表达式达式的值是表达式2 2的值。的值。注:表达式注:表达式1 1和表达式和表达式2 2又可以分别由若干个逗号表达式又可以分别由若干个逗号表达式组成。因此,逗号表达式又可扩展为:组成。因此,逗号表达式又可扩展为:表达式表达式1,1,表达式表达式2,2,表达式表达式n n 如:如:3*53*5,6 68 8 表达式表达式1414(a=3*5a=3*5,a*4)a*4)变量变量a a15 15 表达式表

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁