有點無法理解!
#include?<stdio.h> int?main() { ????int?m,?n; ????for(m=2;?m<=50;?m++) ????{ for(n=2;?n<m;?n++) ????????{ ????????????if(?m%n==0???????)???????//什么條件下跳出當前循環 ??????????????break;?????????????????//這里應該退出當前循環了 } ????????if(m?==?n)???//n循環結束后,如果m=n的話就輸出m ????????????printf("%d??",?m); } return?0;???? } 一直想不明白這句是為什么?if(m?==?n) m==2?能勉強理解? m==3?為什么? 外循環m=3時??for(n=2;?n<m;?n++)??是不是就等價于for(n=2;?n<3;?n++) 這時候n=2后?內循環就應該停止了啊,怎么實現的n==3的?
2023-02-23
外循環m=3時??
for
(n=2;?n<m;?n++)? 等價于
for
(n=2;?n<3;?n++)
這時候n++等于3時 不符合循環條件會跳出當前內循環。
但注意,此時n就是等于3了(n++自增導致的)
for循環的執行順序是先n<m判斷,執行語句,n++,再n<m判斷,執行語句,n++
所以n=2(執行語句)后,n++等于3,n<m條件不符合,跳出當前內循環。
再執行? ? ? ? if
(m?==?n)???
????????????
printf
(
"%d??"
,?m);
所以能輸出素數3.
后面的數字同理。
故? ? ? ?
? ? ? ? ? ? if
(m?==?n)???
????????????
printf
(
"%d??"
,?m);
是保證素數自身一定能被輸出,前面內循環語句是找出數字的能被整除的情況,跳出循環后m?==?n又限制這個因數只能是自身。
綜上,n<m和n<=m條件應該均可。
2022-11-21
#include <stdio.h>
int main()
{
? ? int m ;
? ? for (m = 2; m <50; m++)? ? ? //for(m=2;m<=50;m++)
? ? {
? ? ? ? ;
? ??
? ? }
? ? printf("%d", m);
? ? return 0;
}
我試了一下上邊代碼,輸出的是50 //51
我是不是可以這樣理解? :
for循環時? 哪怕m<50==0? ? ? m++依然會運算一次?。?/p>