资源预览内容
第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
第6页 / 共31页
第7页 / 共31页
第8页 / 共31页
第9页 / 共31页
第10页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
C语言程序设计语言程序设计.5赋值运算赋值运算简单赋值简单赋值简单赋值运算符简单赋值运算符“仅执行赋值操作,表达式的形式为:仅执行赋值操作,表达式的形式为:操作数操作数操作数操作数“的功能是将右操作数的值赋给由左操作数指定的存的功能是将右操作数的值赋给由左操作数指定的存储单元(变量)。左操作数必须是一个可更改内容的左值表达式储单元(变量)。左操作数必须是一个可更改内容的左值表达式.赋值运算符的右操作数类型可以和左操作数不同,执行赋值之前赋值运算符的右操作数类型可以和左操作数不同,执行赋值之前右操作数被自动转换为左操作数的类型。右操作数被自动转换为左操作数的类型。如:如:intj;j=5.6;则则j的值为;的值为;C语言程序设计语言程序设计对于基本类型,赋值表达式的形式可具体化为:对于基本类型,赋值表达式的形式可具体化为:变量名表达式变量名表达式例如:例如:inti=5,j;floata=3.0,b=3.5;doubler;charc1,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的类型与左操作数相同,直接赋值的类型与左操作数相同,直接赋值*/表达式的结果和类型与左操作数相同。表达式的结果和类型与左操作数相同。C语言程序设计语言程序设计当右操作数又是一个赋值表达式时,形成多重赋当右操作数又是一个赋值表达式时,形成多重赋值表达式,例如:值表达式,例如:i=j=0是一个合法的赋值表达式,是一个合法的赋值表达式,“”右结合。因此上式等价于右结合。因此上式等价于i=(j=0),而,而j=0表达式的值表达式的值为,因此为,因此i的值也为。的值也为。但要注意:多重赋值表达式不能出现在变量说明但要注意:多重赋值表达式不能出现在变量说明中,如:中,如:inti=j=0;是非法的。是非法的。C语言程序设计语言程序设计x=y=4.0;是先将值是先将值4.0赋给变量赋给变量y,再赋给变量,再赋给变量x。如有变量说明:如有变量说明:intk;doublex;则赋值表达式:则赋值表达式: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.复合赋值复合赋值复合赋值运算符包括复合赋值运算符包括+=-=*=/=%=&=|=,其形式为,其形式为操作数操作数1OP=操作数操作数2可理解为下面的展开形式:可理解为下面的展开形式:操作数操作数1=操作数操作数1OP(操作数(操作数2)下面举例说明复合赋值运算的意义:下面举例说明复合赋值运算的意义:x+=5.0;等效于等效于x=x+5.0x*=u+v;等效于等效于x=x*(u+v)a+=a-=b+2;等效于等效于a=a+(a=a-(b+2)赋值运算符和所有复合赋值运算符的优先级全相同,并且赋值运算符和所有复合赋值运算符的优先级全相同,并且都是都是“自右至左自右至左”结合,它们的优先级高于逗号运算符的优先级,结合,它们的优先级高于逗号运算符的优先级,低于低于C语言中其它所有运算符的优先级。语言中其它所有运算符的优先级。.5 赋值运算赋值运算C语言程序设计语言程序设计2.3.6条件运算条件运算条件运算是一个三目运算,有三个运算分量。条条件运算是一个三目运算,有三个运算分量。条件运算的一般形式为件运算的一般形式为表达式表达式1?表达式表达式2:表达式表达式3条件运算的计算规则是:条件运算的计算规则是:(1)计算表达式)计算表达式1的值;的值;(2)如果表达式)如果表达式1的值非的值非0(真),则计算表达(真),则计算表达式式2,并以表达式,并以表达式2的值为条件运算的结果(的值为条件运算的结果(不再计算表不再计算表达式达式3););(3)如果表达式)如果表达式1的值为的值为0(假),则计算表达(假),则计算表达式式3,并以表达式,并以表达式3的值为条件运算的结果(的值为条件运算的结果(不再计算表不再计算表达式达式2)。)。C语言程序设计语言程序设计例如例如:xy?x:y如果如果xy条件为真,则条件运算取条件为真,则条件运算取x值,否则取值,否则取y值。值。注意:表达式注意:表达式2和表达式和表达式3中只有一个被求值。中只有一个被求值。如果表达式如果表达式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个空格。个空格。例如例如:charc;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:输出的字符串占:输出的字符串占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.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普通字符普通字符“格式控制字符串格式控制字符串”中,除了格式说明以外的其它字符都中,除了格式说明以外的其它字符都是普通字符,普通字符在显示屏幕上将按原样输出。例如是普通字符,普通字符在显示屏幕上将按原样输出。例如:inta=7,b=8;printf(a=%d,b=%dn,a,b);上述程序段中,上述程序段中,printf函数的函数的“格式控制字符串格式控制字符串”中,除了中,除了两个两个“%d”以外的其它字符均为普通字符,其中以外的其它字符均为普通字符,其中“a=,b=”是可打是可打印字符,它们将在显示屏幕上原样输出,最后一个字符印字符,它们将在显示屏幕上原样输出,最后一个字符n是一是一个转义字符,表示个转义字符,表示“换行符换行符”,输出时光标将在屏幕上另起一行显,输出时光标将在屏幕上另起一行显示。示。上述程序段的输出结果为上述程序段的输出结果为a=7,b=8(光标另起一行闪烁)(光标另起一行闪烁)C语言程序设计语言程序设计【例例3.7】#includestdio.hvoidmain()inta,b;floatx,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逗号运算逗号运算语言提供逗号运算,逗号运算符语言提供逗号运算,逗号运算符“,”用于将若干表达用于将若干表达式连接起来顺序地逐个计算。连续逗号运算的一般形式为:式连接起来顺序地逐个计算。连续逗号运算的一般形式为:表达式表达式1,表达式,表达式2,表达式,表达式n它的计算顺序是它的计算顺序是从左到右从左到右逐一计算各表达式,并以表达式逐一计算各表达式,并以表达式n的值为连续逗号运算的结果。例如表达式的值为连续逗号运算的结果。例如表达式x=(i=3,i*2)使使i等于等于3,x等于等于6。其实,逗号运算只是把多个表达式串联起来,在许多情况其实,逗号运算只是把多个表达式串联起来,在许多情况下,使用逗号运算的目的只是想分别计算各个表达式的值,而并下,使用逗号运算的目的只是想分别计算各个表达式的值,而并非想使用逗号运算中非想使用逗号运算中最后那个表达式的值最后那个表达式的值。C语言程序设计语言程序设计2sizeof运算运算sizeof运算以字节为单位给出其运算对象所需运算以字节为单位给出其运算对象所需(或所占)的字节数,习惯称为运算对象的长度。(或所占)的字节数,习惯称为运算对象的长度。sizeof运算有两种书写形式:运算有两种书写形式:sizeof(变量名变量名)或或sizeof(类型名类型名)如有如有intj;doublex;表达式表达式sizeof(j)和和sizeof(x)分别是变量分别是变量j和和x所占的所占的字节数。字节数。48C语言程序设计语言程序设计3位运算位运算所谓位运算就是指对一个数的二进制位的运算,所谓位运算就是指对一个数的二进制位的运算,例如位的或、与、非运算,位的左移、右移运算。例如位的或、与、非运算,位的左移、右移运算。C语语言提供了言提供了6个用于位操作的运算符,这些运算符只作用个用于位操作的运算符,这些运算符只作用于各种整型数据(如于各种整型数据(如char型、型、int型、型、unsigned型、型、long型)。关于位运算,更详细的内容参见第型)。关于位运算,更详细的内容参见第9章。章。&按位与(按位与(AND)(二元运算符)(二元运算符)|按位或(按位或(OR)(二元运算符)(二元运算符)按位异或(按位异或(XOR)(二元运算符)(二元运算符)右移右移(二元运算符)(二元运算符)求反码求反码(一元运算符)(一元运算符)C语言程序设计语言程序设计voidmain()inti=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,ij?i+:j+)=%dn,k+=ij?i+:j+);printf(i=%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类型转换类型转换C语言中,整型、单精度语言中,整型、单精度型、双精度型和字符型数据可以型、双精度型和字符型数据可以进行混合运算。进行混合运算。类型转换可以归纳成类型转换可以归纳成3种种转换方式:转换方式:自动转换自动转换、赋值转换赋值转换和和强制转换强制转换。2.4.1类型自动转换类型自动转换自动转换(自动转换(在进行运算时在进行运算时隐含的转换)隐含的转换)的规则如图所示。的规则如图所示。如:如:3+a+34535+7.8C语言程序设计语言程序设计2.4.2赋值转换赋值转换如果赋值运算符两侧的类型不一致,但都是数值型如果赋值运算符两侧的类型不一致,但都是数值型或字符型时,在赋值过程中就要进行类型转换。转换的基或字符型时,在赋值过程中就要进行类型转换。转换的基本原则为:本原则为:(1)将整型数据赋给单、双精度变量时,数值不变,)将整型数据赋给单、双精度变量时,数值不变,但以浮点数形式存储到变量中。但以浮点数形式存储到变量中。(2)将实型数据赋给整型变量时,舍弃实数的小数)将实型数据赋给整型变量时,舍弃实数的小数部分。如部分。如x为整型变量,执行为整型变量,执行“x=4.25”时,取值为时,取值为x=4。(3)字符型数据赋给整型变量,字符型数据只占一)字符型数据赋给整型变量,字符型数据只占一个字节,而整型变量占个字节,而整型变量占4个字节,一般来说,个字节,一般来说,把字符数据的把字符数据的ASCII码值赋给整数。码值赋给整数。(4)unsignedint与与int赋值时,以它们存放的二进赋值时,以它们存放的二进制为位。制为位。C语言程序设计语言程序设计若把一个大值赋给若把一个大值赋给int型的变量,则出错。其他类型的变量,则出错。其他类似。似。inti;i=2147483648;printf(”d”,i);则输出:则输出:-2147483648C语言程序设计语言程序设计例如:例如:inta,b;floatx1=2.5,x2;doubley1=2.2,y2;a=x1;/*x1的值转换成整数的值转换成整数2赋给赋给a,小数截去了,小数截去了*/x2=3.14159*y1*y1;/*右边表达式为双精度型,先转换成单精度再赋给右边表达式为双精度型,先转换成单精度再赋给x2*/b=a;/*将将a的一字节的一字节ASCII码转换成两个字节的整数,码转换成两个字节的整数,再赋给再赋给b,b的值为的值为97*/精度高的数据类型向精度低的数据类型转换时,精度高的数据类型向精度低的数据类型转换时,数据的精度有可能降低。数据的精度有可能降低。C语言程序设计语言程序设计2.4.3强制类型转换强制类型转换可以利用强制类型转换运算符将一个表达式转换可以利用强制类型转换运算符将一个表达式转换成所需类型。如:成所需类型。如:(int)(a+b)(强制将(强制将a+b的值转换成整型)的值转换成整型)(double)x(将(将x转换成转换成double型)型)(float)(10%3)(将(将10%3的值转换成的值转换成float型)型)强制类型转换的一般形式为:强制类型转换的一般形式为:(类型名)(表达式)(类型名)(表达式)注意:(注意:(int)()(x+y)和()和(int)x+y强制类型转强制类型转换的对象是不同的。(换的对象是不同的。(int)()(x+y)是对)是对x+y进行强制类进行强制类型转换;而(型转换;而(int)x+y则只对则只对x进行强制类型转换。进行强制类型转换。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号