2017-09-25 77 views
-2

我看到一个for循环用C这样的:for循环使用C解释

for (i=myid; i < NUM_STEPS; i += nprocs)

比方说 myid = 1; NUM_STEPS = 5; nprocs = 3;。 现在我开始for循环,不知旅游解说是正确的:

第一次迭代:i = 1 + 1 = 2

第二次迭代:i = 2 + 1 = 3

现在,因为i命中nprocs值,for循环结束。

+0

不,第一次迭代'i = 1'。它在循环的初始化子句中这样说。 – StoryTeller

+0

不,你错了。它随'nprocs'的值递增,当它大于或等于'NUM_STEPS'时停止。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ所以第一次迭代是1 + 3 = 4,然后停止? – kyle

回答

2

第一次迭代:

i = 1 

第二次迭代:

i = 1 + 3 = 4 

然后:

i = 4 + 3 = 7 

其大于5,因此,循环将不被执行。

2
for (i=myid; i < NUM_STEPS; i += nprocs) { 
    // ... 
} 

意味着

i = myid; 
while(i < NUM_STEPS) { 
    // ... 
    i += nprocs; 
} 

你的情况,你有两个迭代:i = 1i = 4

1
for (i=myid; i < NUM_STEPS; i += nprocs) 

在此,第一次迭代i1并检查条件

= i < NUM_STEPS 
= 1 < 5 
= true 

然后循环体执行。完成第一次迭代后,控制转到循环增量语句。

= i+=nprocs 
= i = i + nprocs 
= i = 1 + 3 
= i = 4 

现在我成为4在第二次迭代和条件变得true

= i < NUM_STEPS 
= 4 < 5 
= true 

然后执行循环体。完成第一次迭代后,控制转到循环增量语句。

= i+=nprocs 
= i = i + nprocs 
= i = 4 + 3 
= i = 7 

现在我成为成为false秒迭代和条件7

= i < NUM_STEPS 
= 7 < 5 
= false