下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

C语言基础面面观之逻辑运算符

作者:课课家教育     来源: http://www.kokojia.com点击数:910发布时间: 2019-03-04 10:14:54

标签: 编程语言C语言逻辑运算符

大神带你学编程,欢迎选课

  在网络搜索中我们可以查到逻辑运算符的作用是在形式逻辑中,逻辑运算符或逻辑联结词把语句连接成更复杂的复杂语句。光了解了作用而含义却不明,那么逻辑运算符到底是什么呢?不用担心接下来课课家笔者给大家介绍C语言中的逻辑运算符。

  下面笔者给大家假设有这样一种情况,比如我们的软件要求用户必须成年且成绩大于等于60,或许大家会想到使用嵌套的if语句,具体类似为下面这样的代码:

  #include <stdio.h>

  int main()

  {

  int age;

  float score;

  printf("请输入你的年龄和成绩:");

  scanf("%d%f", &age, &score);

  if(age>=18){

  if(score>=60){

  printf("你满足条件,欢迎使用该软件\\n");

  }else{

  printf("抱歉,你的成绩不及格,不能使用该软件\\n");

  }

  }else{

  printf("抱歉,你还未成年,不能使用该软件!\\n");

  }

  return 0;

  }

  以上这种方法虽然能够行得通,但不够简洁和专业,其实我们可以将其压缩为一条ifelse语句,具体如下代码:

  #include <stdio.h>

  int main()

  {

  int age;

  float score;

  printf("请输入你的年龄和成绩:");

  scanf("%d%f", &age, &score);

  if(age>=18&&score>=60){

  printf("你满足条件,欢迎使用该软件\\n");

  }else{

  printf("抱歉,你还未成年,或者成绩不及格,不能使用该软件!\\n");

  }

  return 0;

  }

  &&是一个新的运算符,称为逻辑运算符,表示age>=18和score>=60两个条件必须同时成立才能执行if后面的代码,否则就执行else后面的代码。

  在高中数学中我们就学过逻辑运算,比如p为真命题,q为假命题,那么“p且q”为假,“p或q”为真,“非q”为真。在C语言中其实也有类似的逻辑运算(图1):

C语言基础面面观之逻辑运算符_编程语言_C语言_逻辑运算符_课课家教育

图1

  ◎逻辑运算的结果

  在编程中我们一般将零值称为“假”,将非零值称为“真”。逻辑运算的结果也只有“真”和“假”,“真”对应的值为1,“假”对应的值为0。

  ①与运算(&&)

  参与运算的两个表达式都为真时,结果才为真,否则为假。比如:

  5&&0

  5为真,0为假,相与的结果为假,也就是0。

  (5>0)&&(4>2)

  5>0的结果是1,为真,4>2结果是1,也为真,所以相与的结果为真,也就是1。

  ②或运算(||)

  参与运算的两个表达式只要有一个为真,结果就为真;两个表达式都为假时结果才为假。比如:

  10||0

  10为真,0为假,相或的结果为真,也就是1。

  (5>0)||(5>8)

  5>0的结果是1,为真,5>8的结果是0,为假,所以相或的结果为真,也就是1。

  ③非运算(!)

  参与运算的表达式为真时,结果为假;参与运算的表达式为假时,结果为真。比如:

  !0

  0为假,非运算的结果为真,也就是1。

  !(5>0)

  5>0的结果是1,为真,非运算的结果为假,也就是0。

  输出逻辑运算的结果:

  #include <stdio.h>

  int main(){

  int a = 0, b = 10, c = -6;

  int result_1 = a&&b, result_2 = c||0;

  printf("%d, %d\\n", result_1,!c);

  printf("%d, %d\\n", 9&&0,result_2);

  printf("%d, %d\\n", b||100,0&&0);

  return 0;

  }

  运行结果:

  0,0

  0,1

  1,0

  优先级

  逻辑运算符和其它运算符优先级从低到高依次为:

  赋值运算符(=)<&&和||<关系运算符<算术运算符<非(!)

  &&和||低于关系运算符,!高于算术运算符。

  按照运算符的优先顺序可以得出:

  a>b&&c>d等价于(a>b)&&(c>d)

  !b==c||d<a等价于((!b)==c)||(d<a)

  a+b>c&&x+y<b等价于((a+b)>c)&&((x+y)<b)

  另外,逻辑表达式也可以嵌套使用,比如a>b&&b||9>c,a||c>d&&!p。

  逻辑运算符举例:

  #include <stdio.h>

  int main(){

  char c = 'k';

  int i = 1, j = 2, k = 3;

  float x = 3e+5, y = 0.85;

  printf("%d,%d\\n",!x*!y,!!!x);

  printf("%d,%d\\n",x||i&&j-3,i<j&&x<y);

  printf("%d,%d\\n",i==5&&c&&(j=8),x+y||i+j+k);

  return 0;

  }

  运行结果:

  0,0

  1,0

  0,1

  在本例中!x!y分别为0,!x*!y也为0,故其输出值为0。由于x为非0,故!!!x的逻辑值为0。对x||i&&j-3式,先计算j-3的值为非0,再求i&&j-3的逻辑值为1,故x||i&&j-3的逻辑值为1。对i<j&&x<y式,由于i<j的值为1,而x<y0故表达式的值为10相与,最后为0,对i==5&&c&&(j=8)式,由于i==5为假,即值为0,该表达式由两个与运算组成,所以整个表达式的值为0。对于式x+y||i+j+k由于x+y的值为非0,故整个或表达式的值为1

  本次C语言基础面面观之逻辑运算符的教程对大家的思维转换要求比较高,大家可能需要多钻研几遍才能转换过来。另外以后如果有补充的话笔者会在此继续补充,希望这个教程对大家学习C语言能起到一定的帮助作用!

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程