黑马程序员技术交流社区

标题: 请教一道分析题 [打印本页]

作者: 离渊    时间: 2014-3-17 12:10
标题: 请教一道分析题
本帖最后由 离渊 于 2014-3-17 12:35 编辑

#include <stdio.h>
int main()
{
    for (int i = 0; i<10; i++) {
        if (i % 2) continue;
        if (i == 8) break;
        printf("i=%d\n", i);
    }
    return 0;
}
先说下我的想法   
0  0<10  0%2 还是0   是假  直接被continue 进入下一个循环
1  1<10 1%2  为1      是真  继续运算 !==8 1+1 是 2 第一个值
依次 2 4 6 8 取余都为0  是假 10!<10 偶数就到这里了
3 5 7 9 取余为1 为真  输出 4 6 8 10

所以我觉得输出结果是2 4 6 8 10   为什么答案是 0 2 4 6?

i == 8的时候不是直接continue 了么  break 怎么还会有作用?

作者: 脸皮猴    时间: 2014-3-17 12:21
#import <Foundation/Foundation.h>

int main(int argc, const char * argv[])
{
   


        for (int i = 0; i<10; i++)
        {
            if (i % 2) //当i = 8等时候这个continue是不起作用的!
                continue;
            
            if (i == 8)// 当 i = 8的时候break是起作用了得!直接就跳出整个for循环了
                break;
            printf("i=%d\n", i);
        }
    //所以打印结果肯定是0 2 4 6

        return 0;
}
作者: Silent_memory    时间: 2014-3-17 12:23
本帖最后由 Silent_memory 于 2014-3-17 12:27 编辑

0 % 2 是 0  代表假  不会执行continue 语句  0 不等于 8 不执行break语句  输出 一个 0
1 % 0 = 1 执行continue  
2 % 2  与0是同理的  输出 2
3 % 2 = 1 代表真  执行continue
4 % 2  与0同理
5 % 2 = 1
6 % 2 = 0  同理 0
7 % 2 = 1 真
8 % 2 = 同理 0
作者: 离渊    时间: 2014-3-17 12:26
Silent_memory 发表于 2014-3-17 12:23
0 % 2 是 0  代表假  不会执行continue 语句  0 不等于 8 不执行break语句  输出 一个 0
1 % 0 = 1 执行con ...

  好吧  是真才执行 continue 是吧   i++始终就是打酱油的?
作者: Silent_memory    时间: 2014-3-17 12:32
离渊 发表于 2014-3-17 12:26
好吧  是真才执行 continue 是吧   i++始终就是打酱油的?

不是啊  
for(int i = 0; i < 10 ; i++){ codeing}
首先 int i = 0;只创建一次在内存中,  
i 《 10  是循环的判断条件   
每次执行完{ codeing} 中的代码后 就会执行一次 i++  改变循环判断条件   
作者: 小、小罗    时间: 2014-3-17 12:32
你把if语句理解错了,条件为真时才执行后面的continue语句。
当i=0时,i%2=0,程序跳过continue语句,执行后面的程序,打印i的值;i递增后,也是这样分析。
当i=8时,程序退出循环,所以最后打印的是0,2,4,6
作者: 离渊    时间: 2014-3-17 12:35
Silent_memory 发表于 2014-3-17 12:32
不是啊  
for(int i = 0; i < 10 ; i++){ codeing}
首先 int i = 0;只创建一次在内存中,  

  o(︶︿︶)o 唉 2 了   谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2