以下C代码的输出是什么?

时间:2013-09-30 16:06:38

标签: c

#include <stdio.h>
int main()
{
    int x = 1, y = 1;
    for(;y;printf("%d%d\n",x,y))
        y = x++ <= 5;
    return 0;
}

我对上面代码片段中for构造的结构感到困惑。这是一本关于C语言编程的书。

根据书中的正确输出如下。

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

有人可以解释这是输出的原因和原因吗?

3 个答案:

答案 0 :(得分:2)

要了解for循环的作用,这里是等效的while循环:

while (y) {
    y = x++ <= 5;
    printf("%d%d\n",x,y);
}

转变如下:

for (INIT; COND; INC) {
  BODY;
}

- &GT;

INIT;
while (COND) {
  BODY;
  INC;
}

请注意,如果yy != 0,则在C语言中,表达式y相当于int

答案 1 :(得分:2)

如果扩展它,构造变得易于理解。 我认为这里的技巧是理解在比较之后发生x的后缀增量。

您的示例中显示的另一个概念是,在C中,所有比较都返回一个布尔值(1表示true,0表示false)。

#include <stdio.h>
int main()
{
    int x = 1, y = 1;

    printf("first version:\n");
    for(;y;printf("%d%d\n",x,y))
        y = x++ <= 5;
    printf("second version:\n");
    x = 1;
    y = 1;

    while (y != 0)
     {
        if (x <= 5)
          y = 1;
        else
          y = 0;
        x = x + 1;
        printf ("%d%d\n",x,y);
     }
    return 0;
}

我希望这能回答你的问题。

答案 2 :(得分:1)

总结C循环如何工作:

for(initialization; condition; expression) {
     //statements
}

1。在条件的第一次评估之前执行初始化 2.循环的每次迭代后都会计算表达式。只有当条件为真时才会输入循环。

在您的代码中,请注意,在该行中,

y = x++ <= 5;
在值增加之前,将

'x'与数字5进行比较。例如,在第5次迭代时,针对(&lt; = 5)检查x = 5,然后将其递增为6.之后语句

printf("%d%d\n",x,y)

执行打印“61”。