C语言——运算符与表达式

知识点一:表达式

          1)什么是表达式:在C语言中,一个或多个运算对象与零个或多个运算符组成表达式;

例:

100
5 + 10
a / b
a * 10 / b + c

           2)表达式的结果:

printf("%d\n", 5 + 10);

运算符运算对象进行运算操作必然产生一个结果,因此每个表达式都有一个结果。例如上面的表达 式 5 + 10 的结果为15。

            3)表达式语句:

                  a)表达式后面加上分号构成表达式语句;

                  b)C语言中表达式不能单独存在,必须以表达式语句的形式存在;

例:

100;
5 + 10;
a / b;
a * 10 / b + c;

“但下面表达式5+10后面却没有分号”

printf("%d\n", 5 + 10);

#因为 5 + 10 是一个子表达式,函数名加上括号运算符,构成了一个函数调用表达式。 所以, 5 + 10 为函数调用表达式的子表达式,而函数调用表达式后面加了分号了。

#函数调用表达式也有一个表达式结果,这个结果就是函数的返回值了。

知识点二:加法运算符+

          1)+ 为加法运算符,它左右边各需要一个运算对象,构成 加法运算符表达式;

          2)表达式结果:加法表达式的结果为左右表达式结果相加;

int a, b;
a = 200;
b = 100;
a + b; // 表达式结果为300

知识点三:减法运算符—

          1)- 为减法运算符,它左右边各需要一个运算对象,构成 减法运算符表达式;

           2)表达式结果:减法表达式的结果为左右表达式结果相减;

int a, b;
a = 200;
b = 100;
a - b; // 表达式结果为100

知识点四:符号运算符 +、-

           1)+ 用于标明一个表达式的正负, - 用于改变一个表达式的正负;

           2)与加减运算符不同的是,它仅需要在运算符右边有一个运算对象;

           3)表达式结果:

                  a)+ 号表达式的结果为右边运算对象的值;

                  b)- 号表达式的结果为右边运算对象值的相反数;

+100; // 表达式结果为100
-100; // 表达式结果为-10

             4)用于改变表达式的正负:

int a = 100;
-a; // 表达式结果为-100

            5)请注意:+不能改变表达式的正负,请使用负负得正;

int a = -100; 
+a; // 表达式结果为-100 
-a; // 表达式结果为100

知识点五:乘法运算符 *

          1)* 为乘法运算符,它左右边各需要一个运算对象,构成 乘法运算符表达式;

          2)表达式结果:乘法表达式的结果为左右表达式结果相乘;

          3)* 是乘法运算符,注意不要误用为字母x;

int a, b;
a = 200;
b = 100;
a * b; // 表达式结果为20000

知识点六:除法运算符 /

           1)/ 为除法运算符,它左右边各需要一个运算对象,构成 除法运算符表达式 ;

           2)表达式结果:除法表达式的结果为左运算对象除以右运算对象;

int a, b;
a = 200;
b = 100;
a / b; // 表达式结果为2

           3)整型无法整除问题:

                 a)对于除法,请特别注意整型无法整除时,出现浮点类型数据的问题;

int a, b, c;
a = 5;
b = 2;
c = a / b;

#a 的值为 5 , b 的值为 2 。那么 5 除以 2 ,应该等于 2.5 。 但是,使用 int 来接收 2.5 好像不太对,那我们把 c 改为 float 或 double 。

int a, b;
a = 5;
b = 2;
float c;
c = a / b;
printf("%f\n", c);

 #显然结果依然不对

#在C语言里面,整型与整型运算的结果,依然是一个整型。结果的小数部分被丢弃,这一过程被称作截断。a / b后,结果仍然是一个整型,数值已经被截断了,这时候,我们再赋给一个浮点型的c。也只能 是整数2转成浮点2.0了,没有起到效果。

&那我们将a,b,c都改为float,这样就不会出现截断了。a,b将会进行浮点运算,结果也是一个浮点数类型float;

float a, b, c;
a = 5;
b = 2;
c = a / b;
printf("%f\n", c);

 知识点七:求余运算符 %

            1)% 为求余运算符,它左右边各需要一个运算对象,构成 求余运算符表达式 ;

            2)表达式结果:求余表达式的结果为左运算对象除以右运算对象的余数;

例如:10%3,10除以3,等于3余1

int a, b;
a = 10;
b = 3;
a % b; // 表达式结果为1

知识点八:赋值运算符 =

           1)= 为赋值运算符,它左右各需要一个运算对象,构成 赋值运算符表达式;

            2)赋值 表达式的结果为等号右边的运算对象的值;

            3)赋值表达式还会将等号右边运算对象的值,传递给左边的运算对象;

a = 100; // 赋值表达式语句

            4)赋值与初始化的区别:

int a = 100; // =表示初始化,不是赋值运算符
a = a + 150; // 赋值运算符,将右边的表达式结果赋值给左边的变量a。

在上面的代码中,第一行代码声明了一个变量a。请注意,声明变量时并将它初始化为100所用的 = 号, 不是赋值运算符,而是变量初始化。虽然初始化和赋值很像,但是 = 号左边并不是一个单纯的变量而是变量的声明。你可以借此来区别它们。

             5)求一个赋值表达式的结果:

表达式 a = a + 50 是一个复合表达式,先求得子表达式 a + 50 的结果,为150。再求表达式 a = 150 的 结果,即 150 。另外,赋值表达式除了计算出表达式的结果外,还会将 150 赋值给变量 a

              6)不能给常量赋值:给常量赋值是错误的,因为常量不能被更改;

"Hello" = "HelloWorld";
'a' = 'b';
100 = 200;

“以上赋值为错误方式”

知识点九:自增、自减运算符

          1)++ 为指自增运算符, -- 为自减运算符。它们仅需要运算符左边或右边有一个运算对象即可;

          2)运算符置于左边被称作前缀模式。例如: ++i --i ;

          3)运算符置于右边被称作后缀模式。例如: i++ i--;

          4)前缀模式:

#include <stdio.h>
int main()
{
int a, b;
a = 10;
b = 10;
printf("%d %d\n", ++a, --b);
printf("%d %d\n", a, b);
return 0;
}

              a)前缀模式表达式结果:

                    ++ 与右运算对象构成前缀自增表达式,表达式结果为运算对象值加1;

                    - - 与右运算对象构成前缀自减表达式,表达式结果为运算对象值减1;

              b)前缀模式对运算对象的操作:

                   自增表达式:将运算对象加1;

                   自减表达式:将运算对象减1;

       5)后缀模式:

#include <stdio.h>
int main()
{
int a, b;
a = 10;
b = 10;
printf("%d %d\n", a++, b--);
printf("%d %d\n", a, b);
return 0;

           a)后缀模式表达式结果:

                ++ 与左运算对象构成后缀自增表达式,表达式结果为运算对象值;

                -- 与左运算对象构成后缀自减表达式,表达式结果为运算对象值;

          b)后缀模式对运算对象的操作:

               自增表达式:将运算对象加1;

               自减表达式:将运算对象减1;

知识点十:一元运算符,二元运算符

           1)一元运算符:只有一个运算对象的运算符。例如:自增运算符 ++ ,自减运算符 -- ;

           2)二元运算符:有两个运算对象的运算符。例如:赋值运算符 = ,加法运算符 +;

知识点十一:运算符优先级

*C语言的四则运算符优先级和数学中的一致。先算括号里面的,先乘除后加减;

#include <stdio.h>
int main()
{
int a, b;
a = 10 * 2 + 4 * 3;
b = 10 * (2 + 4) * 3;
printf("%d %d", a, b);
return 0;
}

 

常用的运算符优先级
标记 操作符 类型 优先级
++  -- 自增,自减 前缀 16
++  -- 自增,自减 后缀 15
+  - 正号,负号 单目 15
* / % 乘,除,取余 双目 13
+ - 加,减 双目 12
= 赋值 双目 2

优先级越高的,在运算里面,需要被优先处理。例如:乘除优先级为13大于加减的12

猜你喜欢

转载自blog.csdn.net/m0_73463638/article/details/127190794