奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> C语言 >> C语言基础(06-逻辑运算符和逻辑表达式)
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • Tomcat5.0.28下AXIS完

  • JSP环境的配置过程(J

  • 用JAVA写一个日志类程

  • 高质量C++/C编程手册完

  • 菜鸟问与答(怎样产生随

  • 怎样在一个程序后面运

  • Linux下面如何进行C语

  • C语言漫谈

  • C语言基础(06-逻辑运算符和逻辑表达式)
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-21

    C语言基础(06-逻辑运算符和逻辑表达式):
        逻辑运算符把各个运算的变量(或常量)连接起来组成一个逻辑表达式。
    逻辑运算符有4个,它们分别是: !(逻辑非)、 ||(逻辑或)、&&(逻辑与) ^(异或)。在位运算里面还有 &(位与)、|(位或)的运算。
      
    什么是逻辑运算--逻辑运算用来判断一件事情是“对”的还是“错”的,或者说是“成立”还是“不成立”,判断的结果是二值的,即没有“可能是”或者“可能不是”,这个“可能”的用法是一个模糊概念,在计算机里面进行的是二进制运算,逻辑判断的结果只有二个值,称这二个值为“逻辑值”,用数的符号表示就是“1”和“0”。其中“1”表示该逻辑运算的结果是“成立”的,如果一个逻辑运算式的结果为“0”,那么这个逻辑运算式表达的内容“不成立“。
    例 1:通常一个教室有二个门,这二个门是并排的。要进教室从门A进可以,从门B进教室也行,用一句话来说是“要进教室去,可以从A门进‘或者’从B门进”
    用逻辑符号来表示这一个过程--能否进教室用符号C表示,教室门分别为A和B。C的值为1表示可以进教室,为0 表示进不了教室。A和B的值为1时表示门是开的,为0表示门是关着的,列表如下:

    说明CAB
    2个教室的门都关着,进不去教室000
    门B是开着的,可以进去101
    门A是开着的,可以进去110
    门A和B都是开着的,可以进去111

    把表中的过程写成逻辑运算就是: C = A || B  这就是一个逻辑表达式,它是一个“或”运算的逻辑表达式。这个表达式要表达的是这个意思--如果要使得C为1,只要 A“或”B其中之一为 1即可以达到。所以“||”运算称为“或”运算。
    思考--如果有一个表达式 C = A || B || C 怎样理解这个逻辑表达式?

    例 2:假设一个房间外面有一个晒台,那么这个房间就纵向开着二个门,要到晒台去,必须要过这二个门,很明显这二个门必须都是开着的才行,否则只要其中一个门关着就去不了晒台。列表如下:

    说明CAB
    二个门都关着,去不了晒台000
    门A关着,去不了晒台001
    门B关着,去不了晒台010
    门A与门B都开着,可以去晒台111

    把表中的过程写成逻辑运算式就是: C = A && B && C ,用一句话来描述这个表达式--如果要使得C为1,必须A‘与’B都为1才行,否则其中任一个为0,C就为0。所以“&&”运算符称为“与”运算。
    思考--如果有一个表达式 C = A && B && C 怎样理解这个逻辑表达式?

    例 3:有一个问题如下,有一个晚会,对参加晚会的人有一定的条件限制,教师可以参加,学生当中只有年龄达到16岁以上的男生才能参加,怎样用上面所讲的逻辑运算来表达这样的逻辑关系?
    设能够参加晚会为D,教师为A,男生为B,16岁以上为C,可以用下式来描述:
    D = A || ( B && C )   /*这个表达式可以理解吗,可以参照上面表格用0、1来写一下*/

    例 4:下面是一个程序,用到了if判断语句(if是如果的意思)
    #include<stdio.h>
    void main()
    {
        int a=0,b=0,c=0;
        scanf("%d%d%d",&a,&b,&c);     /*从键盘输入参加者的条件*/
        if((a||(b&&c))               /*如果是教师或者是16岁以上的男生*/
            printf("你可以参加这个晚会。");   /*输出可以参加的信息*/
        else                                  /*否则*/
            printf("你不能参加这个晚会。");   /*输出不能参加的信息*/
    }

    逻辑量和逻辑值
    在逻辑表达式里有参加逻辑运算的逻辑量及逻辑运算最后的结果(逻辑值),把这二个概念区分开来和记住它们是很重要的。
    什么是逻辑量--凡是参加逻辑运算的变量、常量都是逻辑量。
    我们来仔细分析一下哪些是逻辑量,哪些是逻辑值。
    要表达一件事情是否成立是这样描述的:“如果他来了,这件事情一定能成功”。用程序语句描述就是 if(a!=0)在这个语句里用变量a来表示他来与不来这件事,变量的值为1说明他来了,为0就是不来。在C语言中,一般不写成这样(如果一定要写成if(a!=0),别人一看你的程序就知道你是编程菜鸟),而是写成 if(a)。括号里面的变量a就是逻辑量。当该逻辑量的逻辑值为1时,if表达式为真,这时可以执行if 后的的程序语句。当该逻辑量的逻辑值为0时,if表达式为假,就不能执行if后面的程序语句。可以看出,if表达式能否成立是要看“逻辑量”最后的“逻值值”是否为1来判断的。
    什么是逻辑值--逻辑量、逻辑表达式其最后的运算结果的值就是逻辑值。逻辑值只能是“0”和“1”这二个数。“1”表示逻辑真(成立);“0”表示逻辑假(不成立)。
    一切非“0”的逻辑量其逻辑值都为真。正确理解这句话很重要。例:if(-1),这一句可以这样来分析--首先“-1”是一个非“0”的逻辑量,它的逻辑值为“1”,那么这个if语句就成为 if(1),这个if表达式成立。

    思考:下面的式子中,哪个语句不被执行
     int a=0,b=10; if(a) {b++;a++}  a+=10; if(b) {a=10;b=-10;} if(b)a=0;

    C语言中进行逻辑运算时要注意的问题:
    例1:
    现在要判断一个变量的值是否在12到30之间,很自然想到了这样一个表达式:
    scanf("%d",&a);
    if(12<a<30)     /*这样的写法对吗*/
        printf("%d".a);    
    把这样的语句放在程序里编译一下,没有什么不正常的,编译通过。
    但是在运行的时候就会出问题。下面仔细分析一下if语句的运行过程:
    表达式12<a<30中首先进行12<a的判断,如果a>12则为真,否则为假。设a的值为14,些时表达式结果为逻辑真,那么整个表达式if(12<a<30)成为if(1<30)(注意这个新的表达式中的1是12<a的逻辑值),这时问题就出现了,可以看到当变量a的值大于12的时候总有1<30,所以后面的<30这个关系表达式是多余的了。另外假设a的值小于12也会出现这样的情况。由些看来这样写法肯定是错的。
    正确的写法应该是:
    if((12<a)&&(a<30))  /*如果变量a的值大于12并且小于30*/
    这样不但编译通过,运行结果也是对的了。

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.