【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语言中,高级的判断逻辑技巧能显著提升代码的可读性、灵活性和效率。本文介绍了六种常见方法:1) 函数指针,如回调机制;2) 逻辑运算符组合,实现复杂条件判断;3) 宏定义简化逻辑;4) 结构体与联合体组织复杂数据;5) 递归与分治法处理树形结构;6) 状态机管理状态转换。通过这些方法,可以更高效地管理和实现复杂的逻辑判断,使代码更加清晰易懂。
229 88
|
3月前
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
74 0
|
3月前
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
254 0
|
26天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
34 10
|
1月前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
160 1
|
1月前
|
存储 编译器 C语言
初识C语言5——操作符详解
初识C语言5——操作符详解
171 0
|
1月前
|
编译器 C语言 C++
【C语言】精妙运用内存函数:深入底层逻辑的探索
【C语言】精妙运用内存函数:深入底层逻辑的探索
|
1月前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
33 3
|
C语言
《啊哈C语言!逻辑的挑战(修订版)》| 每日读本书
“用编程轻松提升逻辑力!每个人都应该学习如何编程,因为它教会你如何思考。——史蒂夫.乔布斯” 。每日搜罗最具权威专业书籍,更多图书请关注“每日读本书”。
3253 0
|
6天前
|
C语言
c语言调用的函数的声明
被调用的函数的声明: 一个函数调用另一个函数需具备的条件: 首先被调用的函数必须是已经存在的函数,即头文件中存在或已经定义过; 如果使用库函数,一般应该在本文件开头用#include命令将调用有关库函数时在所需要用到的信息“包含”到本文件中。.h文件是头文件所用的后缀。 如果使用用户自己定义的函数,而且该函数与使用它的函数在同一个文件中,一般还应该在主调函数中对被调用的函数做声明。 如果被调用的函数定义出现在主调函数之前可以不必声明。 如果已在所有函数定义之前,在函数的外部已做了函数声明,则在各个主调函数中不必多所调用的函数在做声明
22 6