【C语言初阶】带你轻松玩转所有常用操作符(3)——关系操作符,逻辑操作符,条件操作符,逗号表达式

简介: 【C语言初阶】带你轻松玩转所有常用操作符(3)——关系操作符,逻辑操作符,条件操作符,逗号表达式
  • 在正式开始之前,我们还是借助一张思维导图帮助大致简单回忆一下有关操作符的基础内容

  • 今天咱们接着单目操作符后朝下讲

一.关系操作符

>
>=
<
<=
!=  用于测试“不相等”
==    用于测试“相等”

这些关系运算符比较简单,没什么可讲的,但是我们要注意一些运算符使用时候的陷阱。

比如下面的代码:

#include<stdio.h>
//判断并在屏幕上打印闰年
int main()
{
  int y = 0;
  scanf("%d", &y);
  //1. 能被4整除,并且不能被100整除
  //2. 能被400整除是闰年
  if (((y % 4 = 0) && (y % 100 != 0)) || (y % 400 == 0))
  {
    printf("闰年\n");
  }
  else
  {
    printf("不是闰年\n");
  }
  return 0;
}

我们这段代码中,想要判断的是输入的年数是否能被4整除,但是注意这里:

if (((y % 4 = 0) && (y % 100 != 0)) || (y % 400 == 0))

我们在这里由于不小心把”y%4==“0写成了把0的值赋给y%4,此时程序连编译器都过不去。

55041cc37da7428bb8f058643621db05.png

警告:


在编程的过程中== 和=不小心写错,导致的错误

良好的代码风格

注意,在某些情况下,类似“==”和“=”用错时,编译器是不会报错的。

int main()
{
  int x = 0;
  if (x = 1)
  {
    printf("HEHE\n");
  }
  else
    printf("haha\n");
  return 0;
}

c8a446a91feb4f38bc2f4bc32e69f802.png


我们这里x初始化的值是0,应该打印“haha”,但是由于我们错误的将“==”写成“=”,

所以导致错误的打印“HEHE”,编译器此时并没有报错,因为从逻辑上来说这段代码并没有错,那此时我们怎样修改代码能使编译器提醒我们此时代码存在错误呢?

int main()
{
  int x = 0;
  if (1=x)
  {
    printf("HEHE\n");
  }
  else
    printf("haha\n");
  return 0;
}

ce437c11819b43c6b29537ab51c0344f.png

我们可以调换左右数的位置,由于我们不可能把一个变量的值赋给一个常量,因此我们就可以通过这样的方式来提醒我们代码是否有误

正确的代码

int main()
{
  int x = 0;
  if (1==x)
  {
    printf("HEHE\n");
  }
  else
    printf("haha\n");
  return 0;
}

595956e62a6e492e898efd6c76bc8600.png

像上述这种只需要通过简单的修改就能帮助我们找到代码中可能出现的bug无疑就是良好的代码风格!!

二.逻辑操作符

逻辑操作符有哪些:

&&   逻辑与
||   逻辑或

区分逻辑与和按位与

区分逻辑或和按位或

1&2----->0//按位与作用与二进制补码,对应二进制位数都为1才为1,否则为0
1&&2---->1//一般作用于两边的条件,当两边的条件都i为真时才为真,否则为假
1|2----->3//按位或也是作用于二进制补码,对应二进制位数只要有一个为1就为1,只有两个同时为0才为0
1||2---->1//逻辑与两边条件只要有一个为真就为真,只有都为假才是假

关于按位与,按位或等的位操作符知识我在第一篇操作符详解中已经讲过了,感兴趣的可以看看以下链接:

【C语言初阶】带你轻松玩转所有常用操作符(1) ——算数操作符,移位操作符,位操作符

逻辑操作符应用面试题实例

下面举一道大厂的相关面试题来加深大家对逻辑操作符的印象。

代码如下:

#include <stdio.h>
int main()
{
  int i = 0,a=0,b=2,c =3,d=4;
  i = a++ && ++b && d++;
  printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
  return 0;
  }

试判断一下上述程序运行起来的结果:

0646faf7e3f942ffb338b16d46bdd687.png

为什么?

们说了,逻辑与只要有一个条件不满足条件,则为假,此时当程序运行到a++时,由于是后置++,a此时等于0,等于0就是为假的意思,该行代码不再朝下继续运行下去直接停止,此时只有a后置加了个1,bcd的值则不变,因此出现上述打印的结果。

那代码如果是这样呢?

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

这段代码的结果又是如何呢?


76cae6d0f74140918ef35b339ca4b45d.png

这又是为啥?


我们知道,逻辑或是只要||两边有一个条件满足则为真,我们带入此时a=0;此时后置++,传入的依旧是0为假,逻辑或继续朝下运行,前置++b,此时b=3,为真,逻辑或就不再朝下运行了,此时只有a和b的值加了1其余则为原数,因此打印的是屏幕上的结果。


通过上述两个面试题的例子,我相信你对逻辑操作符应该有了你自己的见解,那我们继续朝下学习。


三.条件操作符

exp1 ? exp2 : exp3//判断表达式1真假,条件如果为真,则执行表达式2,如果为假,则执行表达式3

因此上面的代码用if也可以实现

    if(exp1)
    exp2;
    else
    exp3;

举个简单的代码例子吧

int main()
{
  int a = 0;
  int b = 0;
  if (a > 5)
    b = 3;
  else
    b = -3;
  return 0;
}

用条件操作符实现;

int main()
{
   int a=0;
   int b=0;
//(a > 5) ? (b = 3) : (b = -3);
  b = ((a > 5) ? (3) : (-3));//与上一行代码两者等价
  return 0;
}

逗号表达式

exp1, exp2, exp3, …expN

逗号表达式,就是用逗号隔开的多个表达式。

逗号表达式,从左向右依次执行。整个表达式的结果是最后一个表达式的结果。

举几个示例代码

int main()
{
   //代码1
  int a = 1;
  int b = 2;
  int c = (a > b, a = b + 10, a, b = a + 1);//逗号表达式
  printf("%d\n", a);
  printf("%d\n", b);
  printf("%d\n", c);
  //代码2
   //if (a = b + 1, c = a / 2, d > 0)
   //代码3
  //a = get_val();
  //count_val(a);
  //while (a > 0)
  //{
  //  
  //    //业务处理
  //    a = get_val();
  //  count_val(a);
  //}
  //如果使用逗号表达式,改写:
  //while (a = get_val(), count_val(a), a > 0)
  return 0;
}

如果你对上述代码的理解有问题,不妨自己试着去运行一下哦!,这里就不细讲了。

总结

今天的内容暂时到这里就结束了,我们今天讲了有关 关系操作符,逻辑操作符,条件操作符以及逗号表达式的应用以及易错点。如果你还有所困惑不妨自己动手实操一下,这方面的知识是需要记忆的,咱们必须反复的练习才能熟悉起来!

以上就是关于操作符的第三部分内容,后面其他的操作符应用详解会在近期分批次更新,敬请期待!!

好了,如果你有任何疑问欢迎在评论区或者私信我提出,大家下次再见啦!

新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下这个新人博主再走呗。你们的支持就是我更新的动力!!!


**(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)**


20fa3306e76244de9879742c165c792a.gif


目录
相关文章
|
2月前
|
C语言
【C语言】逻辑操作符详解 - 《真假美猴王 ! 》
C语言中有三种主要的逻辑运算符:逻辑与(`&&`)、逻辑或(`||`)和逻辑非(`!`)。这些运算符用于执行布尔逻辑运算。
93 7
|
2月前
|
存储 网络协议 C语言
【C语言】位操作符详解 - 《开心消消乐》
位操作符用于在位级别上进行操作。C语言提供了一组位操作符,允许你直接操作整数类型的二进制表示。这些操作符可以有效地处理标志、掩码、位字段等低级编程任务。
122 8
|
2月前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
3月前
|
存储 算法 C语言
用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容
本文探讨了用C语言开发游戏的实践过程,包括选择游戏类型、设计游戏框架、实现图形界面、游戏逻辑、调整游戏难度、添加音效音乐、性能优化、测试调试等内容,旨在为开发者提供全面的指导和灵感。
93 2
|
4月前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
68 10
|
4月前
|
存储 编译器 C语言
初识C语言5——操作符详解
初识C语言5——操作符详解
214 0
|
4月前
|
编译器 C语言 C++
【C语言】精妙运用内存函数:深入底层逻辑的探索
【C语言】精妙运用内存函数:深入底层逻辑的探索
|
存储 C语言
如何深入掌握C语言操作符及表达式求值(详解)(三)
本文章主要讲解点: ​​​​​​​各种操作符的介绍 表达式求值
如何深入掌握C语言操作符及表达式求值(详解)(三)
|
C语言 索引
如何深入掌握C语言操作符及表达式求值(详解)(二)
本文章主要讲解点: ​​​​​​​各种操作符的介绍 表达式求值
|
C语言
如何深入掌握C语言操作符及表达式求值(详解)(一)
本文章主要讲解点: ​​​​​​​各种操作符的介绍 表达式求值
如何深入掌握C语言操作符及表达式求值(详解)(一)

热门文章

最新文章