程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c-循環寫法為什麼輸出值不同,求自然數立方和大於1000000時的值

c-循環寫法為什麼輸出值不同,求自然數立方和大於1000000時的值

編輯:編程綜合問答
循環寫法為什麼輸出值不同,求自然數立方和大於1000000時的值

1.main()
{
int i, sum = 0;
for (i = 1; sum < 1000000; i++)
{
sum = sum + i*i*i;
}
printf("%d",i);
system("pause");
}
輸出46

2.main()
{
int i, sum = 0;
for (i = 1; ; i++)
{
sum = sum + i*i*i;
if (sum > 1000000)
{
break;
}
}
printf("%d",i);
system("pause");
}
輸出45

3.main()
{
int i;
int sum = 0;
bool b = false;
for (i = 0; !b; i++)
{
sum = sum + i*i*i;
b = sum > 1000000;
}
printf("當i為 %d 時,其立方和大於1000000", i);
system("pause");
}
輸出46
4.main()
{
int i;
int sum = 0;
bool b = false;
for (i = 0; !b; i++)
{
b = sum > 1000000;
sum = sum + i*i*i;

}
printf("當i為 %d 時,其立方和大於1000000", i);
system("pause");

}
輸出47

5.書上給的源碼是這個,不明白為什麼i--
main()
{
int i, sum = 0;
for (i = 1; ; i++)
{
sum = sum + i*i*i;
if (sum > 1000000)
{
break;
}
}
i--;

printf("%d",i);
system("pause");
}

最佳回答:


這個問題就是for(初始化;條件;調整)語句的執行順序,第一次順序:初始化->條件->語句;第二次順序:調整->條件->語句;第三步順序:調整->
條件->語句......最後一步也是一樣。
1中最後一步從上一步得到i=44,i++,sum1000000,但是接下來的是調整,i++,所以i=46;
第2個就顯而易見了,i=44時sum<1000000所以不會跳出,輸出i=45
第3個和第1個一樣
第4個明顯i=44時,b=0;再循環一圈i=45時,b=0;在循環一圈i=46時,b=1繼續執行下面的語句,然後進行調整i++得到47在進行!b判斷。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved