C语言——基本运算符及表达式

在C语言中几乎每一个程序都是需要进行运算的,对数据进行加工处理,否则程序就没有意义了。要进行运算,就需要规定可以使用的运算符。在了解具体的运算符之前,我们先了解以下三个术语和两个概念:

(1)运算符:参加各种运算的符号。(比如:+-*/ )

(2)操作数:参加具体运算的数据对象。(常量、变量、函数 比如:3+5、i-1)

(3)表达式:由运算符和操作数连接起来组成的式子。(比如:1+2+5、2*5-3、5/6)

优先级:是指在表达式中运算符的执行顺序。

结合性:指操作数与运算符结合的方向,分为左结合,右结合两种。左结合是指从左向右结合执行运算,右结合指从右向左结合执行运算。

一、算术运算符

1.1 单目运算符

就像-6,+3这种操作符两端只有一个操作数,就叫单目操作符。

运算符含义举例
+正号+5
-负号-5

注意:+ - 作为正负号时,具有较高优先级,要先进性运算。它的结合性为右结合。(所谓的右结合就是运算时从右往左) 

举例:已知 i=3,则 -i 的值等于多少?

解析:这时 i=3,则 -i 会先取i的值3,然后进行取负运算,得到的就是 -3。

1.2 双目运算符

就像 2+3 这种位于操作符两端共有两个操作数,这种操作符叫双目操作符。

运算符

含义举例
+加法运算符a+b
-减法运算符a-b
*乘法运算符a*b
/除法运算符a/b
%求余运算符a%b

1.2.1 +和-用来完成加减法

1  #include <stdio.h>

2  int main( )

3  {

4    int x = 6 +23 ;

5    int y = 61 - 17 ;

6    printf("%d\n",x);

7    printf("%d\n",y);

8    return 0;

9  }

1.2.2 运算符*用来完成乘法 

1  #include <stdio.h>

2  int main( )

3  {

4    int n = 5 ;

5    printf("%d\n",n * n);    //输出25

6    return 0;

7  }

1.2.3 运算符/用来完成除法

1  #include <stdio.h>

2  int main( )

3  {

4    int m = 6 / 3 ;

5    printf("%d\n",m);    //输出2

6    return 0;

7  }

 除号的两端都是整数的时候,计算的是整数除法,得到的结果也是整数。

1  #include <stdio.h>

2  int main( )

3  {

4    float n = 6 / 4 ;

5    printf("%f\n",  n);     // 输出1.000000

6    return 0;

7  } 

上面示例中,尽管 变量n的类型是float型,但是6/4得到的结果是1.0。这是因为在C语言里面的整数除法是整除,只会返回整数部分,而小数部分会被丢弃。

如果有人说我就是想要得到一个浮点数的结果,那怎么办呢?

1  #include <stdio.h>

2  int main( )

3  {

4    float n = 6.0 / 4 ;

5    printf("%f\n",  n);     // 输出1.500000

6    return 0;

7  } 

上面示例,如果希望得到的结果是浮点数,那么两个运算数必须至少有一个浮点数。

1  #include <stdio.h>

2  int main( )

3  {

4    float  n = 6 / 4.0 ;

5    printf("%f\n",  n);     // 输出1.500000

6    return 0;

7  } 

1.2.4 运算符%用来完成求模

运算符%表示求模运算,就是返回两个整数相除之后余数的值。

#include <stdio.h>

int main( )

{

   int x= 5 / 4 ;

   printf("%d\n",  x);     // 输出 1

   return 0;

} 

注意:

#include <stdio.h>

  int main( )

 {

     printf("%d\n",  13 % -3);       // 输出 1

     printf("%d\n",  -13 % -3);     // 输出 -1

     printf("%d\n",  -13 % 3);      // 输出 -1

     return 0;

 } 

二、 ++ 和 --

自增(减)表达式:根据自增(减)符号在变量旁边的位置,分别为前缀表达式和后缀表达式。

注意:自增自减只针对1个变量。

前缀表达式:++i ++j  --i  --j

后缀表达式:i++  j++  i-- j--

2.1 前置++

计算口诀:先加1,后使用

1   int a = 10 ;

2   int b = ++a ;       //相当于a=a+1;  b=a

3    printf("a=%d b=%d",a,b);     //a=11  b=11

 a的值是10,通过自增先+1,然后a=11,再使用就是赋值给b,b得到的值也是11。

2.2 后置++

计算口诀:先使用,后+1

1   int a = 10 ;

2   int b = a++ ;       //相当于a=b  a=a+1

3    printf("a=%d b=%d",a,b);     //a=11  b=10

a的值是10,先使用,就是先将a的值赋给b,b的值就是10,然后a再+1,a变成了11。 

2.3 前置--

计算口诀:先-1,后使用

1   int a = 10 ;

2   int b = --a ;       //相当于a-1  b=a-1

3    printf("a=%d b=%d",a,b);     //a=9  b=9

 a的值是10,通过自减先-1,然后a=9,再使用就是赋值给b,b得到的值也是9。

2.4 后置--

计算口诀:先使用,后-1

1   int a = 10 ;

2   int b = a --;       //相当于b=a  a=a-1

3    printf("a=%d b=%d",a,b);     //a=9  b=10

 a的值是10,先使用,就是先将a的值赋给b,b的值就是10,然后a再-1,a变成了9。

三、赋值运算符

在变量创建的时候给一个初始值叫初始化,在变量创建好后,再给一个值,这叫赋值。

3.1 简单赋值运算符:=

1   int  a = 10;   //初始化

2   a=20;          //赋值

赋值操作符 =  ,赋值号的左边只能是一个变量,不能是常量或是表达式。且赋值运算符结合性是右结合,即从右至左进行运算。 

3.2 复合赋值运算符

复合赋值运算符就是将算术运算符和赋值运算符结合在一起

+=-=*=/=%=

如:已知 int a = 5;

1   a=a+3        //相当于a+=3

2   a=a-3        //相当于a-=3

3   a=a*3       //相当于a*=3

4   a=a/3       //相当于a/=3

5   a=a%3    //相当于a%=3

当赋值符号左右两边数据类型不一致时,根据左边的变量类型,取右边的值

1   int a ; 

2   a=3.14;

3   a=?         //a=3  只取整

1   fioat a;

2   int b;

3   b=3;

4   a=b;

5   a=?        //a=3.0   存放为实数

四、关系运算符及表达式 

4.1 表达式

什么叫表达式真假?在C语言中,非0表示真,0表示假。

(1)从逻辑上看:

  • 表达式成立,则为真,用1表示
  • 表达式不成立,则为假,用0表示

如:3<5  ,表达式3确实小于5,表达式为真,用1表示

(2)从表达式的值看:

  • 表达式的值为0,则为假(0)
  • 表达式的值为真,则为真(1)

如:2%2,表达式的值为0,则表达式为假,用0表示

4.2 关系运算符

表示两值之间的大小关系的运算符就是关系运算符。

>大于运算符
<小于运算符
>=大于等于运算符
<=小于等于运算符
==相等运算符
!=不相等运算符

结合性:左结合

优先级:内部两级

<优先级相同(高)
>=
>
>=
==优先级相同(低)
!=

五、逻辑运算符

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面三个运算符:

&&与运算符,就是并且的意思
||或运算符,就是或者的意思
逻辑取反运算符

5.1 与运算符

&&(与运算符):两侧的表达式都为真,则为真,否则为假。

如:小杨请两名18岁的男生吃饭

两个条件同时满足,1是男性,2必须是18岁以上。

aba&&b

比如:6月份到8月份是春天,用代码怎么表示?

#include <stdio.h>
int main()
{
  int month = 0;
  scanf("%d",&month);
  if(month >= 6 &&month <= 8)
  {
    printf("summer\n");
  }
  return 0;
}

5.2 或运算符

||(或运算符):两侧的表达式只要有一个为真,整个表达式就是真。

如:小杨请两名男生或18岁的学生吃饭。

两个条件满足一个即可,男生或者18岁以上。

aba||b

比如:一年中12月或者1月或者2月是冬天,代码表示

#include <stdio.h>
int main()
{
 int month = 0;
 scanf("%d",&month);
 if(month == 12||month == 1||month == 2)
 {
  printf("%d\n",month);
 }
 return 0;
} 

5.3 非运算

!(非运算):逻辑取反

如:小杨请两名非男生学生吃饭。

男生的反,就是女生。

a!a

比如:有一个变量flag,如果flag为假,要做一个什么事情,代码就可以写成:

#include <stdio.h>
int main()
{
  int flag = 0;
  if(flag!=0)
  {
    printf("do something\n");
  }
  return 0;
}

例:输入一个年份,判断是否是闰年

闰年的判断规则:

  1. 能被4整除并且不能被100整除是闰年
  2. 能被400整除是闰年

#include <stdio.h>
int main()
{
	int year = 0;
	scanf("%d", &year);
	if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
		printf("%d是闰年\n", year);
	return 0;
}

注意:

短路现象:在逻辑表达式中,结果能确定后,后面的就不再运算。

例1:a && b && c 

  • a为假时,整个表达式的值都为假,b、c则不需要判断
  • a为真时,才判别b的值;a、b都为真时,才判别c的值

例2:a || b || c

  • a为真时,整个表达式的值都为真,则b、c不需要判断
  • a为假时,继续判断b的值;a、b都为假时,才判断c的值

六、条件运算符

条件运算符也叫三目操作符,需要接受三个操作数的,形式如下:

exp1 ? exp2 : exp3

条件运算符的计算逻辑是:

  • 如果exp1结果为真,执行exp2,计算的exp2的结果是整个表达式的结果;
  • 如果exp1为结果假,执行exp3,计算的exp3的结果是整个表达式的结果。

例:使用推荐运算符实现找两个数中较大值

#include ,<stdio.h>
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d%d",&a,&b);
  int m = (a>b ? a : b);
  printf("%d\n",m);
  return 0;
}

七、逗号运算符

逗号运算符:,

逗号表达式:由逗号分隔的多个表达式组合而成,包含的表达式称为子表达式。

格式:exp1,exp2,exp3[,...]

左结合:逗号表达式会从左向右依次计算。

逗号表达式的值:最后一个表达式的值为整个逗号表达式的值。

#include <stdio.h>
int main()
{
  int b = 0,c = 4;
  int a =(a=3,a+3,b=c*3,c=2*a+b)
  printf("a=%d\n",a)    //输出a=18
  return 0;
}

八、总结归纳各类运算符的优先级:

单目运算符>算术运算符>关系运算符>逻辑运算符(不包括!)>条件运算符>赋值运算符>逗号运算符

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值