返回1或0的函数

时间:2015-09-08 23:20:16

标签: c algorithm

我的提示如下:

编写名为alternator的函数的定义,该函数不接收任何参数,并在第一次调用时返回1,在下次调用时返回0,然后返回1,0等等,在连续调用时在1/0之间交替

我的尝试是:

int alternator(void) {

    static int x = 0;

    if(x == 0) {
        return 1;
    }

    else if (x % 2 == 0) {
        return 1;
        x++;
    }
    else {
        return 0;
        x++;
    }

}

我哪里出错了?

5 个答案:

答案 0 :(得分:4)

我更喜欢xor,因为如果您可以拨打alternator的时间没有数字上限:

int alternator(void) {
    static int x = 0;  // set to 1 if you want 0 as first value...
    return x ^= 1;
}

演示:

int main(int argc, char *argv[]) {
    for(int i=0; i<10; i++){
        printf("%d   %d\n", i, alternator());
    }

}

打印:

0   1
1   0
2   1
3   0
4   1
5   0
6   1
7   0
8   1
9   0

正如评论中所指出的,你也可以这样做:

int alternator(void) {
    static int x = 0;
    return x = !x;
}

答案 1 :(得分:1)

x++之后你有return,所以增量永远不会发生。

答案 2 :(得分:1)

像这样:

int alternator(void) {
    static int x = 0;
    return x ^= 1;
}

答案 3 :(得分:0)

如果函数在返回执行后没有返回任何内容。

目前运行时你的功能如下:

int alternator(void) {

    static int x = 0;

    if(x == 0) {
        return 1;
    }
}

因为这就是将要执行的所有内容。

您需要做的是每次运行函数时更改x的值,然后返回该值。

一个简单的if语句,可以检测x的值是1还是0就足够了。

通常在函数末尾只有一个return语句并操作函数中的返回值也是一个好主意。这使代码更易读,更容易理解。

合理的尝试看起来像:

int alternator(void) {

    static int x = 0;

    if(x == 0) 
    {
        x = 1;
    }
    else
    {
        x = 0;
    }
    return x;
}

答案 4 :(得分:0)

下面突出显示的代码是无法访问的代码:

else if(x%2 == 0){         返回1;         的 X ++;     }     其他{         返回0;         的 X ++;     }