版权声明:本文转载于公众号TeachPlus---C语言面试题---逻辑短路问题

写出下面程序的输出

#include

int main()

{

int a=5,b=6,c=7,d=8,m=2,n=2;

(m=ad);

printf("%d\t%d",m,n);

return 0;

}

本题答案

答案为1,2

本题解析

本题的考察重点在于逻辑运算符的短路问题。

在逻辑判断中,常常需要判断多个条件,如:

if A and B;

这时,当A为false时,无论B值是什什么,结果都为false,

所以可以不用判断B,直接跳过。这种情况称为逻辑短路路。

逻辑短路有许多应用,如

if(name != NULL && name.equals("admin"))

{

//do somethings

}

这种情况下当name为null时,直接跳过判断name.equals("admin"),

如果没有短路路效应,后面是有可能报空指针异常的。

还有,满足某条件时执行函数

f != null && ff();

这样的语句,等价于

if  (f != null)

{

f();

}

但是写法更更为简练。

所以,对于本题来说,因为使用的是逻辑或运算符,

因此只要两个条件中有一个为真,则整体为

真,计算的时候先计算m=ad不予计算,故该程序的输出为1,2

相关知识点

如果对上面的程序作出如下修改:

# include

int  main()

{

int a=5,b=6,c=7,d=8,m=2,n=2;

(m=a>b)&&(n=c>d);

printf("%d\t%d",m,n);

}

则输出值为0,2

该题的迷惑性更为大一点,程序首先计算m=a>b的值,

因为a=4,b=6,所以a>b不成立,取值为0,

即m=0,整体表达式为假。因为使用的是逻辑与运算符,

必须两遍都为真,整体为真,所以当程序

判断一个条件为假的时候,则进行短路路操作,

第二个表达式不予就算,故该程序的整体输出为0,2.

接下来可以看一道更更为巧妙的面试题,这是微软的一道题目:

原题是:求 1 + 2 + 3 + … + n

要求:

不能用乘除法,不能用if if, while, do_while, for, switch, case,

不能用(a < b ? a : b)三目运算符

答案应为

# include

int  test( int n ,  int *sum)

{

n&& test(n-1,sum);

return *sum += n;

}

int  main()

{

int ret = 0;

test(100,&ret);

printf("%d\n",ret);

return 0;

}

如果没有那么多的限制的话,这是一道入门级的题目,但是正是因为有那么多的限制,

所以这道题目才变得有意思起来,这道题目主要考察两个方面,

一个是递归的使用,一个就是逻辑短路的使用了。

递归的使用是显而易见的,不再赘述,而对于逻辑短路来说,

用的就比较精妙了,大家可以看一下,作为参考。

c语言解逻辑问题的一般步骤,C语言面试题---逻辑短路问题相关推荐

  1. php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...

    导航:网站首页 > 解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序? 解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序? 相关问题: 匿 ...

  2. R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析、每个预测因子对响应变量的贡献

    R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析.每个预测因子对响应变量的贡献 目录

  3. 谈谈c语言程序如何变成可执行文件,C语言从代码变成可执行程序的步骤

    C语言从代码变成可执行程序的步骤: 预处理 -----> 编译 -----> 汇编 -----> 链接 ⒈预处理:去掉注释,加载头文件,代替宏定义,条件编译 需要文件:.c文件 生成 ...

  4. C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法

    偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...

  5. c语言运算符优先级 从右到左,c语言运算符优先级,结合性(左/右结合详解)

    重新翻了遍c语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题. 什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的? 本文将围绕这几个问题 ...

  6. 说明使用tc编程的一般步骤 c语言,TC语言程序设计.ppt

    很高兴跟同学们交朋友,集天下英才而教, 是人生最大的幸福.,2019/4/30,C++程序设计,3,主动学习.积极思维. 脑力锻炼.尝试成功! 2009年8月,c 程序设计,王 贺 明 郑州大学信息工 ...

  7. 数学在c语言编程中的历史,用计算机C语言编程解古代数学题

    用计算机C语言编程解古代数学题 C语言广泛的应用于基础软件.桌面系统.网络通信.音频视频.游戏娱乐等诸多领域.是世界上使用最广泛的编程语言之一本文由论文联盟http://www.LWlm.cOm收集整 ...

  8. c语言主界面设计菜单系统,c语言界面设计代码的操作步骤,你学会了吗

    学计算机的人都知道C语言,而这也是非常常用的一种计算机编程语言.其实c语言运用得当,完全可以编程很多设计代码,帮助你进行界面设计.今天就让小编为大家介绍c语言界面设计. c语言界面设计代码的操作步骤 ...

  9. [c语言]最小公倍数和最大公约数(详细步骤求解)

    [c语言]最小公倍数和最大公约数(详细步骤求解) 1.(求解前需知) 假定你有两个数a,b.首先,你需要了解的是 a*b=两者的最大公约数 * 最小公倍数. 也就是说你只要求解出其中一个,就可以得到另 ...

最新文章

  1. Linux中的简单文本处理
  2. 【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )
  3. FI功能增强业务说明书
  4. C++ 备忘录 ( 持续更新中... )
  5. 使用SysPrep制作Windows2008系统映像
  6. HTML如何添加锚点,分享一点面试小经验
  7. virtualbox 使用
  8. Android 系统(82)---ART 和 Dalvik
  9. mybatis-plus使用 generator 代码生成器生成实体类支持Swagger2
  10. Python:SyntaxError: unexpected EOF while parsing
  11. Android线程与ANR
  12. AS3 库资源 很多非常有用的类库
  13. 【锐捷无线】加密配置
  14. 74CMS模版注入漏洞复现
  15. 西安交通大学2022年计算机考研复试分数线预测
  16. Mysql优化之explain你真的会吗?
  17. 想做一个SSL代理的集群中,有很多问题需要解决,I am all grateful to you for your advice
  18. Java设计模式——桥接模式(Bridge)(容易,次要)
  19. 【Adobe】Photoshop :Windows 系统 Photoshop 软件更换许可指引
  20. C语言经典编程(浙大版C语言第三版)详解

热门文章

  1. 测试框架 Jest 实例教程
  2. 公共交通伸展城市智慧
  3. 只用jsp实现同样的Servlet功能
  4. 【CSS】选择器优先级
  5. SqlServer中存储过程中将Exec的执行结果赋值给变量输出
  6. Fedora再次安装手记--很爽的Wine工具
  7. yii2.0 下拉菜单
  8. 如何在10亿数中找出前1000大的数
  9. Java算法面试题 一个顺子带一对
  10. [哈夫曼树] Jzoj P4210 我才不是萝莉控呢