c语言+=运算符,c语言计算5!
C语言中运算符和表达式的数量在高级语言中很少见。正是丰富的运算符和表达式使得C语言的功能更加完善。这也是C语言的主要特点之一。
C语言的表达式由运算符、常数和变量组成。c语言表达式基本遵循一般的代数规则。常数和变量可以参与加减乘除,如1 ^ 1,hour-1,hour * 60 minute,minute/60等。这里,-*/称为运算符,而运算中涉及的变量和常数称为操作数,由运算符和操作数组成的上述四个公式称为表达式。
C语言的运算符不仅优先级不同,还有一个特点,就是它的组合。在表达式中,每个操作数参与运算的顺序既要遵守运算符优先级的规则,又要受到运算符组合的限制,从而决定是从左向右还是从右向左进行运算。这种组合在其他高级语言的运算符中是没有的,所以也增加了C语言的复杂度。
算术运算符和算术表达式
1.基本算术运算符
名字
标志
解释
加法算子
加法运算符是双目运算符,即两个量要参与加法运算。比如a b,4 8等。通过正确的组合。
减法运算符
-
减法算子是双目算子。但是,“-”也可以作为否定算子,这种情况下是单目运算。比如-x,-5等。是左关联的。
乘法运算符
*
双目操作,左组合。
除法算符
/
双目操作有左组合。当涉及的所有操作数都是整数时,结果也是整数,去掉了小数。如果其中一个操作数是实数,则结果是双精度实数。
补数算子
%
双目操作,左组合。运算中涉及的所有量都要求是整数。余数运算的结果等于两个数相除后的余数。
操作的一个示例:
# include stdio . h # include stdlib . h int main(){ printf( % d,%d\n ,20/7,-20/7);printf(%f,%f\n ,20.0/7,-20.0/7);系统(“暂停”);return0}
运行结果:
在本例中,20/7和-20/7的结果都是整数,所有小数都被截断。但是20.0/7和-20.0/7是实数,所以结果是真实的。
2.算术表达式和运算符的优先级和组合
表达式是常量、变量、函数和运算符的组合。一个表达式有一个值和它的类型,等于计算该表达式的结果的值和类型。表达式按照运算符的优先级和结合性指定的顺序进行计算。单个的常数、变量和函数可以看作表达式的特例。
运算符的优先级:在C语言中,运算符的优先级分为15级。1年级最高,15年级最低。在表达式中,较高的优先级优先于较低的优先级。当一个操作数两边的运算符优先级相同时,按照运算符组合指定的组合方向进行处理。
运算符的组合:C语言中运算符有两种组合,即左组合(从左到右)和右组合(从右到左)。比如算术运算符的组合是从左到右,即先左后右。如果有一个表达式x-y z,那么Y要和“-”号结合起来进行x-y运算,然后进行Z运算。这种从左到右的组合方向称为“左组合”。从右到左的组合方向称为“右组合”。最典型的右关联运算符是赋值运算符。如果x=y=z,由于“=”的正确组合,y=z应该在x=(y=z)运算之前进行。许多C语言运算符都有正确的组合,所以我们应该注意它们之间的区别,以免产生误解。
3.强制类型转换运算符
它的一般形式是:
(类型说明符)(表达式)
它的作用是将表达式的运算结果强制转换成类型描述符所表示的类型。例如:
(float)a;/*将A转换为实数类型*/(int)(x y);/*将x y的结果转换为整数*/
4.自增自减运算符
自动递增和自动递减运算符:自动递增运算符标记为“”,其作用是将变量的值自动递增1;自减运算符标记为“-”,其作用是将变量值减1。自我增值和自我销售
I:我先加1再参与其他操作。
-I:我会减1再参与其他操作。
I: I参与运算后,I的值会增加1。
I-:我参与运算后,I的值会减1。
是我和我-在理解和运用上容易出错。尤其是出现在复杂的表达式或语句中,往往难以理解,要仔细分析。
举个例子:
# include stdio . h # include stdlib . h int main(){ inti=8;printf(%d\n ,I);printf(%d\n ,-I);printf(%d\n ,I);printf(%d\n ,I-);printf(%d\n ,-I);printf(%d\n ,-I-);系统(“暂停”);return0}
运行结果:
I的初始值是8,I加1后第2行的输出是9;第3行的输出减去1后是8;在第4行的输出I为8后加1(9);第5行的输出I是9,然后减去1(8);在第6行的输出-8后加1 (9),在第7行的输出-9后减1 (8)。
赋值运算符
简单赋值操作符和表达式:简单赋值操作符标记为“=”。由“=”连接的公式称为赋值表达式。它的一般形式是:
变量=表达式
例如:
x=a bw=sin(a) sin(b)y=i - j
赋值表达式的作用是计算表达式的值,然后赋给左边的变量。赋值运算符具有右结合性。因此,a=b=c=5可以理解为a=(b=(c=5))
在其他高级语言中,赋值构成一个语句,称为赋值语句。在C中,“=”被定义为一个运算符,从而形成一个赋值表达式。赋值表达式可以出现在表达式出现的任何地方。
比如公式x=(a=5) (b=8)是合法的。它的意思是给A 5,给B 8,把A和B相加,给X,那么X应该等于13。
在C语言中,也可以形成赋值语句。根据C语言的规定,任何以分号结尾的表达式都是语句。因此,x=8;a=b=c=5;它们都是赋值语句,我们在前面的例子中用了很多。
类型变换
如果赋值运算符两边的数据类型不同,系统会自动进行类型转换,即将赋值号右边的类型改为左边的类型。具体规定如下:
实数类型被赋予整数类型,小数部分被丢弃。前面的例子已经说明了这种情况。
给整数一个实数类型,值不变,但会存储为浮点,也就是加小数部分(小数部分的值为0)。
字符类型被赋予整数类型。因为字符类型是一个字节,整数类型是两个字节,所以字符的ASCII码值放在整数的低八位,高八位是0。给整数字符类型,只给低八位字符量。
例如:
# include stdio . h # include stdlib . h int main(){ inta,b=322floatx,y=8.88charc1=k ,C2;a=y;x=b;a=c1C2=b;printf(%d,%f,%d,%c \n ,a,x,a,C2);系统(“暂停”);return0}
运行结果:
此示例显示了上述赋值操作中的类型转换规则。a是整数,实数Y取值8.88后只取整数8。x是实数类型,整数B被赋予322的值,之后加上小数部分。字符量c1给A一个整数,整数量B给c2然后取其低八位成为字符类型(B的低八位是01000010,即十进制66,根据ASCII码对应字符B)。
复合赋值运算符
在求值器“=”前加上其他二元运算符,可以构成一个复合求值器。如=、-=、*=、/=、%=、=、=、=、=、=
复合赋值表达式的一般形式是:
双目操作员=表情
它相当于
变量=变量运算符表达式
例如:
A=5相当于a=a 5
X*=y 7等价于x=x*(y 7)
R%=p等价于r=r% p。
复合赋值的编写对于初学者来说可能比较陌生,但是对于编译来说是非常有益的,可以提高编译效率,产生高质量的目标代码。
逗号“,”在C语言中也是一个运算符,称为逗号运算符。它的作用是将两个表达式连接起来形成一个表达式,称为逗号表达式。它的一般形式是:
表达式1,表达式2
求值过程是分别求两个表达式的值,取表达式2的值作为整个逗号表达式的值。
例如:
# include stdio . h # include stdlib . h int main(){ inta=2,b=4,c=6,x,y;y=(x
在这个例子中,y等于整个逗号表达式的值,即表达式2的值,x是第一个表达式的值。对于逗号表达式,应注意三点:
逗号一般形式的表达式1和2也可以是逗号表达式。例如:
表达式1,(表达式2,表达式3)
形成了嵌套的局面。因此,逗号表达式可以扩展为以下形式:
表达式1,表达式2,…表达式n
整个逗号表达式的值等于表达式n的值。
在程序中使用逗号表达式时,通常需要单独找到逗号表达式中每个表达式的值,而不一定是整个逗号表达式的值。
逗号表达式不是在所有出现逗号的地方都形成。例如,在变量描述中,函数参数表中的逗号仅用作变量之间的分隔符。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。