C语言之 2-2 数据类型、运算符和表达式_第1页
C语言之 2-2 数据类型、运算符和表达式_第2页
C语言之 2-2 数据类型、运算符和表达式_第3页
C语言之 2-2 数据类型、运算符和表达式_第4页
C语言之 2-2 数据类型、运算符和表达式_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

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

文档简介

1、C语言程序设计语言程序设计.5 赋值运算赋值运算简单赋值简单赋值简单赋值运算符简单赋值运算符“仅执行赋值操作,表达式的形式为:仅执行赋值操作,表达式的形式为:操作数操作数操作数操作数“的功能是将右操作数的值赋给由左操作数指定的存储的功能是将右操作数的值赋给由左操作数指定的存储单元(变量)。左操作数必须是一个可更改内容的左值表达式单元(变量)。左操作数必须是一个可更改内容的左值表达式.赋赋值运算符的右操作数类型可以和左操作数不同,执行赋值之前右值运算符的右操作数类型可以和左操作数不同,执行赋值之前右操作数被自动转换为左操作数的类型。操作数被自动转换为左操作数的类型。如:如:int j; j=5.

2、6;则则j的值为;的值为; C语言程序设计语言程序设计对于基本类型,赋值表达式的形式可具体化为:对于基本类型,赋值表达式的形式可具体化为:变量名表达式变量名表达式例如:例如:int i=5,j;float a=3.0,b=3.5;double r;char c1,c2;c1=a;j=c1; /*由由char向向int转换,结果赋给转换,结果赋给j*/r=a*b+i; /*a*b的结果由的结果由float向向double转换转换,结果赋给结果赋给r*/c2=j; /*j由由int向向char转换,其结果赋给转换,其结果赋给c2*/i=c1c2; /*c1c2的类型与左操作数相同,直接赋值的类型与

3、左操作数相同,直接赋值*/表达式的结果和类型与左操作数相同。表达式的结果和类型与左操作数相同。C语言程序设计语言程序设计当右操作数又是一个赋值表达式时,形成多重赋值当右操作数又是一个赋值表达式时,形成多重赋值表达式,例如:表达式,例如:i=j=0是一个合法的赋值表达式,是一个合法的赋值表达式,“”右结合。因此上式等价于右结合。因此上式等价于i=(j=0) ,而,而j=0表达式的值为表达式的值为,因此,因此i的值也为。的值也为。但要注意:多重赋值表达式不能出现在变量说明中,但要注意:多重赋值表达式不能出现在变量说明中,如:如:int i=j=0; 是非法的。是非法的。C语言程序设计语言程序设计x

4、 = y = 4.0;是先将值是先将值4.0赋给变量赋给变量y,再赋给变量,再赋给变量x。如有变量说明:如有变量说明:int k;double x;则赋值表达式:则赋值表达式:x = k = 3.5;是先将实数是先将实数3.5自动转换成整数自动转换成整数3赋给整型变量赋给整型变量k,然,然后又将整数后又将整数3自动转换成实数自动转换成实数3.0赋给实型变量赋给实型变量x,所以,所以k的的值是值是3,x的值是的值是3.0。 i = (j = 3)+(k = 8) 表达式的值为表达式的值为11,使,使i值为值为11,使,使j值为值为3,k值为值为 8。C语言程序设计语言程序设计 2.复合赋值复合赋

5、值复合赋值运算符包括复合赋值运算符包括+ = - = * = / = % = &= |= = =,其形式为,其形式为操作数操作数1 OP=操作数操作数2可理解为下面的展开形式:可理解为下面的展开形式: 操作数操作数1=操作数操作数1 OP(操作数(操作数2)下面举例说明复合赋值运算的意义:下面举例说明复合赋值运算的意义:x += 5.0; 等效于等效于x = x + 5.0 x *= u + v; 等效于等效于x = x * (u + v)a += a -= b + 2; 等效于等效于a = a + (a = a - (b + 2)赋值运算符和所有复合赋值运算符的优先级全相同,并且都赋

6、值运算符和所有复合赋值运算符的优先级全相同,并且都是是“自右至左自右至左”结合,它们的优先级高于逗号运算符的优先级,结合,它们的优先级高于逗号运算符的优先级,低于低于C语言中其它所有运算符的优先级。语言中其它所有运算符的优先级。.5 赋值运算赋值运算C语言程序设计语言程序设计2.3.6 条件运算条件运算条件运算是一个三目运算,有三个运算分量。条件条件运算是一个三目运算,有三个运算分量。条件运算的一般形式为运算的一般形式为表达式表达式1 ? 表达式表达式2 : 表达式表达式3条件运算的计算规则是:条件运算的计算规则是:(1)计算表达式)计算表达式1的值;的值;(2)如果表达式)如果表达式1的值非

7、的值非0(真),则计算表达式(真),则计算表达式2,并以表达式并以表达式2的值为条件运算的结果(的值为条件运算的结果(不再计算表达式不再计算表达式3););(3)如果表达式)如果表达式1的值为的值为0(假),则计算表达式(假),则计算表达式3,并以表达式并以表达式3的值为条件运算的结果(的值为条件运算的结果(不再计算表达式不再计算表达式2)。)。C语言程序设计语言程序设计例如例如: x y ? x : y如果如果 x y 条件为真,则条件运算取条件为真,则条件运算取x值,否则取值,否则取y值。值。注意:表达式注意:表达式2和表达式和表达式3中只有一个被求值。中只有一个被求值。如果表达式如果表达

8、式2和表达式和表达式3是不同的基本类型,则进行一般算术转换,结果为转是不同的基本类型,则进行一般算术转换,结果为转换后的类型;换后的类型;例例1. 设设i类型为类型为int,则,则 (i=0)? 1:-1 结果为结果为d的符号。的符号。例设例设a, b的类型为的类型为int,则,则(ab)?a:b 结果为结果为a,b中较大的一个。中较大的一个。例设例设ch 为为char类型类型(ch=a & ch0)?1:(a0)?-1:0) 结果结果例例y=3,结果也为,结果也为1.0。 a0 0 a=0-1 a1,则在输出,则在输出字符前面补字符前面补m-1个空格。个空格。例如例如:char c;

9、c=s;printf(%c,%3c,c,c);输出结果为输出结果为s, sC语言程序设计语言程序设计(4 4)字符串格式说明符)字符串格式说明符%s%s:按实际宽度输出一个字符串。:按实际宽度输出一个字符串。%-ms%-ms:输出的字符串占:输出的字符串占m m列,若字符串本身长度超过列,若字符串本身长度超过m m列,则按实际列,则按实际宽度输出;若字符串长度小于宽度输出;若字符串长度小于m m列,则当列,则当m m前有负号前有负号“-”-”时,字符串左对齐,时,字符串左对齐,右补空格,否则字符串右对齐,左补空格。右补空格,否则字符串右对齐,左补空格。 %-m.ns%-m.ns:输出的字符串占

10、:输出的字符串占m m列,但只取字符串中左端列,但只取字符串中左端n n个字符。若个字符。若mnmn,则当,则当m m前有负号前有负号“-”-”时,这时,这n n个字符左对齐,右补空格,当个字符左对齐,右补空格,当m m前没有负前没有负号号“-”-”时,这时,这n n个字符右对齐,左补空格;若个字符右对齐,左补空格;若mnmn,则,则m m自动取自动取n n值,以保证值,以保证n n个字符正常输出。个字符正常输出。【例例3.63.6】#include stdio.h#include stdio.hvoid main()void main() printf(%s,%3s,%8s,%-8s,%8.

11、3s, printf(%s,%3s,%8s,%-8s,%8.3s, Hello,Hello,Hello,Hello,Hello); Hello,Hello,Hello,Hello,Hello); 程序输出结果为程序输出结果为Hello,Hello,Hello,Hello, Hello,HelloHello,Hello , HelHelC语言程序设计语言程序设计2普通字符普通字符“格式控制字符串格式控制字符串”中,除了格式说明以外的其它字符都是中,除了格式说明以外的其它字符都是普通字符,普通字符在显示屏幕上将按原样输出。例如普通字符,普通字符在显示屏幕上将按原样输出。例如:int a=7,b=8

12、;printf(a=%d,b=%dn,a,b);上述程序段中,上述程序段中,printf函数的函数的“格式控制字符串格式控制字符串”中,除了两中,除了两个个“%d”以外的其它字符均为普通字符,其中以外的其它字符均为普通字符,其中“a= ,b= ”是可打印是可打印字符,它们将在显示屏幕上原样输出,最后一个字符字符,它们将在显示屏幕上原样输出,最后一个字符n是一个是一个转义字符,表示转义字符,表示“换行符换行符”,输出时光标将在屏幕上另起一行显示。,输出时光标将在屏幕上另起一行显示。上述程序段的输出结果为上述程序段的输出结果为a=7,b=8 (光标另起一行闪烁)(光标另起一行闪烁)C语言程序设计语

13、言程序设计【例例3.7】#include stdio.hvoid main()int a,b;float x,y,s;a=12;b=-34;x=3.1;y=6.3;s=x*x-y*y;printf(a=%d,b=%dn,a,b);printf(x=%6.2f,y=%-6.2f,s=%.2fn,x,y,s);程序运行结果为程序运行结果为a=12,b=-34x= 3.10,y=6.30 ,s=-30.08C语言程序设计语言程序设计2.3.7 其它运算其它运算其它运算主要是逗号运算、其它运算主要是逗号运算、sizeof 运算、位运算和移位运算。运算、位运算和移位运算。 1逗号运算逗号运算语言提供逗号

14、运算,逗号运算符语言提供逗号运算,逗号运算符“,”用于将若干表达式用于将若干表达式连接起来顺序地逐个计算。连续逗号运算的一般形式为:连接起来顺序地逐个计算。连续逗号运算的一般形式为:表达式表达式1,表达式,表达式2, ,表达式,表达式n它的计算顺序是它的计算顺序是从左到右从左到右逐一计算各表达式,并以表达式逐一计算各表达式,并以表达式n的值为连续逗号运算的结果。例如表达式的值为连续逗号运算的结果。例如表达式x = (i = 3, i * 2)使使i等于等于3,x等于等于6。其实,逗号运算只是把多个表达式串联起来,在许多情况下,其实,逗号运算只是把多个表达式串联起来,在许多情况下,使用逗号运算的

15、目的只是想分别计算各个表达式的值,而并非想使用逗号运算的目的只是想分别计算各个表达式的值,而并非想使用逗号运算中使用逗号运算中最后那个表达式的值最后那个表达式的值。 C语言程序设计语言程序设计2sizeof 运算运算sizeof 运算以字节为单位给出其运算对象所需(或运算以字节为单位给出其运算对象所需(或所占)的字节数,习惯称为运算对象的长度。所占)的字节数,习惯称为运算对象的长度。sizeof 运算有两种书写形式:运算有两种书写形式:sizeof(变量名变量名) 或或 sizeof (类型名类型名)如有如有int j;double x;表达式表达式sizeof(j)和和sizeof(x)分别

16、是变量分别是变量j和和x所占的字所占的字节数。节数。 4 8C语言程序设计语言程序设计3位运算位运算所谓位运算就是指对一个数的二进制位的运算,例所谓位运算就是指对一个数的二进制位的运算,例如位的或、与、非运算,位的左移、右移运算。如位的或、与、非运算,位的左移、右移运算。C语言语言提供了提供了6个用于位操作的运算符,这些运算符只作用于个用于位操作的运算符,这些运算符只作用于各种整型数据(如各种整型数据(如char型、型、int型、型、unsigned型、型、long型)。关于位运算,更详细的内容参见第型)。关于位运算,更详细的内容参见第9章。章。& 按位与(按位与(AND) (二元运算

17、符)(二元运算符)| 按位或(按位或(OR) (二元运算符)(二元运算符) 按位异或(按位异或(XOR) (二元运算符)(二元运算符) 右移右移 (二元运算符)(二元运算符) 求反码求反码 (一元运算符)(一元运算符)C语言程序设计语言程序设计void main() int i = 1, j = 2, k = 3; i += j += k; /* i = 6, j = 5, k = 3 */ printf(i=%dtj=%dtk=%dn, i, j, k); printf(ij?i+:j+)=%dn, i j?i+:j+)=%dn, k += ij ? i+ : j+); printf(i=%

18、dtj=%dtk=%dn, i, j, k); i = 3; j = k = 4; printf(k=j=i)=%d, k = j = i); printf(t(k=j&j=i)=%dn, k = j & j = i); i = j = 2; k = i+ - 1; printf(i=%dtj=%dtk=%dn, i, j, k); /* i = 3 , j = 2, k = 1 */ k += -i+ + +j; printf(i=%dtj=%dtk=%dn, i, j, k); k = i / +i; printf(k=%dnn, k); C语言程序设计语言程序设计2.4

19、类型转换类型转换C语言中,整型、单精度型、语言中,整型、单精度型、双精度型和字符型数据可以进行双精度型和字符型数据可以进行混合运算。混合运算。类型转换可以归纳成类型转换可以归纳成3种转种转换方式:换方式:自动转换自动转换、赋值转换赋值转换和和强制转换强制转换。2.4.1 类型自动转换类型自动转换自动转换(自动转换(在进行运算时隐在进行运算时隐含的转换)含的转换)的规则如图所示。的规则如图所示。如:如:3+a+34535+7.8 C语言程序设计语言程序设计2.4.2 赋值转换赋值转换如果赋值运算符两侧的类型不一致,但都是数值型或如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值过程中

20、就要进行类型转换。转换的基本字符型时,在赋值过程中就要进行类型转换。转换的基本原则为:原则为:(1)将整型数据赋给单、双精度变量时,数值不变,)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。但以浮点数形式存储到变量中。(2)将实型数据赋给整型变量时,舍弃实数的小数部)将实型数据赋给整型变量时,舍弃实数的小数部分。如分。如x为整型变量,执行为整型变量,执行“x=4.25”时,取值为时,取值为x=4。(3)字符型数据赋给整型变量,字符型数据只占一个)字符型数据赋给整型变量,字符型数据只占一个字节,而整型变量占字节,而整型变量占4个字节,一般来说,个字节,一般来说,把字符数据的把字符数据的ASCII码值赋给整数。码值赋给整数。(4)unsigned int与与 int赋值时,以它们存放的二进制赋值时,以它们存放的二进制为位。为位。C语言程序设计语言程序设计若把一个大值赋给若把一个大值赋给int型的变量,则出错。其他类似。型的变量,则出错。其他类似。int i;i=2147483648;printf(”d”,i);则输出:则输出:-2147

温馨提示

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

最新文档

评论

0/150

提交评论