c++中短路求值的妙用

c++中有这样一个特性,即对于与、或运算,如果能够通过第一个表达式计算出整个表达式的真值,那么就不会再去计算第二个表达式。

比如或运算

a || b,如果a的值是true,那么整个表达式也肯定是true,程序不会去计算第二个表达式。

与运算

a&&b,如果a的值是false,那么整个表达式也肯定是false,程序不会去计算第二个表达式。

于是就出现了一下妙用:

比如,对一个指针接引用,那么必须保证这个指针非空:

传统的做法是

if(ptr)

    ptr->value;

比较简洁的做法:

ptr && ptr->value;

经典的例子:

求n!,要求不能使用任何判断语句,不能使用任何循环语句

 

给你3秒钟哦亲。

 

 

公布答案:

int  func(int n)

{

int t=0;

n && t=func(n-1);

return t*n;

}

 

 

时间: 2024-09-13 05:24:58

c++中短路求值的妙用的相关文章

C++短路求值(逻辑与、逻辑或)实例_C 语言

本文实例讲述了C++短路求值(逻辑与.逻辑或),分享给大家供大家参考.具体方法分析如下: 1.逻辑或的短路 首先看如下代码: #include <iostream> using namespace std; int main() { int a = 1; cout << "a = " << a <<endl; true || (a=0); cout << "a = " << a <<

《数值分析(原书第2版)》—— 0.1 多项式求值

0.1 多项式求值 比如说,当x=1/2时,怎么做才是计算下述多项式的最优方式?P(x)=2x4+3x3-3x2+5x-1假设多项式的系数和x的值1/2都已经保存在内存里,我们试图最小化求值过程中涉及的加法和乘法的计算次数,进而得到多项式的值P(1/2).为了简化问题,1我们忽略向内存中保存数字以及从内存中读取数字所花费的时间.方法1 最先想到的直接方法如下: 需要进行的乘法计算的次数是10,还要有4次加法计算.其中的两次加法运算实际上是减法,但是减法运算可以看做是加上数字的负数,因而我们并不担

bug-这是我写的表达式求值,在编译器中运行是对的,但在刷题系统中却说是错,求打什么呢帮我找找Bug

问题描述 这是我写的表达式求值,在编译器中运行是对的,但在刷题系统中却说是错,求打什么呢帮我找找Bug 2C #include""stdio.h""#include""stdlib.h""#include""malloc.h""#include""string.h""#include""math.h""#de

浅谈C/C++ 语言中的表达式求值_C 语言

经常可以在一些讨论组里看到下面的提问:"谁知道下面C语句给n赋什么值?" m = 1; n = m+++m++; 最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5: a = 4; cout << a++ << a; C++ 不是规定 << 操作左结合吗?是C++ 书上写错了,还是这个系统的实现有问题? 注:运行a = 4; cout << a++ << a; 如在Visua

求如何得到datagrid中DropDownList的值!代码如下

问题描述 <asp:datagridid="DataGrid1"runat="server"Height="1em"Width="100%"AllowSorting="True"OnPageIndexChanged="DataGrid1_PageIndexChanged"PageSize="25"AllowPaging="True"DataK

表达式求值、表达式转二叉树

1.后序表达式求值: 后续表达式(逆波兰式)的特点:没有括号. 求值方法: 从前向后扫, 遇到操作数压栈: 遇到操作符,从栈中取出2个操作数运算,结果压栈. 最终栈中所剩的数为结果. 2.中序表达式求值 我们先来定义运算符的优先级: ( +,- *,/,% 从上到下依次升高 准备2个栈,一个专门存放运算符,另一个专门存放操作数. 1.遇到),那么退栈计算到(为止.结果压栈. 2.遇到运算数.那么压栈. 3.如果当前运算符优先级低于栈顶运算符.那么计算栈顶运算符并将结果压栈. 4.否则压栈. 计算

Python中用于求最小值的min()方法

 这篇文章主要介绍了简单介绍Python中用于求最小值的min()方法,是Python入门中的基础知识,需要的朋友可以参考下     min()方法返回它的参数最小值:最接近负无穷大的值. 语法 以下是min()方法的语法: ? 1 min( x, y, z, .... ) 参数 x -- 这是一个数值表达式. y -- 这也是一个数值表达式. z -- 这也是一个数值表达式. 返回值 此方法返回最小的它的参数. 例子 下面的例子显示了min()方法的使用. ? 1 2 3 4 5 6 #!/u

MYSQL表达式求值和MYSQL类型转换

    2.4 表达式求值和类型转换    MySQL允许编写包括常量.函数调用和表列引用的表达式.这些值可利用不同类型的运算符进行组合,诸如算术运算符或比较运算符.表达式的项可用圆括号来分组.表达式在SELECT 语句的列选择列表和WHERE 子句中出现得最为频繁,如下所示:    所选择的每列给出了一个表达式,如WHERE 子句中所示的那样.表达式也出现在DELETE 和UPDATE语句的WHERE 子句中,以及出现在INSERT 语句的VALUES( ) 子句中.    在MySQL遇到一

后缀表达式求值及校验

摘要: 本程序是一个完整的后缀表达式计算,主要用栈的操作实现,本程序封装了CStack类实现栈的操作,本程序最大的特色在于运用动态监视表达式的算法对表达式进行数据校验,对一切合法的表达式进行计算,检验出所有任何非法表达式并提示. 关键字:后缀表达式,校验 题目:后缀表达式求值. 要求:输入后缀表达式,输入为整数和四则运算,输出计算结果. 例如: 输入:2 3 * 1 - 输出:5 分析:2*3-1=5 输入:1 2 + 5 4 * 3 - * 6 - 输出:45 分析:(1+2)*(5*4-3)