c语言课件第二章数据类型运算符与表达式.ppt

上传人:小飞机 文档编号:6504356 上传时间:2023-11-07 格式:PPT 页数:69 大小:2.03MB
返回 下载 相关 举报
c语言课件第二章数据类型运算符与表达式.ppt_第1页
第1页 / 共69页
c语言课件第二章数据类型运算符与表达式.ppt_第2页
第2页 / 共69页
c语言课件第二章数据类型运算符与表达式.ppt_第3页
第3页 / 共69页
c语言课件第二章数据类型运算符与表达式.ppt_第4页
第4页 / 共69页
c语言课件第二章数据类型运算符与表达式.ppt_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《c语言课件第二章数据类型运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《c语言课件第二章数据类型运算符与表达式.ppt(69页珍藏版)》请在三一办公上搜索。

1、第二章 数据类型 运算符和表达式,2.1 C的数据类型,能被计算机处理的信息称为数据(data)。在计算机科学领域中,数据是广义的。数值、字符、文字、表格、图形和图像、声音等都是数据。程序、算法处理的对象是数据。C语言中数据是有类型的,数据的类型简称数据类型。在C语言中讨论数据,总是把数据的表示、数据值和数据类型作为一个整体考察。,第二章 数据类型 运算符和表达式,2.1 C的数据类型,2.1 C的数据类型,注意:,1、不同数据类型有不同的取值范围P43(表3-1),p46(表3-2)。2、不同的编译系统,数据分配字节不同。例如TC P43(表3-1)中int 型数据分配2个字节(16位),而

2、VC+6.0中int型数据分配4个字节(32位)。3、不同的数据类型有不同的操作。如整型数可以取余操作,实型数据却不行;整型、实型数据可以有加法,字符数组不行。4、不同的数据类型即使有相同的操作有时含义也不同,如指针数据自增1与整数自增1含义是不同的。,2.1 C的数据类型,注意:,5、不同的数据类型对计算机可能出现的错误不同。如整型数的溢出错误,浮点数的精度的丢失(有效数字位数不够)。6、C语言的数据类型可以构造复杂的数据结构。如使用结构体数组可以构造线性表。使用指针类型、结构体类型可以构造线性链表(栈、队列)、树、图。(在数据结构课程介绍),2.2 常量与变量,2、2、1 常量:在程序的运

3、行过程中,其值不能改变的量称为常量。它相当于数学中的常数。,在C语言中,常量可以分为一般常量和符号常量两类。1.常量的使用(一):,2、2、1 常量:,2.常量的使用(二)符号常量的使用:#define PI 3.1416#include void main()float s,l;s=10*10*PI;l=2*PI*10;printf(“s=%fn,l=%fn,s,l);printf(“PI=%fn,PI),PI也是一个常量,称为符号常量,它由#define命令定义,代表3.1416。该程序在编译之前,会自动将程序中所有的PI替换成3.1416。这样程序将等价于后面(三)的程序。,2、2、1

4、常量:,3.常量的使用(三):#include void main()float s,l;s=10*10*3.1416;l=2*3.1416*10;printf(“s=%fn,l=%fn,s,l);printf(“PI=%fn,3.1416),由于替换命令都是在编译之前进行的,所以类似于#define 这样的命令被称之为预处理命令。(例如#include)预处理命令的命令行一般都是放在源程序中最前面的说明部分。,2、2、1 常量:,使用符号常量的好处:(1)含义清楚、见名知意。(2)修改方便、一改全改。,思考:同是常量,符号常量在程序设计中有什么优势?,2、2、2 变量,在程序的运行过程中,其

5、值可以改变的量称为变量。,1、变量名(用标识符表示)、变量在内存中占据的存储单元、变量值三者关系。变量名在程序运行过程中不会改变,变量的值可以改变。变量名遵守标识符准则。,2、2、2 变量,2、变量的定义格式:变量类型 变量名;int num;,2、2、2 变量,3、变量的特性,2、2、2 变量,4、变量:“先定义,后使用”。1)只有定义过的变量才可以在程序中使用,这使得变量名的拼写错误容易发现。2)定义过的变量属于确定的类型,编译系统可方便地检查变量所进行运算的合法性。3)在编译时根据变量类型可以为变量确定存储空间,“先定义后使用”使程序效率高。,2、2、2 变量,例(200903)12.若

6、函数中有定义语句:int k;,则 A)系统将自动给k赋初值0B)这是k中的值无定义C)系统将自动给k赋初值-1D)这时k中无任何值,2、3 整型数据,整型常量的表示方法,1)十进制。例如123,-456,0。2)八进制。以0开头,后面跟几位的数字(0-7)。例如:0123=(123)8=(83)10;-011=(-11)8=(-9)10。3)十六进制。以0 x开头,后面跟几位的数字(0-9,A-F)。注意:AF(af)是不区分大小写的。例如:0 x123=291,-0 x12=-18,0 xF=15。,整型常量的表示方法,4)整型常量的类型(整型常数的后缀,在整型变量部分介绍,这里只要知道怎

7、么表示)。整型常量后缀可以用:u或U明确说明为无符号整型数 l或L明确说明为长整型数.,例如:123L,123ul,123u,123UL,整型常量的表示方法,1、以下选项中可作为C语言合法整数的是A)10110B B)0386 C)0Xffa D)x2a22、与十六进制数200等值得十进制数为()A)256B)512C)1024D)2048,2.3.2 整型变量,1、整型数据在内存中的存放形式 数据在内存中以二进制形式存放,事实上以补码形式存放。例如:定义一个整型变量i=10,,补充知识(参考计算机文化基础等课程):1)带符号数的表示,原码、反码、补码。2)原码-补码相互转化。正数的补码与其原

8、码相同,负数的补码是其对应的绝对值的原码数值位按位取反+1。,2.3.2 整型变量,例题:10,-10的计算机机内表示。思路:先将数值表示为二进制形式(十进制=二进制,除2取余),即获得数值的原码。将原码转化为补码,就是机内表示。10=(1010)2=(0000,0000,0000,1010)原=(0000,0000,0000,1010)补。-10=(-1010)2=(1000,0000,0000,1010)原=(1111,1111,1111,0110)补。从10,-10的计算机机内表示可以看出正数、负数机内表示(补码表示)看上去明显不同。,2.3.2 整型变量,2、整型变量的分类,整型变量的

9、基本类型为int。通过加上修饰符,可定义更多的整数数据类型。,归纳起来可以用6种整型变量:l 有符号基本整型:signedintl 有符号短整型:signedshortintl 有符号长整型:signedlongintl 无符号基本整型:unsigned intl 无符号短整型:unsigned short intl 无符号长整型:unsigned long int,2.3.2 整型变量,2、整型变量的分类,1)根据表达范围可以分为:基本整型(int)、短整型(short)、长整型(long)。用long型可以获得大范围的整数,但同时会降低运算速度。2)根据是否有符号可以分为:有符号(sign

10、ed,默认),无符号(unsigned)-目的:扩大表示范围,有些情况只需要用正整数。有符号整型数的存储单元的最高位是符号位(0:正、1:负),其余为数值位。无符号整型数的存储单元的全部二进制位用于存放数值本身而不包含符号。,C标准没有具体规定上面数据类型所占用的字节数,只要求long型数据长度不短于int型,short型不长于int型。具体如何实现,由各计算机系统自行决定。如微机上short,int都是16位,而long是32位;VAX750机,int,long都是32位,而short是16位。,2.3.2 整型变量,2、整型变量的分类(p43 表3.1),2.3.2 整型变量,2、整型变量

11、的分类,例子:保存整数13的各种整型数据类型。,2.3.2 整型变量,3、整型变量的定义,格式:变量类型 变量名表;,例如:,#include void 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=%dn”,c,d);结果:a+u=22,b+u=-14,2.3.2 整型变量,3、整型变量的定义,说明:(1)变量定义时,可以说明多个相同类型的变量。各个变量用“,”分隔。类型说明与变量名之间至少有一个空格间隔。(2)最后一个变量名之后必须用“;”结尾。(3)变量必须先定义后使用。(4)也可以

12、在定义变量的同时,对变量进行初始化。,2.3.2 整型变量,3、整型变量的定义,例2-2:变量初始化#include void main()int a=3,b=5;printf(a+b=%dn,a+b);,2.3.2 整型变量,4、整型数据的溢出,整型数最大允许值+1,最小允许值-1,会出现什么情况?例如:32767+1=-32768;-32768-1=32767。,例2-2a:整型数据的溢出#include void main()int a,b;a=32767;b=a+1;printf(na=%d,a+1=%dn,a,b);a=-32768;b=a-1;printf(na=%d,a-1=%d

13、n,a,b);结果:a=32767,a+1=-32768 a=-32768,a-1=32767超出范围就发生“溢出”,运行时不报错。,2.4 实型(浮点型)数据,2、4、1实型常量的表示方法,实数(浮点数)有两种表示形式:1、十进制小数形式。由数字,小数点组成(必须有小数点)。例如:.123、123.、123.0、0.0 2、指数形式。格式:aEn。例如:123e3、123E3都是实数的合法表示。,2、4、1实型常量的表示方法,指数形式注意:1)字母e(或E)前面必须有数字,后面必须为整数。例如:e3、2.1e3.5、.e3、e都不是合法的指数形式。2)规范化的指数形式。在字母e或E之前的小数

14、部分,小数点左边应当有且只能有一位非0数字。用指数形式输出时,是按规范化的指数形式输出的。例如:2.3478e2、3.0999E5、6.46832e12都属于规范化的指数形式。3)实型常量都是双精度,如果要指定它为单精度,可以加后缀f(实型数据类型参看实型变量部分说明)。,2、4、1实型常量的表示方法,1、以下符合C语言语法的实型常量是()A)1.2E0.5B)3.14.159EC).5E-3D)E15(13).一下选项中,能用作数据常量的是(200903)A)o115 B)0118 D)115L,2、4、2 实型变量,1.实型数据在内存中的存放形式,一个实型数据一般在内存中占4个字节(32位

15、)。与整数存储方式不同,实型数据是按照指数形式存储的。系统将实型数据分为小数部分和指数部分,分别存放。,实型数据存放的示意图:,标准C没有规定用多少位表示小数,多少位表示指数部分,由C编译系统自定。例如,很多编译系统以24位表示小数部分(包括符号),8位表示指数部分(包括指数的符号)。小数部分占的位数多,实型数据的有效数字多,精度高;指数部分占的位数多,则表示的数值范围大。,2、实型变量的分类,实型变量分为:单精度(float)、双精度(double)、长双精度(long double)。,ANSI C没有规定每种数据类型的长度、精度和数值范围。下表列出微机上常用的C编译系统的情况。,对于每一

16、个实型变量也都应该先定义后使用。如:,float x,y;double z;long double t;,3、实型数据的舍入误差(对比:整型数据的溢出),实型变量是用有限的存储单元存储的,因此提供的有效数字是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。,3、实型数据的舍入误差(对比:整型数据的溢出),结论:由于实数存在舍入误差,使用时要注意:(a)不要试图用一个实数精确表示一个大整数,记住:浮点数是不精确的。(b)实数一般不判断“相等”,而是判断接近或近似。(c)避免直接将一个很大的实数与一个很小的实数相加、相减,否则会“丢失”小的数。(d)根据要求选择单精度、双精度。,2、5

17、 字符型数据,2、5、1字符常量,字符常量是用单引号()括起来的一个字符。,字符常量主要用下面几种形式表示:,1、直接用单引号括起来一个字符(可显示的字符),如,a、x、D、$、?、a、A、1、等都是字符常量。错例,abc、我 2、字符的转义表示法(ASCII码表示)。(1)、预先定义的一部分常用的转义字符。如n-换行,t-水平制表。书P48页表3.3,记忆(2)转义表示格式:ddd或xhh(其中ddd,hh是字符的ASCII码,ddd是1到3位8进制数ASCII码代表的字符、hh是1到2位16进制数ASCII码代表的字符)。注意:不可写成0 xhh或0ddd(整数)。举例:101:代表字母

18、A;040:代表空格符;0或000:代表空操作符,即空字符,ASCII码为0。x3A,2、5、1字符常量,例:2.5.1 转义字符的使用#include void main()printf(abctderftgn);printf(“htibbjkn);,2、5 字符型数据,2、5、2字符变量,字符型变量是用来存放字符数据,且只能存放一个字符。所有编译系统都规定一个字符变量在内存中占一个字节。,字符变量定义形式:char cl,c2;c1=a;c2=b;,2、5、3字符数据在内存中的存储形式及其使用,将一个字符常量存放到字符变量中,是将该字符的ASCII码存放到存储单元中。,2、5、3字符数据在

19、内存中的存储形式及其使用,可以看出字符数据以ASCII码存储的形式与整数的存储形式类似,这使得字符型数据和整型数据之间可以通用(当作整型量)。具体表现为:1、可以将整型量赋值给字符变量,也可以将字符量赋值给整型变量。2、可以对字符数据进行算术运算(即对它们的ASCII码进行算术运算)。3、一个字符数据既可以以字符形式输出(ASCII码对应的字符),也可以以整数形式输出(直接输出ASCII码)。注意:尽管字符型数据和整型数据之间可以通用,但是字符型只占1个字节,即如果作为整数使用范围0-255(无符号),-128-127(有符号)。,2、5、3字符数据在内存中的存储形式及其使用,例2-7a:给字

20、符变量赋以整数(字符型、整型数据通用 turbo c-128-127)#include“stdio.h”void main()/*字符a的各种表达方法*/char c1=a;char c2=x61;/*note:x.,.*/char c3=141;char c4=97;char c5=0 x61;/*note:0 x.,0.*/char c6=0141;printf(nc1=%c,c2=%c,c3=%c,c4=%c,c5=%c,c6=%cn,c1,c2,c3,c4,c5,c6);printf(c1=%d,c2=%d,c3=%d,c4=%d,c5=%d,c6=%dn,c1,c2,c3,c4,c5

21、,c6);c1=a,c2=a,c3=a,c4=a,c5=a,c6=a c1=97,c2=97,c3=97,c4=97,c5=97,c6=97 过程:整型数=机内表示(两个字节)=取低8位赋值给字符变量,2、5、3字符数据在内存中的存储形式及其使用,例2-8a:大小写字母的转换(ASCII码表:小写字母比对应的大写字母的ASCII码大32,本例还可以看出允许字符数据与整数直接进行算术运算,运算时字符数据用ASCII码值参与运算)#include void main()char c1,c2,c3;c1=a;c2=b;c1=c1-32;c2=c2-32;c3=130;printf(n%c%c%cn,

22、c1,c2,c3);printf(%d%d%dn,c1,c2,c3);A B?65 66 126(此时如何处理?)(p52页),2、5、4字符串常量,字符串常量:是一对双引号(“”)括起来的字符序列。例如:“How do you do?”,“CHINA”,“a”,“$123.45”.,注意:1、区分字符常量与字符串常量。如a 和“a”。C语言规定:在每个字符串的结尾加一个“字符串结束标志”,以便系统据此判断字符串是否结束。C规定以0(ASCII码为0的字符)作为字符串结束标志。如:“CHINA”在内存中的存储应当是:(长度=6),2、5、4字符串常量,2、不能将字符串赋给字符变量。如:char

23、 c;c=a;(正确)c=“a”(错误)3、C语言没有专门的字符串变量,如果想将一个字符串存放在变量中,可以使用字符数组。即用一个字符数组来存放一个字符串,数组中每一个元素存放一个字符。,2、6 变量赋初值,程序中常常需要对一些变量预先设置初值,C语言允许在定义变量的同时使变量初始化。例如:,int a=3;/*指定a为整型变量,初值为3*/float f=3.56;/*指定f为实型变量,初值为3.56*/char c=a;/*指定c为字符型变量,初值为a*/,2、6 变量赋初值,可以只对定义的一部分变量赋初值。,int a,b=2,c=5;/*指定a,b,c为整型变量,只对b、c初始化,b的

24、初值为2,c的初值为5*/,初始化不是在编译阶段完成的,而是在程序运行时执行本函数时赋予初值的,相当于有一个赋值语句。,int a=3;相当于:int a;a=3;,2、6 变量赋初值,考虑:int x=y=z=1;是否正确?,2、7 各类数值型数据(整型、实型、字符型)的混合运算,整型(包括int,short,long)和实型(包括float,double)数据可以混合运算,另外字符型数据和整型数据可以通用,因此,整型、实型、字符型数据之间可以混合运算。,例如:表达式10+a+1.5-8765.1234*b是合法的。在进行运算时,不同类型的数据先转换成同一类型,然后进行计算,转换的方法有两种

25、:自动转换(隐式转换);强制转换。,2、7 各类数值型数据(整型、实型、字符型)的混合运算,1、自动转换(隐式转换)自动转换发生在不同类型数据进行混合运算时,由编译系统自动完成。转换规则:(参看图),2、7 各类数值型数据(整型、实型、字符型)的混合运算,注意:(1)类型不同,先转换为同一类型,然后进行运算。(2)图中纵向的箭头表示当运算对象为不同类型时转换的方向。可以看到箭头由低级别数据类型指向高级别数据类型,即数据总是由低级别向高级别转换。即按数据长度增加的方向进行,保证精度不降低。(3)图中横向向左的箭头表示必定的转换(不必考虑其它运算对象)。如字符数据参与运算必定转化为整数,float

26、型数据在运算时一律先转换为双精度型,以提高运算精度(即使是两个float型数据相加,也先都转换为double型,然后再相加)。(4)赋值运算,如果赋值号“=”两边的数据类型不同,赋值号右边的类型转换为左边的类型。这种转换是截断型的转换,不会四舍五入。,2、7 各类数值型数据(整型、实型、字符型)的混合运算,2、强制转换:强制转换是通过类型转换运算来实现。一般形式:(类型说明符)表达式 功能:把表达式的结果强制转换为类型说明符所表示的类型。例如:(int)a 将a的结果强制转换为整型量。(int)(x+y)将x+y的结果强制转换为整型量。(float)a+b 将a的内容强制转换为浮点数,再与b相

27、加。说明:(1)类型说明和表达式都需要加括号(单个变量可以不加括号)(2)无论隐式转换,强制转换都是临时转换,不改变数据本身的类型和值。,2、7 各类数值型数据(整型、实型、字符型)的混合运算,例2-9:强制类型转换,2、8 算术运算符和算术表达式,2.8.1 C运算符简介,本章主要介绍算术运算符(包括自增自减运算符)、赋值运算符、逗号运算符,其它运算符在以后相关章节中结合有关内容陆续进行介绍。,2.8.2算术运算符和算术表达式,1、算术运算符+(加法运算符。如3+5)-(减法运算符或负值运算符。如5-2,-3)*(乘法运算符。如3*5)/(除法运算符。如5/2,5.0/2)%(模运算符或求余

28、运算符,%要求两侧均为整型数据。如7%4的值为3)。除了负值运算符-单目运算符外,其它都是双目运算符。考虑:-7%4,7%-4,-7%-4;-3,3,-3 C语言规定:符号由被除数决定。,2.8.2算术运算符和算术表达式,2、算术表达式 算术表达式:用算术运算符和括号将运算对象(也称操作数)连接起来的、符合C语法规则的式子,称为算术表达式。运算对象可以是常量、变量、函数等。,例如,下面是一个合法的C算术表达式。a*b/c-1.5+a;x+sqrt(0.25*y)/(abs(a+b)-3.6).,2.8.2算术运算符和算术表达式,注意:C语言算术表达式的书写形式与数学表达式的书写形式有一定的区别

29、:(1)C语言算术表达式的乘号(*)不能省略。例如:数学式b2-4ac,相应的C表达式应该写成:b*b-4*a*c。(2)C语言表达式中只能出现字符集允许的字符。例如:数学r2相应的C表达式应该写成:PI*r*r(其中PI是已经定义的符号常量)。(3)C语言算术表达式不允许有分子分母的形式。例如,(a+b)/(c+d)。(4)C语言算术表达式只使用圆括号改变运算的优先顺序()不要指望用)。可以使用多层圆括号,此时左右括号必须配对,运算时从内层括号开始,由内向外依次计算表达式的值。,2.8.2算术运算符和算术表达式,3、(算术)运算符的优先级与结合性(P.365附录C)(1)C语言规定了运算符的

30、“优先级”和“结合性”。在表达式求值时,先按运算符的“优先级别”高低次序执行。如表达式:a-b*c等价于a-(b*c),“*”运算符优先级高于“-”运算符。(2)如果在一个运算对象两侧的运算符的优先级别相同,则按规定的“结合方向”处理。例如:a-b+c,到底是(a-b)+c还是a-(b+c)?(b先与a参与运算还是先于c参与运算?)查附录C可知:+/-运算优先级别相同,结合性为“自左向右”,即就是说b先与左边的a结合。所以a-b+c等价于(a-b)+c。,2.8.2算术运算符和算术表达式,(3)在书写多个运算符的表达式时,应当注意各个运算符的优先级,确保表达式中的运算符能以正确的顺序参与运算。

31、对于复杂表达式为了清晰起见可以加圆括号“()”强制规定计算顺序。,2.8.2算术运算符和算术表达式,4、自增、自减运算符,单目运算符,使变量的值增1或减1。如:+i,i+-i,i-注意:(1)+i,-i(前置运算):先自增、减,再参与运算;i+,i-(后置运算):先参与运算,再自增、减。例如:i=3,分析j=+i;j=i+;(2)自增、减运算符只用于变量,而不能用于常量或表达式。例如:6+,(a+b)+,(-i)+都不合法。(3)+,-的结合方向是“自右向左”(优先级高于算术运算符)。例如:-i+-(i+)合法。(4)自增、自减运算符常用于循环语句中,使循环变量自动加1,也用于指针变量,使指针

32、指向下一个地址。,2.8.2算术运算符和算术表达式,5、有关表达式使用过程中的问题说明,(1)C运算符和表达式使用灵活,利用这一点可以巧妙处理许多在其它语言中难以处理的问题。但是ANSI C并没有具体规定表达式中的子表达式的求值顺序,允许各编译系统自己安排。这可能导致有些表达式对不同编译系统有不同的解释,并导致最终结果的不一致。例1:a=f1()+f2()中f1,f2哪个先调用。例2:i=3,表达式(i+)+(i+)+(i+)的值。有些系统等价3+4+5,Turbo C等价3+3+3,总之,不要写别人看不懂(难看懂)、也不知道系统会怎样执行的程序。,2.8.2算术运算符和算术表达式,5、有关表

33、达式使用过程中的问题说明,(2)C语言有的运算符为一个字符,有的由两个字符组成,C编译系统在处理时尽可能多地将若干字符组成一个运算符(在处理标识符、关键字时也按同一原则处理)。如i+j将解释为(i+)+j而不是i+(+j)。为避免误解,最好采用大家都能理解的写法,比如通过增加括号明确组合关系,改善可读性。(3)C语言中类似的问题还有函数调用时,实参的求值顺序,C标准也无统一规定。如:i=3,printf(“%d,%d”,i,i+);有些系统执行的结果为3,3;有些系统为4,3。,总之,不要写别人看不懂(难看懂)、也不知道系统会怎样执行的程序。,2.9赋值运算符和赋值表达式,1、赋值运算符、类型

34、转换 赋值运算符:赋值符号“=”就是赋值运算符。,例如:x=10+y;执行赋值运算(操作),将10+y的值赋给变量x,同时整个表达式的值就是刚才所赋的值。,说明:(1)赋值运算符左边必须是变量,右边可以是常量、变量、函数调用或常量、变量、函数调用组成的表达式。例如:x=10 y=x+10 y=func()都是合法的赋值表达式。(2)赋值符号“=”不同于数学的等号,它没有相等的含义。(“=”相等)例如:C语言中x=x+1是合法的(数学上不合法),它的含义是取出变量x的值加1,再存放 到变量x中。,2.9赋值运算符和赋值表达式,(3)赋值运算时,当赋值运算符两边数据类型不同时,将由系统自动进行类型

35、转换。转换原则是:先将赋值号右边表达式类型转换为左边变量的类型,然后赋值。将实型数据(单、双精度)赋给整型变量,舍弃实数的小数部分。将整型数据赋给单、双精度实型变量,数值不变,但以浮点数形式存储到变量中。将double型数据赋给float型变量时,截取其前面7位有效数字,存放到float变量的存储单元中(32bits)。但应注意数值范围不能溢出。将float型数据赋给double型变量时,数值不变,有效位数扩展到16位(64bits)。字符型数据赋给整型变量时,由于字符只占一个字节,而整型变量为2个字节,因此将字符数据(8bits)放到整型变量低8位中。类型转换等等见课本P59P61,不要死记

36、硬背,上机实践和自学掌握。,2.9赋值运算符和赋值表达式,(4)C语言的赋值符号“=”除了表示一个赋值操作外,还是一个运算符,也就是说赋值运算符完成赋值操作后,整个赋值表达式还会产生一个所赋的值,这个值还可以利用。例如:分析x=y=z=3+5这个表达式。根据优先级:原式x=y=z=(3+5);根据结合性(从右向左):x=(y=(z=(3+5)x=(y=(z=3+5)运算步骤:,z=(z=3+5),1,2.9赋值运算符和赋值表达式,2、复合赋值运算符 在赋值符“=”之前加上某些运算符,可以构成复合赋值运算符,复合赋值运算符可以构成赋值表达式。C语言中许多双目运算符可以与赋值运算符一起构成复合运算

37、符,即:+=,-=,*=,/=,%=,=,&=,|=,=例如:n+=1 等价于 n=n+1 x*=y+1 等价于 x=x*(y+1)注意:赋值运算符、复合赋值运算符的优先级比算术运算符低。,2.9赋值运算符和赋值表达式,3、赋值运算符、赋值表达式举例(1)a=5(2)a=b=5(3)a=(b=4)+(c=3)(4)假如a=3,分析:a+=a-=a*a a+=a-=a*aa+=a-=(a*a)a+=(a-=(a*a)a+=(a=a-(a*a)a+=(a=a-a*a)a=a+(a=a-a*a)-12,2.10 逗号运算符和逗号表达式,4、逗号运算符例:a=3*5,a*4 逗号运算符是所有运算符中优

38、先级最低的。所以上面的表达式等价于:(a=3*5),(a*4).所以整个表达式计算后值为:60(其中a=15)逗号表达式的求解过程是:自左向右,求解表达式1,求解表达式2,求解表达式n。整个逗号表达式的值是表达式n的值。,2.10 逗号运算符和逗号表达式,#include main()int x,a;x=(a=3,6*3);/*a=3 x=18*/printf(%d,%dn,a,x);x=a=3,6*a;/*a=3 x=3*/printf(%d,%dn,a,x);3,18 3,3,例题,2.10 逗号运算符和逗号表达式,例:14.设有定义:int x=2;,一下表达式中,值不为6的是(2009

39、03)A)x*=x+1B)x+,2*xC)x*=(1+x)D)2*x,x+=2,作业,1、设有定义:floata=2,b=4,h=3;,以下C语言表达式与代数式计算结果不相符的是 A)(a+b)*h/2 B)(1/2)*(a+b)*h C)(a+b)*h*1/2D)h/2*(a+b)2、若以下选项中的变量已正确定义,则正确的赋值语句是()A)x1=26.8%3 B)1+2=x2 C)x3=0 x12 D)x4=1+2=3;3、有以下程序main()int a;char c=10;float f=100.0;double x;a=f/=c*=(x=6.5);printf(“%d%d%3.1f%3.1fn”,a,c,f,x);程序运行后的输出结果是 A)1 65 1 6.5 B)1 65 1.5 6.5 C)1 65 1.0 6.5 D)2 65 1.5 6.5,作业,4、设有以下定义:inta=0;doubleb=1.25;charc=A;#defined2 则下面语句中错误的是()A)a+;B)b+C)c+;D)d+;5、已知字符A的ACSII码值为65,以下语句的输出结果是charch=B;printf(%c%dn,ch,ch)6、已定义c为字符型变量,则下列语句中正确的是A)c=97;B)c=97;C)c=97;D)c=a;,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号