c语言解逻辑问题的一般步骤,C语言面试题---逻辑短路问题
版权声明:本文转载于公众号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语言面试题---逻辑短路问题相关推荐
- php编写解一元一次方程,解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序?...
导航:网站首页 > 解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序? 解释C语言(逐句) 解一元一次方程的 怎样用C语言编一个解一元二次方程的程序? 相关问题: 匿 ...
- R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析、每个预测因子对响应变量的贡献
R语言glm拟合logistic回归模型实战:基于glm构建逻辑回归模型及模型系数统计显著性分析.每个预测因子对响应变量的贡献 目录
- 谈谈c语言程序如何变成可执行文件,C语言从代码变成可执行程序的步骤
C语言从代码变成可执行程序的步骤: 预处理 -----> 编译 -----> 汇编 -----> 链接 ⒈预处理:去掉注释,加载头文件,代替宏定义,条件编译 需要文件:.c文件 生成 ...
- C语言编程统计八皇后问题的解的个数,八皇后问题C语言解法
偶遇八皇后问题,随即自己写了一个仅供参考 #include #include #define SIZE 8 void Circumsribe(int(*checkerboard)[SIZE], int ...
- c语言运算符优先级 从右到左,c语言运算符优先级,结合性(左/右结合详解)
重新翻了遍c语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题. 什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的? 本文将围绕这几个问题 ...
- 说明使用tc编程的一般步骤 c语言,TC语言程序设计.ppt
很高兴跟同学们交朋友,集天下英才而教, 是人生最大的幸福.,2019/4/30,C++程序设计,3,主动学习.积极思维. 脑力锻炼.尝试成功! 2009年8月,c 程序设计,王 贺 明 郑州大学信息工 ...
- 数学在c语言编程中的历史,用计算机C语言编程解古代数学题
用计算机C语言编程解古代数学题 C语言广泛的应用于基础软件.桌面系统.网络通信.音频视频.游戏娱乐等诸多领域.是世界上使用最广泛的编程语言之一本文由论文联盟http://www.LWlm.cOm收集整 ...
- c语言主界面设计菜单系统,c语言界面设计代码的操作步骤,你学会了吗
学计算机的人都知道C语言,而这也是非常常用的一种计算机编程语言.其实c语言运用得当,完全可以编程很多设计代码,帮助你进行界面设计.今天就让小编为大家介绍c语言界面设计. c语言界面设计代码的操作步骤 ...
- [c语言]最小公倍数和最大公约数(详细步骤求解)
[c语言]最小公倍数和最大公约数(详细步骤求解) 1.(求解前需知) 假定你有两个数a,b.首先,你需要了解的是 a*b=两者的最大公约数 * 最小公倍数. 也就是说你只要求解出其中一个,就可以得到另 ...
最新文章
- Linux中的简单文本处理
- 【错误记录】应用运行 CPU 占用率达到 90% ( 使用 CPU Profiler 监控应用运行情况 )
- FI功能增强业务说明书
- C++ 备忘录 ( 持续更新中... )
- 使用SysPrep制作Windows2008系统映像
- HTML如何添加锚点,分享一点面试小经验
- virtualbox 使用
- Android 系统(82)---ART 和 Dalvik
- mybatis-plus使用 generator 代码生成器生成实体类支持Swagger2
- Python:SyntaxError: unexpected EOF while parsing
- Android线程与ANR
- AS3 库资源 很多非常有用的类库
- 【锐捷无线】加密配置
- 74CMS模版注入漏洞复现
- 西安交通大学2022年计算机考研复试分数线预测
- Mysql优化之explain你真的会吗?
- 想做一个SSL代理的集群中,有很多问题需要解决,I am all grateful to you for your advice
- Java设计模式——桥接模式(Bridge)(容易,次要)
- 【Adobe】Photoshop :Windows 系统 Photoshop 软件更换许可指引
- C语言经典编程(浙大版C语言第三版)详解