栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在不使用条件语句和三元运算符的情况下,在C中找到最多三个数字

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在不使用条件语句和三元运算符的情况下,在C中找到最多三个数字

在布尔表达式中利用短路:

int max(int a, int b, int c){     int m = a;     (m < b) && (m = b); //these are not conditional statements.     (m < c) && (m = c); //these are just boolean expressions.     return m;}

说明:

在布尔

AND
运算(例如)中
x && y
当且仅当
x
为true时 ,才 评估y
。如果
x
为false,
y
则不进行评估,因为整个表达式为false,即使不进行评估也可以得出结论
y
。当可以推导布尔表达式的值而无需评估其中的所有操作数时,这称为短路。

将此原理应用于上述代码。最初

m
a
。现在,如果
(m < b)
为true,则意味着
b
大于
m
(实际上是
a
),因此第二个子表达式
(m= b)
被求值并将
m
其设置为
b
。但是
(m <b)
,如果为false,则将不评估第二个子表达式
m
并将保留
a
(大于
b
)。以类似的方式,计算第二个表达式(在下一行)。

总之,你可以阅读表达

(m < x) && (m = x)
如下:设置
m
x
当且仅当
m
小于
x
(m <x)
是如此。希望这可以帮助您理解代码。

测试代码:

int main() {        printf("%dn", max(1,2,3));        printf("%dn", max(2,3,1));        printf("%dn", max(3,1,2));        return 0;}

输出:

333

请注意

max
Gives警告的实现,因为未使用评估表达式:

prog.c:6:警告:未使用计算值
prog.c:7:警告:未使用计算值

为避免这些(无害)警告,您可以实现

max
为:

int max(int a, int b, int c){     int m = a;     (void)((m < b) && (m = b)); //these are not conditional statements.     (void)((m < c) && (m = c)); //these are just boolean expressions.     return m;}

诀窍在于,现在我们将布尔表达式强制转换为

void
,这会导致警告的抑制



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/650186.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号