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

    作者:课课家教育更新于: 2016-12-08 17:14:01

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

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

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

      #include

      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

      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

      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&&x+yc)&&((x+y)

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

      逻辑运算符举例:

      #include

      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

      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式,由于i的值为1,而x0故表达式的值为10相与,最后为0,对i==5&&c&&(j=8)式,由于i==5为假,即值为0,该表达式由两个与运算组成,所以整个表达式的值为0。对于式x+y||i+j+k由于x+y的值为非0,故整个或表达式的值为1

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

课课家教育

未登录

1