| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2766 人关注过本帖, 1 人收藏
标题:我记得以前有一题“输入一个整数n,不用判断循环语句顺序输出1~n”,这题现 ...
只看楼主 加入收藏
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
回复 10楼 lz1091914999
短路在编程中我还没听过诶,能否展开解释下?
2012-10-12 14:39
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <signal.h>
#include <stdlib.h>

void divide_by_zero_handler(int i) { exit(0); }

void f(int i, int n)
{
    printf("%d\n", i) && 0 / (n - i);
    f(i + 1, n);
}

int main(void)
{
    int n;
    scanf("%d", &n);
    signal(SIGFPE, divide_by_zero_handler);
    f(1, n);
    return 0;
}

按照Z版以前的方法改写。

My life is brilliant
2012-10-12 15:26
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>

int f(int i)
{
    printf("f(%d) ", i);
    return i;
}

int main(void)
{
    f(1) && f(2) && f(0) && f(3); putchar('\n');
    f(0) && f(1) && f(2) && f(3); putchar('\n');
    f(0) || f(1) || f(2) || f(3);
    return 0;
}

输出:
f(1) f(2) f(0)
f(0)
f(0) f(1)
对于&&(与)运算符,只要左边表达式为假,则右边没必要执行。
对于||(或)运算符,只要左边表达式为真,则右边没必要执行。

My life is brilliant
2012-10-12 15:35
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <stdio.h>

int f(int i)
{
    printf("f(%d) ", i);
    return i;
}

int main(void)
{
    f(1) && f(2) && f(0) && f(3); putchar('\n');
    f(0) && f(1) && f(2) && f(3); putchar('\n');
    f(0) || f(1) || f(2) || f(3);
    return 0;
}

输出:
f(1) f(2) f(0)
f(0)
f(0) f(1)
对于&&(与)运算符,只要左边表达式为假,则右边没必要执行。
对于||(或)运算符,只要左边表达式为真,则右边没必要执行。

My life is brilliant
2012-10-12 15:35
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
以下是引用lz1091914999在2012-10-12 15:26:37的发言:

#include  
#include  
#include  
 
void divide_by_zero_handler(int i) { exit(0); }
 
void f(int i, int n)
{
    printf("%d\n", i) && 0 / (n - i);
    f(i + 1, n);
}
 
int main(void)
{
    int n;
    scanf("%d", &n);
    signal(SIGFPE, divide_by_zero_handler);
    f(1, n);
    return 0;
}
按照Z版以前的方法改写。
哦~对,当时是逆序输出,就是说触发了信号叫短路是吗?还是类似在这里信号函数中直接用exit退出的方法叫短路?
2012-10-12 16:12
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
对啊 我记得也看过那个帖子 不过找不到那个帖子了

最好的方法是用表达式实现的 我记得好像是
2012-10-12 16:25
linyiln
Rank: 1
来 自:山东 临沂
等 级:新手上路
帖 子:6
专家分:6
注 册:2012-9-7
收藏
得分:0 
不懂
2012-10-12 16:44
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 15楼 obstratiker
bool表达式中的那个叫短路,其实就是已经知道是真是假了,就不需要再计算下去了。

My life is brilliant
2012-10-12 16:52
姻脂梦
Rank: 6Rank: 6
等 级:侠之大者
帖 子:264
专家分:424
注 册:2012-7-3
收藏
得分:0 
建议高亮置顶!
2012-10-12 19:07
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:0 
以下是引用lz1091914999在2012-10-12 16:52:07的发言:

bool表达式中的那个叫短路,其实就是已经知道是真是假了,就不需要再计算下去了。
哦哦,这个我知道,就是其实和信号的那个方法无关呗
2012-10-12 22:37
快速回复:我记得以前有一题“输入一个整数n,不用判断循环语句顺序输出1~n”, ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.013552 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved