版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1内容回顾内容回顾v单个字符的输入和输出函数单个字符的输入和输出函数v字符输出函数字符输出函数putchar(cputchar(c ) )v字符输入函数字符输入函数getchargetchar( )( )v格式化输入格式化输入( (scanfscanf) )输出输出( (printfprintf) )函数的用法函数的用法 整型数据的输入输出整型数据的输入输出 (%(%d,%o,%x,%ud,%o,%x,%u) ) 实型数据的输入输出实型数据的输入输出(%(%f,%e,%lf,%lef,%e,%lf,%le) ) 字符型数据的输入输出字符型数据的输入输出(%c)(%c)v 常用函数常用函数( (
2、包含头文件包含头文件, ,函数原型函数原型) ) LOGO第三章第三章3本章内容本章内容4运算符简介运算符简介vC C语言中,数据是程序处理的对象,运算是语言中,数据是程序处理的对象,运算是对数据进行加工的过程,体现数据之间的各对数据进行加工的过程,体现数据之间的各种不同运算关系的符号就称为种不同运算关系的符号就称为运算符运算符。vC C语言中,除了控制语句和输入输出以外的语言中,除了控制语句和输入输出以外的几乎所有的基本操作都是用运算符来实现的。几乎所有的基本操作都是用运算符来实现的。 例如:赋值操作的功能,在例如:赋值操作的功能,在C C语言中是用赋语言中是用赋值运算符值运算符“=”=”来
3、实现的。来实现的。5vC C语言的运算符按照其功能分为以下语言的运算符按照其功能分为以下1313类:类:算术运算符算术运算符 + - * / % + - 下标运算符下标运算符 关系运算符关系运算符 ! 分量运算符分量运算符 - 逻辑运算符逻辑运算符 ! | 强制类型转换运算符强制类型转换运算符 (类型) 赋值运算符赋值运算符 及其扩展赋值运算符 求字节数运算求字节数运算 sizeof 条件运算符条件运算符 ?: 位运算符位运算符 | 逗号运算符逗号运算符 , 指针运算符指针运算符 * 其他运算符其他运算符 如函数调用运算符() 6学习运算符,主要掌握以下学习运算符,主要掌握以下4 4点:点:运
4、算符操作的运算符操作的数据的类型。数据的类型。不同的运算符操不同的运算符操作的数据的类型不一定相同;而且每种运算作的数据的类型不一定相同;而且每种运算符操作的数据的类型是相对固定的。符操作的数据的类型是相对固定的。运算符操作的运算符操作的数据的个数。数据的个数。不同的运算符操不同的运算符操作的数据的个数不一定相同;根据运算符连作的数据的个数不一定相同;根据运算符连接运算对象的个数,一般分为单目运算符接运算对象的个数,一般分为单目运算符(如(如+、-)、双目运算符(如)、双目运算符(如* * / %/ %)和三目运算符(如?:)。和三目运算符(如?:)。7 运算符在整个运算符系统中的运算符在整个
5、运算符系统中的优先级。优先级。优优先级是指在运算对象的左右都有运算符时先级是指在运算对象的左右都有运算符时运算的先后次序运算的先后次序。运算对象先做优先级高。运算对象先做优先级高的运算。如:的运算。如:* */ /比比+-+-优先级高。优先级高。 运算符操作的数据的运算符操作的数据的结合性。结合性。运算符的结运算符的结合性规定了在表达式求解过程中,若运算合性规定了在表达式求解过程中,若运算对象其左右运算符优先级相同时的对象其左右运算符优先级相同时的运算方运算方向向。结合性有两种:左结合(从左到右计。结合性有两种:左结合(从左到右计算)和右结合(从右到左计算)。算)和右结合(从右到左计算)。8v
6、表达式:表达式:用用运算符运算符将将运算对象运算对象(常量、变量、函数常量、变量、函数等)等)连接而成的式子。连接而成的式子。 如如 a a* *b/c-1.5+ab/c-1.5+av表达式使用时应注意表达式使用时应注意表达式的值表达式的值及及类型类型。 a. a. 不同类型的运算符所表示的表达式类型也不同类型的运算符所表示的表达式类型也是不同的。表达式一般有是不同的。表达式一般有算术表达式算术表达式、赋值表赋值表达式达式、关系表达式关系表达式、逻辑表达式逻辑表达式、逗号表达式逗号表达式、条件表达式条件表达式等表达式。等表达式。 b. b. 表达式虽然有各种类型,但它总是表达式虽然有各种类型,
7、但它总是有确定有确定的值的值的,根据运算符的的,根据运算符的优先级优先级和和结合性结合性进行计进行计算。算。9v表达式书写的一般规则:表达式书写的一般规则: 表达式必须写在同一行上,只能使用表达式必须写在同一行上,只能使用圆括号圆括号, ,且左右括号个数要相同,有多层括号时内层且左右括号个数要相同,有多层括号时内层括号中的运算优先。括号中的运算优先。如:如: 写作: 1.0/2*(a*x+(a+x)/4/x) xxaax4212 22 2y yx x2 2y yn例: 写出下列代数式的C算术表达式 1+(4+x)1/3x(1+pow( (4+x),1.0/3) )*xy/(2*sqrt(x*x
8、+y*y) )103.1 3.1 算术表达式算术表达式v( (一一) ) 基本算术运算符:基本算术运算符: (加法运算或正号运算符)(加法运算或正号运算符)(减法运算或负号运算符)(减法运算或负号运算符)* * (乘法运算符)(乘法运算符)(除法运算符)(除法运算符)% % (求余运算符,或称模运算符)(求余运算符,或称模运算符)+ + 自增运算符自增运算符 - - 自减运算符自减运算符3.1.1 3.1.1 算术运算符算术运算符11算术运算符的优先级和结合性算术运算符的优先级和结合性单目单目 + - + - -双目双目 * / %双目双目 + -高高低从右向左从左向右如:如:-5+3%2 -
9、5+3%2 相当于相当于 (-5)+(3%2) (-5)+(3%2) 结果为结果为 -4 -4( (优先级优先级) ) 3 3* *5%3 5%3 相当于相当于 (3 (3* *5)%3 5)%3 结果为结果为 0 0 ( (结合性结合性) )12v注意注意:1) +1) +、- -、* *、/ /与数学中的运算顺序相似,先与数学中的运算顺序相似,先乘除,后加减,从左到右。乘除,后加减,从左到右。2 2)求余运算符)求余运算符% %要求两个运算对象均为要求两个运算对象均为整型数整型数据据。余数。余数符号与符号与左边左边的运算对象符号相同。的运算对象符号相同。如:如:2%32%3为为2 2,-9
10、%5-9%5为为-4-4,9%-59%-5为为4 4。3 3)% %、/ /运算符的运算符的右操作数右操作数不可以为不可以为0 0。4 4)字符类型的数据以该字符的)字符类型的数据以该字符的ASCIIASCII码码参加运参加运算。算。如:如:a+2 a+2 相当于相当于97+297+2。135 5)/ /运算符,操作数的类型不同,功能不同。运算符,操作数的类型不同,功能不同。 当两个操作数均为整型时,其结果的类型也为整型。当两个操作数均为整型时,其结果的类型也为整型。 a.a.若除数和被除数都为正值,结果为正,直接舍去小数若除数和被除数都为正值,结果为正,直接舍去小数部分,如:部分,如:5/2
11、5/2的结果为的结果为2 2。 若两个操作数中有一个为实数若两个操作数中有一个为实数, ,则结果是则结果是 double double 型型。 因为所有实数都按因为所有实数都按doubledouble型进行运算。型进行运算。 如:如:5.0/25.0/2的结果的结果2.5.2.5.b.b.若除数或被除数中有一个为负值,若除数或被除数中有一个为负值,则舍入的方向是不固定的。则舍入的方向是不固定的。如:如:-5/3=?-5/3=?多数机器采取多数机器采取“向零取整向零取整”的方的方法,即法,即5/3=15/3=1,-5/3=-1-5/3=-1,取整后向零靠拢。,取整后向零靠拢。14整除和求余数的特
12、殊用处整除和求余数的特殊用处 123 % 10的结果是的结果是3; 12 % 10的结果是的结果是2; 123/10,结果是,结果是12;12/10的结果是的结果是1; 通过整除和求余数交叉应用,可以分解一个整数。通过整除和求余数交叉应用,可以分解一个整数。这个技巧以后我们要经常使用。这个技巧以后我们要经常使用。v小程序:输入一个三位数的整数,请分离出各位,十位,百位,并输出。 15(二)自增、自减运算符(二)自增、自减运算符u运算符号运算符号: : +(自增运算符)(自增运算符) -(自减运算符)(自减运算符)u功能功能: : 使变量的值增使变量的值增 1 1 或减或减 1 1。u用途:常用
13、于循环语句中使循环变量自动加或减。用途:常用于循环语句中使循环变量自动加或减。 也用于指针变量,使指针指向下或上一个地址。也用于指针变量,使指针指向下或上一个地址。u操作数:只能是操作数:只能是变量变量不能是常量、表达式和函数。不能是常量、表达式和函数。 如:如:i+, +i, i-, -i i+, +i, i-, -i 是正确的。是正确的。 +8 +8,+sin(4)+sin(4),(,(x+yx+y)+是错误的。是错误的。u结合性结合性: :自增(减)运算符的结合性是自增(减)运算符的结合性是右结合右结合。u优先级:单目运算符,优先级高于算术运算符,优先级:单目运算符,优先级高于算术运算符
14、, 低于括低于括号类运算符。号类运算符。16v+、-作用于变量的形式有两种:作用于变量的形式有两种:前缀方式前缀方式(prefix)(prefix):运算符:运算符 变量,如变量,如+i+i、-i -i ;后缀方式后缀方式(postfix)(postfix):变量:变量 运算符,如运算符,如i+i+、i-i-;v,:在使用之前,先使,:在使用之前,先使 的值加(减)的值加(减)v,:在使用之后,再使,:在使用之后,再使 的值加(减)的值加(减)17 自增、自减运算取变量的值作为表达式的值自增、自减运算取变量的值作为表达式的值. .如如: :设设n=10;n=10;+n+n:1)n=n+1=11
15、1)n=n+1=11;2)2)取取n n值值1111作为表达式作为表达式+n n的值的值. .n+n+:1)1)取取n n值值1010作为表达式作为表达式n n+的值;的值;2)n=n+1=11.2)n=n+1=11.例子例子: :int i, k;i=2;k=+i;i=2;k=i+;i=3i=3k=3k=2k=ii=i+1i=i+1k=i18v例3.1v#include vvoid main()vv int a=2,b=2,x,y;v x=-a+2; /前缀运算v y=b+-1; /后缀运算v printf(x=%d y=%dn,x,y);v printf(a=%d b=%dn,a,b);v
16、v 运行结果:运行结果: x x3 y=13 y=1 a=1 b=3 a=1 b=3 a=a-1,x=a+2y=b-1,b=b+119/ 连续的-表示前两个是对a的自减,最后的-表示减法运算例3.2 #include void main() int a=2,b=2,c; c=+a+b-; / 变量a为前缀运算,b为后缀运算 printf(a=%d,b=%d,c=%dn,a,b,c); a=b=2; c=-a-b; printf(a=%d,b=%d,c=%dn,a,b,c); a=b=2; printf(a=%dn,a+); printf(b=%dn,+b); c=a+b; / a、b增1后的值
17、参加运算 printf(“c=%dn”,c); a=a+1, c=a+b, b=b-1c=-(a-)-bc=-a-b, a=a-1c= (a+1)+(b+1)b=b+1输出输出:a=3,b=1, c=5输出输出:a=1,b=2, c=-4输出输出:c=6输出输出:a=2输出输出:b=3说明:说明:C语言处理语言处理时是从左到右取最时是从左到右取最多个数的符号作为多个数的符号作为一个合法的运算符。一个合法的运算符。203.1.2 3.1.2 算术表达式算术表达式: : 用算术运算符和括号将运算对象用算术运算符和括号将运算对象( (也称操也称操作数)连接起来的、符合语法规则的式子,作数)连接起来的
18、、符合语法规则的式子,称为算术表达式。运算对象包括常量、变量、称为算术表达式。运算对象包括常量、变量、函数等。函数等。 例如例如: : * *.5.5aa 是一个合法的表达式。是一个合法的表达式。213.2.1 3.2.1 赋值运算符赋值运算符1 1)运算符:)运算符:= =2 2)作用:将一个数据或表达式的值赋给一个变量。)作用:将一个数据或表达式的值赋给一个变量。 如:如: /表示把常量表示把常量3 3赋给变量赋给变量a a y=a y=a* *sin(zsin(z) /) /表示把表达式表示把表达式a a* *sin(zsin(z) )的结果求出来再赋给一个变量的结果求出来再赋给一个变量
19、y y注:赋值运算符与数学中的等号不同,赋值运算符求解注:赋值运算符与数学中的等号不同,赋值运算符求解后能够得到一个运算结果。后能够得到一个运算结果。3 3)赋值运算符的优先级和结合性:)赋值运算符的优先级和结合性:优先级较低,结合性是从右向左。优先级较低,结合性是从右向左。 如:如:x=y=3;x=y=3;3.2 3.2 赋值表达式赋值表达式223.2.2 3.2.2 赋值表达式赋值表达式变量变量表达式表达式 计算赋值运算符右侧计算赋值运算符右侧表达式表达式的值的值 将赋值运算符右侧将赋值运算符右侧表达式表达式的值赋给左侧的的值赋给左侧的变量变量 将赋值运算符左侧的将赋值运算符左侧的变量变量
20、的值作为表达式的值的值作为表达式的值例例: : n = 2; n = 2; n = n+1; n = n+1;23对赋值表达式的说明:对赋值表达式的说明: a.a.赋值运算符赋值运算符左侧只能是变量左侧只能是变量,不可以是表达,不可以是表达式、函数或常变量也不能作为左值。式、函数或常变量也不能作为左值。 b.b.赋值表达式中右边的赋值表达式中右边的表达式又可以是赋值表表达式又可以是赋值表达式达式。 例:例: a=b=7a=b=7 赋值表达式中含有多个赋值运算符时,赋值表达式中含有多个赋值运算符时,从右向从右向左依次赋值。左依次赋值。 c.c.赋值表达式可以以表达式形式出现在某些语赋值表达式可以
21、以表达式形式出现在某些语句(如输出语句、循环语句等)中。句(如输出语句、循环语句等)中。 如:如:printf(%dprintf(%d ,a=b);a=b);243.2.3 3.2.3 赋值语句赋值语句v 变量变量 = = 表达式表达式; ; 功能:先计算功能:先计算表达式的表达式的值,然后将值赋给值,然后将值赋给变量。变量。 例例: : intint a,b,ca,b,c; ; float x, y; float x, y; x=sqrt(7); x=sqrt(7); y=x+4; y=x+4; a=b=c=6; a=b=c=6;25.3.2.4 3.2.4 复合赋值运算符复合赋值运算符双目
22、运算符与赋值运算符的合成或简化,称为双目运算符与赋值运算符的合成或简化,称为复合赋值运算符。复合赋值运算符。语言规定可以使用种复合赋值运算符:语言规定可以使用种复合赋值运算符: ,* *, ,| | 复合赋值运算符的优先级和结合性同赋值运算符。复合赋值运算符的优先级和结合性同赋值运算符。26变量变量 双目运算符双目运算符=表达式表达式复合赋值运算符的复合赋值运算符的功能功能: 先将变量与赋值运算先将变量与赋值运算符后面的表达式进行一次双目运算符所指定的符后面的表达式进行一次双目运算符所指定的运算,然后再将运算结果赋给变量。运算,然后再将运算结果赋给变量。例如例如: 等价于等价于 * * 等价于
23、等价于 * *()() 等价于等价于 以以“”为例来说明,为例来说明,它相当于使进行一次自加它相当于使进行一次自加()的操作。即先使加()的操作。即先使加,再赋给。,再赋给。27注意注意: :如果如果= =右边是包含若干项的表达式,则相右边是包含若干项的表达式,则相当于它有括号。当于它有括号。如:如: x %= y+3 x %= (y+3) |_ x = x %(y+3)(不要错写成x=x%y+3) 复合赋值运算表达式: 变量变量 双目运算符双目运算符= =表达式表达式是个整体步骤:1)左边变量的当前值与右边整个表达式进行相应运算。2)把1)的结果赋给左边的变量。3)赋值表达式的值是左边变量的
24、值。28例例3.3 赋值运算符的使用赋值运算符的使用#include void main( ) int a=5, b=5,c=5; a-=2; b*=a+3; c/=a-1; printf(a=%d,b=%d,c=%dn,a,b,c); 结果 :a=3,b=30,c=2a=a-2b=b*(a+3)c=c/(a-1)293.3 3.3 逻辑表达式逻辑表达式v 关系运算符是用来比较两个运算对象大关系运算符是用来比较两个运算对象大小的,运算结果是成立或不成立。小的,运算结果是成立或不成立。v如果成立,则结果为逻辑值如果成立,则结果为逻辑值“真真”,用整,用整数数 “ “1”1”来表示;如:来表示;如
25、:5=55=5v如果不成立,则结果为逻辑值假如果不成立,则结果为逻辑值假”,用整,用整数数“0”0”来表示。如:来表示。如:555530vC C语言提供的语言提供的6 6种关系运算符:种关系运算符:3.3 逻辑表达式逻辑表达式312.2.关系运算符的优先级:关系运算符的优先级:关系运算符的优先级低于算术运算符关系运算符的优先级低于算术运算符, ,高于赋值运算符。高于赋值运算符。 、 =的优先级相同。的优先级相同。=、!、!= =的优先级相同。的优先级相同。关系运算符的结合性:关系运算符的结合性:左结合左结合如:如: intint x=7; x=7; 计算下面关系表达式的值:计算下面关系表达式的
26、值: x5!=1 x5!=1 1=15 1=1bab、a+bb+ca+bb+c、(a=3)(b=5)(a=3)(b=5)、 abab)(bb)(b(b=4);d=(a=3)(b=4);结果为结果为0 0。 d=abc;d=abc;结果为结果为0 0。 d=ac=c;d=ac=c;结果为结果为1 1。 2 2)若)若intint a=5, b=3; a=5, b=3; printf(%dprintf(%d, ab);, ab);34例例3.4 分析下面程序的运行结果。分析下面程序的运行结果。#include void main() float x,y=0.3; y=y*11; x=3+0.3;
27、if(x= =y) printf(ok,x= =y); else printf(no,x!=y); v说明:说明:两个实数一般不作相等或不等比两个实数一般不作相等或不等比较。较。(因为实数表示或在计算过程因为实数表示或在计算过程中有时存在误差中有时存在误差)v结果:结果:no,x!=y35 字符数据可以进行大小比较。比较时,字符数据可以进行大小比较。比较时,用字符的用字符的ASCII码进行比较。码进行比较。 如:如: A B Z a 字母字母 AZ ASCII: 6590字母字母 az ASCII: 9712236例例3.5 3.5 #include #include void main( )
28、void main( ) intint a,b,ca,b,c; ; scanf(%d%d%d,&a,&b,&cscanf(%d%d%d,&a,&b,&c); /); /输入:输入:2 3 42 3 4 a=b!=c; / a=b!=c; /将关系表达式的值赋给将关系表达式的值赋给a a printf(aprintf(a=%=%d,bd,b=%=%d,cd,c=%=%dn,a,b,cdn,a,b,c);); a=(b=c+ a=(b=c+* *3); /a3); /a与与b b进行相等比较进行相等比较 printf(aprintf(a=%=%d,b
29、d,b=%=%d,cd,c=%=%dn,a,b,cdn,a,b,c);); a=bc2; / a=bc2; /将关系表达式的值赋给将关系表达式的值赋给a a printf(aprintf(a=%=%d,bd,b=%=%d,cd,c=%=%dn,a,b,cdn,a,b,c);); a=1,b=3,c=4a=1,b=12,c=5a=0,b=12,c=5371 1、逻辑运算符、逻辑运算符 逻辑与逻辑与 & (& (表示并且)表示并且) 逻辑或逻辑或 | | (表示或者)(表示或者) 逻辑非逻辑非 ! ! (表示相反)(表示相反) | 结合性:结合性:! ! 单目运算,右结合单目运算,
30、右结合&、| | 双目运算,左结合双目运算,左结合38v用逻辑运算符将用逻辑运算符将关系表达式关系表达式或或逻辑量逻辑量连接而成连接而成的式子。的式子。如:如:x = 3x = 3 3 | 5 3 | 5 !( (x+yx+y) & 7) & 7v逻辑运算对象可以任何类型的数据(整型、实逻辑运算对象可以任何类型的数据(整型、实型、字符型、指针型、枚举型)。型、字符型、指针型、枚举型)。v判断逻辑运算对象的真假判断逻辑运算对象的真假 非非0 0表示表示真真 0 0表示表示假假2. 逻辑表达式逻辑表达式x, y可以是任意表达式39v逻辑表达式的逻辑表达式的运算结果运算结果为
31、一为一(即真(即真或假)。或假)。 1 1 (表示逻辑真,即满足条件)(表示逻辑真,即满足条件) 0 0 (表示逻辑假,即不满足条件)(表示逻辑假,即不满足条件)v逻辑表达式在程序中一般用于控制语句逻辑表达式在程序中一般用于控制语句(ifif、forfor、 whilewhile、 do whiledo while), ,对某些对某些条件作出判断,根据条件的成立(真)与条件作出判断,根据条件的成立(真)与不成立(假)决定程序的流程。不成立(假)决定程序的流程。403. 3. 逻辑运算的规则:逻辑运算的规则:逻辑与 & 逻辑或 | 逻辑非 ! 真值表 x y x&y x|y !x
32、假 假 0 0 1假 真 0 1 1真 假 0 1 0真 真 1 1 0 0 00 非0非0 0非0 非05&7=?0 | 7=?!7=?41总结:总结:! 运算结果为运算对象逻辑值的反运算结果为运算对象逻辑值的反 当运算对象为当运算对象为非零值非零值时,则运算结果为时,则运算结果为 , 反之当运算反之当运算对象对象为为零值零值时,则运算结果为时,则运算结果为 当两个运算当两个运算对象对象均为均为非零值非零值时,运算结果为时,运算结果为 , 否则运算结果值为否则运算结果值为当两个运算当两个运算对象对象中有一个为非零值时,运算结果为中有一个为非零值时,运算结果为 。 当两个运算当两个运算
33、对象对象均为零时,则运算结果才为均为零时,则运算结果才为 。42内容回顾内容回顾v算术运算符 : / % + -v 赋值运算符: = 复合赋值运算符: += -= /= %=v 关系运算符 : = = = !=v逻辑运算符 :& | ! 使用运算符时应注意: 优先级和结合性 434. 4. 逻辑运算符的优先级逻辑运算符的优先级!+ - + -(正负)(正负)* / %+、-(加减)(加减) = !=&|= += -= *= /= %=,高低例例3.6 3.6 写出下列表达式的值。写出下列表达式的值。设设 intint a=2,b=3; char a=2,b=3; char c=
34、A;c=A;float x=3.6,y=-4.4float x=3.6,y=-4.4;1 1) ab|!ab|!(cAcA)&xy&xy2 2) a-b&!c-5|ya-b&!c-5|y* *2x2z & z & x+zx+zy & y & z+yz+yxx3 3)判断字符变量)判断字符变量chch中的字符是否为大写字母的逻辑表中的字符是否为大写字母的逻辑表达式。达式。 chch=A & =A & chch =Z =Z说明:说明: & & (逻辑与)一般用于判断两个或两个以上(逻辑与)一般用于判断两
35、个或两个以上的条件是否同时成立。的条件是否同时成立。454 4)写出)写出|x|x|大于大于6.256.25的逻辑表达式。的逻辑表达式。-x6.25-x6.255 5)写出)写出x x、y y不同时为零的逻辑表达不同时为零的逻辑表达 x!=0|y!=0 x!=0|y!=0说明:说明: | | (逻辑或)一般用于判断两个或两(逻辑或)一般用于判断两个或两个以上的条件是否个以上的条件是否至少有一个成立至少有一个成立466)“6)“判断判断y y是闰年是闰年”。凡能被。凡能被4 4整除不能被整除不能被100100整除整除的是闰年或能被的是闰年或能被400400整除的是闰年整除的是闰年. . y%4=
36、0&y%100!=0 | y%400=0y%4=0&y%100!=0 | y%400=07) 7) 判断判断“x x、y y落在圆心落在圆心(0,0)(0,0)半径为半径为1 1的圆外和中的圆外和中心点为(心点为(0,00,0)边长为)边长为4 4的矩形内的矩形内”的表达式的表达式. .(0,0)(r2,0)(r1,0)(x,y)x x* *x+yx+y* *y1&x=-2&x=-2&y1&x=-2&x=-2&y、=、=关系运算关系运算5= =、!=关系运算关系运算6&逻辑与逻辑与7|逻辑或逻辑或8? :条件运算符条件运算
37、符3(三目运算符)(三目运算符)9自右向左自右向左=、+=、-=、*=、/=、%=赋值运算符赋值运算符2(双目运算符)(双目运算符)10,逗号运算符逗号运算符多目多目11自左向右自左向右480 x100 x10不同于不同于00 x&xx&x1010要判断一个变量的值是否在要判断一个变量的值是否在0 0到到1010之间,很自然想之间,很自然想到了这样一个表达式:到了这样一个表达式:scanf(%d,&ascanf(%d,&a); ); if(0a10)if(0a10) printf(%d,aprintf(%d,a); ); 编译通过编译通过, ,但是在运行的时候就
38、会出问题。但是在运行的时候就会出问题。仔细分析一下仔细分析一下ifif语句的运行过程语句的运行过程. .正确的写法应该是:正确的写法应该是:if(0if(0a)&(aa)&(a10)=0?1:1f=t=0?1:1; 求三个变量最大值求三个变量最大值 x x、y y、z z。 s= s=(s=xs=xy?x:yy?x:y) z?s:zz?s:z; 将字符变量将字符变量chch若为小写字母则改为大写字若为小写字母则改为大写字母,其余字符不变。母,其余字符不变。 chch=(=(chch=a&cha&ch= a=1,b=2,c=3,d=4; ab?a:cb?a:c d
39、?c:dd?c:d aab?a:(cb?a:(c d?c:dd?c:d) 结果为结果为4 452v例例3.10 3.10 输入三个数给变量输入三个数给变量a a,b b,c c后,按值从大后,按值从大到小输出到小输出#includevoid main( ) int a,b,c; int m,n,k; scanf(“%d%d%d”,&a,&b,&c); /输入输入 5 -8 7 m=ab?a:b; / m取取a、b中大数中大数m=mc?m:c; / m取取c、m中最大数中最大数n=ab?a:b; / n取取a、b中小数中小数 n=nc?n:c; / n取取c、n中最小数中
40、最小数 k=a+b+cmn; / 三个数的和减去最大、最小数,得中间数三个数的和减去最大、最小数,得中间数printf(%d %d %dn,m,k,n);输入:输入:5 -8 75 -8 7输出:输出: -8-8 531 1、逗号运算符、逗号运算符, (常用(常用 在在forfor语句中)语句中)2 2、逗号表达式、逗号表达式 表达式表达式1 1,表达式,表达式2 2,表达式,表达式n n功能:功能: 自左至右自左至右计算各表达式的值,并以计算各表达式的值,并以最后最后一个表达式的值一个表达式的值作为逗号表达式的值。作为逗号表达式的值。 如:a=2+4,3*5a a的值为,的值为,整个表达式整
41、个表达式的值为的值为54. .优先级和结合性优先级和结合性逗号运算符是所有运算符中级别最低的,运算逗号运算符是所有运算符中级别最低的,运算方向:从左向右方向:从左向右例例: : (,*) ,*3赋值表达式,将赋值表达式,将一个逗号表达式一个逗号表达式的值赋给,的值赋给,的值等于的值等于 逗号表达式,包括逗号表达式,包括一个赋值表达式和一个赋值表达式和一个算术表达式,一个算术表达式,的值为,整个的值为,整个逗号表达式的值为逗号表达式的值为18。 55 注意注意: :并不是任何地方出现的逗号都是作为逗号运算符。并不是任何地方出现的逗号都是作为逗号运算符。例如函数参数也是用逗号来间隔的。例如函数参数
42、也是用逗号来间隔的。如如: : printf(“%d,%d,%d”,a,b,cprintf(“%d,%d,%d”,a,b,c););“,”并不是一个逗并不是一个逗号表达式,它号表达式,它是是printf函数的函数的3个参数个参数printf(“%d,%d,%d”,(a,b,c),b,cprintf(“%d,%d,%d”,(a,b,c),b,c) ) ;“(,(,)”是一个是一个逗号表达式,逗号表达式,它的值等于它的值等于的值。的值。 563.5 3.5 多种类型混合运算多种类型混合运算C语言中,允许不同类型的数据进行混合运算,包括整型(int,short,long)、实型(float,doub
43、le)、字符型(char)数据都可以进行混合运算。例如:10+a+15-87651234 *b 是合法的。v在进行运算时,不同类型的数据要先转换成同一类型,然后再运算求值。57v表达式中数据类型的转换可分为两种:表达式中数据类型的转换可分为两种: 数据类型的隐式转换数据类型的隐式转换( (自动转换自动转换) ) 数据类型的强制转换数据类型的强制转换v类型转换在类型转换在C C中也属于一种运算。中也属于一种运算。58(1 1)自动转换)自动转换在进行算术运算过程中,两个参加运算的操在进行算术运算过程中,两个参加运算的操作数,在计算前先自动进行类型转换。作数,在计算前先自动进行类型转换。v 水平方
44、向:自动v 垂直方向:低 高 高 double float unsigned long long unsigned unsigned short 低 int char, short3.5.1 3.5.1 算术运算中的类型转换算术运算中的类型转换59例:例: A + 12A + 12 65 65 77 77 凡凡char, shortchar, short型一律自动转换成型一律自动转换成intint型,型, floatfloat一律转换成一律转换成doubledouble型,转换后若两操作型,转换后若两操作数类型相同,作算术运算,其结果类型与转换数类型相同,作算术运算,其结果类型与转换后的类型相
45、同。后的类型相同。1.5f1.5f* *4.2 4.2 1.5f1.5f转换为转换为doubledouble型,计算结果型,计算结果6.3 6.3 为为doubledouble型型60相同类型的操作数(除相同类型的操作数(除char, shortchar, short , floatfloat 型外)作算术运算的结果为同一类型。型外)作算术运算的结果为同一类型。例:两个整数的除法其结果一定是整数。例:两个整数的除法其结果一定是整数。 5/25/2结果为结果为2 2,-5/2-5/2结果为结果为-2-2。61不同类型的操作数或经规则不同类型的操作数或经规则1 1转换后仍然是转换后仍然是不同类型,
46、则低级别的自动转换成高级别的再不同类型,则低级别的自动转换成高级别的再运算,其结果类型与转换后的类型相同。运算,其结果类型与转换后的类型相同。 char shortintunsigned longunsigned longfloatdouble62 例例3.11 2.0f+5/23.11 2.0f+5/2* *3 3 2 2 6 6 2.0 6.0 2.0 6.0 8.0 8.0高 double float unsigned long long unsigned unsigned short 低 int char, short规则规则规则规则规则规则规则规则63v可以利用强制类型转换运算符将一个表达式可以利用强制类型转换运算符将一个表达式转换成所需类型。转换成所需类型。( (类型名类型名) ) 表达式表达式强制类型转换运算符优先级同+,高于算术运算符,从右向左如:(double)3(int)3.8(double)(5/2)(double)5/23.032.02.5(2 2)强制类型转换)强制类型转换64例例.12 #include void main( ) float ; int i; x=3.6; i=(int)x; printf(x=%f, i=%dn,x,i);n说明:强制类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人借款合同还款协议书样本
- 个人林地承包合同基础版
- 专业翻译服务合同(3)风险防范
- 砖渣运输费用合同
- 个人车辆入股合作合同2025
- 个人住房担保借款合同样本
- 个人合伙创业合同模板
- 中外能源领域合同(二)
- 业务合作框架合同样本
- 个人设备抵押借款合同范本
- 2023年河南省新乡市凤泉区事业单位招聘53人高频考点题库(共500题含答案解析)模拟练习试卷
- 2023年小升初简历下载
- 广府文化的奇葩
- 公路工程标准施工招标文件(2018年版)解析
- 炼钢厂增效降本攻关方案
- 七年级地理下册期末试卷(人教版)
- 第八节 元代散曲
- 《自动化专业导论》课程教学大纲
- 消防设施维护与日常检查培训讲义
- 良性阵发性位置性眩晕完整版本课件
- 典当业务计划方案
评论
0/150
提交评论